diff options
10 files changed, 432 insertions, 393 deletions
diff --git a/sonar-application/pom.xml b/sonar-application/pom.xml index c9b948077f4..4f8085530e9 100644 --- a/sonar-application/pom.xml +++ b/sonar-application/pom.xml @@ -216,7 +216,7 @@ <configuration> <rules> <requireFilesSize> - <maxsize>53200000</maxsize> + <maxsize>54000000</maxsize> <minsize>52000000</minsize> <files> <file>${project.build.directory}/sonar-${project.version}.zip</file> diff --git a/sonar-server/pom.xml b/sonar-server/pom.xml index dd7285e6981..bd63405e017 100644 --- a/sonar-server/pom.xml +++ b/sonar-server/pom.xml @@ -254,7 +254,8 @@ </aggregation> <aggregation> <includes> - <include>**/yui-2.6.0-min.css</include> + <include>**/yui-reset-font-min.css</include> + <include>**/layout-min.css</include> <include>**/style-min.css</include> <include>**/sonar-colorizer-min.css</include> <include>**/dashboard-min.css</include> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/dev_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/dev_controller.rb new file mode 100644 index 00000000000..2fb2e7d6b5a --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/dev_controller.rb @@ -0,0 +1,32 @@ +# +# Sonar, entreprise quality control tool. +# Copyright (C) 2008-2012 SonarSource +# mailto:contact AT sonarsource DOT com +# +# Sonar is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 3 of the License, or (at your option) any later version. +# +# Sonar is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with Sonar; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 +# +class DevController < ApplicationController + + SECTION=Navigation::SECTION_HOME + + def layout + render :text => '', :layout => true + end + + def empty + render :text => '' + end + +end diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_breadcrumb.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_breadcrumb.html.erb index 6d85c456e27..526601cef6d 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_breadcrumb.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_breadcrumb.html.erb @@ -1,5 +1,3 @@ -<ol id="crumbs"> - <li><a href="<%= ApplicationController.root_context -%>/"><%= message('layout.home') -%></a></li> <% resource_link = {} only_resource = true @@ -47,5 +45,4 @@ if @review </li> <% end -%> -</ol>
\ No newline at end of file +%>
\ No newline at end of file diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb index 89d6e219f5a..91ef035e22c 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb @@ -2,7 +2,15 @@ <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="gwt:property" content="locale=<%= I18n.locale.to_s.gsub(/-/, '_') -%>"> <meta http-equiv="X-UA-Compatible" content="IE=9"> +<link rel="shortcut icon" type="image/x-icon" href="<%= image_path('favicon.ico') -%>" /> +<% + if @project +%><link rel="alternate" title="Sonar Alerts on <%= @project.name -%>" href="<%= ApplicationController.root_context -%>/feeds/project/<%= @project.key -%>?category=<%= EventCategory::KEY_ALERT -%>" type="application/atom+xml"> <% + else +%><link rel="alternate" title="Sonar Alerts" href="<%= ApplicationController.root_context -%>/feeds/projects/<%= EventCategory::KEY_ALERT -%>" type="application/atom+xml"><% + end + if @page_title title="Sonar - #{h(@page_title)}" elsif @project @@ -13,11 +21,12 @@ title='Sonar' end %> -<title><%= title %></title> +<title><%= title -%></title> <% if ENV['RAILS_ENV'] == 'production' %><%= stylesheet_link_tag 'sonar', :media => 'all' -%><%= javascript_include_tag 'sonar' -%><% else %> -<%= stylesheet_link_tag 'yui-2.6.0.css', :media => 'all' %> +<%= stylesheet_link_tag 'yui-reset-font.css', :media => 'all' %> +<%= stylesheet_link_tag 'layout.css', :media => 'all' %> <%= stylesheet_link_tag 'style', :media => 'all' %> <%= stylesheet_link_tag 'sonar-colorizer', :media => 'all' %> <%= stylesheet_link_tag 'dashboard', :media => 'all' %> @@ -33,11 +42,5 @@ <%= javascript_include_tag 'resource' %> <% end %> <!--[if lte IE 8]><%= javascript_include_tag 'protovis-msie' -%><![endif]--> -<link rel="shortcut icon" type="image/x-icon" href="<%= image_path('favicon.ico') -%>" /> -<% -if @project %> -<link rel="alternate" title="Sonar Alerts on <%= @project.name -%>" href="<%= ApplicationController.root_context -%>/feeds/project/<%= @project.key -%>?category=<%= EventCategory::KEY_ALERT -%>" type="application/atom+xml"> -<% else -%><link rel="alternate" title="Sonar Alerts" href="<%= ApplicationController.root_context -%>/feeds/projects/<%= EventCategory::KEY_ALERT -%>" type="application/atom+xml"><% -end %><script>var baseUrl = '<%= ApplicationController.root_context -%>';var $j = jQuery.noConflict();</script> +<script>var baseUrl = '<%= ApplicationController.root_context -%>';var $j = jQuery.noConflict();</script> </head><body>
\ No newline at end of file diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb index 345fb8176b9..d131b7c45de 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb @@ -7,9 +7,26 @@ period_param = "period=#{params[:period]}" if params[:period] %> <div id="container"> - <div id="hd"> - <%= render :partial => 'layouts/breadcrumb' %> - <ol id="nav"> +<div id="hd"> + <div id="nav1"> + <ul> + <li> + <% global_dashboards = ActiveDashboard.user_dashboards(current_user, true) + if global_dashboards.empty? + %> + <a href="<%= ApplicationController.root_context -%>/"><%= message('layout.home') -%></a> + <% + else + main_global_dashboard = global_dashboards[0] + %> + <a href="<%= ApplicationController.root_context -%>/dashboard/?did=<%= main_global_dashboard.dashboard_id -%>"><%= h main_global_dashboard.dashboard.name(true) -%></a> + <% end %> + </li> + <%= render :partial => 'layouts/breadcrumb' -%> + </ul> + </div> + <div id="nav2"> + <ul> <li> <input type="text" size="15" name="search" id="searchInput" onFocus="autocompleteResources()" value="<%= message('search_verb') -%>"/> <img src="<%= ApplicationController.root_context -%>/images/loading-small.gif" id="searchingResources" style="display:none"> @@ -26,180 +43,183 @@ <li><a href="<%= ApplicationController.root_context -%>/sessions/new?return_to=<%= u (request.request_uri) -%>"><%= message('layout.login') -%></a></li> <% end %> <li><a href="<%= ApplicationController.root_context -%>/profiles"><%= message('layout.configuration') -%></a></li> - </ol> - + </ul> </div> - <div id="body"> - <div id="searchResourcesResults" class="autocomplete" style="display:none"></div> - <div id="sb"> - <div id="sidebar"> - <ul> - <% if selected_section==Navigation::SECTION_HOME %> - <% ActiveDashboard.user_dashboards(current_user, true).each do |active_dashboard| %> - <li class="<%= 'selected' if @dashboard && controller.controller_path=='dashboard' && active_dashboard.dashboard_id==@dashboard.id -%>"> - <a href="<%= ApplicationController.root_context -%>/dashboard/?did=<%= active_dashboard.dashboard_id -%>"><%= active_dashboard.dashboard.name(true) -%></a> - </li> - <% end %> +</div> +<div id="body"> + <div id="searchResourcesResults" class="autocomplete" style="display:none"></div> + <div id="sb"> + <div id="sidebar"> + <ul> + <% if selected_section==Navigation::SECTION_HOME %> + <% ActiveDashboard.user_dashboards(current_user, true).each do |active_dashboard| %> + <li class="<%= 'selected' if @dashboard && controller.controller_path=='dashboard' && active_dashboard.dashboard_id==@dashboard.id -%>"> + <a href="<%= ApplicationController.root_context -%>/dashboard/?did=<%= active_dashboard.dashboard_id -%>"><%= active_dashboard.dashboard.name(true) -%></a> + </li> + <% end %> + + <li class="<%= 'selected' if controller.controller_path=='reviews' -%>"> + <a href="<%= ApplicationController.root_context -%>/reviews/index"><%= message('reviews.page') -%></a></li> + <li class="<%= 'selected' if controller.controller_path=='dependencies' -%>"> + <a href="<%= ApplicationController.root_context -%>/dependencies/index"><%= message('dependencies.page') -%></a></li> - <li class="<%= 'selected' if controller.controller_path=='reviews' -%>"> - <a href="<%= ApplicationController.root_context -%>/reviews/index"><%= message('reviews.page') -%></a></li> - <li class="<%= 'selected' if controller.controller_path=='dependencies' -%>"> - <a href="<%= ApplicationController.root_context -%>/dependencies/index"><%= message('dependencies.page') -%></a></li> + <% controller.java_facade.getPages(Navigation::SECTION_HOME, nil, nil, nil, nil).each do |page| + page_url = (page.isController() ? page.getId() : "/plugins/home/#{page.getId()}") + selected=request.request_uri.include?("/plugins/home/#{page_url}") + %> + <li class="<%= 'selected' if selected -%>"> + <a href="<%= ApplicationController.root_context -%><%= page_url -%>"><%= message(page.getId() + '.page', :default => page.getTitle()) -%></a></li> + <% end %> - <% controller.java_facade.getPages(Navigation::SECTION_HOME, nil, nil, nil, nil).each do |page| - page_url = (page.isController() ? page.getId() : "/plugins/home/#{page.getId()}") - selected=request.request_uri.include?("/plugins/home/#{page_url}") + <% elsif selected_section==Navigation::SECTION_RESOURCE %> + <% ActiveDashboard.user_dashboards(current_user, false).each do |active_dashboard| %> + <li class="<%= 'selected' if @dashboard && controller.controller_path=='dashboard' && active_dashboard.dashboard_id==@dashboard.id -%>"> + <a href="<%= ApplicationController.root_context -%>/dashboard/index/<%= @project.id -%>?did=<%= active_dashboard.dashboard_id -%><%= "&"+period_param if period_param -%>"><%= active_dashboard.dashboard.name(true) -%></a> + </li> + <% end %> + <li class="<%= 'selected' if request.request_uri.include?('/components/index') -%>"> + <a href="<%= ApplicationController.root_context -%>/components/index/<%= @project.id -%>"><%= message('components.page') -%></a></li> + <li class="<%= 'selected' if request.request_uri.include?('/drilldown/violations') -%>"> + <a href="<%= ApplicationController.root_context -%>/drilldown/violations/<%= @project.id -%><%= "?"+period_param if period_param -%>"><%= message('violations_drilldown.page') -%></a> + </li> + <li class="<%= 'selected' if request.request_uri.include?('/cloud/index') -%>"> + <a href="<%= ApplicationController.root_context -%>/cloud/index/<%= @project.id -%>"><%= message('clouds.page') -%></a></li> + <% controller.java_facade.getPages(Navigation::SECTION_RESOURCE, @project.scope, @project.qualifier, @project.language, @project.last_snapshot.metric_keys.to_java(:string)).each do |page| + page_url = (page.isController() ? "#{page.getId()}?id=#{@project.id}" : "/plugins/resource/#{@project.id}?page=#{page.getId()}") + %> + <li class="<%= 'selected' if request.request_uri.include?(page_url) -%>"> + <a href="<%= ApplicationController.root_context -%><%= page_url -%>"><%= message(page.getId() + '.page', :default => page.getTitle()) %></a> + </li> + <% end %> + <% if has_role?(:admin, @project) %> + <li class="h2"><%= message('sidebar.project_settings') -%></li> + <% if (@project.project?) %> + <li class="<%= 'selected' if request.request_uri.include?('/project/quality_profile') -%>"> + <a href="<%= ApplicationController.root_context -%>/project/quality_profile/<%= @project.id -%>"><%= message('project_quality_profile.page') -%></a></li> + <% end %> + <li class="<%= 'selected' if request.request_uri.include?('/manual_measures') -%>"> + <a href="<%= ApplicationController.root_context -%>/manual_measures/index/<%= @project.id -%>"><%= message('manual_measures.page') -%></a></li> + <% if (@project.project?) %> + <li class="<%= 'selected' if request.request_uri.include?('/action_plans') -%>"> + <a href="<%= ApplicationController.root_context -%>/action_plans/index/<%= @project.id -%>"><%= message('action_plans.page') -%></a></li> + <% end %> + <% if (@project.project? || @project.module?) %> + <li class="<%= 'selected' if request.request_uri.include?('/project/settings') -%>"> + <a href="<%= ApplicationController.root_context -%>/project/settings/<%= @project.id -%>"><%= message('project_settings.page') -%></a></li> + <% end %> + <% if (@project.project? || @project.module?) %> + <li class="<%= 'selected' if request.request_uri.include?('/project/exclusions') -%>"> + <a href="<%= ApplicationController.root_context -%>/project/exclusions/<%= @project.id -%>"><%= message('project_exclusions.page') -%></a></li> + <% end %> + <% if (@project.project?) %> + <li class="<%= 'selected' if request.request_uri.include?('/project/links') -%>"> + <a href="<%= ApplicationController.root_context -%>/project/links/<%= @project.id -%>"><%= message('project_links.page') -%></a></li> + <% end %> + <% if (@project.project? || @project.view? || @project.subview?) %> + <li class="<%= 'selected' if request.request_uri.include?('/project_roles') -%>"> + <a href="<%= ApplicationController.root_context -%>/project_roles/index?resource=<%= @project.id -%>"><%= message('roles.page') -%></a></li> + <% end %> + <% + # NOTE: we keep "@project.view? || @project.subview?" in the test for backward compatibility with the Views plugin + if (controller.java_facade.getResourceTypeBooleanProperty(@project.qualifier, 'modifiable_history') || @project.view? || @project.subview?) %> - <li class="<%= 'selected' if selected -%>"> - <a href="<%= ApplicationController.root_context -%><%= page_url -%>"><%= message(page.getId() + '.page', :default => page.getTitle()) -%></a></li> + <li class="<%= 'selected' if request.request_uri.include?('/project/history') -%>"> + <a href="<%= ApplicationController.root_context -%>/project/history/<%= @project.id -%>"><%= message('project_history.page') -%></a></li> <% end %> - - <% elsif selected_section==Navigation::SECTION_RESOURCE %> - <% ActiveDashboard.user_dashboards(current_user, false).each do |active_dashboard| %> - <li class="<%= 'selected' if @dashboard && controller.controller_path=='dashboard' && active_dashboard.dashboard_id==@dashboard.id -%>"> - <a href="<%= ApplicationController.root_context -%>/dashboard/index/<%= @project.id -%>?did=<%= active_dashboard.dashboard_id -%><%= "&"+period_param if period_param -%>"><%= active_dashboard.dashboard.name(true) -%></a> + <% if controller.java_facade.getResourceTypeBooleanProperty(@project.qualifier, 'updatable_key') %> + <li class="<%= 'selected' if request.request_uri.include?('/project/key') -%>"> + <a href="<%= ApplicationController.root_context -%>/project/key/<%= @project.id -%>"><%= message('update_key.page') -%></a></li> + <% end %> + <% if controller.java_facade.getResourceTypeBooleanProperty(@project.qualifier, 'deletable') %> + <li class="<%= 'selected' if request.request_uri.include?('/project/deletion') -%>"> + <a href="<%= ApplicationController.root_context -%>/project/deletion/<%= @project.id -%>"><%= message('resource_deletion.page', :params => message('qualifier.' + @project.qualifier)) -%></a> </li> <% end %> - <li class="<%= 'selected' if request.request_uri.include?('/components/index') -%>"> - <a href="<%= ApplicationController.root_context -%>/components/index/<%= @project.id -%>"><%= message('components.page') -%></a></li> - <li class="<%= 'selected' if request.request_uri.include?('/drilldown/violations') -%>"> - <a href="<%= ApplicationController.root_context -%>/drilldown/violations/<%= @project.id -%><%= "?"+period_param if period_param -%>"><%= message('violations_drilldown.page') -%></a></li> - <li class="<%= 'selected' if request.request_uri.include?('/cloud/index') -%>"> - <a href="<%= ApplicationController.root_context -%>/cloud/index/<%= @project.id -%>"><%= message('clouds.page') -%></a></li> - <% controller.java_facade.getPages(Navigation::SECTION_RESOURCE, @project.scope, @project.qualifier, @project.language, @project.last_snapshot.metric_keys.to_java(:string)).each do |page| - page_url = (page.isController() ? "#{page.getId()}?id=#{@project.id}" : "/plugins/resource/#{@project.id}?page=#{page.getId()}") + <% end %> + + <% elsif selected_section==Navigation::SECTION_CONFIGURATION %> + + <li class="<%= 'selected' if request.request_uri.include?('/profiles') || request.request_uri.include?('/rules_configuration') -%>"> + <a href="<%= ApplicationController.root_context -%>/profiles"><%= message('quality_profiles.page') -%></a></li> + <% if current_user %> + <li class="<%= 'selected' if controller.controller_path=='account' -%>"> + <a href="<%= ApplicationController.root_context -%>/account/index"><%= message('my_profile.page') -%></a></li> + <li class="<%= 'selected' if controller.controller_path=='filters' -%>"> + <a href="<%= ApplicationController.root_context -%>/filters/manage"><%= message('default_filters.page') -%></a></li> + <% end %> + <% if is_admin? %> + <li class="<%= 'selected' if controller.controller_path=='metrics' -%>"> + <a href="<%= ApplicationController.root_context -%>/metrics/index"><%= message('manual_metrics.page') -%></a></li> + <li class="<%= 'selected' if controller.controller_path=='manual_rules' -%>"> + <a href="<%= ApplicationController.root_context -%>/manual_rules/index"><%= message('manual_rules.page') -%></a></li> + <li class="<%= 'selected' if controller.controller_path=='admin_dashboards' -%>"> + <a href="<%= ApplicationController.root_context -%>/admin_dashboards/index"><%= message('default_dashboards.page') -%></a></li> + <% controller.java_facade.getPages(Navigation::SECTION_CONFIGURATION, nil, nil, nil, nil).each do |page| + page_url = (page.isController() ? page.getId() : "/plugins/configuration/#{page.getId()}") %> <li class="<%= 'selected' if request.request_uri.include?(page_url) -%>"> <a href="<%= ApplicationController.root_context -%><%= page_url -%>"><%= message(page.getId() + '.page', :default => page.getTitle()) %></a> </li> <% end %> - <% if has_role?(:admin, @project) %> - <li class="h2"><%= message('sidebar.project_settings') -%></li> - <% if (@project.project?) %> - <li class="<%= 'selected' if request.request_uri.include?('/project/quality_profile') -%>"> - <a href="<%= ApplicationController.root_context -%>/project/quality_profile/<%= @project.id -%>"><%= message('project_quality_profile.page') -%></a></li> - <% end %> - <li class="<%= 'selected' if request.request_uri.include?('/manual_measures') -%>"> - <a href="<%= ApplicationController.root_context -%>/manual_measures/index/<%= @project.id -%>"><%= message('manual_measures.page') -%></a></li> - <% if (@project.project?) %> - <li class="<%= 'selected' if request.request_uri.include?('/action_plans') -%>"> - <a href="<%= ApplicationController.root_context -%>/action_plans/index/<%= @project.id -%>"><%= message('action_plans.page') -%></a></li> - <% end %> - <% if (@project.project? || @project.module?) %> - <li class="<%= 'selected' if request.request_uri.include?('/project/settings') -%>"> - <a href="<%= ApplicationController.root_context -%>/project/settings/<%= @project.id -%>"><%= message('project_settings.page') -%></a></li> - <% end %> - <% if (@project.project? || @project.module?) %> - <li class="<%= 'selected' if request.request_uri.include?('/project/exclusions') -%>"> - <a href="<%= ApplicationController.root_context -%>/project/exclusions/<%= @project.id -%>"><%= message('project_exclusions.page') -%></a></li> - <% end %> - <% if (@project.project?) %> - <li class="<%= 'selected' if request.request_uri.include?('/project/links') -%>"> - <a href="<%= ApplicationController.root_context -%>/project/links/<%= @project.id -%>"><%= message('project_links.page') -%></a></li> - <% end %> - <% if (@project.project? || @project.view? || @project.subview?) %> - <li class="<%= 'selected' if request.request_uri.include?('/project_roles') -%>"> - <a href="<%= ApplicationController.root_context -%>/project_roles/index?resource=<%= @project.id -%>"><%= message('roles.page') -%></a></li> - <% end %> - <% - # NOTE: we keep "@project.view? || @project.subview?" in the test for backward compatibility with the Views plugin - if (controller.java_facade.getResourceTypeBooleanProperty(@project.qualifier, 'modifiable_history') || @project.view? || @project.subview?) - %> - <li class="<%= 'selected' if request.request_uri.include?('/project/history') -%>"> - <a href="<%= ApplicationController.root_context -%>/project/history/<%= @project.id -%>"><%= message('project_history.page') -%></a></li> - <% end %> - <% if controller.java_facade.getResourceTypeBooleanProperty(@project.qualifier, 'updatable_key') %> - <li class="<%= 'selected' if request.request_uri.include?('/project/key') -%>"> - <a href="<%= ApplicationController.root_context -%>/project/key/<%= @project.id -%>"><%= message('update_key.page') -%></a></li> - <% end %> - <% if controller.java_facade.getResourceTypeBooleanProperty(@project.qualifier, 'deletable') %> - <li class="<%= 'selected' if request.request_uri.include?('/project/deletion') -%>"> - <a href="<%= ApplicationController.root_context -%>/project/deletion/<%= @project.id -%>"><%= message('resource_deletion.page', :params => message('qualifier.' + @project.qualifier)) -%></a></li> - <% end %> - <% end %> - <% elsif selected_section==Navigation::SECTION_CONFIGURATION %> + <li class="h2"><%= message('sidebar.security') -%></li> + <li class="<%= 'selected' if request.request_uri.include?('/users') -%>"><a href="<%= ApplicationController.root_context -%>/users"><%= message('users.page') -%></a> + </li> + <li class="<%= 'selected' if request.request_uri.include?('/groups') -%>"> + <a href="<%= ApplicationController.root_context -%>/groups/index"><%= message('user_groups.page') -%></a></li> + <li class="<%= 'selected' if request.request_uri.include?('/roles/global') -%>"> + <a href="<%= ApplicationController.root_context -%>/roles/global"><%= message('system_administrators.page') -%></a></li> + <li class="<%= 'selected' if request.request_uri.include?('/roles/projects') -%>"> + <a href="<%= ApplicationController.root_context -%>/roles/projects"><%= message('roles.page') -%></a></li> - <li class="<%= 'selected' if request.request_uri.include?('/profiles') || request.request_uri.include?('/rules_configuration') -%>"> - <a href="<%= ApplicationController.root_context -%>/profiles"><%= message('quality_profiles.page') -%></a></li> - <% if current_user %> - <li class="<%= 'selected' if controller.controller_path=='account' -%>"> - <a href="<%= ApplicationController.root_context -%>/account/index"><%= message('my_profile.page') -%></a></li> - <li class="<%= 'selected' if controller.controller_path=='filters' -%>"> - <a href="<%= ApplicationController.root_context -%>/filters/manage"><%= message('default_filters.page') -%></a></li> + <li class="h2"><%= message('sidebar.system') -%></li> + <li class="<%= 'selected' if request.request_uri.include?('/settings') -%>"> + <a href="<%= ApplicationController.root_context -%>/settings/index"><%= message('settings.page') -%></a></li> + <li class="<%= 'selected' if controller.controller_path=='backup' -%>"><a href="<%= ApplicationController.root_context -%>/backup"><%= message('backup.page') -%></a> + </li> + <li class="<%= 'selected' if controller.controller_path=='bulk_deletion' -%>"> + <a href="<%= ApplicationController.root_context -%>/bulk_deletion"><%= message('bulk_deletion.page') -%></a> + </li> + <li class="<%= 'selected' if controller.controller_path=='system' -%>"> + <a href="<%= ApplicationController.root_context -%>/system"><%= message('system_info.page') -%></a></li> + <% update_center_activated = controller.java_facade.getSettings().getBoolean('sonar.updatecenter.activate') + if update_center_activated %> + <li class="<%= 'selected' if controller.controller_path=='updatecenter' -%>"> + <a href="<%= ApplicationController.root_context -%>/updatecenter"><%= message('update_center.page') -%></a></li> <% end %> - <% if is_admin? %> - <li class="<%= 'selected' if controller.controller_path=='metrics' -%>"> - <a href="<%= ApplicationController.root_context -%>/metrics/index"><%= message('manual_metrics.page') -%></a></li> - <li class="<%= 'selected' if controller.controller_path=='manual_rules' -%>"> - <a href="<%= ApplicationController.root_context -%>/manual_rules/index"><%= message('manual_rules.page') -%></a></li> - <li class="<%= 'selected' if controller.controller_path=='admin_dashboards' -%>"> - <a href="<%= ApplicationController.root_context -%>/admin_dashboards/index"><%= message('default_dashboards.page') -%></a></li> - <% controller.java_facade.getPages(Navigation::SECTION_CONFIGURATION, nil, nil, nil, nil).each do |page| - page_url = (page.isController() ? page.getId() : "/plugins/configuration/#{page.getId()}") - %> - <li class="<%= 'selected' if request.request_uri.include?(page_url) -%>"> - <a href="<%= ApplicationController.root_context -%><%= page_url -%>"><%= message(page.getId() + '.page', :default => page.getTitle()) %></a> - </li> - <% end %> - - <li class="h2"><%= message('sidebar.security') -%></li> - <li class="<%= 'selected' if request.request_uri.include?('/users') -%>"><a href="<%= ApplicationController.root_context -%>/users"><%= message('users.page') -%></a> - </li> - <li class="<%= 'selected' if request.request_uri.include?('/groups') -%>"> - <a href="<%= ApplicationController.root_context -%>/groups/index"><%= message('user_groups.page') -%></a></li> - <li class="<%= 'selected' if request.request_uri.include?('/roles/global') -%>"> - <a href="<%= ApplicationController.root_context -%>/roles/global"><%= message('system_administrators.page') -%></a></li> - <li class="<%= 'selected' if request.request_uri.include?('/roles/projects') -%>"> - <a href="<%= ApplicationController.root_context -%>/roles/projects"><%= message('roles.page') -%></a></li> - - <li class="h2"><%= message('sidebar.system') -%></li> - <li class="<%= 'selected' if request.request_uri.include?('/settings') -%>"> - <a href="<%= ApplicationController.root_context -%>/settings/index"><%= message('settings.page') -%></a></li> - <li class="<%= 'selected' if controller.controller_path=='backup' -%>"><a href="<%= ApplicationController.root_context -%>/backup"><%= message('backup.page') -%></a> - </li> - <li class="<%= 'selected' if controller.controller_path=='bulk_deletion' -%>"><a href="<%= ApplicationController.root_context -%>/bulk_deletion"><%= message('bulk_deletion.page') -%></a> - </li> - <li class="<%= 'selected' if controller.controller_path=='system' -%>"> - <a href="<%= ApplicationController.root_context -%>/system"><%= message('system_info.page') -%></a></li> - <% update_center_activated = controller.java_facade.getSettings().getBoolean('sonar.updatecenter.activate') - if update_center_activated %> - <li class="<%= 'selected' if controller.controller_path=='updatecenter' -%>"> - <a href="<%= ApplicationController.root_context -%>/updatecenter"><%= message('update_center.page') -%></a></li> - <% end %> - <% end %> - <% end %> - </ul> - <div id="logo"> - <center><a href="http://www.sonarsource.org/" target="SonarSource"><%= image_tag('sonar.png', :alt => message('layout.sonar.slogan'), :class => 'png') -%></a></center> - </div> + + <% end %> + </ul> + <div id="logo"> + <center><a href="http://www.sonarsource.org/" target="SonarSource"><%= image_tag('sonar.png', :alt => message('layout.sonar.slogan'), :class => 'png') -%></a></center> </div> + </div> - <% if @sidebar %> - <div id="sidebarconf"><%= render :partial => @sidebar %></div> - <% else %> - <div id="sidebarconf" class="hidden"></div> - <% end %> + <% if @sidebar %> + <div id="sidebarconf"><%= render :partial => @sidebar %></div> + <% else %> + <div id="sidebarconf" class="hidden"></div> + <% end %> + </div> + <div id="content" class="with_sidebar"> + <% if @project %> + <div class="print"><h2><%= @project.name(true) %></h2></div> + <% end %> + <div class="error" id="error" style="display:none"> + <span id="errormsg"></span> [<a href="#" onclick="javascript:$('error').hide();return false;"><%= message('hide').downcase -%></a>] </div> - <div id="content" class="with_sidebar"> - <% if @project %> - <div class="print"><h2><%= @project.name(true) %></h2></div> - <% end %> - <div class="error" id="error" style="display:none"> - <span id="errormsg"></span> [<a href="#" onclick="javascript:$('error').hide();return false;"><%= message('hide').downcase -%></a>] - </div> - <div class="notice" id="info" style="display:none"> - <span id="infomsg"></span> [<a href="#" onclick="javascript:$('info').hide();return false;"><%= message('hide').downcase -%></a>] - </div> - <div class="warning" id="warning" style="display:none"> - <span id="warningmsg"></span> [<a href="#" onclick="javascript:$('warning').hide();return false;"><%= message('hide').downcase -%></a>] - </div> - <%= yield %> + <div class="notice" id="info" style="display:none"> + <span id="infomsg"></span> [<a href="#" onclick="javascript:$('info').hide();return false;"><%= message('hide').downcase -%></a>] </div> + <div class="warning" id="warning" style="display:none"> + <span id="warningmsg"></span> [<a href="#" onclick="javascript:$('warning').hide();return false;"><%= message('hide').downcase -%></a>] + </div> + <%= yield %> </div> </div> +</div> <% unless params[:hd]=='false' %> <div id="footer"> diff --git a/sonar-server/src/main/webapp/stylesheets/layout.css b/sonar-server/src/main/webapp/stylesheets/layout.css new file mode 100644 index 00000000000..ac6771b03db --- /dev/null +++ b/sonar-server/src/main/webapp/stylesheets/layout.css @@ -0,0 +1,198 @@ +@media print { + /* ------------------- PRINT ------------------- */ + html, body { + font-size: 8pt; + } + + a, a:link, a:visited { + text-decoration: none; + border-bottom: 0; + } + + .noprint { + display: none !important; + } + + .print { + display: inline; + position: static; + left: 0; + } + + #hd, #sb { + display: none; + } + + .with_sidebar, .wo_sidebar { + padding: 0 !important; + margin: 0; + } + + #content { + margin-left: 0 !important; + } +} + +@media screen { + .print { + display: none; + } +} + +body, a { + color: #444; +} + +/* LAYOUT */ +#container { + height: auto !important; + min-width: 940px; +} + +#hd { + color: #FFF; + background: #262626; + padding: 0 5px; + height: 30px; + line-height: 30px; + font-size: 93%; + margin: 0 10px; +} + +#hd a { + color: #FFF; + text-decoration: none; +} + +#hd a:focus, #hd a:hover { + text-decoration: underline; +} + + +#nav1 { + float: left; + vertical-align: middle; +} + +#nav2 { + float: right; + padding: 0 0 0 10px; + vertical-align: middle; +} + +#nav1 img, #nav2 img { + vertical-align: text-bottom; +} + +#nav1 > ul> li { + float: left; + padding: 0 10px 0 5px; +} + +#nav2 > ul> li { + float: right; + padding: 0 0 0 10px; +} + +#nonav { + text-align: left; + margin: 50px 180px 0; +} + +#body { + position: relative; +} + +#footer { + margin: 10px; + clear: both; +} + +.with_sidebar { + margin: 0 10px 0 170px; +} + +.wo_sidebar { + margin: 0 10px 0 10px; +} + +#content { + padding-top: 10px; + width: auto; +} + +#sb { + width: 150px; + position: absolute; + margin: 0 10px; + top: 0; + left: 0; +} + +#sidebar { + background-color: #CAE3F2; + color: #262626; + text-align: left; + line-height: 1.1em; + border: 2px solid #4b9fd5; + border-top: 0; + padding: 10px 0; +} + +#sidebar li { + list-style-type: none; + padding: 3px 0 3px 8px; +} + +#sidebar li.h2 { + color: #003366; + padding: 20px 0 3px 8px; + text-transform: uppercase; + font-size: 100% !important; + font-weight: bold; +} + +#sidebar .selected { + background-color: #4b9fd5; +} + +#sidebar a, #sidebarpages a:visited { + text-decoration: none; + border-bottom: 0; +} + +#sidebar a:hover { + text-decoration: underline; +} + +#sidebar .selected a, #sidebar .selected a:hover, #sidebar.selected a:visited { + font-weight: bold; + color: #FEFEFE; +} + +#logo { + text-align: center; + padding: 8px 0 0 0; +} + +#logo a { + text-decoration: none; + border-bottom-width: 0; +} + +#logo img { + display: block; +} + +#sidebarconf { + background-color: #EFEFEF; + border: 2px solid #DDD; + color: #666; + line-height: 1.1em; + margin-top: 10px; + padding: 10px; +} + +.nolayout { + padding: 10px; +} diff --git a/sonar-server/src/main/webapp/stylesheets/style.css b/sonar-server/src/main/webapp/stylesheets/style.css index 35c047ab65f..c10072a4b1c 100644 --- a/sonar-server/src/main/webapp/stylesheets/style.css +++ b/sonar-server/src/main/webapp/stylesheets/style.css @@ -1,222 +1,5 @@ /* CSS optimized by http://www.cleancss.com */ -@media print { - /* ------------------- PRINT ------------------- */ - html, body { - font-size: 8pt; - } - - a, a:link, a:visited { - text-decoration: none; - border-bottom: 0; - } - - .noprint { - display: none !important; - } - - .print { - display: inline; - position: static; - left: 0; - } - - div#hd, div#sb { - display: none; - } - - .with_sidebar, .wo_sidebar { - padding: 0 !important; - margin: 0; - } - - div#content { - margin-left: 0 !important; - } -} - -@media screen { - .print { - display: none; - } -} - -html, body { - height: 100%; -} - -body { - background-color: #FFF; - color: #444; - font-family: Arial, Helvetica, sans-serif; - text-align: left; -} - -a { - color: #444; -} - -/* LAYOUT */ -div#container { - height: auto !important; - min-width: 940px; -} - -div#hd { - background: #262626; - padding: 0 5px; - height: 30px; - line-height: 28px; - font-size: 93%; - margin: 0 10px; -} - -#crumbs ol, #nav ol { - list-style-type: none; - padding: 0; - margin: 0; - -} - -#crumbs li { - float: left; - margin: 0; - color: #fff; - padding: 0 10px 0 5px; -} - -#nav li { - float: right; - margin: 0; - line-height: 29px; - color: #fff; - padding: 0 0 0 10px; -} - -#crumbs li { - height: 30px; - line-height: 30px; - vertical-align: middle; -} - -#crumbs li a, #nav li a { - color: #fff; -} - -#crumbs li a:link, #crumbs li a:visited, #nav li a:link, #nav li a:visited { - text-decoration: none; -} - -#crumbs li a:hover, #crumbs li a:focus, #nav li a:hover, #nav li a:focus { - text-decoration: underline; -} - -#crumbs li img, #nav li img { - vertical-align: text-bottom; -} - -#nonav { - text-align: left; - margin: 50px 180px 0; -} - -div#body { - position: relative; -} - -div#footer { - margin: 10px; - clear: both; -} - -.with_sidebar { - margin: 0 10px 0 170px; -} - -.wo_sidebar { - margin: 0 10px 0 10px; -} - -div#content { - padding-top: 10px; - width: auto; -} - -div#sb { - width: 150px; - position: absolute; - margin: 0 10px; - top: 0; - left: 0; -} - -div#sidebar { - background-color: #CAE3F2; - color: #262626; - text-align: left; - line-height: 1.1em; - border: 2px solid #4b9fd5; - border-top: 0; - padding: 10px 0; -} - -div#sidebar li { - list-style-type: none; - padding: 3px 0 3px 8px; -} - -div#sidebar li.h2 { - color: #003366; - padding: 20px 0 3px 8px; - text-transform: uppercase; - font-size: 100% !important; - font-weight: bold; -} - -div#sidebar .selected { - background-color: #4b9fd5; -} - -div#sidebar a, #sidebarpages a:visited { - text-decoration: none; - border-bottom: 0; -} - -div#sidebar a:hover { - color: #4b9fd5; -} - -div#sidebar .selected a, div#sidebar .selected a:hover, div#sidebar.selected a:visited { - font-weight: bold; - color: #efefef; -} - -#logo { - text-align: center; - padding: 8px 0 0 0; -} - -#logo a { - text-decoration: none; - border-bottom-width: 0; -} - -#logo img { - display: block; -} - -#sidebarconf { - background-color: #EFEFEF; - border: 2px solid #DDD; - color: #666; - line-height: 1.1em; - margin-top: 10px; - padding: 10px; -} - -.nolayout { - padding: 10px; -} /* ------------------- PROJECTS SEARCH FORM ------------------- */ #projectSearch { diff --git a/sonar-server/src/main/webapp/stylesheets/yui-2.6.0.css b/sonar-server/src/main/webapp/stylesheets/yui-2.6.0.css deleted file mode 100644 index b3e042c9179..00000000000 --- a/sonar-server/src/main/webapp/stylesheets/yui-2.6.0.css +++ /dev/null @@ -1,7 +0,0 @@ -/* -Copyright (c) 2008, Yahoo! Inc. All rights reserved. -Code licensed under the BSD License: -http://developer.yahoo.net/yui/license.txt -version: 2.6.0 -*/ -html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}del,ins{text-decoration:none;}body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}body{text-align:center;}#ft{clear:both;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;min-width:750px;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main,.yui-g .yui-u .yui-g{width:100%;}{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g .yui-u{width:48.1%;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;} .yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}
\ No newline at end of file diff --git a/sonar-server/src/main/webapp/stylesheets/yui-reset-font.css b/sonar-server/src/main/webapp/stylesheets/yui-reset-font.css new file mode 100644 index 00000000000..bf3e732e3c7 --- /dev/null +++ b/sonar-server/src/main/webapp/stylesheets/yui-reset-font.css @@ -0,0 +1,12 @@ +/* +YUI 3.6.0 (build 5521) +Copyright 2012 Yahoo! Inc. All rights reserved. +Licensed under the BSD License. +http://yuilibrary.com/license/ +*/ + +/* reset */ +html{color:#000;background:#FFF}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}input,textarea,select{*font-size:100%}legend{color:#000} + +/* font */ +body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small}select,input,button,textarea{font:99% arial,helvetica,clean,sans-serif}table{font-size:inherit;font:100%}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%}
\ No newline at end of file |