From 51195c450d16e35a62bff2bbf6c9dd0923bd0db4 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Wed, 21 Jul 2010 21:00:26 +0100 Subject: [PATCH] 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. --- app/helpers/application_helper.rb | 39 +++++++++++++++++++++++++++++++ app/views/layouts/site.html.erb | 1 + 2 files changed, 40 insertions(+) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5fa021bcf..3d2c70a13 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -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(',') diff --git a/app/views/layouts/site.html.erb b/app/views/layouts/site.html.erb index c17255709..6a820ef26 100644 --- a/app/views/layouts/site.html.erb +++ b/app/views/layouts/site.html.erb @@ -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 %> <%= t 'layouts.project_name.title' %><%= ' | '+ h(@title) if @title %> -- 2.43.2