From 827e998afef3a3b6eded98c9b3af1023e54fccb5 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 22 Sep 2007 13:17:49 +0000 Subject: Application layout refactored. The project menu is now the main menu. git-svn-id: http://redmine.rubyforge.org/svn/trunk@747 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/projects_controller.rb | 2 + app/controllers/reports_controller.rb | 2 +- app/controllers/roles_controller.rb | 1 + app/helpers/application_helper.rb | 18 + app/views/account/login.rhtml | 57 +- app/views/account/lost_password.rhtml | 9 +- app/views/account/password_recovery.rhtml | 25 +- app/views/boards/show.rhtml | 5 +- app/views/issue_relations/_form.rhtml | 4 +- app/views/issue_statuses/list.rhtml | 2 +- app/views/issues/_list_simple.rhtml | 2 +- app/views/issues/_relations.rhtml | 21 +- app/views/issues/_sidebar.rhtml | 18 + app/views/issues/edit.rhtml | 2 +- app/views/issues/index.rhtml | 2 +- app/views/issues/show.rhtml | 52 +- app/views/layouts/_project_selector.rhtml | 12 + app/views/layouts/_projects_menu.rhtml | 12 - app/views/layouts/base.rhtml | 131 ++- app/views/my/account.rhtml | 19 +- app/views/my/blocks/_calendar.rhtml | 4 +- app/views/news/_news.rhtml | 9 +- app/views/projects/activity.rhtml | 30 +- app/views/projects/add_issue.rhtml | 3 +- app/views/projects/calendar.rhtml | 64 +- app/views/projects/changelog.rhtml | 29 +- app/views/projects/gantt.rhtml | 39 +- app/views/projects/list.rhtml | 11 +- app/views/projects/list_documents.rhtml | 4 +- app/views/projects/list_issues.rhtml | 22 +- app/views/projects/list_news.rhtml | 6 +- app/views/projects/roadmap.rhtml | 32 +- app/views/projects/settings/_boards.rhtml | 10 +- .../projects/settings/_issue_categories.rhtml | 10 +- app/views/projects/settings/_members.rhtml | 15 +- app/views/projects/settings/_modules.rhtml | 2 + app/views/projects/settings/_versions.rhtml | 10 +- app/views/projects/show.rhtml | 57 +- app/views/reports/_details.rhtml | 2 +- app/views/reports/issue_report.rhtml | 8 - app/views/repositories/browse.rhtml | 3 +- app/views/repositories/diff.rhtml | 10 +- app/views/repositories/entry.rhtml | 6 +- app/views/repositories/revision.rhtml | 4 +- app/views/roles/_form.rhtml | 4 +- app/views/roles/list.rhtml | 2 +- app/views/roles/workflow.rhtml | 24 +- app/views/welcome/index.rhtml | 2 +- app/views/wiki/_sidebar.rhtml | 4 + app/views/wiki/show.rhtml | 5 +- lang/bg.yml | 1 + lang/de.yml | 1 + lang/en.yml | 5 +- lang/es.yml | 1 + lang/fr.yml | 1 + lang/it.yml | 1 + lang/ja.yml | 1 + lang/nl.yml | 1 + lang/pt-br.yml | 1 + lang/pt.yml | 1 + lang/sv.yml | 1 + lang/zh.yml | 1 + lib/redmine.rb | 9 +- public/images/contentbg.png | Bin 0 -> 152 bytes public/images/mainbg.png | Bin 0 -> 150 bytes public/images/note.png | Bin 0 -> 469 bytes public/javascripts/menu.js | 556 ------------- public/stylesheets/application.css | 897 +++++++-------------- public/stylesheets/calendar.css | 8 +- public/stylesheets/print.css | 5 +- public/stylesheets/scm.css | 23 +- 71 files changed, 786 insertions(+), 1555 deletions(-) create mode 100644 app/views/issues/_sidebar.rhtml create mode 100644 app/views/layouts/_project_selector.rhtml delete mode 100644 app/views/layouts/_projects_menu.rhtml create mode 100644 app/views/wiki/_sidebar.rhtml create mode 100644 public/images/contentbg.png create mode 100644 public/images/mainbg.png create mode 100644 public/images/note.png delete mode 100644 public/javascripts/menu.js diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 958c35d9a..d4b8e5dd6 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -84,6 +84,7 @@ class ProjectsController < ApplicationController @trackers = Tracker.find(:all, :order => 'position') @open_issues_by_tracker = Issue.count(:group => :tracker, :joins => "INNER JOIN #{IssueStatus.table_name} ON #{IssueStatus.table_name}.id = #{Issue.table_name}.status_id", :conditions => ["project_id=? and #{IssueStatus.table_name}.is_closed=?", @project.id, false]) @total_issues_by_tracker = Issue.count(:group => :tracker, :conditions => ["project_id=?", @project.id]) + @total_hours = @project.time_entries.sum(:hours) @key = User.current.rss_key end @@ -254,6 +255,7 @@ class ProjectsController < ApplicationController :limit => @issue_pages.items_per_page, :offset => @issue_pages.current.offset end + render :layout => false if request.xhr? end diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index fdbcc5a53..6b95944a0 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -72,7 +72,7 @@ class ReportsController < ApplicationController issues_by_category issues_by_author issues_by_subproject - @total_hours = @project.time_entries.sum(:hours) + render :template => "reports/issue_report" end end diff --git a/app/controllers/roles_controller.rb b/app/controllers/roles_controller.rb index 24c7a3ffe..a8f21ff65 100644 --- a/app/controllers/roles_controller.rb +++ b/app/controllers/roles_controller.rb @@ -88,6 +88,7 @@ class RolesController < ApplicationController } if @role.save flash[:notice] = l(:notice_successful_update) + redirect_to :action => 'workflow', :role_id => @role, :tracker_id => @tracker end end @roles = Role.find(:all, :order => 'builtin, position') diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 038d051ee..e52d1492e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -47,6 +47,14 @@ module ApplicationHelper link_to(name, "#", :onclick => onclick) end + def show_and_goto_link(name, id, options={}) + onclick = "Element.show('#{id}'); " + onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ") + onclick << "location.href='##{id}-anchor'; " + onclick << "return false;" + link_to(name, "#", options.merge(:onclick => onclick)) + end + def image_to_function(name, function, html_options = {}) html_options.symbolize_keys! tag(:input, html_options.merge({ @@ -287,6 +295,16 @@ module ApplicationHelper return '' unless Setting.text_formatting == 'textile' javascript_include_tag('jstoolbar') + javascript_tag("var toolbar = new jsToolBar($('#{field_id}')); toolbar.draw();") end + + def content_for(name, content = nil, &block) + @has_content ||= {} + @has_content[name] = true + super(name, content, &block) + end + + def has_content?(name) + (@has_content && @has_content[name]) || false + end end class TabularFormBuilder < ActionView::Helpers::FormBuilder diff --git a/app/views/account/login.rhtml b/app/views/account/login.rhtml index 08d462c61..5bfbfb8d6 100644 --- a/app/views/account/login.rhtml +++ b/app/views/account/login.rhtml @@ -1,28 +1,33 @@ -
-
\ No newline at end of file diff --git a/app/views/account/lost_password.rhtml b/app/views/account/lost_password.rhtml index b27123a6e..420e8f9b1 100644 --- a/app/views/account/lost_password.rhtml +++ b/app/views/account/lost_password.rhtml @@ -1,14 +1,11 @@ -
-
\ No newline at end of file diff --git a/app/views/account/password_recovery.rhtml b/app/views/account/password_recovery.rhtml index c3c451e57..439ab11b5 100644 --- a/app/views/account/password_recovery.rhtml +++ b/app/views/account/password_recovery.rhtml @@ -1,22 +1,15 @@ -
-
\ No newline at end of file +

<%= submit_tag l(:button_save) %>

+<% end %> diff --git a/app/views/boards/show.rhtml b/app/views/boards/show.rhtml index c31ec67e9..cdb9e772d 100644 --- a/app/views/boards/show.rhtml +++ b/app/views/boards/show.rhtml @@ -5,6 +5,7 @@

<%=h @board.name %>

+<% if @topics.any? %> @@ -32,6 +33,8 @@ <% end %>
<%= l(:field_subject) %>
-

<%= pagination_links_full @topic_pages %> [ <%= @topic_pages.current.first_item %> - <%= @topic_pages.current.last_item %> / <%= @topic_count %> ]

+<% else %> +

<%= l(:label_no_data) %>

+<% end %> diff --git a/app/views/issue_relations/_form.rhtml b/app/views/issue_relations/_form.rhtml index 8b514dc1a..0de386306 100644 --- a/app/views/issue_relations/_form.rhtml +++ b/app/views/issue_relations/_form.rhtml @@ -5,6 +5,8 @@ -<%= submit_tag l(:button_add) %>

+<%= submit_tag l(:button_add) %> +<%= toggle_link l(:button_cancel), 'new-relation-form'%> +

<%= javascript_tag "setPredecessorFieldsVisibility();" %> diff --git a/app/views/issue_statuses/list.rhtml b/app/views/issue_statuses/list.rhtml index 91a655094..aaeec559a 100644 --- a/app/views/issue_statuses/list.rhtml +++ b/app/views/issue_statuses/list.rhtml @@ -15,7 +15,7 @@ <% for status in @issue_statuses %> "> -
<%= link_to status.name, :action => 'edit', :id => status %> + <%= link_to status.name, :action => 'edit', :id => status %> <%= image_tag 'true.png' if status.is_default? %> <%= image_tag 'true.png' if status.is_closed? %> diff --git a/app/views/issues/_list_simple.rhtml b/app/views/issues/_list_simple.rhtml index 4e50b91f8..0e3c39bbf 100644 --- a/app/views/issues/_list_simple.rhtml +++ b/app/views/issues/_list_simple.rhtml @@ -11,7 +11,7 @@ <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %> -

<%= issue.project.name %> - <%= issue.tracker.name %>
+

<%= issue.project.name %> - <%= issue.tracker.name %>
<%= issue.status.name %> - <%= format_time(issue.updated_on) %>

<%= link_to h(issue.subject), :controller => 'issues', :action => 'show', :id => issue %>

diff --git a/app/views/issues/_relations.rhtml b/app/views/issues/_relations.rhtml index 2a45ba473..d4b3e5aa6 100644 --- a/app/views/issues/_relations.rhtml +++ b/app/views/issues/_relations.rhtml @@ -1,11 +1,18 @@ -

<%=l(:label_related_issues)%>

+
+<% if authorize_for('issue_relations', 'new') %> + <%= toggle_link l(:button_add), 'new-relation-form'%> +<% end %> +
+ +

<%=l(:label_related_issues)%>

