diff options
71 files changed, 786 insertions, 1555 deletions
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 @@ -<center> -<div class="box login"> -<h2 class="icon22 icon22-authent"><%=l(:label_please_login)%></h2> - -<% form_tag({:action=> "login"}, :class => "tabular") do %> - -<p><label for="login"><%=l(:field_login)%>:</label> -<%= text_field_tag 'login', nil, :size => 25 %></p> - -<p><label for="password"><%=l(:field_password)%>:</label> -<%= password_field_tag 'password', nil, :size => 25 %></p> - -<% if Setting.autologin? %> -<p><label for="autologin"><%= check_box_tag 'autologin' %> <%= l(:label_stay_logged_in) %></label></p> -<% end %> - -<p><input type="submit" name="login" value="<%=l(:button_login)%> »" class="primary" /></p> -<% end %> +<div id="login-form"> +<% form_tag({:action=> "login"}) do %> +<table> +<tr> + <td align="right"><label for="login"><%=l(:field_login)%>:</label></td> + <td align="left"><p><%= text_field_tag 'login', nil, :size => 40 %></p></td> +</tr> +<tr> + <td align="right"><label for="password"><%=l(:field_password)%>:</label></td> + <td align="left"><%= password_field_tag 'password', nil, :size => 40 %></td> +</tr> +<tr> + <td></td> + <td align="left"> + <% if Setting.autologin? %> + <label for="autologin"><%= check_box_tag 'autologin' %> <%= l(:label_stay_logged_in) %></label> + <% end %> + </td> +</tr> +<tr> + <td align="left"> + <% if Setting.lost_password? %> + <%= link_to l(:label_password_lost), :controller => 'account', :action => 'lost_password' %> + <% end %> + </td> + <td align="right"> + <input type="submit" name="login" value="<%=l(:button_login)%> »" /> + </td> +</tr> +</table> <%= javascript_tag "Form.Element.focus('login');" %> - -<% links = [] - links << link_to(l(:label_register), :action => 'register') if Setting.self_registration? - links << link_to(l(:label_password_lost), :action => 'lost_password') if Setting.lost_password? -%> -<%= links.join(" | ") %> - +<% end %> </div> -</center>
\ 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 @@ -<center> -<div class="box login"> <h2><%=l(:label_password_lost)%></h2> +<div class="box"> <% form_tag({:action=> "lost_password"}, :class => "tabular") do %> <p><label for="mail"><%=l(:field_mail)%> <span class="required">*</span></label> -<%= text_field_tag 'mail', nil, :size => 40 %></p> - -<p><center><%= submit_tag l(:button_submit) %></center></p> +<%= text_field_tag 'mail', nil, :size => 40 %> +<%= submit_tag l(:button_submit) %></p> <% end %> </div> -</center>
\ 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 @@ -<center> -<div class="box login"> <h2><%=l(:label_password_lost)%></h2> -<p><%=l(:field_login)%>: <strong><%= @user.login %></strong><br /> - <%= error_messages_for 'user' %> - <% form_tag({:token => @token.value}, :class => "tabular") do %> - - <p><label for="new_password"><%=l(:field_new_password)%> <span class="required">*</span></label> - <%= password_field_tag 'new_password', nil, :size => 25 %><br /> - <em><%= l(:text_length_between, 4, 12) %></em></p> - - <p><label for="new_password_confirmation"><%=l(:field_password_confirmation)%> <span class="required">*</span></label> - <%= password_field_tag 'new_password_confirmation', nil, :size => 25 %></p> +<% form_tag({:token => @token.value}) do %> +<div class="box tabular"> +<p><label for="new_password"><%=l(:field_new_password)%> <span class="required">*</span></label> +<%= password_field_tag 'new_password', nil, :size => 25 %><br /> +<em><%= l(:text_length_between, 4, 12) %></em></p> - <p><center><%= submit_tag l(:button_save) %></center></p> - <% end %> - +<p><label for="new_password_confirmation"><%=l(:field_password_confirmation)%> <span class="required">*</span></label> +<%= password_field_tag 'new_password_confirmation', nil, :size => 25 %></p> </div> -</center>
\ No newline at end of file +<p><%= submit_tag l(:button_save) %></p> +<% 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 @@ <h2><%=h @board.name %></h2> +<% if @topics.any? %> <table class="list"> <thead><tr> <th><%= l(:field_subject) %></th> @@ -32,6 +33,8 @@ <% end %> </tbody> </table> - <p><%= pagination_links_full @topic_pages %> [ <%= @topic_pages.current.first_item %> - <%= @topic_pages.current.last_item %> / <%= @topic_count %> ]</p> +<% else %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% 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 @@ <span id="predecessor_fields" style="display:none;"> <%= l(:field_delay) %>: <%= f.text_field :delay, :size => 3 %> <%= l(:label_day_plural) %> </span> -<%= submit_tag l(:button_add) %></p> +<%= submit_tag l(:button_add) %> +<%= toggle_link l(:button_cancel), 'new-relation-form'%> +</p> <%= 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 @@ <tbody> <% for status in @issue_statuses %> <tr class="<%= cycle("odd", "even") %>"> - <td><div class="square" style="background:#<%= status.html_color %>;"></div> <%= link_to status.name, :action => 'edit', :id => status %></td> + <td><%= link_to status.name, :action => 'edit', :id => status %></td> <td align="center"><%= image_tag 'true.png' if status.is_default? %></td> <td align="center"><%= image_tag 'true.png' if status.is_closed? %></td> <td align="center" style="width:15%;"> 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 @@ <th align="center"> <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %> </th> - <td><div class="square" style="background:#<%= issue.status.html_color %>;"></div> <p class="small"><%= issue.project.name %> - <%= issue.tracker.name %><br /> + <td><p class="small"><%= issue.project.name %> - <%= issue.tracker.name %><br /> <%= issue.status.name %> - <%= format_time(issue.updated_on) %></p></td> <td> <p class="small"><%= link_to h(issue.subject), :controller => 'issues', :action => 'show', :id => issue %></p> 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 @@ -<h3><%=l(:label_related_issues)%></h3> +<div class="contextual"> +<% if authorize_for('issue_relations', 'new') %> + <%= toggle_link l(:button_add), 'new-relation-form'%> +<% end %> +</div> + +<p><strong><%=l(:label_related_issues)%></strong></p> +<% if @issue.relations.any? %> <table style="width:100%"> <% @issue.relations.each do |relation| %> <tr> <td><%= 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) %></td> <td><%=h relation.other_issue(@issue).subject %></td> -<td><div class="square" style="background:#<%= relation.other_issue(@issue).status.html_color %>;"></div> <%= relation.other_issue(@issue).status.name %></td> +<td><%= relation.other_issue(@issue).status.name %></td> <td><%= format_date(relation.other_issue(@issue).start_date) %></td> <td><%= format_date(relation.other_issue(@issue).due_date) %></td> <td><%= link_to_remote(image_tag('delete.png'), { :url => {:controller => 'issue_relations', :action => 'destroy', :issue_id => @issue, :id => relation}, @@ -14,9 +21,11 @@ </tr> <% end %> </table> +<% 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') %> +<h3><%= l(:label_issue_new) %></h3> +<%= l(:label_tracker) %>: <%= new_issue_selector %> +<% end %> + +<h3><%= l(:label_issue_plural) %></h3> +<%= link_to l(:label_issue_view_all), :controller => 'projects', :action => 'list_issues', :id => @project, :set_filter => 1 %><br /> +<%= link_to l(:field_summary), :controller => 'reports', :action => 'issue_report', :id => @project %><br /> +<%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %> + +<h3><%= l(:label_query_plural) %></h3> + +<% 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 %><br /> +<% 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 @@ -<h2><%= @issue.tracker.name %> #<%= @issue.id %> - <%=h @issue.subject %></h2> +<h2><%= @issue.tracker.name %> #<%= @issue.id %></h2> <% 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 @@ <td align="center" valign="top"><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td> <td align="center" valign="top" nowrap><%=h issue.project.name %></td> <td align="center" valign="top" nowrap><%= issue.tracker.name %></td> - <td valign="top"nowrap><div class="square" style="background:#<%= issue.status.html_color %>;"></div> <%= issue.status.name %></td> + <td valign="top"nowrap><%= issue.status.name %></td> <td align="center" valign="top"><%= issue.priority.name %></td> <td><%= link_to h(issue.subject), :controller => 'issues', :action => 'show', :id => issue %></td> <td align="center" valign="top" nowrap><%= issue.assigned_to.name if issue.assigned_to %></td> 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 @@ <div class="contextual"> +<%= 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' %> </div> -<h2><%= @issue.tracker.name %> #<%= @issue.id %>: <%=h @issue.subject %></h2> +<h2><%= @issue.tracker.name %> #<%= @issue.id %></h2> + +<div class="issue"> + <h3><%=h @issue.subject %></h3> <p class="author"> <%= 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 %>. </p> -<div class="box"> + <table width="100%"> <tr> <td style="width:15%"><b><%=l(:field_status)%> :</b></td><td style="width:35%"><%= @issue.status.name %></td> @@ -58,45 +62,42 @@ end %> </div> <% end %> -<b><%=l(:field_description)%> :</b><br /><br /> +<p><b><%=l(:field_description)%></b></p> <%= textilizable @issue.description, :attachments => @issue.attachments %> -<div class="contextual"> -</div> - -<% 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)%> : - <select name="new_status_id"> - <%= options_from_collection_for_select @status_options, "id", "name" %> - </select> - <%= submit_tag l(:button_change) %> - <% end %> -<% end %> -</div> - <% if authorize_for('issue_relations', 'new') || @issue.relations.any? %> -<div id="relations" class="box"> +<hr /> +<div id="relations"> <%= render :partial => 'relations' %> </div> <% end %> <% if @issue.attachments.any? %> -<div class="box"> -<h3><%=l(:label_attachment_plural)%></h3> <%= link_to_attachments @issue.attachments, :delete_url => (authorize_for('issues', 'destroy_attachment') ? {:controller => 'issues', :action => 'destroy_attachment', :id => @issue} : nil) %> +<% end %> + </div> + +<% if authorize_for('issues', 'change_status') and @status_options and !@status_options.empty? %> + <% form_tag({:controller => 'issues', :action => 'change_status', :id => @issue}) do %> + <p><%=l(:label_change_status)%> : + <select name="new_status_id"> + <%= options_from_collection_for_select @status_options, "id", "name" %> + </select> + <%= submit_tag l(:button_change) %></p> + <% end %> <% end %> <% if @journals.any? %> -<div id="history" class="box"> +<div id="history"> <h3><%=l(:label_history)%></h3> <%= render :partial => 'history', :locals => { :journals => @journals } %> </div> <% end %> <% if authorize_for('issues', 'add_note') %> - <div class="box"> + <a name="add-note-anchor"></a> + <div id="add-note" class="box" style="display:none;"> <h3><%= l(:label_add_note) %></h3> <% form_tag({:controller => 'issues', :action => 'add_note', :id => @issue}, :class => "tabular", :multipart => true) do %> <p><label for="notes"><%=l(:field_notes)%></label> @@ -104,6 +105,7 @@ end %> <%= wikitoolbar_for 'notes' %> <%= render :partial => 'attachments/form' %> <%= submit_tag l(:button_add) %> + <%= toggle_link l(:button_cancel), 'add-note' %> <% end %> </div> <% end %> @@ -113,4 +115,8 @@ end %> </div> -<% 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) %> +<select onchange="if (this.value != '') { window.location = this.value; }"> +<option selected><%= l(:label_jump_to_a_project) %></option> +<option disabled>---</option> +<% user_projects_by_root.keys.sort.each do |root| %> + <%= content_tag('option', root.name, :value => url_for(:controller => 'projects', :action => 'show', :id => root)) %> + <% user_projects_by_root[root].sort.each do |project| %> + <% next if project == root %> + <%= content_tag('option', ('» ' + project.name), :value => url_for(:controller => 'projects', :action => 'show', :id => project)) %> + <% end %> +<% end %> +</select> 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 @@ -<div id="menuAllProjects" class="menu" onmouseover="menuMouseover(event)"> - <%= link_to l(:label_project_all), {:controller => 'projects' }, :class => "menuItem" %> - - <% user_projects_by_root = User.current.projects.find(:all, :include => :parent, :limit => 20).group_by(&:root) %> - <% user_projects_by_root.keys.sort.each do |root| %> - <%= link_to root.name, {:controller => 'projects', :action => 'show', :id => root}, :class => "menuItem" %> - <% user_projects_by_root[root].sort.each do |project| %> - <% next if project == root %> - <%= link_to(('» ' + project.name), {:controller => 'projects', :action => 'show', :id => project}, :class => "menuItem") %> - <% end %> - <% end %> -</div> 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 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="description" content="<%= Redmine::Info.app_name %>" /> <meta name="keywords" content="issue,bug,tracker" /> -<!--[if IE]> - <style type="text/css"> - body {behavior: url(<%= stylesheet_path "csshover.htc" %>);} - </style> -<![endif]--> <%= stylesheet_link_tag "application" %> <%= stylesheet_link_tag "print", :media => "print" %> <%= javascript_include_tag :defaults %> -<%= javascript_include_tag 'menu' %> <%= stylesheet_link_tag 'jstoolbar' %> +<!--[if IE]> + <style type="text/css"> + * html body{ width: expression( document.documentElement.clientWidth < 900 ? '900px' : '100%' ); } + body {behavior: url(<%= stylesheet_path "csshover.htc" %>);} + </style> +<![endif]--> + <!-- page specific tags --><%= yield :header_tags %> </head> - <body> -<div id="container" > - - <div id="header"> - <div style="float: left;"> - <h1><%= Setting.app_title %></h1> - <h2><%= Setting.app_subtitle %></h2> - </div> - <div style="float: right; padding-right: 1em; padding-top: 0.2em;"> - <% if User.current.logged? %><small><%=l(:label_logged_as)%> <strong><%= User.current.login %></strong> -</small><% end %> - <small><%= toggle_link l(:label_search), 'quick-search-form', :focus => 'quick-search-input' %></small> - <% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get, :id => 'quick-search-form', :style => "display:none;" ) do %> - <%= text_field_tag 'q', @question, :size => 15, :class => 'small', :id => 'quick-search-input' %> - <% end %> +<div id="top-menu"> + <div id="account"> + <% if User.current.logged? %> + <%=l(:label_logged_as)%> <%= User.current.login %> - + <%= link_to l(:label_my_account), { :controller => 'my', :action => 'account' } %> + <%= link_to l(:label_logout), { :controller => 'account', :action => 'logout' } %> + <% else %> + <%= link_to l(:label_login), { :controller => 'account', :action => 'login' } %> + <%= link_to(l(:label_register), :controller => 'account',:action => 'register') if Setting.self_registration? %> + <% end %> </div> + <%= link_to l(:label_home), { :controller => 'welcome' } %> + <%= link_to l(:label_my_page), { :controller => 'my', :action => 'page'} if User.current.logged? %> + <%= link_to l(:label_project_plural), { :controller => 'projects' } %> + <%= link_to l(:label_administration), { :controller => 'admin' } if User.current.admin? %> +</div> + +<div id="header"> + <div id="quick-search"> + <% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get ) do %> + <%= link_to l(:label_search), :controller => 'search', :action => 'index', :id => @project %>: <%= text_field_tag 'q', @question, :size => 20, :class => 'small' %> + <% end %> + <%= render :partial => 'layouts/project_selector' if User.current.memberships.any? %> </div> - - <div id="navigation"> - <ul> - <li><%= link_to l(:label_home), { :controller => 'welcome' }, :class => "icon icon-home" %></li> - <li><%= link_to l(:label_my_page), { :controller => 'my', :action => 'page'}, :class => "icon icon-mypage" %></li> - - <% if User.current.memberships.any? %> - <li class="submenu"><%= link_to l(:label_project_plural), { :controller => 'projects' }, :class => "icon icon-projects", :onmouseover => "buttonMouseover(event, 'menuAllProjects');" %></li> - <% else %> - <li><%= link_to l(:label_project_plural), { :controller => 'projects' }, :class => "icon icon-projects" %></li> - <% end %> - - <% if User.current.logged? %> - <li><%= link_to l(:label_my_account), { :controller => 'my', :action => 'account' }, :class => "icon icon-user" %></li> - <% end %> - - <% if User.current.admin? %> - <li class="submenu"><%= link_to l(:label_administration), { :controller => 'admin' }, :class => "icon icon-admin", :onmouseover => "buttonMouseover(event, 'menuAdmin');" %></li> - <% end %> - - <li class="right"><%= link_to l(:label_help), { :controller => 'help', :ctrl => params[:controller], :page => params[:action] }, :onclick => "window.open(this.href); return false;", :class => "icon icon-help" %></li> - - <% if User.current.logged? %> - <li class="right"><%= link_to l(:label_logout), { :controller => 'account', :action => 'logout' }, :class => "icon icon-user" %></li> - <% else %> - <li class="right"><%= link_to l(:label_login), { :controller => 'account', :action => 'login' }, :class => "icon icon-user" %></li> - <% end %> - </ul> - </div> - - <%= render(:partial => 'admin/menu') if User.current.admin? %> - <%= render(:partial => 'layouts/projects_menu') if User.current.memberships.any? %> - - <div id="subcontent"> - <% if @project && !@project.new_record? %> - <h2><%= @project.name %></h2> - <ul class="menublock"> + + <h1><%= h(@project ? @project.name : Setting.app_title) %></h1> + + <div id="main-menu"> + <ul> <% Redmine::MenuManager.allowed_items(:project_menu, User.current, @project).each do |item| %> <% unless item.condition && !item.condition.call(@project) %> <li><%= link_to l(item.name), {item.param => @project}.merge(item.url) %></li> <% end %> - <% end %> - </ul> - <% end %> - </div> - - <div id="content"> - <div id="flash"> - <%= content_tag('div', flash[:error], :class => 'error') if flash[:error] %> - <%= content_tag('div', flash[:notice], :class => 'notice') if flash[:notice] %> - </div> - <%= yield %> - </div> - - <div id="ajax-indicator" style="display:none;"> - <span><%= l(:label_loading) %></span> - </div> + <% end if @project && !@project.new_record? %> + </ul> + </div> +</div> - <div id="footer"> - <p><%= link_to Redmine::Info.app_name, Redmine::Info.url %> <small><%= Redmine::VERSION %> © 2006-2007 Jean-Philippe Lang</small></p> - </div> +<%= tag('div', {:id => 'main', :class => (has_content?(:sidebar) ? '' : 'nosidebar')}, true) %> + <div id="sidebar"> + <%= yield :sidebar %> + </div> + + <div id="content"> + <div id="flash"> + <%= content_tag('div', flash[:error], :class => 'error') if flash[:error] %> + <%= content_tag('div', flash[:notice], :class => 'notice') if flash[:notice] %> + </div> + <%= yield %> + </div> +</div> +<div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div> + +<div id="footer"> + <%= link_to Redmine::Info.app_name, Redmine::Info.url %> <%= Redmine::VERSION %> © 2006-2007 Jean-Philippe Lang </div> </body> </html> diff --git a/app/views/my/account.rhtml b/app/views/my/account.rhtml index c884de841..8250c5298 100644 --- a/app/views/my/account.rhtml +++ b/app/views/my/account.rhtml @@ -1,13 +1,5 @@ <h2><%=l(:label_my_account)%></h2> -<p><%=l(:field_login)%>: <strong><%= @user.login %></strong> -<br /><%=l(:field_created_on)%>: <%= format_time(@user.created_on) %> -<% if @user.rss_token %> -<br /><%= l(:label_feeds_access_key_created_on, distance_of_time_in_words(Time.now, @user.rss_token.created_on)) %> -(<%= link_to l(:button_reset), {:action => 'reset_rss_key'}, :method => :post %>) -<% end %> -</p> - <%= error_messages_for 'user' %> <div class="box"> @@ -50,3 +42,14 @@ <% end %> </div> <% end %> + +<% content_for :sidebar do %> + <h3><%=l(:label_my_account)%></h3> + + <p><%=l(:field_login)%>: <strong><%= @user.login %></strong><br /> + <%=l(:field_created_on)%>: <%= format_time(@user.created_on) %></p> + <% if @user.rss_token %> + <p><%= l(:label_feeds_access_key_created_on, distance_of_time_in_words(Time.now, @user.rss_token.created_on)) %> + (<%= link_to l(:button_reset), {:action => 'reset_rss_key'}, :method => :post %>)</p> + <% end %> +<% end %> diff --git a/app/views/my/blocks/_calendar.rhtml b/app/views/my/blocks/_calendar.rhtml index fa83b4d1d..a2d556d90 100644 --- a/app/views/my/blocks/_calendar.rhtml +++ b/app/views/my/blocks/_calendar.rhtml @@ -9,9 +9,9 @@ @issues ||= [] %> -<table class="list with-cells"> +<table class="cal"> <thead><tr> -<th></th> +<td></td> <% 1.upto(7) do |d| %> <th align="center" width="14%"><%= day_name(d) %></th> <% 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 @@ <p><%= 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 %><br /> -<% unless news.summary.blank? %><%=h news.summary %><br /><% end %> -<span class="author"><%= authoring news.created_on, news.author %> -<%= "<br />#{news.comments_count} #{lwr(:label_comment, news.comments_count).downcase}" if news.comments_count > 0 %></span></p> +<%= 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 %></span> +<br /> +<% unless news.summary.blank? %><span class="summary"><%=h news.summary %></span><br /><% end %> +<span class="author"><%= authoring news.created_on, news.author %></p> 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 @@ <h2><%=l(:label_activity)%>: <%= "#{month_name(@month).downcase} #{@year}" %></h2> -<div> -<div class="rightbox"> -<% form_tag do %> -<p><%= select_month(@month, :prefix => "month", :discard_type => true) %> -<%= select_year(@year, :prefix => "year", :discard_type => true) %></p> - -<p><% @event_types.each do |t| %> -<%= check_box_tag "show_#{t}", 1, @scope.include?(t) %> <%= l("label_#{t.singularize}_plural")%><br /> -<% end %></p> - -<p class="textcenter"><%= submit_tag l(:button_apply), :class => 'button-small' %></p> -<% end %> -</div> - <% @events_by_day.keys.sort {|x,y| y <=> x }.each do |day| %> <h3><%= day_name(day.cwday) %> <%= day.day %></h3> <ul> @@ -51,7 +37,10 @@ <% end %> </ul> <% end %> -<% if @events_by_day.empty? %><p><i><%= l(:label_no_data) %></i></p><% end %> + +<% if @events_by_day.empty? %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% end %> <div style="float:left;"> <% prev_params = params.clone.update :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1) %> @@ -65,8 +54,17 @@ </div> <br /> -</div> <% 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 %> +<h3><%= l(:label_activity) %></h3> +<p><% @event_types.each do |t| %> +<%= check_box_tag "show_#{t}", 1, @scope.include?(t) %> <%= l("label_#{t.singularize}_plural")%><br /> +<% end %></p> +<p><%= submit_tag l(:button_apply), :class => 'button-small' %></p> +<% 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 @@ <p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p> </div> -<div class="clear"> +<div style="clear: left;"> <p><%= f.text_field :subject, :size => 80, :required => true %></p> <p><%= f.text_area :description, :cols => 60, :rows => 10, :required => true, :class => 'wiki-edit' %></p> @@ -36,7 +36,6 @@ <p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%> <%= image_to_function "add.png", "addFileField();return false" %></label> <%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)</em></p> - </div> <!--[eoform:issue]--> </div> 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 %> -<h2><%= l(:label_calendar) %></h2> +<h2><%= l(:label_calendar) %>: <%= "#{month_name(@month).downcase} #{@year}" %></h2> -<% form_tag do %> <table width="100%"> -<tr> -<td align="left" style="width:15%"> +<tr><td align="left"> <%= 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])} %> -</td> -<td align="center" style="width:55%"> - <%= select_month(@month, :prefix => "month", :discard_type => true) %> - <%= select_year(@year, :prefix => "year", :discard_type => true) %> - <%= submit_tag l(:button_submit), :class => "button-small" %> -</td> -<td align="left" style="width:15%"> - <%= toggle_link l(:label_options), "trackerselect" %> - <div id="trackerselect" class="rightbox overlay" style="width:140px; display:none;"> - <p><strong><%=l(:label_tracker_plural)%></strong></p> - <% @trackers.each do |tracker| %> - <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> - <%= tracker.name %><br /> - <% end %> - <% if @project.active_children.any? %> - <p><strong><%=l(:label_subproject_plural)%></strong></p> - <%= check_box_tag "with_subprojects", 1, params[:with_subprojects] %> <%= l(:general_text_Yes) %> - <% end %> - <p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p> - </div> -</td> -<td align="right" style="width:15%"> +</td><td align="right"> <%= 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])} - %> -</td> -</tr> + %> +</td></tr> </table> -<% end %> -<table class="list with-cells"> +<table class="cal"> <thead> <tr> -<th></th> +<td></td> <% 1.upto(7) do |d| %> <th style="width:14%"><%= day_name(d) %></th> <% end %> @@ -56,7 +31,7 @@ while day <= @date_to if day.cwday == 1 %> <th><%= day.cweek %></th> <% end %> - <td valign="top" class="<%= day.month==@month ? "even" : "odd" %>" style="width:14%; <%= Date.today == day ? 'background:#FDFED0;' : '' %>"> + <td valign="top" class="<%= day.month==@month ? "even" : "odd" %> <%= Date.today == day ? 'today' : '' %>" style="width:14%;"> <p class="textright"><%= day==Date.today ? "<b>#{day.day}</b>" : day.day %></p> <% ((@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 %> - <small><%= link_to_issue i %><%= " (#{i.project.name})" unless @project && @project == i.project %>: <%=h i.subject.sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)') %></small> + <small> + <%= h("#{i.project.name} -") unless @project && @project == i.project %> + <%= link_to_issue i %>: + <%= h(truncate(i.subject, 30)) %> + </small> <span class="tip"> <%= render :partial => "issues/tooltip", :locals => { :issue => i }%> </span> @@ -90,3 +69,20 @@ end %> <%= image_tag 'arrow_to.png' %> <%= l(:text_tip_task_end_day) %><br /> <%= image_tag 'arrow_bw.png' %> <%= l(:text_tip_task_begin_end_day) %><br /> <% end %> + +<% content_for :sidebar do %> + <h3><%= l(:label_calendar) %></h3> + + <% form_tag() do %> + <p><%= select_month(@month, :prefix => "month", :discard_type => true) %> + <%= select_year(@year, :prefix => "year", :discard_type => true) %></p> + + <% @trackers.each do |tracker| %> + <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> <%= tracker.name %><br /> + <% end %> + <% if @project.active_children.any? %> + <br /><%= check_box_tag "with_subprojects", 1, params[:with_subprojects] %> <%=l(:label_subproject_plural)%> + <% end %> + <p><%= submit_tag l(:button_apply), :class => 'button-small' %></p> + <% 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 @@ <h2><%=l(:label_change_log)%></h2> -<div class="rightbox" style="width:140px;"> -<% form_tag do %> -<p><strong><%=l(:label_tracker_plural)%></strong><br /> -<% @trackers.each do |tracker| %> - <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> - <%= tracker.name %><br /> -<% end %></p> -<p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p> +<% if @versions.empty? %> +<p class="nodata"><%= l(:label_no_data) %></p> <% end %> -</div> - -<% if @versions.empty? %><p><i><%= l(:label_no_data) %></i></p><% end %> <% @versions.each do |version| %> <a name="<%= version.name %>"><h3 class="icon22 icon22-package"><%= version.name %></h3></a> @@ -33,3 +24,19 @@ </ul> <% end %> <% end %> + +<% content_for :sidebar do %> +<% form_tag do %> +<h3><%= l(:label_change_log) %></h3> +<% @trackers.each do |tracker| %> + <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> + <%= tracker.name %><br /> +<% end %> +<p><%= submit_tag l(:button_apply), :class => 'button-small' %></p> +<% end %> + +<h3><%= l(:label_version_plural) %></h3> +<% @versions.each do |version| %> +<%= link_to version.name, :anchor => version.name %><br /> +<% 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 %> <div class="contextual"> -<%= 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') %> </div> <h2><%= l(:label_gantt) %></h2> -<% form_tag do %> +<% form_tag(params.merge(:month => nil, :year => nil, :years => nil)) do %> <table width="100%"> <tr> <td align="left"> @@ -41,21 +38,7 @@ t_height = g_height + headers_height <%= hidden_field_tag 'zoom', @zoom %> <%= submit_tag l(:button_submit), :class => "button-small" %> </td> -<td> - <%= toggle_link l(:label_options), "trackerselect" %> - <div id="trackerselect" class="rightbox overlay" style="width:140px; display: none;"> - <p><strong><%=l(:label_tracker_plural)%></strong></p> - <% @trackers.each do |tracker| %> - <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> - <%= tracker.name %><br /> - <% end %> - <% if @project.active_children.any? %> - <p><strong><%=l(:label_subproject_plural)%></strong></p> - <%= check_box_tag "with_subprojects", 1, params[:with_subprojects] %> <%= l(:general_text_Yes) %> - <% end %> - <p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p> - </div> -</td> + <td align="right"> <%= 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 %> <td align="right"><%= 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] %></td> </tr> </table> + +<div class="contextual"><%= 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') %> +</div> + +<% content_for :sidebar do %> + <h3><%= l(:label_gantt) %></h3> + <% 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 %><br /> + <% end %> + <% if @project.active_children.any? %> + <br /><%= check_box_tag "with_subprojects", 1, params[:with_subprojects] %> <%=l(:label_subproject_plural)%> + <% end %> + <p><%= submit_tag l(:button_apply), :class => 'button-small' %></p> + <% 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 @@ <h2><%=l(:label_project_plural)%></h2> -<dl class="projects"> <% @project_tree.keys.sort.each do |project| %> -<dt><%= link_to project.name, {:action => 'show', :id => project}, :class => (User.current.member_of?(project) ? "icon icon-fav" : "") %> -<dd><%= textilizable(project.description, :project => project) %> +<h3><%= link_to project.name, {:action => 'show', :id => project}, :class => (User.current.member_of?(project) ? "icon icon-fav" : "") %></h3> +<%= textilizable(project.description, :project => project) %> <% if @project_tree[project].any? %> - <%= l(:label_subproject_plural) %>: + <p><%= 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(', ') %></p> <% end %> -</dd></dt> <% end %> -</dl> <% if User.current.logged? %> <div class="contextual"> 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 @@ <h2><%=l(:label_document_plural)%></h2> -<% if @documents.empty? %><p><i><%= l(:label_no_data) %></i></p><% end %> +<% if @documents.empty? %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% 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? %> - <div class="contextual"> - <%= 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 %> - </div> <h2><%=l(:label_issue_plural)%></h2> <% set_html_title l(:label_issue_plural) %> @@ -33,17 +29,19 @@ <br /> <% else %> <div class="contextual"> - <%= 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 %> - </div> + <% 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 %> + </div> + <h2><%= @query.name %></h2> <% set_html_title @query.name %> <% end %> <%= error_messages_for 'query' %> <% if @query.valid? %> <% if @issues.empty? %> -<p><i><%= l(:label_no_data) %></i></p> +<p class="nodata"><%= l(:label_no_data) %></p> <% else %> <% form_tag({:controller => 'projects', :action => 'move_issues', :id => @project}, :id => 'issues_form' ) do %> @@ -64,7 +62,7 @@ <th style="width:15px;"><%= check_box_tag "issue_ids[]", issue.id, false, :id => "issue_#{issue.id}" %></th> <td align="center"><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td> <td align="center"><%= issue.tracker.name %></td> - <td><div class="square" style="background:#<%= issue.status.html_color %>;"></div> <%= issue.status.name %></td> + <td><%= issue.status.name %></td> <td align="center"><%= issue.priority.name %></td> <td><%= "#{issue.project.name} - " unless @project && @project == issue.project %><%= link_to h(issue.subject), :controller => 'issues', :action => 'show', :id => issue %></td> <td align="center"><%= issue.assigned_to.name if issue.assigned_to %></td> @@ -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 @@ <h2><%=l(:label_news_plural)%></h2> -<% if @news.empty? %><p><i><%= l(:label_no_data) %></i></p><% end %> +<% if @news.empty? %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% 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 @@ <h2><%=l(:label_roadmap)%></h2> -<div class="rightbox"> -<% form_tag do %> -<p><strong><%=l(:label_tracker_plural)%></strong><br /> -<% @trackers.each do |tracker| %> - <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> - <%= tracker.name %><br /> -<% end %></p> -<p class="small"><label for="completed"><%= check_box_tag "completed", 1, params[:completed] %> <%= l(:label_show_completed_versions) %></label></p> -<p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p> +<% if @versions.empty? %> +<p class="nodata"><%= l(:label_no_data) %></p> <% end %> -</div> - -<% if @versions.empty? %><p><i><%= l(:label_no_data) %></i></p><% end %> <% @versions.each do |version| %> <a name="<%= version.name %>"><h3 class="icon22 icon22-package"><%= version.name %></h3></a> @@ -63,3 +53,21 @@ <% end %> </ul> <% end %> + +<% content_for :sidebar do %> +<% form_tag do %> +<h3><%= l(:label_roadmap) %></h3> +<% @trackers.each do |tracker| %> + <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> + <%= tracker.name %><br /> +<% end %> +<br /> +<label for="completed"><%= check_box_tag "completed", 1, params[:completed] %> <%= l(:label_show_completed_versions) %> +<p><%= submit_tag l(:button_apply), :class => 'button-small' %></p> +<% end %> + +<h3><%= l(:label_version_plural) %></h3> +<% @versions.each do |version| %> +<%= link_to version.name, :anchor => version.name %><br /> +<% end %> +<% end %> diff --git a/app/views/projects/settings/_boards.rhtml b/app/views/projects/settings/_boards.rhtml index e3f4629c1..bf6da3ab0 100644 --- a/app/views/projects/settings/_boards.rhtml +++ b/app/views/projects/settings/_boards.rhtml @@ -1,3 +1,4 @@ +<% if @project.boards.any? %> <table class="list"> <thead><th><%= l(:label_board) %></th><th><%= l(:field_description) %></th><th style="width:15%"></th><th style="width:15%"></th><th style="width:15%"></th></thead> <tbody> @@ -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 %> </td> - <td align="center"><small><%= link_to_if_authorized l(:button_edit), {:controller => 'boards', :action => 'edit', :project_id => @project, :id => board}, :class => 'icon icon-edit' %></small></td> - <td align="center"><small><%= 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' %></small></td> + <td align="center"><%= link_to_if_authorized l(:button_edit), {:controller => 'boards', :action => 'edit', :project_id => @project, :id => board}, :class => 'icon icon-edit' %></td> + <td align="center"><%= 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' %></td> </tr> <% end %> </tbody> </table> - +<% else %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% end %> + <p><%= link_to_if_authorized l(:label_board_new), {:controller => 'boards', :action => 'new', :project_id => @project} %></p> 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? %> <table class="list"> <thead> <th><%= l(:label_issue_category) %></th> @@ -11,12 +12,15 @@ <tr class="<%= cycle 'odd', 'even' %>"> <td><%=h(category.name) %></td> <td><%=h(category.assigned_to.name) if category.assigned_to %></td> - <td align="center"><small><%= link_to_if_authorized l(:button_edit), { :controller => 'issue_categories', :action => 'edit', :id => category }, :class => 'icon icon-edit' %></small></td> - <td align="center"><small><%= link_to_if_authorized l(:button_delete), {:controller => 'issue_categories', :action => 'destroy', :id => category}, :method => :post, :class => 'icon icon-del' %></small></td> + <td align="center"><%= link_to_if_authorized l(:button_edit), { :controller => 'issue_categories', :action => 'edit', :id => category }, :class => 'icon icon-edit' %></td> + <td align="center"><%= link_to_if_authorized l(:button_delete), {:controller => 'issue_categories', :action => 'destroy', :id => category}, :method => :post, :class => 'icon icon-del' %></td> </tr> <% end %> <% end %> </tbody> </table> - +<% else %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% end %> + <p><%= link_to_if_authorized l(:label_issue_category_new), :controller => 'projects', :action => 'add_issue_category', :id => @project %></p> 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? %> <table class="list"> <thead> <th><%= l(:label_user) %></th> @@ -9,7 +12,7 @@ <th style="width:15%"></th> </thead> <tbody> - <% @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? %> <tr class="<%= cycle 'odd', 'even' %>"> <td><%= member.name %></td> @@ -22,16 +25,18 @@ <% end %> </td> <td align="center"> - <small><%= 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' %></small> + :class => 'icon icon-del' %> </td> </tr> </tbody> <% end; reset_cycle %> </table> - +<% else %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% 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| %> <div class=box> +<strong>Select modules to enable for this project:</strong> +<br /> <% Redmine::AccessControl.available_project_modules.each do |m| %> <p><label><%= check_box_tag 'enabled_modules[]', m, @project.module_enabled?(m) %> <%= m.to_s.humanize %></label></p> <% 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? %> <table class="list"> <thead> <th><%= l(:label_version) %></th> @@ -14,12 +15,15 @@ <td align="center"><%= format_date(version.effective_date) %></td> <td><%=h version.description %></td> <td><%= link_to(version.wiki_page_title, :controller => 'wiki', :page => Wiki.titleize(version.wiki_page_title)) unless version.wiki_page_title.blank? || @project.wiki.nil? %></td> - <td align="center"><small><%= link_to_if_authorized l(:button_edit), { :controller => 'versions', :action => 'edit', :id => version }, :class => 'icon icon-edit' %></small></td> - <td align="center"><small><%= 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' %></small></td> + <td align="center"><%= link_to_if_authorized l(:button_edit), { :controller => 'versions', :action => 'edit', :id => version }, :class => 'icon icon-edit' %></td> + <td align="center"><%= 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' %></td> </td> </tr> <% end; reset_cycle %> </tbody> </table> - +<% else %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% end %> + <p><%= link_to_if_authorized l(:label_version_new), :controller => 'projects', :action => 'add_version', :id => @project %></p> 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 @@ -<div class="contextual"> -<%= link_to l(:label_feed_plural), {:action => 'feeds', :id => @project}, :class => 'icon icon-feed' %> -</div> - <h2><%=l(:label_overview)%></h2> <div class="splitcontentleft"> <%= textilizable @project.description %> <ul> <% unless @project.homepage.blank? %><li><%=l(:field_homepage)%>: <%= auto_link @project.homepage %></li><% end %> - <li><%=l(:field_created_on)%>: <%= format_date(@project.created_on) %></li> - <% unless @project.parent.nil? %> + <% if @subprojects.any? %> + <li><%=l(:label_subproject_plural)%>: <%= @subprojects.collect{|p| link_to(p.name, :action => 'show', :id => p)}.join(", ") %></li> + <% end %> + <% if @project.parent %> <li><%=l(:field_parent)%>: <%= link_to @project.parent.name, :controller => 'projects', :action => 'show', :id => @project.parent %></li> <% end %> <% for custom_value in @custom_values %> @@ -20,8 +18,7 @@ </ul> <% if User.current.allowed_to?(:view_issues, @project) %> - <div class="box"> - <div class="contextual"><% if authorize_for('projects', 'add_issue') %><%= l(:label_issue_new) %>: <%= new_issue_selector %><% end %></div> + <div class="box"> <h3 class="icon22 icon22-tracker"><%=l(:label_issue_tracking)%></h3> <ul> <% for tracker in @trackers %> @@ -32,35 +29,53 @@ <%= l(:label_on) %> <%= @total_issues_by_tracker[tracker] || 0 %></li> <% end %> </ul> - <p class="textcenter"><small><%= link_to l(:label_issue_view_all), :controller => 'projects', :action => 'list_issues', :id => @project, :set_filter => 1 %></small></p> + <p><%= link_to l(:label_issue_view_all), :controller => 'projects', :action => 'list_issues', :id => @project, :set_filter => 1 %></p> </div> <% end %> </div> <div class="splitcontentright"> + <% if @members_by_role.any? %> <div class="box"> <h3 class="icon22 icon22-users"><%=l(:label_member_plural)%></h3> - <% @members_by_role.keys.sort.each do |role| %> - <%= role.name %>: <%= @members_by_role[role].collect(&:user).sort.collect{|u| link_to_user u}.join(", ") %><br /> - <% end %> - </div> - - <% if @subprojects.any? %> - <div class="box"> - <h3 class="icon22 icon22-projects"><%=l(:label_subproject_plural)%></h3> - <%= @subprojects.collect{|p| link_to(p.name, :action => 'show', :id => p)}.join(", ") %> + <p><% @members_by_role.keys.sort.each do |role| %> + <%= role.name %>: + <%= @members_by_role[role].collect(&:user).sort.collect{|u| link_to_user u}.join(", ") %> + <br /> + <% end %></p> </div> - <% end %> - + <% end %> + <% if @news.any? && authorize_for('projects', 'list_news') %> <div class="box"> <h3><%=l(:label_news_latest)%></h3> <%= render :partial => 'news/news', :collection => @news %> - <p class="textcenter"><small><%= link_to l(:label_news_view_all), :controller => 'projects', :action => 'list_news', :id => @project %></small></p> + <p><%= link_to l(:label_news_view_all), :controller => 'projects', :action => 'list_news', :id => @project %></p> </div> <% end %> </div> +<% content_for :sidebar do %> + <% if authorize_for('projects', 'add_issue') %> + <h3><%= l(:label_issue_new) %></h3> + <%= l(:label_tracker) %>: <%= new_issue_selector %> + <% end %> + + <h3>Planning</h3> + <p><%= link_to_if_authorized l(:label_calendar), :action => 'calendar', :id => @project %> | + <%= link_to_if_authorized l(:label_gantt), :action => 'gantt', :id => @project %></p> + + <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %> + <h3><%= l(:label_spent_time) %></h3> + <p><span class="icon icon-time"><%= lwr(:label_f_hour, @total_hours) %></span></p> + <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'details', :project_id => @project}) %> | + <%= link_to(l(:label_report), {:controller => 'timelog', :action => 'report', :project_id => @project}) %></p> + <% end %> + + <hr /> + <p><%= link_to l(:label_feed_plural), {:action => 'feeds', :id => @project}, :class => 'icon icon-feed' %></p> +<% 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 @@ <thead><tr> <th style="width:25%"></th> <% for status in @statuses %> -<th style="text-align:left;width:<%= col_width %>%"><div class="square" style="background:#<%= status.html_color %>;"></div> <small><%= status.name %></small></th> +<th style="width:<%= col_width %>%"><%= status.name %></th> <% end %> <th align="center" style="width:<%= col_width %>%"><strong><%=l(:label_open_issues_plural)%></strong></th> <th align="center" style="width:<%= col_width %>%"><strong><%=l(:label_closed_issues_plural)%></strong></th> 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) %> -<div style="float:right;text-align:right;"> -<strong><%= l(:label_spent_time) %></strong>: <span class="icon icon-time"><%= lwr(:label_f_hour, @total_hours) %></span><br /> -<%= link_to(l(:label_details), {:controller => 'timelog', :action => 'details', :project_id => @project}) %> | -<%= link_to(l(:label_report), {:controller => 'timelog', :action => 'report', :project_id => @project}) %> -</div> -<% end %> - <h2><%=l(:label_report_plural)%></h2> <div class="splitcontentleft"> 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 @@ <div class="contextual"> <% form_tag do %> -<p><%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 5 %> -<%= submit_tag 'OK' %></p> +<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 5 %> <% end %> </div> 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()}" %></p> <% end %> +<div class="autoscroll"> <% cache(@cache_key) do %> <% @diff.each do |table_file| %> <% if @diff_type == 'sbs' %> - <table class="list CodeRay"> + <table class="filecontent CodeRay"> <thead> <tr> - <th colspan="4" class="list-filename"> + <th colspan="4" class="filename"> <%= table_file.file_name %> </th> </tr> @@ -47,10 +48,10 @@ </table> <% else %> - <table class="list CodeRay"> + <table class="filecontent CodeRay"> <thead> <tr> - <th colspan="3" class="list-filename"> + <th colspan="3" class="filename"> <%= table_file.file_name %> </th> </tr> @@ -85,6 +86,7 @@ <% end %> <% end %> <% end %> +</div> <% 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 @@ <h2><%= render :partial => 'navigation', :locals => { :path => @path, :kind => 'file', :revision => @rev } %></h2> -<table class="list CodeRay"> +<div class="autoscroll"> +<table class="filecontent CodeRay"> <thead> <tr> - <th colspan="2" class="list-filename"><%= @path %></th> + <th colspan="2" class="filename"><%= @path %></th> </tr> </thead> <tbody> @@ -17,6 +18,7 @@ <% end %> <tbody> </table> +</div> <% 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 @@ <div class="contextual"> <% form_tag do %> -<p><%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 5 %> -<%= submit_tag 'OK' %></p> +<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 5 %> +<%= submit_tag 'OK' %> <% end %> </div> 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 @@ <p><%= f.check_box :assignable %></p> </div> -<div class="box"> -<h3><%= l(:label_permissions) %></h3> +<h3><%= l(:label_permissions) %></h3> +<div class="box"> <% perms_by_module = @permissions.group_by {|p| p.project_module.to_s} %> <% perms_by_module.keys.sort.each do |mod| %> <fieldset><legend><%= mod.blank? ? l(:label_project) : mod.humanize %></legend> 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 %> </td> <td align="center" style="width:10%;"> - <%= 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? ) %> </tr> <% end %> </tbody> 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 @@ <p><%=l(:text_workflow_edit)%>:</p> <% form_tag({:action => 'workflow'}, :method => 'get') do %> -<div style="float:left;margin-right:10px;"> -<p><label for="role_id"><%=l(:label_role)%></label><br/> +<p><label for="role_id"><%=l(:label_role)%>:</label> <select id="role_id" name="role_id"> <%= options_from_collection_for_select @roles, "id", "name", (@role.id unless @role.nil?) %> -</select></p> -</div> +</select> -<div> -<p><label for="tracker_id"><%=l(:label_tracker)%></label><br/> +<label for="tracker_id"><%=l(:label_tracker)%>:</label> <select id="tracker_id" name="tracker_id"> <%= options_from_collection_for_select @trackers, "id", "name", (@tracker.id unless @tracker.nil?) %> </select> - <%= submit_tag l(:button_edit) %> </p> -</div> <% end %> <% unless @tracker.nil? or @role.nil? %> +<% form_tag({:action => 'workflow', :role_id => @role, :tracker_id => @tracker }, :id => 'workflow_form' ) do %> <div class="box"> - <% form_tag({:action => 'workflow', :role_id => @role, :tracker_id => @tracker }, :id => 'workflow_form' ) do %> <table> <tr> <td align="center"><strong><%=l(:label_current_status)%></strong></td> @@ -40,7 +35,7 @@ <% for old_status in @statuses %> <tr> - <td><div class="square" style="background:#<%= old_status.html_color %>;"></div> <%= old_status.name %></td> + <td><%= old_status.name %></td> <% for new_status in @statuses %> <td align="center"> @@ -55,14 +50,9 @@ </tr> <% end %> </table> -<br /> -<p> -<a href="javascript:checkAll('workflow_form', true)"><%=l(:button_check_all)%></a> | -<a href="javascript:checkAll('workflow_form', false)"><%=l(:button_uncheck_all)%></a> -</p> -<br /> + <p><%= check_all_links 'workflow_form' %></p> +</div> <%= submit_tag l(:button_save) %> <% end %> <% end %> -</div>
\ 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 @@ <ul> <% for project in @projects %> <li> - <%= link_to project.name, :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>)<br /> + <%= link_to project.name, :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>) <%= textilizable project.description, :project => project %> </li> <% 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 @@ +<h3><%= l(:label_wiki) %></h3> + +<%= 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') %> </div> <% 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 Binary files differnew file mode 100644 index 000000000..eb6d75080 --- /dev/null +++ b/public/images/contentbg.png diff --git a/public/images/mainbg.png b/public/images/mainbg.png Binary files differnew file mode 100644 index 000000000..29713c3c1 --- /dev/null +++ b/public/images/mainbg.png diff --git a/public/images/note.png b/public/images/note.png Binary files differnew file mode 100644 index 000000000..256368397 --- /dev/null +++ b/public/images/note.png 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<arguments.length;i++)this[this.length]=arguments[i];};}; - -//---------------------------------------------------------------------------- -// Code to determine the browser and version. -//---------------------------------------------------------------------------- - -function Browser() { - - var ua, s, i; - - this.isIE = false; // Internet Explorer - this.isOP = false; // Opera - this.isNS = false; // Netscape - this.version = null; - //-- debut ajout ci ---- - this.isIE5mac = false; // Internet Explorer 5 mac - //-- fin ajout ci ---- - - ua = navigator.userAgent; - - //-- debut ajout ci ---- - if (ua.indexOf("Opera")==-1 && ua.indexOf("MSIE 5")>-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 } |