Add support for CSS based control of user specific components

Define some helper routines which can be used to make page elements
only display when the logged in user matches certain conditions and
add style rules to the layout to trigger those elements based on the
logged in user.
This commit is contained in:
Tom Hughes 2010-07-21 21:00:26 +01:00
parent d87ea6863a
commit 51195c450d
2 changed files with 40 additions and 0 deletions

View file

@ -40,6 +40,45 @@ module ApplicationHelper
return js
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)
end
def if_logged_in(tag = :div, &block)
concat(content_tag(tag, capture(&block), :class => "hide_unless_logged_in"))
end
def if_not_logged_in(tag = :div, &block)
concat(content_tag(tag, capture(&block), :class => "hide_if_logged_in"))
end
def if_user(user, tag = :div, &block)
if user
concat(content_tag(tag, capture(&block), :class => "hidden show_if_user_#{user.id}"))
end
end
def unless_user(user, tag = :div, &block)
if user
concat(content_tag(tag, capture(&block), :class => "hide_if_user_#{user.id}"))
else
concat(content_tag(tag, capture(&block)))
end
end
def if_administrator(tag = :div, &block)
concat(content_tag(tag, capture(&block), :class => "hide_unless_administrator"))
end
def describe_location(lat, lon, zoom = nil, language = nil)
zoom = zoom || 14
language = language || request.user_preferred_languages.join(',')

View file

@ -13,6 +13,7 @@
<%= stylesheet_link_tag 'print', :media => "print" %>
<%= tag("link", { :rel => "search", :type => "application/opensearchdescription+xml", :title => "OpenStreetMap Search", :href => "/opensearch/osm.xml" }) %>
<%= tag("meta", { :name => "description", :content => "OpenStreetMap is the free wiki world map." }) %>
<%= style_rules %>
<%= yield :head %>
<title><%= t 'layouts.project_name.title' %><%= ' | '+ h(@title) if @title %></title>
</head>