+<% if @issue.relations.any? %> <% @issue.relations.each do |relation| %> - + <% end %>
<%= l(relation.label_for(@issue)) %> <%= "(#{lwr(:actionview_datehelper_time_in_words_day, relation.delay)})" if relation.delay && relation.delay != 0 %> <%= link_to_issue relation.other_issue(@issue) %> <%=h relation.other_issue(@issue).subject %>
<%= relation.other_issue(@issue).status.name %>
<%= relation.other_issue(@issue).status.name %> <%= format_date(relation.other_issue(@issue).start_date) %> <%= format_date(relation.other_issue(@issue).due_date) %> <%= link_to_remote(image_tag('delete.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :issue_id => @issue, :id => relation}, @@ -14,9 +21,11 @@
+<% end %> -<% if authorize_for('issue_relations', 'new') %>  - <% remote_form_for(:relation, @relation, :url => {:controller => 'issue_relations', :action => 'new', :issue_id => @issue}, :method => :post) do |f| %> - <%= render :partial => 'issue_relations/form', :locals => {:f => f}%> - <% end %> +<% remote_form_for(:relation, @relation, + :url => {:controller => 'issue_relations', :action => 'new', :issue_id => @issue}, + :method => :post, + :html => {:id => 'new-relation-form', :style => (@relation ? '' : 'display: none;')}) do |f| %> +<%= render :partial => 'issue_relations/form', :locals => {:f => f}%> <% end %> diff --git a/app/views/issues/_sidebar.rhtml b/app/views/issues/_sidebar.rhtml new file mode 100644 index 000000000..b171dbd0b --- /dev/null +++ b/app/views/issues/_sidebar.rhtml @@ -0,0 +1,18 @@ +<% if authorize_for('projects', 'add_issue') %> +

<%= l(:label_issue_new) %>

+<%= l(:label_tracker) %>: <%= new_issue_selector %> +<% end %> + +

<%= l(:label_issue_plural) %>

+<%= link_to l(:label_issue_view_all), :controller => 'projects', :action => 'list_issues', :id => @project, :set_filter => 1 %>
+<%= link_to l(:field_summary), :controller => 'reports', :action => 'issue_report', :id => @project %>
+<%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %> + +

<%= l(:label_query_plural) %>

+ +<% queries = @project.queries.find(:all, + :order => "name ASC", + :conditions => ["is_public = ? or user_id = ?", true, (User.current.logged? ? User.current.id : 0)]) + queries.each do |query| %> +<%= link_to query.name, :controller => 'projects', :action => 'list_issues', :id => @project, :query_id => query %>
+<% end %> diff --git a/app/views/issues/edit.rhtml b/app/views/issues/edit.rhtml index 53ffd7f6c..b1f63d1f5 100644 --- a/app/views/issues/edit.rhtml +++ b/app/views/issues/edit.rhtml @@ -1,4 +1,4 @@ -

<%= @issue.tracker.name %> #<%= @issue.id %> - <%=h @issue.subject %>

+

<%= @issue.tracker.name %> #<%= @issue.id %>

<% labelled_tabular_form_for :issue, @issue, :url => {:action => 'edit'} do |f| %> <%= error_messages_for 'issue' %> diff --git a/app/views/issues/index.rhtml b/app/views/issues/index.rhtml index cd7ace561..270f9b215 100644 --- a/app/views/issues/index.rhtml +++ b/app/views/issues/index.rhtml @@ -40,7 +40,7 @@ <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %> <%=h issue.project.name %> <%= issue.tracker.name %> -
<%= issue.status.name %> + <%= issue.status.name %> <%= issue.priority.name %> <%= link_to h(issue.subject), :controller => 'issues', :action => 'show', :id => issue %> <%= issue.assigned_to.name if issue.assigned_to %> diff --git a/app/views/issues/show.rhtml b/app/views/issues/show.rhtml index 865810f42..de9e38bb9 100644 --- a/app/views/issues/show.rhtml +++ b/app/views/issues/show.rhtml @@ -1,4 +1,5 @@
+<%= show_and_goto_link(l(:label_add_note), 'add-note', :class => 'icon icon-note') if authorize_for('issues', 'add_note') %> <%= link_to_if_authorized l(:button_edit), {:controller => 'issues', :action => 'edit', :id => @issue}, :class => 'icon icon-edit' %> <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, :class => 'icon icon-time' %> <%= watcher_tag(@issue, User.current) %> @@ -6,12 +7,15 @@ <%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
-

<%= @issue.tracker.name %> #<%= @issue.id %>: <%=h @issue.subject %>

+

<%= @issue.tracker.name %> #<%= @issue.id %>

+ +
+

<%=h @issue.subject %>

<%= authoring @issue.created_on, @issue.author %>. <%= l(:label_updated_time, distance_of_time_in_words(Time.now, @issue.updated_on)) if @issue.created_on != @issue.updated_on %>.

-
+ @@ -58,45 +62,42 @@ end %> <% end %> -<%=l(:field_description)%> :

+

<%=l(:field_description)%>

<%= textilizable @issue.description, :attachments => @issue.attachments %> -
-
- -<% if authorize_for('issues', 'change_status') and @status_options and !@status_options.empty? %> - <% form_tag({:controller => 'issues', :action => 'change_status', :id => @issue}) do %> - <%=l(:label_change_status)%> : - - <%= submit_tag l(:button_change) %> - <% end %> -<% end %> - - <% if authorize_for('issue_relations', 'new') || @issue.relations.any? %> -
+
+
<%= render :partial => 'relations' %>
<% end %> <% if @issue.attachments.any? %> -
-

<%=l(:label_attachment_plural)%>

<%= link_to_attachments @issue.attachments, :delete_url => (authorize_for('issues', 'destroy_attachment') ? {:controller => 'issues', :action => 'destroy_attachment', :id => @issue} : nil) %> +<% end %> +
+ +<% if authorize_for('issues', 'change_status') and @status_options and !@status_options.empty? %> + <% form_tag({:controller => 'issues', :action => 'change_status', :id => @issue}) do %> +

<%=l(:label_change_status)%> : + + <%= submit_tag l(:button_change) %>

+ <% end %> <% end %> <% if @journals.any? %> -
+

<%=l(:label_history)%>

<%= render :partial => 'history', :locals => { :journals => @journals } %>
<% end %> <% if authorize_for('issues', 'add_note') %> -
+ + <% end %> @@ -113,4 +115,8 @@ end %>
  -<% set_html_title "#{@issue.tracker.name} ##{@issue.id}" %> +<% set_html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %> + +<% content_for :sidebar do %> + <%= render :partial => 'issues/sidebar' %> +<% end %> diff --git a/app/views/layouts/_project_selector.rhtml b/app/views/layouts/_project_selector.rhtml new file mode 100644 index 000000000..499879c8c --- /dev/null +++ b/app/views/layouts/_project_selector.rhtml @@ -0,0 +1,12 @@ +<% user_projects_by_root = User.current.projects.find(:all, :include => :parent).group_by(&:root) %> + diff --git a/app/views/layouts/_projects_menu.rhtml b/app/views/layouts/_projects_menu.rhtml deleted file mode 100644 index 3204d5fbc..000000000 --- a/app/views/layouts/_projects_menu.rhtml +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/app/views/layouts/base.rhtml b/app/views/layouts/base.rhtml index 1371d784d..12265d7ce 100644 --- a/app/views/layouts/base.rhtml +++ b/app/views/layouts/base.rhtml @@ -5,97 +5,76 @@ - <%= stylesheet_link_tag "application" %> <%= stylesheet_link_tag "print", :media => "print" %> <%= javascript_include_tag :defaults %> -<%= javascript_include_tag 'menu' %> <%= stylesheet_link_tag 'jstoolbar' %> + + <%= yield :header_tags %> - -
- -
<%=l(:field_status)%> :<%= @issue.status.name %>
+
- + <% 1.upto(7) do |d| %> <% end %> diff --git a/app/views/news/_news.rhtml b/app/views/news/_news.rhtml index 17a410102..e48b81ac3 100644 --- a/app/views/news/_news.rhtml +++ b/app/views/news/_news.rhtml @@ -1,5 +1,6 @@

<%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless @project %> -<%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
-<% unless news.summary.blank? %><%=h news.summary %>
<% end %> -<%= authoring news.created_on, news.author %> -<%= "
#{news.comments_count} #{lwr(:label_comment, news.comments_count).downcase}" if news.comments_count > 0 %>

+<%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %> +<%= "(#{news.comments_count} #{lwr(:label_comment, news.comments_count).downcase})" if news.comments_count > 0 %> +
+<% unless news.summary.blank? %><%=h news.summary %>
<% end %> +<%= authoring news.created_on, news.author %>

diff --git a/app/views/projects/activity.rhtml b/app/views/projects/activity.rhtml index fd731cd8f..b4c1d9ae8 100644 --- a/app/views/projects/activity.rhtml +++ b/app/views/projects/activity.rhtml @@ -1,19 +1,5 @@

<%=l(:label_activity)%>: <%= "#{month_name(@month).downcase} #{@year}" %>

-
-
-<% form_tag do %> -

<%= select_month(@month, :prefix => "month", :discard_type => true) %> -<%= select_year(@year, :prefix => "year", :discard_type => true) %>

- -

<% @event_types.each do |t| %> -<%= check_box_tag "show_#{t}", 1, @scope.include?(t) %> <%= l("label_#{t.singularize}_plural")%>
-<% end %>

- -

<%= submit_tag l(:button_apply), :class => 'button-small' %>

-<% end %> -
- <% @events_by_day.keys.sort {|x,y| y <=> x }.each do |day| %>

<%= day_name(day.cwday) %> <%= day.day %>

    @@ -51,7 +37,10 @@ <% end %>
<% end %> -<% if @events_by_day.empty? %>

<%= l(:label_no_data) %>

<% end %> + +<% if @events_by_day.empty? %> +

<%= l(:label_no_data) %>

+<% end %>
<% prev_params = params.clone.update :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1) %> @@ -65,8 +54,17 @@  

-
<% content_for :header_tags do %> <%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :year => nil, :month => nil, :key => User.current.rss_key})) %> <% end %> + +<% content_for :sidebar do %> +<% form_tag do %> +

<%= l(:label_activity) %>

+

<% @event_types.each do |t| %> +<%= check_box_tag "show_#{t}", 1, @scope.include?(t) %> <%= l("label_#{t.singularize}_plural")%>
+<% end %>

+

<%= submit_tag l(:button_apply), :class => 'button-small' %>

+<% end %> +<% end %> diff --git a/app/views/projects/add_issue.rhtml b/app/views/projects/add_issue.rhtml index e19d00826..0076d61b7 100644 --- a/app/views/projects/add_issue.rhtml +++ b/app/views/projects/add_issue.rhtml @@ -23,7 +23,7 @@

<%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %>

-
+

<%= f.text_field :subject, :size => 80, :required => true %>

<%= f.text_area :description, :cols => 60, :rows => 10, :required => true, :class => 'wiki-edit' %>

@@ -36,7 +36,6 @@

<%= file_field_tag 'attachments[]', :size => 30 %> (<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)

-
diff --git a/app/views/projects/calendar.rhtml b/app/views/projects/calendar.rhtml index 6fb8a1365..b09d059a9 100644 --- a/app/views/projects/calendar.rhtml +++ b/app/views/projects/calendar.rhtml @@ -1,49 +1,24 @@ <% cache(:year => @year, :month => @month, :tracker_ids => @selected_tracker_ids, :subprojects => params[:with_subprojects], :lang => current_language) do %> -

<%= l(:label_calendar) %>

+

<%= l(:label_calendar) %>: <%= "#{month_name(@month).downcase} #{@year}" %>

-<% form_tag do %>
<%= day_name(d) %>
- - - - - - + %> +
+
<%= link_to_remote ('« ' + (@month==1 ? "#{month_name(12)} #{@year-1}" : "#{month_name(@month-1)}")), {:update => "content", :url => { :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1), :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects] }}, {:href => url_for(:action => 'calendar', :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1), :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects])} %> - - <%= select_month(@month, :prefix => "month", :discard_type => true) %> - <%= select_year(@year, :prefix => "year", :discard_type => true) %> - <%= submit_tag l(:button_submit), :class => "button-small" %> - - <%= toggle_link l(:label_options), "trackerselect" %> - - + <%= link_to_remote ((@month==12 ? "#{month_name(1)} #{@year+1}" : "#{month_name(@month+1)}") + ' »'), {:update => "content", :url => { :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1), :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects] }}, {:href => url_for(:action => 'calendar', :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1), :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects])} - %>  -
-<% end %> - +
- + <% 1.upto(7) do |d| %> <% end %> @@ -56,7 +31,7 @@ while day <= @date_to if day.cwday == 1 %> <% end %> - - + @@ -85,3 +83,7 @@ <% end %> <% end %> <% end %> + +<% content_for :sidebar do %> + <%= render :partial => 'issues/sidebar' %> +<% end %> diff --git a/app/views/projects/list_news.rhtml b/app/views/projects/list_news.rhtml index 4ab086d55..82d63a280 100644 --- a/app/views/projects/list_news.rhtml +++ b/app/views/projects/list_news.rhtml @@ -4,7 +4,11 @@

<%=l(:label_news_plural)%>

-<% if @news.empty? %>

<%= l(:label_no_data) %>

<% end %> +<% if @news.empty? %> +

<%= l(:label_no_data) %>

+<% end %> + + <%= render :partial => 'news/news', :collection => @news %> <%= pagination_links_full @news_pages %> diff --git a/app/views/projects/roadmap.rhtml b/app/views/projects/roadmap.rhtml index 1011bcbff..c370e5a9e 100644 --- a/app/views/projects/roadmap.rhtml +++ b/app/views/projects/roadmap.rhtml @@ -1,18 +1,8 @@

<%=l(:label_roadmap)%>

-
-<% form_tag do %> -

<%=l(:label_tracker_plural)%>
-<% @trackers.each do |tracker| %> - <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> - <%= tracker.name %>
-<% end %>

-

-

<%= submit_tag l(:button_apply), :class => 'button-small' %>

+<% if @versions.empty? %> +

<%= l(:label_no_data) %>

<% end %> -
- -<% if @versions.empty? %>

<%= l(:label_no_data) %>

<% end %> <% @versions.each do |version| %>

<%= version.name %>

@@ -63,3 +53,21 @@ <% end %> <% end %> + +<% content_for :sidebar do %> +<% form_tag do %> +

<%= l(:label_roadmap) %>

+<% @trackers.each do |tracker| %> + <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> + <%= tracker.name %>
+<% end %> +
+
<%= day_name(d) %><%= day.cweek %>" style="width:14%; <%= Date.today == day ? 'background:#FDFED0;' : '' %>"> + <%= Date.today == day ? 'today' : '' %>" style="width:14%;">

<%= day==Date.today ? "#{day.day}" : day.day %>

<% ((@ending_events_by_days[day] || []) + (@starting_events_by_days[day] || [])).uniq.each do |i| %> <% if i.is_a? Issue %> @@ -68,7 +43,11 @@ while day <= @date_to elsif day == i.due_date image_tag('arrow_to.png') end %> - <%= link_to_issue i %><%= " (#{i.project.name})" unless @project && @project == i.project %>: <%=h i.subject.sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)') %> + + <%= h("#{i.project.name} -") unless @project && @project == i.project %> + <%= link_to_issue i %>: + <%= h(truncate(i.subject, 30)) %> + <%= render :partial => "issues/tooltip", :locals => { :issue => i }%> @@ -90,3 +69,20 @@ end %> <%= image_tag 'arrow_to.png' %>  <%= l(:text_tip_task_end_day) %>
<%= image_tag 'arrow_bw.png' %>  <%= l(:text_tip_task_begin_end_day) %>
<% end %> + +<% content_for :sidebar do %> +

