I set out to do a quick and dirty typography overhaul to make things more consistent and a bit cleaner, but I kept running into things I didn't like, so this lead me down something of a rabbit hole of design tweaks to the OSM site. Goals here are to have better content hierarchy, better vertical rhythm, more consistent UI, cleaner markup with less tables, all while keeping the basics pretty much intact. There are a lot of things I didn't touch even though they need to be updated (lots of tables where stuff shouldn't be tables, mostly). Basic overview of changes: I added a new persistent header that helps segment pages. It's now a lot easier to know what you're looking at. The header has a page title, a description, plus a submenu of actions. There is now a pattern of 20px/10px margins and padding for more rhythm and breathing room throughout the site. I know there are other problems here or things I've missed - would love another set of eyes to look over this! I am still getting comfortable working on the site - it's my first time ever digging into a ruby or rails so I'm not familiar with the templating language yet.
98 lines
3.1 KiB
Ruby
98 lines
3.1 KiB
Ruby
module ApplicationHelper
|
|
require 'rexml/document'
|
|
|
|
def linkify(text)
|
|
if text.html_safe?
|
|
Rinku.auto_link(text, :urls, tag_options(:rel => "nofollow")).html_safe
|
|
else
|
|
Rinku.auto_link(text, :urls, tag_options(:rel => "nofollow"))
|
|
end
|
|
end
|
|
|
|
def rss_link_to(*args)
|
|
return link_to(image_tag("RSS.png", :size => "16x16", :border => 0), Hash[*args], { :class => "rsssmall" });
|
|
end
|
|
|
|
def atom_link_to(*args)
|
|
return link_to(image_tag("RSS.png", :size => "16x16", :border => 0), Hash[*args], { :class => "rsssmall" });
|
|
end
|
|
|
|
def style_rules
|
|
css = ""
|
|
|
|
css << ".hidden { display: none }";
|
|
css << ".hide_unless_logged_in { display: none }" unless @user;
|
|
css << ".hide_if_logged_in { display: none }" if @user;
|
|
css << ".hide_if_user_#{@user.id} { display: none }" if @user;
|
|
css << ".show_if_user_#{@user.id} { display: inline }" if @user;
|
|
css << ".hide_unless_administrator { display: none }" unless @user and @user.administrator?;
|
|
|
|
return content_tag(:style, css, :type => "text/css")
|
|
end
|
|
|
|
def if_logged_in(tag = :div, &block)
|
|
content_tag(tag, capture(&block), :class => "hide_unless_logged_in")
|
|
end
|
|
|
|
def if_not_logged_in(tag = :div, &block)
|
|
content_tag(tag, capture(&block), :class => "hide_if_logged_in")
|
|
end
|
|
|
|
def if_user(user, tag = :div, &block)
|
|
if user
|
|
content_tag(tag, capture(&block), :class => "hidden show_if_user_#{user.id}")
|
|
end
|
|
end
|
|
|
|
def unless_user(user, tag = :div, &block)
|
|
if user
|
|
content_tag(tag, capture(&block), :class => "hide_if_user_#{user.id}")
|
|
else
|
|
content_tag(tag, capture(&block))
|
|
end
|
|
end
|
|
|
|
def if_administrator(tag = :div, &block)
|
|
content_tag(tag, capture(&block), :class => "hide_unless_administrator")
|
|
end
|
|
|
|
def preferred_editor
|
|
if params[:editor]
|
|
params[:editor]
|
|
elsif @user and @user.preferred_editor
|
|
@user.preferred_editor
|
|
else
|
|
DEFAULT_EDITOR
|
|
end
|
|
end
|
|
|
|
def scale_to_zoom(scale)
|
|
Math.log(360.0 / (scale.to_f * 512.0)) / Math.log(2.0)
|
|
end
|
|
|
|
def richtext_area(object_name, method, options = {})
|
|
id = "#{object_name.to_s}_#{method.to_s}"
|
|
format = options.delete(:format) || "markdown"
|
|
|
|
content_tag(:div, :id => "#{id}_container", :class => "richtext_container") do
|
|
output_buffer << content_tag(:div, :id => "#{id}_content", :class => "richtext_content") do
|
|
output_buffer << text_area(object_name, method, options.merge("data-preview-url" => preview_url(:format => format)))
|
|
output_buffer << content_tag(:div, "", :id => "#{id}_preview", :class => "richtext_preview")
|
|
end
|
|
|
|
output_buffer << content_tag(:div, :id => "#{id}_help", :class => "richtext_help") do
|
|
output_buffer << render("site/#{format}_help")
|
|
output_buffer << submit_tag(I18n.t("site.richtext_area.edit"), :id => "#{id}_doedit", :class => "richtext_doedit", :disabled => true)
|
|
output_buffer << submit_tag(I18n.t("site.richtext_area.preview"), :id => "#{id}_dopreview", :class => "richtext_dopreview")
|
|
end
|
|
end
|
|
end
|
|
|
|
def dir
|
|
if dir = params[:dir]
|
|
dir == "rtl" ? "rtl" : "ltr"
|
|
else
|
|
I18n.t("html.dir")
|
|
end
|
|
end
|
|
end
|