<%= l(:label_calendar) %>

+ + <% form_tag() do %> +

<%= select_month(@month, :prefix => "month", :discard_type => true) %> + <%= select_year(@year, :prefix => "year", :discard_type => true) %>

+ + <% @trackers.each do |tracker| %> + <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> <%= tracker.name %>
+ <% end %> + <% if @project.active_children.any? %> +
<%= check_box_tag "with_subprojects", 1, params[:with_subprojects] %> <%=l(:label_subproject_plural)%> + <% end %> +

<%= submit_tag l(:button_apply), :class => 'button-small' %>

+ <% end %> +<% end %> diff --git a/app/views/projects/changelog.rhtml b/app/views/projects/changelog.rhtml index 91c5b84ec..61ca54a24 100644 --- a/app/views/projects/changelog.rhtml +++ b/app/views/projects/changelog.rhtml @@ -1,17 +1,8 @@

<%=l(:label_change_log)%>

-
-<% form_tag do %> -

<%=l(:label_tracker_plural)%>
-<% @trackers.each do |tracker| %> - <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> - <%= tracker.name %>
-<% end %>

-

<%= submit_tag l(:button_apply), :class => 'button-small' %>

+<% if @versions.empty? %> +

<%= l(:label_no_data) %>

<% end %> -
- -<% if @versions.empty? %>

<%= l(:label_no_data) %>

<% end %> <% @versions.each do |version| %>

<%= version.name %>

@@ -33,3 +24,19 @@ <% end %> <% end %> + +<% content_for :sidebar do %> +<% form_tag do %> +

<%= l(:label_change_log) %>

+<% @trackers.each do |tracker| %> + <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> + <%= tracker.name %>
+<% end %> +

<%= submit_tag l(:button_apply), :class => 'button-small' %>

+<% end %> + +

<%= l(:label_version_plural) %>

+<% @versions.each do |version| %> +<%= link_to version.name, :anchor => version.name %>
+<% end %> +<% end %> diff --git a/app/views/projects/gantt.rhtml b/app/views/projects/gantt.rhtml index 1de8242ea..dbf95d345 100644 --- a/app/views/projects/gantt.rhtml +++ b/app/views/projects/gantt.rhtml @@ -23,14 +23,11 @@ t_height = g_height + headers_height %>
-<%= l(:label_export_to) %> -<%= link_to 'PDF', {:zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects], :format => 'pdf'}, :class => 'icon icon-pdf' %> -<%= link_to 'PNG', {:zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects], :format => 'png'}, :class => 'icon icon-image' if respond_to?('gantt_image') %>

<%= l(:label_gantt) %>

-<% form_tag do %> +<% form_tag(params.merge(:month => nil, :year => nil, :years => nil)) do %> - +
@@ -41,21 +38,7 @@ t_height = g_height + headers_height <%= hidden_field_tag 'zoom', @zoom %> <%= submit_tag l(:button_submit), :class => "button-small" %> - <%= toggle_link l(:label_options), "trackerselect" %> - - <%= if @zoom < 4 link_to image_tag('zoom_in.png'), {:zoom => (@zoom+1), :year => @year_from, :month => @month_from, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects]} @@ -244,3 +227,21 @@ if Date.today >= @date_from and Date.today <= @date_to %> <%= link_to (l(:label_next) + ' »'), :year => (@date_from >> @months).year, :month => (@date_from >> @months).month, :zoom => @zoom, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects] %>
+ +
<%= l(:label_export_to) %> +<%= link_to 'PDF', {:zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects], :format => 'pdf'}, :class => 'icon icon-pdf' %> +<%= link_to 'PNG', {:zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects], :format => 'png'}, :class => 'icon icon-image' if respond_to?('gantt_image') %> +
+ +<% content_for :sidebar do %> +

<%= l(:label_gantt) %>

+ <% form_tag(params.merge(:tracker_ids => nil, :with_subprojects => nil)) do %> + <% @trackers.each do |tracker| %> + <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> <%= tracker.name %>
+ <% end %> + <% if @project.active_children.any? %> +
<%= check_box_tag "with_subprojects", 1, params[:with_subprojects] %> <%=l(:label_subproject_plural)%> + <% end %> +

<%= submit_tag l(:button_apply), :class => 'button-small' %>

+ <% end %> +<% end %> diff --git a/app/views/projects/list.rhtml b/app/views/projects/list.rhtml index 4474eef9f..51c1b544a 100644 --- a/app/views/projects/list.rhtml +++ b/app/views/projects/list.rhtml @@ -1,18 +1,15 @@

<%=l(:label_project_plural)%>

-
<% @project_tree.keys.sort.each do |project| %> -
<%= link_to project.name, {:action => 'show', :id => project}, :class => (User.current.member_of?(project) ? "icon icon-fav" : "") %> -
<%= textilizable(project.description, :project => project) %> +

<%= link_to project.name, {:action => 'show', :id => project}, :class => (User.current.member_of?(project) ? "icon icon-fav" : "") %>

+<%= textilizable(project.description, :project => project) %> <% if @project_tree[project].any? %> - <%= l(:label_subproject_plural) %>: +

<%= l(:label_subproject_plural) %>: <%= @project_tree[project].sort.collect {|subproject| - link_to(subproject.name, {:action => 'show', :id => subproject}, :class => (User.current.member_of?(subproject) ? "icon icon-fav" : ""))}.join(', ') %> + link_to(subproject.name, {:action => 'show', :id => subproject}, :class => (User.current.member_of?(subproject) ? "icon icon-fav" : ""))}.join(', ') %>

<% end %> -
<% end %> -
<% if User.current.logged? %>
diff --git a/app/views/projects/list_documents.rhtml b/app/views/projects/list_documents.rhtml index b692808b7..9575405f4 100644 --- a/app/views/projects/list_documents.rhtml +++ b/app/views/projects/list_documents.rhtml @@ -4,7 +4,9 @@

<%=l(:label_document_plural)%>

-<% if @documents.empty? %>

<%= l(:label_no_data) %>

<% end %> +<% if @documents.empty? %> +

<%= l(:label_no_data) %>

+<% end %> <% documents = @documents.group_by {|d| d.category } %> <% documents.each do |category, docs| %> diff --git a/app/views/projects/list_issues.rhtml b/app/views/projects/list_issues.rhtml index 8d6a91bcc..e17e8bc37 100644 --- a/app/views/projects/list_issues.rhtml +++ b/app/views/projects/list_issues.rhtml @@ -1,8 +1,4 @@ <% if @query.new_record? %> -
- <%= link_to l(:label_query_plural), :controller => 'queries', :project_id => @project %> - <% if authorize_for('projects', 'add_issue') %>| <%= l(:label_issue_new) %>: <%= new_issue_selector %><% end %> -

<%=l(:label_issue_plural)%>

<% set_html_title l(:label_issue_plural) %> @@ -33,17 +29,19 @@
<% else %>
- <%= link_to l(:label_query_plural), {:controller => 'queries', :project_id => @project} %> | - <%= link_to l(:label_issue_view_all), {:controller => 'projects', :action => 'list_issues', :id => @project, :set_filter => 1} %> - <% if authorize_for('projects', 'add_issue') %>| <%= l(:label_issue_new) %>: <%= new_issue_selector %><% end %> -
+ <% if @query.editable_by?(User.current) %> + <%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %> + <%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %> + <% end %> +
+

<%= @query.name %>

<% set_html_title @query.name %> <% end %> <%= error_messages_for 'query' %> <% if @query.valid? %> <% if @issues.empty? %> -

<%= l(:label_no_data) %>

+

<%= l(:label_no_data) %>

<% else %>   <% form_tag({:controller => 'projects', :action => 'move_issues', :id => @project}, :id => 'issues_form' ) do %> @@ -64,7 +62,7 @@
<%= check_box_tag "issue_ids[]", issue.id, false, :id => "issue_#{issue.id}" %> <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %> <%= issue.tracker.name %>
<%= issue.status.name %>
<%= issue.status.name %> <%= issue.priority.name %> <%= "#{issue.project.name} - " unless @project && @project == issue.project %><%= link_to h(issue.subject), :controller => 'issues', :action => 'show', :id => issue %> <%= issue.assigned_to.name if issue.assigned_to %>
@@ -14,11 +15,14 @@ <%= link_to image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), {:controller => 'boards', :action => 'edit', :project_id => @project, :id => board, :position => 'lowest'}, :method => :post, :title => l(:label_sort_lowest) %> <% end %> - - + + <% end %>
<%= l(:label_board) %><%= l(:field_description) %>
<%= link_to_if_authorized l(:button_edit), {:controller => 'boards', :action => 'edit', :project_id => @project, :id => board}, :class => 'icon icon-edit' %><%= link_to_if_authorized l(:button_delete), {:controller => 'boards', :action => 'destroy', :project_id => @project, :id => board}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %><%= link_to_if_authorized l(:button_edit), {:controller => 'boards', :action => 'edit', :project_id => @project, :id => board}, :class => 'icon icon-edit' %><%= link_to_if_authorized l(:button_delete), {:controller => 'boards', :action => 'destroy', :project_id => @project, :id => board}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
-  +<% else %> +

<%= l(:label_no_data) %>

+<% end %> +

<%= link_to_if_authorized l(:label_board_new), {:controller => 'boards', :action => 'new', :project_id => @project} %>

diff --git a/app/views/projects/settings/_issue_categories.rhtml b/app/views/projects/settings/_issue_categories.rhtml index c1e77e9cc..6d9dc0d55 100644 --- a/app/views/projects/settings/_issue_categories.rhtml +++ b/app/views/projects/settings/_issue_categories.rhtml @@ -1,3 +1,4 @@ +<% if @project.issue_categories.any? %> @@ -11,12 +12,15 @@ - - + + <% end %> <% end %>
<%= l(:label_issue_category) %>
<%=h(category.name) %> <%=h(category.assigned_to.name) if category.assigned_to %><%= link_to_if_authorized l(:button_edit), { :controller => 'issue_categories', :action => 'edit', :id => category }, :class => 'icon icon-edit' %><%= link_to_if_authorized l(:button_delete), {:controller => 'issue_categories', :action => 'destroy', :id => category}, :method => :post, :class => 'icon icon-del' %><%= link_to_if_authorized l(:button_edit), { :controller => 'issue_categories', :action => 'edit', :id => category }, :class => 'icon icon-edit' %><%= link_to_if_authorized l(:button_delete), {:controller => 'issue_categories', :action => 'destroy', :id => category}, :method => :post, :class => 'icon icon-del' %>
-  +<% else %> +

<%= l(:label_no_data) %>

+<% end %> +

<%= link_to_if_authorized l(:label_issue_category_new), :controller => 'projects', :action => 'add_issue_category', :id => @project %>

diff --git a/app/views/projects/settings/_members.rhtml b/app/views/projects/settings/_members.rhtml index 1cd69bdfe..55dfde1ac 100644 --- a/app/views/projects/settings/_members.rhtml +++ b/app/views/projects/settings/_members.rhtml @@ -1,7 +1,10 @@ <%= error_messages_for 'member' %> <% roles = Role.find_all_givable %> <% users = User.find_active(:all) - @project.users %> - +<% # members sorted by role position + members = @project.members.find(:all, :include => [:role, :user]).sort{|x,y| x.role.position <=> y.role.position} %> + +<% if members.any? %> @@ -9,7 +12,7 @@ - <% @project.members.find(:all, :include => [:role, :user]).sort{|x,y| x.role.position <=> y.role.position}.each do |member| %> + <% members.each do |member| %> <% next if member.new_record? %> @@ -22,16 +25,18 @@ <% end %> <% end; reset_cycle %>
<%= l(:label_user) %>
<%= member.name %> - <%= link_to_remote l(:button_delete), { :url => {:controller => 'members', :action => 'destroy', :id => member}, + <%= link_to_remote l(:button_delete), { :url => {:controller => 'members', :action => 'destroy', :id => member}, :method => :post }, :title => l(:button_delete), - :class => 'icon icon-del' %> + :class => 'icon icon-del' %>
-  +<% else %> +

<%= l(:label_no_data) %>

+<% end %> <% if authorize_for('members', 'new') && !users.empty? %> <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post) do |f| %> diff --git a/app/views/projects/settings/_modules.rhtml b/app/views/projects/settings/_modules.rhtml index 9916225b0..2ecdaf7e8 100644 --- a/app/views/projects/settings/_modules.rhtml +++ b/app/views/projects/settings/_modules.rhtml @@ -3,6 +3,8 @@ :html => {:id => 'modules-form'} do |f| %>
+Select modules to enable for this project: +
<% Redmine::AccessControl.available_project_modules.each do |m| %>

<% end %> diff --git a/app/views/projects/settings/_versions.rhtml b/app/views/projects/settings/_versions.rhtml index a710a847d..63c408b0d 100644 --- a/app/views/projects/settings/_versions.rhtml +++ b/app/views/projects/settings/_versions.rhtml @@ -1,3 +1,4 @@ +<% if @project.versions.any? %> @@ -14,12 +15,15 @@ - - + + <% end; reset_cycle %>
<%= l(:label_version) %><%= format_date(version.effective_date) %> <%=h version.description %> <%= link_to(version.wiki_page_title, :controller => 'wiki', :page => Wiki.titleize(version.wiki_page_title)) unless version.wiki_page_title.blank? || @project.wiki.nil? %><%= link_to_if_authorized l(:button_edit), { :controller => 'versions', :action => 'edit', :id => version }, :class => 'icon icon-edit' %><%= link_to_if_authorized l(:button_delete), {:controller => 'versions', :action => 'destroy', :id => version}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %><%= link_to_if_authorized l(:button_edit), { :controller => 'versions', :action => 'edit', :id => version }, :class => 'icon icon-edit' %><%= link_to_if_authorized l(:button_delete), {:controller => 'versions', :action => 'destroy', :id => version}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
-  +<% else %> +

<%= l(:label_no_data) %>

+<% end %> +

<%= link_to_if_authorized l(:label_version_new), :controller => 'projects', :action => 'add_version', :id => @project %>

diff --git a/app/views/projects/show.rhtml b/app/views/projects/show.rhtml index e5234f2f7..8d6c0c9a4 100644 --- a/app/views/projects/show.rhtml +++ b/app/views/projects/show.rhtml @@ -1,15 +1,13 @@ -
-<%= link_to l(:label_feed_plural), {:action => 'feeds', :id => @project}, :class => 'icon icon-feed' %> -
-

<%=l(:label_overview)%>

<%= textilizable @project.description %>
    <% unless @project.homepage.blank? %>
  • <%=l(:field_homepage)%>: <%= auto_link @project.homepage %>
  • <% end %> -
  • <%=l(:field_created_on)%>: <%= format_date(@project.created_on) %>
  • - <% unless @project.parent.nil? %> + <% if @subprojects.any? %> +
  • <%=l(:label_subproject_plural)%>: <%= @subprojects.collect{|p| link_to(p.name, :action => 'show', :id => p)}.join(", ") %>
  • + <% end %> + <% if @project.parent %>
  • <%=l(:field_parent)%>: <%= link_to @project.parent.name, :controller => 'projects', :action => 'show', :id => @project.parent %>
  • <% end %> <% for custom_value in @custom_values %> @@ -20,8 +18,7 @@
<% if User.current.allowed_to?(:view_issues, @project) %> -
-
<% if authorize_for('projects', 'add_issue') %><%= l(:label_issue_new) %>: <%= new_issue_selector %><% end %>
+

<%=l(:label_issue_tracking)%>

    <% for tracker in @trackers %> @@ -32,35 +29,53 @@ <%= l(:label_on) %> <%= @total_issues_by_tracker[tracker] || 0 %> <% end %>
-

<%= link_to l(:label_issue_view_all), :controller => 'projects', :action => 'list_issues', :id => @project, :set_filter => 1 %>

+

<%= link_to l(:label_issue_view_all), :controller => 'projects', :action => 'list_issues', :id => @project, :set_filter => 1 %>

<% end %>
+ <% if @members_by_role.any? %>

<%=l(:label_member_plural)%>

- <% @members_by_role.keys.sort.each do |role| %> - <%= role.name %>: <%= @members_by_role[role].collect(&:user).sort.collect{|u| link_to_user u}.join(", ") %>
- <% end %> -
- - <% if @subprojects.any? %> -
-

<%=l(:label_subproject_plural)%>

- <%= @subprojects.collect{|p| link_to(p.name, :action => 'show', :id => p)}.join(", ") %> +

<% @members_by_role.keys.sort.each do |role| %> + <%= role.name %>: + <%= @members_by_role[role].collect(&:user).sort.collect{|u| link_to_user u}.join(", ") %> +
+ <% end %>

- <% end %> - + <% end %> + <% if @news.any? && authorize_for('projects', 'list_news') %>

<%=l(:label_news_latest)%>

<%= render :partial => 'news/news', :collection => @news %> -

<%= link_to l(:label_news_view_all), :controller => 'projects', :action => 'list_news', :id => @project %>

+

<%= link_to l(:label_news_view_all), :controller => 'projects', :action => 'list_news', :id => @project %>

<% end %>
+<% content_for :sidebar do %> + <% if authorize_for('projects', 'add_issue') %> +

<%= l(:label_issue_new) %>

+ <%= l(:label_tracker) %>: <%= new_issue_selector %> + <% end %> + +

Planning

+

<%= link_to_if_authorized l(:label_calendar), :action => 'calendar', :id => @project %> | + <%= link_to_if_authorized l(:label_gantt), :action => 'gantt', :id => @project %>

+ + <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %> +

<%= l(:label_spent_time) %>

+

<%= lwr(:label_f_hour, @total_hours) %>

+

<%= link_to(l(:label_details), {:controller => 'timelog', :action => 'details', :project_id => @project}) %> | + <%= link_to(l(:label_report), {:controller => 'timelog', :action => 'report', :project_id => @project}) %>

+ <% end %> + +
+

<%= link_to l(:label_feed_plural), {:action => 'feeds', :id => @project}, :class => 'icon icon-feed' %>

+<% end %> + <% content_for :header_tags do %> <%= auto_discovery_link_tag(:rss, {:controller => 'feeds', :action => 'issues', :project_id => @project, :key => @key}, {:title => l(:label_reported_issues)}) %> <%= auto_discovery_link_tag(:atom, {:controller => 'feeds', :action => 'issues', :project_id => @project, :key => @key, :format => 'atom'}, {:title => l(:label_reported_issues)}) %> diff --git a/app/views/reports/_details.rhtml b/app/views/reports/_details.rhtml index e16095e2b..af8807fbd 100644 --- a/app/views/reports/_details.rhtml +++ b/app/views/reports/_details.rhtml @@ -6,7 +6,7 @@ <% for status in @statuses %> -
<%= status.name %> +<%= status.name %> <% end %> <%=l(:label_open_issues_plural)%> <%=l(:label_closed_issues_plural)%> diff --git a/app/views/reports/issue_report.rhtml b/app/views/reports/issue_report.rhtml index 33f5e4a4d..0eaba58dc 100644 --- a/app/views/reports/issue_report.rhtml +++ b/app/views/reports/issue_report.rhtml @@ -1,11 +1,3 @@ -<% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %> -
-<%= l(:label_spent_time) %>: <%= lwr(:label_f_hour, @total_hours) %>
-<%= link_to(l(:label_details), {:controller => 'timelog', :action => 'details', :project_id => @project}) %> | -<%= link_to(l(:label_report), {:controller => 'timelog', :action => 'report', :project_id => @project}) %> -
-<% end %> -

<%=l(:label_report_plural)%>

diff --git a/app/views/repositories/browse.rhtml b/app/views/repositories/browse.rhtml index dffbe5458..0ba24fd86 100644 --- a/app/views/repositories/browse.rhtml +++ b/app/views/repositories/browse.rhtml @@ -1,7 +1,6 @@
<% form_tag do %> -

<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 5 %> -<%= submit_tag 'OK' %>

+<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 5 %> <% end %>
diff --git a/app/views/repositories/diff.rhtml b/app/views/repositories/diff.rhtml index 86bde671f..e982b6e13 100644 --- a/app/views/repositories/diff.rhtml +++ b/app/views/repositories/diff.rhtml @@ -11,13 +11,14 @@ <%= select_tag 'type', options_for_select([[l(:label_diff_inline), "inline"], [l(:label_diff_side_by_side), "sbs"]], params[:type]), :onchange => "if (this.value != '') {this.form.submit()}" %>

<% end %> +
<% cache(@cache_key) do %> <% @diff.each do |table_file| %> <% if @diff_type == 'sbs' %> - +
- @@ -47,10 +48,10 @@
+ <%= table_file.file_name %>
<% else %> - +
- @@ -85,6 +86,7 @@ <% end %> <% end %> <% end %> + <% content_for :header_tags do %> <%= stylesheet_link_tag "scm" %> diff --git a/app/views/repositories/entry.rhtml b/app/views/repositories/entry.rhtml index 5ced710f5..7d8cbb318 100644 --- a/app/views/repositories/entry.rhtml +++ b/app/views/repositories/entry.rhtml @@ -1,9 +1,10 @@

<%= render :partial => 'navigation', :locals => { :path => @path, :kind => 'file', :revision => @rev } %>

-
+ <%= table_file.file_name %>
+
+
- + @@ -17,6 +18,7 @@ <% end %>
<%= @path %><%= @path %>
+
<% content_for :header_tags do %> <%= stylesheet_link_tag "scm" %> diff --git a/app/views/repositories/revision.rhtml b/app/views/repositories/revision.rhtml index b484becce..32f8583a7 100644 --- a/app/views/repositories/revision.rhtml +++ b/app/views/repositories/revision.rhtml @@ -1,7 +1,7 @@
<% form_tag do %> -

<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 5 %> -<%= submit_tag 'OK' %>

+<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 5 %> +<%= submit_tag 'OK' %> <% end %>
diff --git a/app/views/roles/_form.rhtml b/app/views/roles/_form.rhtml index 6213aa2fb..73299293e 100644 --- a/app/views/roles/_form.rhtml +++ b/app/views/roles/_form.rhtml @@ -5,9 +5,9 @@

<%= f.check_box :assignable %>

-
-

<%= l(:label_permissions) %>

+

<%= l(:label_permissions) %>

+
<% perms_by_module = @permissions.group_by {|p| p.project_module.to_s} %> <% perms_by_module.keys.sort.each do |mod| %>
<%= mod.blank? ? l(:label_project) : mod.humanize %> diff --git a/app/views/roles/list.rhtml b/app/views/roles/list.rhtml index 14ae260aa..bdea2475f 100644 --- a/app/views/roles/list.rhtml +++ b/app/views/roles/list.rhtml @@ -23,7 +23,7 @@ <% end %> - <%= button_to(l(:button_delete), { :action => 'destroy', :id => role }, :confirm => l(:text_are_you_sure), :class => "button-small") unless role.builtin? %> + <%= button_to(l(:button_delete), { :action => 'destroy', :id => role }, :confirm => l(:text_are_you_sure), :class => "button-small", :disabled => role.builtin? ) %> <% end %> diff --git a/app/views/roles/workflow.rhtml b/app/views/roles/workflow.rhtml index 5f1d8f21a..2bc2abd51 100644 --- a/app/views/roles/workflow.rhtml +++ b/app/views/roles/workflow.rhtml @@ -3,29 +3,24 @@

<%=l(:text_workflow_edit)%>:

<% form_tag({:action => 'workflow'}, :method => 'get') do %> -
-


+

-
+ -
-


+ - <%= submit_tag l(:button_edit) %>

-
<% end %> <% unless @tracker.nil? or @role.nil? %> +<% form_tag({:action => 'workflow', :role_id => @role, :tracker_id => @tracker }, :id => 'workflow_form' ) do %>
- <% form_tag({:action => 'workflow', :role_id => @role, :tracker_id => @tracker }, :id => 'workflow_form' ) do %> @@ -40,7 +35,7 @@ <% for old_status in @statuses %> - + <% for new_status in @statuses %> <% end %>
<%=l(:label_current_status)%>
<%= old_status.name %>
<%= old_status.name %> @@ -55,14 +50,9 @@
-
-

-<%=l(:button_check_all)%> | -<%=l(:button_uncheck_all)%> -

-
+

<%= check_all_links 'workflow_form' %>

+
<%= submit_tag l(:button_save) %> <% end %> <% end %> -
\ No newline at end of file diff --git a/app/views/welcome/index.rhtml b/app/views/welcome/index.rhtml index e5e43f722..4b9b59096 100644 --- a/app/views/welcome/index.rhtml +++ b/app/views/welcome/index.rhtml @@ -14,7 +14,7 @@
    <% for project in @projects %>
  • - <%= link_to project.name, :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>)
    + <%= link_to project.name, :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>) <%= textilizable project.description, :project => project %>
  • <% end %> diff --git a/app/views/wiki/_sidebar.rhtml b/app/views/wiki/_sidebar.rhtml new file mode 100644 index 000000000..b45aa7233 --- /dev/null +++ b/app/views/wiki/_sidebar.rhtml @@ -0,0 +1,4 @@ +

    <%= l(:label_wiki) %>

    + +<%= link_to l(:label_page_index), {:action => 'special', :page => 'Page_index'} %> + diff --git a/app/views/wiki/show.rhtml b/app/views/wiki/show.rhtml index de28ff1e2..96c2fca6d 100644 --- a/app/views/wiki/show.rhtml +++ b/app/views/wiki/show.rhtml @@ -4,7 +4,6 @@ <%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :page => @page.title}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %> <%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :page => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %> <%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %> -<%= link_to(l(:label_page_index), {:action => 'special', :page => 'Page_index'}, :class => 'icon icon-index') %>
<% if @content.version != @page.content.version %> @@ -43,4 +42,8 @@ <%= stylesheet_link_tag 'scm' %> <% end %> +<% content_for :sidebar do %> + <%= render :partial => 'sidebar' %> +<% end %> + <% set_html_title @page.pretty_title %> diff --git a/lang/bg.yml b/lang/bg.yml index 51f98a058..d557f0f6b 100644 --- a/lang/bg.yml +++ b/lang/bg.yml @@ -419,6 +419,7 @@ label_feeds_access_key_created_on: RSS access key created %s ago label_module_plural: Modules label_added_time_by: Added by %s %s ago label_updated_time: Updated %s ago +label_jump_to_a_project: Jump to a project... button_login: Вход button_submit: Изпращане diff --git a/lang/de.yml b/lang/de.yml index 3fff11c74..feb004142 100644 --- a/lang/de.yml +++ b/lang/de.yml @@ -419,6 +419,7 @@ label_feeds_access_key_created_on: RSS-Zugriffsschlüssel vor %s erstellt label_module_plural: Module label_added_time_by: Von %s vor %s hinzugefügt label_updated_time: Vor %s aktualisiert +label_jump_to_a_project: Jump to a project... button_login: Anmelden button_submit: OK diff --git a/lang/en.yml b/lang/en.yml index b8d0225a2..fb7cfb403 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -228,8 +228,8 @@ label_my_page: My page label_my_account: My account label_my_projects: My projects label_administration: Administration -label_login: Login -label_logout: Logout +label_login: Sign in +label_logout: Sign out label_help: Help label_reported_issues: Reported issues label_assigned_to_me_issues: Issues assigned to me @@ -419,6 +419,7 @@ label_feeds_access_key_created_on: RSS access key created %s ago label_module_plural: Modules label_added_time_by: Added by %s %s ago label_updated_time: Updated %s ago +label_jump_to_a_project: Jump to a project... button_login: Login button_submit: Submit diff --git a/lang/es.yml b/lang/es.yml index 74e0108e5..646b35395 100644 --- a/lang/es.yml +++ b/lang/es.yml @@ -419,6 +419,7 @@ label_feeds_access_key_created_on: RSS access key created %s ago label_module_plural: Modules label_added_time_by: Added by %s %s ago label_updated_time: Updated %s ago +label_jump_to_a_project: Jump to a project... button_login: Conexión button_submit: Someter diff --git a/lang/fr.yml b/lang/fr.yml index c35ce3464..d98353ef3 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -419,6 +419,7 @@ label_feeds_access_key_created_on: Clé d'accès RSS créée il y a %s label_module_plural: Modules label_added_time_by: Ajouté par %s il y a %s label_updated_time: Mis à jour il y a %s +label_jump_to_a_project: Aller à un projet... button_login: Connexion button_submit: Soumettre diff --git a/lang/it.yml b/lang/it.yml index 75311d4e7..b1d8c85a9 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -419,6 +419,7 @@ label_feeds_access_key_created_on: RSS access key created %s ago label_module_plural: Modules label_added_time_by: Added by %s %s ago label_updated_time: Updated %s ago +label_jump_to_a_project: Jump to a project... button_login: Login button_submit: Invia diff --git a/lang/ja.yml b/lang/ja.yml index 1573049e0..f4f393760 100644 --- a/lang/ja.yml +++ b/lang/ja.yml @@ -420,6 +420,7 @@ label_feeds_access_key_created_on: RSS access key created %s ago label_module_plural: Modules label_added_time_by: Added by %s %s ago label_updated_time: Updated %s ago +label_jump_to_a_project: Jump to a project... button_login: ログイン button_submit: 変更 diff --git a/lang/nl.yml b/lang/nl.yml index 411233909..61e2421a0 100644 --- a/lang/nl.yml +++ b/lang/nl.yml @@ -419,6 +419,7 @@ label_feeds_access_key_created_on: RSS access key created %s ago label_module_plural: Modules label_added_time_by: Added by %s %s ago label_updated_time: Updated %s ago +label_jump_to_a_project: Jump to a project... button_login: Inloggen button_submit: Toevoegen diff --git a/lang/pt-br.yml b/lang/pt-br.yml index db4529494..b4f7dd3d5 100644 --- a/lang/pt-br.yml +++ b/lang/pt-br.yml @@ -419,6 +419,7 @@ label_feeds_access_key_created_on: RSS access key created %s ago label_module_plural: Modules label_added_time_by: Added by %s %s ago label_updated_time: Updated %s ago +label_jump_to_a_project: Jump to a project... button_login: Login button_submit: Enviar diff --git a/lang/pt.yml b/lang/pt.yml index 7d7cedaf2..f1ba45f66 100644 --- a/lang/pt.yml +++ b/lang/pt.yml @@ -419,6 +419,7 @@ label_feeds_access_key_created_on: RSS access key created %s ago label_module_plural: Modules label_added_time_by: Added by %s %s ago label_updated_time: Updated %s ago +label_jump_to_a_project: Jump to a project... button_login: Login button_submit: Enviar diff --git a/lang/sv.yml b/lang/sv.yml index 61cd3c132..5973a09b0 100644 --- a/lang/sv.yml +++ b/lang/sv.yml @@ -419,6 +419,7 @@ label_feeds_access_key_created_on: RSS access key created %s ago label_module_plural: Modules label_added_time_by: Added by %s %s ago label_updated_time: Updated %s ago +label_jump_to_a_project: Jump to a project... button_login: Logga in button_submit: Skicka diff --git a/lang/zh.yml b/lang/zh.yml index f5cb1c599..5bcf0c292 100644 --- a/lang/zh.yml +++ b/lang/zh.yml @@ -421,6 +421,7 @@ label_feeds_access_key_created_on: RSS access key created %s ago label_module_plural: Modules label_added_time_by: Added by %s %s ago label_updated_time: Updated %s ago +label_jump_to_a_project: Jump to a project... button_login: 登录 button_submit: 提交 diff --git a/lib/redmine.rb b/lib/redmine.rb index a44a72ffe..3ec774928 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -89,19 +89,14 @@ end # Project menu configuration Redmine::MenuManager.map :project_menu do |menu| menu.push :label_overview, :controller => 'projects', :action => 'show' - menu.push :label_calendar, :controller => 'projects', :action => 'calendar' - menu.push :label_gantt, :controller => 'projects', :action => 'gantt' - menu.push :label_issue_plural, :controller => 'projects', :action => 'list_issues' - menu.push :label_report_plural, :controller => 'reports', :action => 'issue_report' menu.push :label_activity, :controller => 'projects', :action => 'activity' - menu.push :label_news_plural, :controller => 'projects', :action => 'list_news' - menu.push :label_change_log, :controller => 'projects', :action => 'changelog' menu.push :label_roadmap, :controller => 'projects', :action => 'roadmap' + menu.push :label_issue_plural, :controller => 'projects', :action => 'list_issues' + menu.push :label_news_plural, :controller => 'projects', :action => 'list_news' menu.push :label_document_plural, :controller => 'projects', :action => 'list_documents' menu.push :label_wiki, { :controller => 'wiki', :action => 'index', :page => nil }, :if => Proc.new { |p| p.wiki && !p.wiki.new_record? } menu.push :label_board_plural, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id, :if => Proc.new { |p| p.boards.any? } menu.push :label_attachment_plural, :controller => 'projects', :action => 'list_files' - menu.push :label_search, :controller => 'search', :action => 'index' menu.push :label_repository, { :controller => 'repositories', :action => 'show' }, :if => Proc.new { |p| p.repository && !p.repository.new_record? } menu.push :label_settings, :controller => 'projects', :action => 'settings' end diff --git a/public/images/contentbg.png b/public/images/contentbg.png new file mode 100644 index 000000000..eb6d75080 Binary files /dev/null and b/public/images/contentbg.png differ diff --git a/public/images/mainbg.png b/public/images/mainbg.png new file mode 100644 index 000000000..29713c3c1 Binary files /dev/null and b/public/images/mainbg.png differ diff --git a/public/images/note.png b/public/images/note.png new file mode 100644 index 000000000..256368397 Binary files /dev/null and b/public/images/note.png differ diff --git a/public/javascripts/menu.js b/public/javascripts/menu.js deleted file mode 100644 index 63e3fe66e..000000000 --- a/public/javascripts/menu.js +++ /dev/null @@ -1,556 +0,0 @@ -//***************************************************************************** -// Do not remove this notice. -// -// Copyright 2000-2004 by Mike Hall. -// See http://www.brainjar.com for terms of use. -//***************************************************************************** - -//---------------------------------------------------------------------------- -// Emulation de la fonction push pour IE5.0 -//---------------------------------------------------------------------------- -if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0;i-1 && ua.indexOf("Mac")>-1) { - this.isIE5mac = true; - this.version = ""; - return; - } - //-- fin ajout ci ---- - - s = "Opera"; - if ((i = ua.indexOf(s)) >= 0) { - this.isOP = true; - this.version = parseFloat(ua.substr(i + s.length)); - return; - } - - s = "Netscape6/"; - if ((i = ua.indexOf(s)) >= 0) { - this.isNS = true; - this.version = parseFloat(ua.substr(i + s.length)); - return; - } - - // Treat any other "Gecko" browser as Netscape 6.1. - - s = "Gecko"; - if ((i = ua.indexOf(s)) >= 0) { - this.isNS = true; - this.version = 6.1; - return; - } - - s = "MSIE"; - if ((i = ua.indexOf(s))) { - this.isIE = true; - this.version = parseFloat(ua.substr(i + s.length)); - return; - } -} - -var browser = new Browser(); - -//---------------------------------------------------------------------------- -// Code for handling the menu bar and active button. -//---------------------------------------------------------------------------- - -var activeButton = null; - - -function buttonClick(event, menuId) { - - var button; - - // Get the target button element. - - if (browser.isIE) - button = window.event.srcElement; - else - button = event.currentTarget; - - // Blur focus from the link to remove that annoying outline. - - button.blur(); - - // Associate the named menu to this button if not already done. - // Additionally, initialize menu display. - - if (button.menu == null) { - button.menu = document.getElementById(menuId); - if (button.menu.isInitialized == null) - menuInit(button.menu); - } - - // Set mouseout event handler for the button, if not already done. - - if (button.onmouseout == null) - button.onmouseout = buttonOrMenuMouseout; - - // Exit if this button is the currently active one. - - if (button == activeButton) - return false; - - // Reset the currently active button, if any. - - if (activeButton != null) - resetButton(activeButton); - - // Activate this button, unless it was the currently active one. - - if (button != activeButton) { - depressButton(button); - activeButton = button; - } - else - activeButton = null; - - return false; -} - -function buttonMouseover(event, menuId) { - - var button; -//-- debut ajout ci ---- - if (!browser.isIE5mac) { - //-- fin ajout ci ---- - -//-- debut ajout ci ---- - cicacheselect(); -//-- fin ajout ci ---- - - // Activates this button's menu if no other is currently active. - - if (activeButton == null) { - buttonClick(event, menuId); - return; - } - - // Find the target button element. - - if (browser.isIE) - button = window.event.srcElement; - else - button = event.currentTarget; - - // If any other button menu is active, make this one active instead. - - if (activeButton != null && activeButton != button) - buttonClick(event, menuId); - //-- debut ajout ci ---- - } - //-- fin ajout ci ---- - -} - -function depressButton(button) { - - var x, y; - - // Update the button's style class to make it look like it's - // depressed. - - button.className += " menuButtonActive"; - - // Set mouseout event handler for the button, if not already done. - - if (button.onmouseout == null) - button.onmouseout = buttonOrMenuMouseout; - if (button.menu.onmouseout == null) - button.menu.onmouseout = buttonOrMenuMouseout; - - // Position the associated drop down menu under the button and - // show it. - - x = getPageOffsetLeft(button); - y = getPageOffsetTop(button) + button.offsetHeight - 1; - - // For IE, adjust position. - - if (browser.isIE) { - x += button.offsetParent.clientLeft; - y += button.offsetParent.clientTop; - } - - button.menu.style.left = x + "px"; - button.menu.style.top = y + "px";0 - button.menu.style.visibility = "visible"; -} - -function resetButton(button) { - - // Restore the button's style class. - - removeClassName(button, "menuButtonActive"); - - // Hide the button's menu, first closing any sub menus. - - if (button.menu != null) { - closeSubMenu(button.menu); - button.menu.style.visibility = "hidden"; - } -} - -//---------------------------------------------------------------------------- -// Code to handle the menus and sub menus. -//---------------------------------------------------------------------------- - -function menuMouseover(event) { - - var menu; - //-- debut ajout ci ---- - if (!browser.isIE5mac) { - //-- fin ajout ci ---- -//-- debut ajout ci ---- - cicacheselect(); -//-- fin ajout ci ---- - - // Find the target menu element. - if (browser.isIE) - menu = getContainerWith(window.event.srcElement, "DIV", "menu"); - else - menu = event.currentTarget; - - // Close any active sub menu. - - if (menu.activeItem != null) - closeSubMenu(menu); - //-- debut ajout ci ---- - } - //-- fin ajout ci ---- -} - -function menuItemMouseover(event, menuId) { - - var item, menu, x, y; -//-- debut ajout ci ---- - cicacheselect(); -//-- fin ajout ci ---- - - // Find the target item element and its parent menu element. - - if (browser.isIE) - item = getContainerWith(window.event.srcElement, "A", "menuItem"); - else - item = event.currentTarget; - menu = getContainerWith(item, "DIV", "menu"); - - // Close any active sub menu and mark this one as active. - - if (menu.activeItem != null) - closeSubMenu(menu); - menu.activeItem = item; - - // Highlight the item element. - - item.className += " menuItemHighlight"; - - // Initialize the sub menu, if not already done. - - if (item.subMenu == null) { - item.subMenu = document.getElementById(menuId); - if (item.subMenu.isInitialized == null) - menuInit(item.subMenu); - } - - // Set mouseout event handler for the sub menu, if not already done. - - if (item.subMenu.onmouseout == null) - item.subMenu.onmouseout = buttonOrMenuMouseout; - - // Get position for submenu based on the menu item. - - x = getPageOffsetLeft(item) + item.offsetWidth; - y = getPageOffsetTop(item); - - // Adjust position to fit in view. - - var maxX, maxY; - - if (browser.isIE) { - maxX = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) + - (document.documentElement.clientWidth != 0 ? document.documentElement.clientWidth : document.body.clientWidth); - maxY = Math.max(document.documentElement.scrollTop, document.body.scrollTop) + - (document.documentElement.clientHeight != 0 ? document.documentElement.clientHeight : document.body.clientHeight); - } - if (browser.isOP) { - maxX = document.documentElement.scrollLeft + window.innerWidth; - maxY = document.documentElement.scrollTop + window.innerHeight; - } - if (browser.isNS) { - maxX = window.scrollX + window.innerWidth; - maxY = window.scrollY + window.innerHeight; - } - maxX -= item.subMenu.offsetWidth; - maxY -= item.subMenu.offsetHeight; - - if (x > maxX) - x = Math.max(0, x - item.offsetWidth - item.subMenu.offsetWidth - + (menu.offsetWidth - item.offsetWidth)); - y = Math.max(0, Math.min(y, maxY)); - - // Position and show the sub menu. - - item.subMenu.style.left = x + "px"; - item.subMenu.style.top = y + "px"; - item.subMenu.style.visibility = "visible"; - - // Stop the event from bubbling. - - if (browser.isIE) - window.event.cancelBubble = true; - else - event.stopPropagation(); -} - -function closeSubMenu(menu) { - - if (menu == null || menu.activeItem == null) - return; - - // Recursively close any sub menus. - - if (menu.activeItem.subMenu != null) { - closeSubMenu(menu.activeItem.subMenu); - menu.activeItem.subMenu.style.visibility = "hidden"; - menu.activeItem.subMenu = null; - } - removeClassName(menu.activeItem, "menuItemHighlight"); - menu.activeItem = null; -} - - -function buttonOrMenuMouseout(event) { - - var el; - - // If there is no active button, exit. - - if (activeButton == null) - return; - - // Find the element the mouse is moving to. - - if (browser.isIE) - el = window.event.toElement; - else if (event.relatedTarget != null) - el = (event.relatedTarget.tagName ? event.relatedTarget : event.relatedTarget.parentNode); - - // If the element is not part of a menu, reset the active button. - - if (getContainerWith(el, "DIV", "menu") == null) { - resetButton(activeButton); - activeButton = null; -//-- debut ajout ci ---- - cimontreselect(); -//-- fin ajout ci ---- - } -} - - -//---------------------------------------------------------------------------- -// Code to initialize menus. -//---------------------------------------------------------------------------- - -function menuInit(menu) { - - var itemList, spanList; - var textEl, arrowEl; - var itemWidth; - var w, dw; - var i, j; - - // For IE, replace arrow characters. - - if (browser.isIE) { - menu.style.lineHeight = "2.5ex"; - spanList = menu.getElementsByTagName("SPAN"); - for (i = 0; i < spanList.length; i++) - if (hasClassName(spanList[i], "menuItemArrow")) { - spanList[i].style.fontFamily = "Webdings"; - spanList[i].firstChild.nodeValue = "4"; - } - } - - // Find the width of a menu item. - - itemList = menu.getElementsByTagName("A"); - if (itemList.length > 0) - itemWidth = itemList[0].offsetWidth; - else - return; - - // For items with arrows, add padding to item text to make the - // arrows flush right. - - for (i = 0; i < itemList.length; i++) { - spanList = itemList[i].getElementsByTagName("SPAN"); - textEl = null; - arrowEl = null; - for (j = 0; j < spanList.length; j++) { - if (hasClassName(spanList[j], "menuItemText")) - textEl = spanList[j]; - if (hasClassName(spanList[j], "menuItemArrow")) - arrowEl = spanList[j]; - } - if (textEl != null && arrowEl != null) { - textEl.style.paddingRight = (itemWidth - - (textEl.offsetWidth + arrowEl.offsetWidth)) + "px"; - // For Opera, remove the negative right margin to fix a display bug. - if (browser.isOP) - arrowEl.style.marginRight = "0px"; - } - } - - // Fix IE hover problem by setting an explicit width on first item of - // the menu. - - if (browser.isIE) { - w = itemList[0].offsetWidth; - itemList[0].style.width = w + "px"; - dw = itemList[0].offsetWidth - w; - w -= dw; - itemList[0].style.width = w + "px"; - } - - // Mark menu as initialized. - - menu.isInitialized = true; -} - -//---------------------------------------------------------------------------- -// General utility functions. -//---------------------------------------------------------------------------- - -function getContainerWith(node, tagName, className) { - - // Starting with the given node, find the nearest containing element - // with the specified tag name and style class. - - while (node != null) { - if (node.tagName != null && node.tagName == tagName && - hasClassName(node, className)) - return node; - node = node.parentNode; - } - - return node; -} - -function hasClassName(el, name) { - - var i, list; - - // Return true if the given element currently has the given class - // name. - - list = el.className.split(" "); - for (i = 0; i < list.length; i++) - if (list[i] == name) - return true; - - return false; -} - -function removeClassName(el, name) { - - var i, curList, newList; - - if (el.className == null) - return; - - // Remove the given class name from the element's className property. - - newList = new Array(); - curList = el.className.split(" "); - for (i = 0; i < curList.length; i++) - if (curList[i] != name) - newList.push(curList[i]); - el.className = newList.join(" "); -} - -function getPageOffsetLeft(el) { - - var x; - - // Return the x coordinate of an element relative to the page. - - x = el.offsetLeft; - if (el.offsetParent != null) - x += getPageOffsetLeft(el.offsetParent); - - return x; -} - -function getPageOffsetTop(el) { - - var y; - - // Return the x coordinate of an element relative to the page. - - y = el.offsetTop; - if (el.offsetParent != null) - y += getPageOffsetTop(el.offsetParent); - - return y; -} - -//-- debut ajout ci ---- -function cicacheselect(){ - if (browser.isIE && browser.version < 7) { - oSelects = document.getElementsByTagName('SELECT'); - if (oSelects.length > 0) { - for (i = 0; i < oSelects.length; i++) { - oSlt = oSelects[i]; - if (oSlt.style.visibility != 'hidden') {oSlt.style.visibility = 'hidden';} - } - } - oSelects = document.getElementsByName('masquable'); - if (oSelects.length > 0) { - for (i = 0; i < oSelects.length; i++) { - oSlt = oSelects[i]; - if (oSlt.style.visibility != 'hidden') {oSlt.style.visibility = 'hidden';} - } - } - } -} - -function cimontreselect(){ - if (browser.isIE && browser.version < 7) { - oSelects = document.getElementsByTagName('SELECT'); - if (oSelects.length > 0) { - for (i = 0; i < oSelects.length; i++) { - oSlt = oSelects[i]; - if (oSlt.style.visibility != 'visible') {oSlt.style.visibility = 'visible';} - } - } - oSelects = document.getElementsByName('masquable'); - if (oSelects.length > 0) { - for (i = 0; i < oSelects.length; i++) { - oSlt = oSelects[i]; - if (oSlt.style.visibility != 'visible') {oSlt.style.visibility = 'visible';} - } - } - } -} - -//-- fin ajout ci ---- diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index ea16857a3..5cbc89ab0 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -1,499 +1,220 @@ -/* andreas08 - an open source xhtml/css website layout by Andreas Viklund - http://andreasviklund.com . Free to use in any way and for any purpose as long as the proper credits are given to the original designer. Version: 1.0, November 28, 2005 */ -/* Edited by Jean-Philippe Lang *> -/**************** Body and tag styles ****************/ - -#header * {margin:0; padding:0;} -p, ul, ol, li {margin:0; padding:0;} - -body{ -font:76% Verdana,Tahoma,Arial,sans-serif; -line-height:1.4em; -text-align:center; -color:#303030; -background:#e8eaec; -margin:0; -} - -a{color:#467aa7;font-weight:bold;text-decoration:none;background-color:inherit;} -a:hover{color:#2a5a8a; text-decoration:none; background-color:inherit;} -a img{border:none;} - -p{margin:0 0 1em 0;} -p form{margin-top:0; margin-bottom:20px;} - -img.left,img.center,img.right{padding:4px; border:1px solid #a0a0a0;} -img.left{float:left; margin:0 12px 5px 0;} -img.center{display:block; margin:0 auto 5px auto;} -img.right{float:right; margin:0 0 5px 12px;} - -/**************** Header and navigation styles ****************/ - -#container{ -width:100%; -min-width: 800px; -margin:0; -padding:0; -text-align:left; -background:#ffffff; -color:#303030; -} - -#header{ -height:4.5em; -margin:0; -background:#467aa7; -color:#ffffff; -margin-bottom:1px; -} - -#header h1{ -padding:10px 0 0 20px; -font-size:2em; -background-color:inherit; -color:#fff; -letter-spacing:-1px; -font-weight:bold; -font-family: Trebuchet MS,Georgia,"Times New Roman",serif; -} - -#header h2{ -margin:3px 0 0 40px; -font-size:1.5em; -background-color:inherit; -color:#f0f2f4; -letter-spacing:-1px; -font-weight:normal; -font-family: Trebuchet MS,Georgia,"Times New Roman",serif; -} - -#header a {color:#fff;} - -#navigation{ -height:2.2em; -line-height:2.2em; -margin:0; -background:#578bb8; -color:#ffffff; -} - -#navigation li{ -float:left; -list-style-type:none; -border-right:1px solid #ffffff; -white-space:nowrap; -} - -#navigation li.right { - float:right; -list-style-type:none; -border-right:0; -border-left:1px solid #ffffff; -white-space:nowrap; -} - -#navigation li a{ -display:block; -padding:0px 10px 0px 22px; -font-size:0.8em; -font-weight:normal; -text-decoration:none; -background-color:inherit; -color: #ffffff; -} - -#navigation li.submenu {background:url(../images/arrow_down.png) 96% 80% no-repeat;} -#navigation li.submenu a {padding:0px 16px 0px 22px;} -* html #navigation a {width:1%;} - -#navigation .selected,#navigation a:hover{ -color:#ffffff; -text-decoration:none; -background-color: #80b0da; -} - -/**************** Icons *******************/ -.icon { -background-position: 0% 40%; -background-repeat: no-repeat; -padding-left: 20px; -padding-top: 2px; -padding-bottom: 3px; +body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; } + +h1, h2, h3 { font-family: "Trebuchet MS", Verdana, sans-serif;} +h1 {margin:0; padding:0; font-size: 24px;} +h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;} +h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;} +h4, .wiki h3 {font-size: 11px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;} + +/***** Layout *****/ +#top-menu {background: #22344A;color: #fff;height:1.5em; padding: 2px 6px 0px 6px;} +#top-menu a {color: #fff; padding-right: 4px;} +#account {float:right;} + +#header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 6px 0px 6px;} +#header a {color:#f8f8f8;} +#quick-search {float:right;} + +#main-menu {position: absolute; top: 5.5em; left:8px;} +#main-menu ul {margin: 0; padding: 0;} +#main-menu li { + float:left; + list-style-type:none; + margin: 0px 10px 0px 0px; + padding: 0px 0px 0px 0px; + white-space:nowrap; +} +#main-menu li a { + display: block; + color: #fff; + text-decoration: none; + margin: 0; + padding: 4px 4px 4px 4px; + background: #22344A; } +#main-menu li a:hover {background:#759FCF;} -#navigation .icon { -background-position: 4px 50%; -} +#main {background: url(../images/mainbg.png) repeat-x; background-color:#EEEEEE;} -.icon22 { -background-position: 0% 40%; -background-repeat: no-repeat; -padding-left: 26px; -line-height: 22px; -vertical-align: middle; -} - -.icon-add { background-image: url(../images/add.png); } -.icon-edit { background-image: url(../images/edit.png); } -.icon-del { background-image: url(../images/delete.png); } -.icon-move { background-image: url(../images/move.png); } -.icon-save { background-image: url(../images/save.png); } -.icon-cancel { background-image: url(../images/cancel.png); } -.icon-pdf { background-image: url(../images/pdf.png); } -.icon-csv { background-image: url(../images/csv.png); } -.icon-html { background-image: url(../images/html.png); } -.icon-image { background-image: url(../images/image.png); } -.icon-txt { background-image: url(../images/txt.png); } -.icon-file { background-image: url(../images/file.png); } -.icon-folder { background-image: url(../images/folder.png); } -.icon-package { background-image: url(../images/package.png); } -.icon-home { background-image: url(../images/home.png); } -.icon-user { background-image: url(../images/user.png); } -.icon-mypage { background-image: url(../images/user_page.png); } -.icon-admin { background-image: url(../images/admin.png); } -.icon-projects { background-image: url(../images/projects.png); } -.icon-logout { background-image: url(../images/logout.png); } -.icon-help { background-image: url(../images/help.png); } -.icon-attachment { background-image: url(../images/attachment.png); } -.icon-index { background-image: url(../images/index.png); } -.icon-history { background-image: url(../images/history.png); } -.icon-feed { background-image: url(../images/feed.png); } -.icon-time { background-image: url(../images/time.png); } -.icon-stats { background-image: url(../images/stats.png); } -.icon-warning { background-image: url(../images/warning.png); } -.icon-fav { background-image: url(../images/fav.png); } -.icon-fav-off { background-image: url(../images/fav_off.png); } -.icon-reload { background-image: url(../images/reload.png); } -.icon-lock { background-image: url(../images/locked.png); } -.icon-unlock { background-image: url(../images/unlock.png); } - -.icon22-projects { background-image: url(../images/22x22/projects.png); } -.icon22-users { background-image: url(../images/22x22/users.png); } -.icon22-tracker { background-image: url(../images/22x22/tracker.png); } -.icon22-role { background-image: url(../images/22x22/role.png); } -.icon22-workflow { background-image: url(../images/22x22/workflow.png); } -.icon22-options { background-image: url(../images/22x22/options.png); } -.icon22-notifications { background-image: url(../images/22x22/notifications.png); } -.icon22-authent { background-image: url(../images/22x22/authent.png); } -.icon22-info { background-image: url(../images/22x22/info.png); } -.icon22-comment { background-image: url(../images/22x22/comment.png); } -.icon22-package { background-image: url(../images/22x22/package.png); } -.icon22-settings { background-image: url(../images/22x22/settings.png); } - -/**************** Content styles ****************/ +#sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;} +* html #sidebar{ width: 17%; } +#sidebar h3{ font-size: 14px; margin-top:14px; color: #666; } +#sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; } +* html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; } +#content { width: 80%; background: url(../images/contentbg.png) repeat-x; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; position: relative; z-index: 10; height:600px; min-height: 600px;} +* html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;} html>body #content { height: auto; -min-height: 500px; +min-height: 600px; } -#content{ -width: auto; -height:500px; -font-size:0.9em; -padding:20px 10px 10px 20px; -margin-left: 120px; -border-left: 1px dashed #c0c0c0; - -} +#main.nosidebar #sidebar{ display: none; } +#main.nosidebar #content{ width: auto; border-right: 0; } -#content h2, #content div.wiki h1 { -display:block; -margin:0 0 16px 0; -font-size:1.7em; -font-weight:normal; -letter-spacing:-1px; -color:#606060; -background-color:inherit; -font-family: Trebuchet MS,Georgia,"Times New Roman",serif; -} - -#content h2 a{font-weight:normal;} -#content h3{margin:0 0 12px 0; font-size:1.4em;color:#707070;font-family: Trebuchet MS,Georgia,"Times New Roman",serif;} -#content h4{font-size: 1em; margin-bottom: 12px; margin-top: 20px; font-weight: normal; border-bottom: dotted 1px #c0c0c0;} -#content a:hover,#subcontent a:hover{text-decoration:underline;} -#content ul,#content ol{margin:0 5px 16px 35px;} -#content dl{margin:0 5px 10px 25px;} -#content dt{font-weight:bold; margin-bottom:5px;} -#content dd{margin:0 0 10px 15px;} +#footer {clear: both; border-top: 1px solid #bbb; font-size: 11px; padding: 5px; text-align:center; background:#fff;} -#content .tabs{height: 2.6em;} -#content .tabs ul{margin:0;} -#content .tabs ul li{ -float:left; -list-style-type:none; -white-space:nowrap; -margin-right:8px; -background:#fff; -} -#content .tabs ul li a{ -display:block; -font-size: 0.9em; -text-decoration:none; -line-height:1em; -padding:4px; -border: 1px solid #c0c0c0; -} - -#content .tabs ul li a.selected, #content .tabs ul li a:hover{ -background-color: #80b0da; -border: 1px solid #80b0da; -color: #fff; -text-decoration:none; -} +#login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; } +#login-form table td {padding: 6px;} +#login-form label {font-weight: bold;} -/***********************************************/ +.clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; } -form {display: inline;} -blockquote {padding-left: 6px; border-left: 2px solid #ccc;} -input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;} +/***** Links *****/ +a, a:link, a:visited{ color: #2A5685; text-decoration: none; } +a:hover, a:active{ color: #c61a1a; text-decoration: underline;} +a img{ border: 0; } -input.button-small {font-size: 0.8em;} -textarea.wiki-edit { width: 99.5%; } -.select-small {font-size: 0.8em;} -label {font-weight: bold; font-size: 1em; color: #505050;} -fieldset {border:1px solid #c0c0c0; padding: 6px;} -legend {color: #505050;} -.required {color: #bb0000;} +/***** Tables *****/ +table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; } +table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; } +table.list tbody th { text-align: left; padding: 0px; } +table.list td { overflow: hidden; text-overflow: ellipsis; vertical-align: top;} +table.list tbody tr:hover { background-color:#ffffdd; } +table td {padding:2px;} +table p {margin:0;} .odd {background-color:#f6f7f8;} .even {background-color: #fff;} -hr { border:0; border-top: dotted 1px #fff; border-bottom: dotted 1px #c0c0c0; } -table p {margin:0; padding:0;} -acronym {border-bottom:0;} .highlight { background-color: #FCFD8D;} +.box{ +padding:6px; +margin-bottom: 10px; +background-color:#f6f6f6; +color:#505050; +line-height:1.5em; +border: 1px solid #e4e4e4; +} + div.square { border: 1px solid #999; float: left; - margin: .4em .5em 0 0; + margin: .3em .4em 0 .4em; overflow: hidden; width: .6em; height: .6em; } -ul.documents { -list-style-type: none; -padding: 0; +.contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px;font-size:0.9em;} +.splitcontentleft{float:left; width:49%;} +.splitcontentright{float:right; width:49%;} +form {display: inline;} +input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;} +fieldset {border: 1px solid #e4e4e4; margin:0;} +hr { width: 100%; height: 1px; background: #ccc; border: 0;} +textarea.wiki-edit { width: 99%; } +li p {margin-top: 0;} +div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;} +.autoscroll {overflow-x: auto; padding:1px; width:100%;} + +/***** Tabular forms ******/ +.tabular p{ margin: 0; +padding: 5px 0 8px 0; +padding-left: 180px; /*width of left column containing the label elements*/ +height: 1%; +clear:left; } -ul.documents li { -background-image: url(../images/32x32/file.png); -background-repeat: no-repeat; -background-position: 0 1px; -padding-left: 36px; -margin-bottom: 10px; -margin-left: -37px; -} - -/********** Table used to display lists of things ***********/ - -table.list { - width:100%; - border-collapse: collapse; - border: 1px dotted #d0d0d0; - margin-bottom: 6px; +.tabular label{ +font-weight: bold; +float: left; +text-align: right; +margin-left: -180px; /*width of left column*/ +width: 175px; /*width of labels. Should be smaller than left column to create some right +margin*/ } -table.with-cells td { - border: 1px solid #d7d7d7; -} +#settings .tabular p{ padding-left: 300px; } +#settings .tabular label{ margin-left: -300px; width: 295px; } -table.list td { - padding:2px; -} +.required {color: #bb0000;} +.summary {font-style: italic;} -table.list thead th { - text-align: center; - background: #eee; - border: 1px solid #d7d7d7; - color: #777; +/***** Flash & error messages ****/ +#flash div, #errorExplanation, .nodata { + padding: 4px 4px 4px 30px; + margin-bottom: 12px; + font-size: 1.1em; + border: 2px solid; } -table.list tbody th { - font-weight: bold; - background: #eed; - border: 1px solid #d7d7d7; - color: #777; -} +#flash div {margin-top: 6px;} -/*========== Drop down menu ==============*/ -div.menu { - background-color: #FFFFFF; - border-style: solid; - border-width: 1px; - border-color: #7F9DB9; - position: absolute; - top: 0px; - left: 0px; - padding: 0; - visibility: hidden; - z-index: 101; -} - -div.menu a.menuItem { - font-size: 10px; - font-weight: normal; - line-height: 2em; - color: #000000; - background-color: #FFFFFF; - cursor: default; - display: block; - padding: 0 1em; - margin: 0; - border: 0; - text-decoration: none; - white-space: nowrap; +#flash div.error, #errorExplanation { + background: url(../images/false.png) 8px 5px no-repeat; + background-color: #ffe3e3; + border-color: #dd0000; + color: #550000; } -div.menu a.menuItem:hover, div.menu a.menuItemHighlight { - background-color: #80b0da; - color: #ffffff; +#flash div.notice { + background: url(../images/true.png) 8px 5px no-repeat; + background-color: #dfffdf; + border-color: #9fcf9f; + color: #005f00; } -div.menu a.menuItem span.menuItemText {} - -div.menu a.menuItem span.menuItemArrow { - margin-right: -.75em; +.nodata { + text-align: center; + background-color: #FFEBC1; + border-color: #FDBF3B; + color: #A6750C; } -/**************** Sidebar styles ****************/ - -#subcontent{ -position: absolute; -left: 0px; -width:95px; -padding:20px 20px 10px 5px; -overflow: hidden; -} +#errorExplanation ul { font-size: 0.9em;} -#subcontent h2{ -display:block; -margin:0 0 5px 0; -font-size:1.0em; +/***** Ajax indicator ******/ +#ajax-indicator { +position: absolute; /* fixed not supported by IE */ +background-color:#eee; +border: 1px solid #bbb; +top:35%; +left:40%; +width:20%; font-weight:bold; -text-align:left; -color:#606060; -background-color:inherit; -font-family: Trebuchet MS,Georgia,"Times New Roman",serif; -} - -#subcontent p{margin:0 0 16px 0; font-size:0.9em;} - -/**************** Menublock styles ****************/ - -.menublock{margin:0 0 20px 8px; font-size:0.8em;} -.menublock li{list-style:none; display:block; padding:1px; margin-bottom:0px;} -.menublock li a{font-weight:bold; text-decoration:none;} -.menublock li a:hover{text-decoration:none;} -.menublock li ul{margin:0; font-size:1em; font-weight:normal;} -.menublock li ul li{margin-bottom:0;} -.menublock li ul a{font-weight:normal;} - -/**************** Footer styles ****************/ - -#footer{ -clear:both; -padding:5px 0; -margin:0; -font-size:0.9em; -color:#f0f0f0; -background:#467aa7; +text-align:center; +padding:0.6em; +z-index:100; +filter:alpha(opacity=50); +-moz-opacity:0.5; +opacity: 0.5; +-khtml-opacity: 0.5; } -#footer p{padding:0; margin:0; text-align:center;} -#footer a{color:#f0f0f0; background-color:inherit; font-weight:bold;} -#footer a:hover{color:#ffffff; background-color:inherit; text-decoration: underline;} - -/**************** Misc classes and styles ****************/ - -.splitcontentleft{float:left; width:49%;} -.splitcontentright{float:right; width:49%;} -.clear{clear:both;} -.small{font-size:0.8em;line-height:1.4em;padding:0 0 0 0;} -.hide{display:none;} -.textcenter{text-align:center;} -.textright{text-align:right;} -.important{color:#f02025; background-color:inherit; font-weight:bold;} - -#content .author {color:#888; font-style:italic;} - -.box{ -margin:0 0 20px 0; -padding:10px; -border:1px solid #c0c0c0; -background-color:#fafbfc; -color:#505050; -line-height:1.5em; -} +html>body #ajax-indicator { position: fixed; } -a.close-icon { -display:block; -margin-top:3px; -overflow:hidden; -width:12px; -height:12px; +#ajax-indicator span { +background-position: 0% 40%; background-repeat: no-repeat; -cursor:pointer; -background-image:url('../images/close.png'); -} - -a.close-icon:hover { -background-image:url('../images/close_hl.png'); -} - -.rightbox{ -background: #fafbfc; -border: 1px solid #c0c0c0; -float: right; -padding: 8px; -position: relative; -margin: 0 5px 5px; -} - -div.attachments {padding-left: 6px; border-left: 2px solid #ccc; margin-bottom: 8px;} -div.attachments p {margin-bottom:2px;} - -.overlay{ -position: absolute; -margin-left:0; -z-index: 50; +background-image: url(../images/loading.gif); +padding-left: 26px; +vertical-align: bottom; } -.layout-active { -background: #ECF3E1; -} +/***** Calendar *****/ +table.cal {border-collapse: collapse; width: 100%; margin: 8px 0 6px 0;border: 1px solid #d7d7d7;} +table.cal th { background-color:#EEEEEE; padding: 4px; } +table.cal td {border: 1px solid #d7d7d7;} +table.cal td.today {background:#ffffdd;} -.block-receiver { -border:1px dashed #c0c0c0; -margin-bottom: 20px; -padding: 15px 0 15px 0; -} +/***** Tooltips ******/ +.tooltip{position:relative;z-index:24;} +.tooltip:hover{z-index:25;color:#000;} +.tooltip span.tip{display: none; text-align:left;} -.mypage-box { -margin:0 0 20px 0; +div.tooltip:hover span.tip{ +display:block; +position:absolute; +top:12px; left:24px; width:270px; +border:1px solid #555; +background-color:#fff; +padding: 4px; +font-size: 0.8em; color:#505050; -line-height:1.5em; -} - -.handle { -cursor: move; -} - -.login { -width: 50%; -text-align: left; -} - -img.calendar-trigger { - cursor: pointer; - vertical-align: middle; - margin-left: 4px; -} - -#history p { - margin-left: 34px; } +/***** Progress bar *****/ .progress { border: 1px solid #D7D7D7; border-collapse: collapse; @@ -508,105 +229,37 @@ img.calendar-trigger { .progress .closed { background: #BAE0BA none repeat scroll 0%; } .progress .open { background: #FFF none repeat scroll 0%; } -/***** Contextual links div *****/ -.contextual { -float: right; -font-size: 0.8em; -line-height: 16px; -padding: 2px; -} - -.contextual select, .contextual input { -font-size: 1em; -} - -/***** Gantt chart *****/ -.gantt_hdr { - position:absolute; - top:0; - height:16px; - border-top: 1px solid #c0c0c0; - border-bottom: 1px solid #c0c0c0; - border-right: 1px solid #c0c0c0; - text-align: center; - overflow: hidden; -} - -.task { - position: absolute; - height:8px; - font-size:0.8em; - color:#888; - padding:0; - margin:0; - line-height:0.8em; +/***** Tabs *****/ +#content .tabs{height: 2.6em;} +#content .tabs ul{margin:0;} +#content .tabs ul li{ +float:left; +list-style-type:none; +white-space:nowrap; +margin-right:8px; +background:#fff; } - -.task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; } -.task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; } -.task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; } -.milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; } - -/***** project list *****/ -dl.projects dt { font-size: 120%; margin-top:1.2em; padding: 2px 2px 4px 2px; background-color:#fafbfc; } - -/***** Tooltips ******/ -.tooltip{position:relative;z-index:24;} -.tooltip:hover{z-index:25;color:#000;} -.tooltip span.tip{display: none; text-align:left;} - -div.tooltip:hover span.tip{ +#content .tabs ul li a{ display:block; -position:absolute; -top:12px; left:24px; width:270px; -border:1px solid #555; -background-color:#fff; -padding: 4px; -font-size: 0.8em; -color:#505050; -} - -/***** CSS FORM ******/ -.tabular p{ -margin: 0; -padding: 5px 0 8px 0; -padding-left: 180px; /*width of left column containing the label elements*/ -height: 1%; -clear:both; -} - -.tabular label{ -font-weight: bold; -float: left; -margin-left: -180px; /*width of left column*/ -margin-bottom: 10px; -width: 175px; /*width of labels. Should be smaller than left column to create some right -margin*/ -} - -.error { -color: #cc0000; +font-size: 0.9em; +text-decoration:none; +line-height:1em; +padding:4px; +border: 1px solid #c0c0c0; } -#settings .tabular p{ padding-left: 300px; } -#settings .tabular label{ margin-left: -300px; width: 295px; } - -/*.threepxfix class below: -Targets IE6- ONLY. Adds 3 pixel indent for multi-line form contents. -to account for 3 pixel bug: http://www.positioniseverything.net/explorer/threepxtest.html -*/ - -* html .threepxfix{ -margin-left: 3px; +#content .tabs ul li a.selected, #content .tabs ul li a:hover{ +background-color: #507AAA; +border: 1px solid #507AAA; +color: #fff; +text-decoration:none; } -/***** Wiki sections ****/ -#content div.wiki { font-size: 110%} - -#content div.wiki h2, div.wiki h3 { font-family: Trebuchet MS,Georgia,"Times New Roman",serif; color:#606060; } -#content div.wiki h2 { font-size: 1.4em;} -#content div.wiki h3 { font-size: 1.2em;} +/***** Diff *****/ +.diff_out { background: #fcc; } +.diff_in { background: #cfc; } +/***** Wiki *****/ div.wiki table { border: 1px solid #505050; border-collapse: collapse; @@ -633,29 +286,23 @@ div.wiki a.new { color: #b73535; } -div.wiki code { - font-size: 1.2em; -} - -div.wiki img { - margin: 6px; -} - -div.wiki pre { +div.wiki pre { margin: 1em 1em 1em 1.6em; padding: 2px; background-color: #fafafa; border: 1px solid #dadada; + width:95%; + overflow-x: auto; } div.wiki div.toc { - background-color: #fdfed0; - border: 1px solid #dadada; + background-color: #ffffdd; + border: 1px solid #e4e4e4; padding: 4px; - line-height: 1.1em; + line-height: 1.2em; margin-bottom: 12px; - float: left; margin-right: 12px; + float: left; } div.wiki div.toc.right { @@ -668,72 +315,134 @@ div.wiki div.toc a { display: block; font-size: 0.9em; font-weight: normal; + text-decoration: none; color: #606060; } +div.wiki div.toc a:hover { color: #c61a1a; text-decoration: underline;} div.wiki div.toc a.heading2 { margin-left: 6px; } div.wiki div.toc a.heading3 { margin-left: 12px; font-size: 0.8em; } -div.wiki - -.diff_out{ - background: #fcc; +/***** My page layout *****/ +.block-receiver { +border:1px dashed #c0c0c0; +margin-bottom: 20px; +padding: 15px 0 15px 0; } -.diff_in{ - background: #cfc; +.mypage-box { +margin:0 0 20px 0; +color:#505050; +line-height:1.5em; } -#preview .preview { background: #fafbfc url(../images/draft.png); } +.handle { +cursor: move; +} -#ajax-indicator { -position: absolute; /* fixed not supported by IE */ -background-color:#eee; -border: 1px solid #bbb; -top:35%; -left:40%; -width:20%; -font-weight:bold; -text-align:center; -padding:0.6em; -z-index:100; -filter:alpha(opacity=50); --moz-opacity:0.5; -opacity: 0.5; --khtml-opacity: 0.5; +a.close-icon { +display:block; +margin-top:3px; +overflow:hidden; +width:12px; +height:12px; +background-repeat: no-repeat; +cursor:pointer; +background-image:url('../images/close.png'); } -html>body #ajax-indicator { position: fixed; } +a.close-icon:hover { +background-image:url('../images/close_hl.png'); +} -#ajax-indicator span { -background-position: 0% 40%; -background-repeat: no-repeat; -background-image: url(../images/loading.gif); -padding-left: 26px; -vertical-align: bottom; +/***** Gantt chart *****/ +.gantt_hdr { + position:absolute; + top:0; + height:16px; + border-top: 1px solid #c0c0c0; + border-bottom: 1px solid #c0c0c0; + border-right: 1px solid #c0c0c0; + text-align: center; + overflow: hidden; } -/***** Flash & error messages ****/ -#flash div, #errorExplanation { - padding: 4px 4px 4px 30px; - margin-bottom: 16px; - font-size: 1.1em; - border: 2px solid; +.task { + position: absolute; + height:8px; + font-size:0.8em; + color:#888; + padding:0; + margin:0; + line-height:0.8em; } -#flash div.error, #errorExplanation { - background: url(../images/false.png) 8px 5px no-repeat; - background-color: #ffe3e3; - border-color: #dd0000; - color: #550000; +.task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; } +.task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; } +.task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; } +.milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; } + +/***** Icons *****/ +.icon { +background-position: 0% 40%; +background-repeat: no-repeat; +padding-left: 20px; +padding-top: 2px; +padding-bottom: 3px; } -#flash div.notice { - background: url(../images/true.png) 8px 5px no-repeat; - background-color: #dfffdf; - border-color: #9fcf9f; - color: #005f00; +.icon22 { +background-position: 0% 40%; +background-repeat: no-repeat; +padding-left: 26px; +line-height: 22px; +vertical-align: middle; } -#errorExplanation ul { margin-bottom: 0px; } -#errorExplanation ul li { list-style: none; margin-left: -16px;} +.icon-add { background-image: url(../images/add.png); } +.icon-edit { background-image: url(../images/edit.png); } +.icon-del { background-image: url(../images/delete.png); } +.icon-move { background-image: url(../images/move.png); } +.icon-save { background-image: url(../images/save.png); } +.icon-cancel { background-image: url(../images/cancel.png); } +.icon-pdf { background-image: url(../images/pdf.png); } +.icon-csv { background-image: url(../images/csv.png); } +.icon-html { background-image: url(../images/html.png); } +.icon-image { background-image: url(../images/image.png); } +.icon-txt { background-image: url(../images/txt.png); } +.icon-file { background-image: url(../images/file.png); } +.icon-folder { background-image: url(../images/folder.png); } +.icon-package { background-image: url(../images/package.png); } +.icon-home { background-image: url(../images/home.png); } +.icon-user { background-image: url(../images/user.png); } +.icon-mypage { background-image: url(../images/user_page.png); } +.icon-admin { background-image: url(../images/admin.png); } +.icon-projects { background-image: url(../images/projects.png); } +.icon-logout { background-image: url(../images/logout.png); } +.icon-help { background-image: url(../images/help.png); } +.icon-attachment { background-image: url(../images/attachment.png); } +.icon-index { background-image: url(../images/index.png); } +.icon-history { background-image: url(../images/history.png); } +.icon-feed { background-image: url(../images/feed.png); } +.icon-time { background-image: url(../images/time.png); } +.icon-stats { background-image: url(../images/stats.png); } +.icon-warning { background-image: url(../images/warning.png); } +.icon-fav { background-image: url(../images/fav.png); } +.icon-fav-off { background-image: url(../images/fav_off.png); } +.icon-reload { background-image: url(../images/reload.png); } +.icon-lock { background-image: url(../images/locked.png); } +.icon-unlock { background-image: url(../images/unlock.png); } +.icon-note { background-image: url(../images/note.png); } + +.icon22-projects { background-image: url(../images/22x22/projects.png); } +.icon22-users { background-image: url(../images/22x22/users.png); } +.icon22-tracker { background-image: url(../images/22x22/tracker.png); } +.icon22-role { background-image: url(../images/22x22/role.png); } +.icon22-workflow { background-image: url(../images/22x22/workflow.png); } +.icon22-options { background-image: url(../images/22x22/options.png); } +.icon22-notifications { background-image: url(../images/22x22/notifications.png); } +.icon22-authent { background-image: url(../images/22x22/authent.png); } +.icon22-info { background-image: url(../images/22x22/info.png); } +.icon22-comment { background-image: url(../images/22x22/comment.png); } +.icon22-package { background-image: url(../images/22x22/package.png); } +.icon22-settings { background-image: url(../images/22x22/settings.png); } diff --git a/public/stylesheets/calendar.css b/public/stylesheets/calendar.css index 7f0b908e5..842dbf71a 100644 --- a/public/stylesheets/calendar.css +++ b/public/stylesheets/calendar.css @@ -1,6 +1,12 @@ /* The main calendar widget. DIV containing a table. */ -div.calendar { position: relative; } +img.calendar-trigger { + cursor: pointer; + vertical-align: middle; + margin-left: 4px; +} + +div.calendar { position: relative; z-index: 15;} .calendar, .calendar table { border: 1px solid #556; diff --git a/public/stylesheets/print.css b/public/stylesheets/print.css index bd5f006f2..52e02ecb6 100644 --- a/public/stylesheets/print.css +++ b/public/stylesheets/print.css @@ -1,3 +1,2 @@ -#header, #navigation, #subcontent, #footer { display:none; } -.menu { display:none; } -.contextual, .rightbox { display:none; } \ No newline at end of file +#top-menu, #header, #main-menu, #sidebar, #footer { display:none; } +.contextual { display:none; } diff --git a/public/stylesheets/scm.css b/public/stylesheets/scm.css index 338229b0b..3794db366 100644 --- a/public/stylesheets/scm.css +++ b/public/stylesheets/scm.css @@ -1,14 +1,14 @@ +table.filecontent { border: 1px solid #ccc; border-collapse: collapse; width:98%; } +table.filecontent th { border: 1px solid #ccc; background-color: #eee; } +table.filecontent th.filename { background-color: #ddc; text-align: left; } div.action_M { background: #fd8 } div.action_D { background: #f88 } div.action_A { background: #bfb } +table.filecontent tr.spacing { border: 1px solid #d7d7d7; } -tr.spacing { - border: 1px solid #d7d7d7; -} - -.line-num { +table.filecontent .line-num { border: 1px solid #d7d7d7; font-size: 0.8em; text-align: right; @@ -16,17 +16,6 @@ tr.spacing { padding-right: 3px; } -.line-code { - font-size: 1.4em; -} - -table.list thead th.list-filename { - background-color: #ddc; - font-weight: bolder; - text-align: left; -} - - /************* Coderay styles *************/ table.CodeRay { @@ -37,7 +26,7 @@ table.CodeRay { span.CodeRay { white-space: pre; border: 0px; padding: 2px } .CodeRay .no { padding: 0px 4px } -.CodeRay .code { width: 100% } +.CodeRay .code { } ol.CodeRay { font-size: 10pt } ol.CodeRay li { white-space: pre } -- cgit v1.2.3