summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/projects_controller.rb2
-rw-r--r--app/controllers/reports_controller.rb2
-rw-r--r--app/controllers/roles_controller.rb1
-rw-r--r--app/helpers/application_helper.rb18
-rw-r--r--app/views/account/login.rhtml57
-rw-r--r--app/views/account/lost_password.rhtml9
-rw-r--r--app/views/account/password_recovery.rhtml25
-rw-r--r--app/views/boards/show.rhtml5
-rw-r--r--app/views/issue_relations/_form.rhtml4
-rw-r--r--app/views/issue_statuses/list.rhtml2
-rw-r--r--app/views/issues/_list_simple.rhtml2
-rw-r--r--app/views/issues/_relations.rhtml21
-rw-r--r--app/views/issues/_sidebar.rhtml18
-rw-r--r--app/views/issues/edit.rhtml2
-rw-r--r--app/views/issues/index.rhtml2
-rw-r--r--app/views/issues/show.rhtml52
-rw-r--r--app/views/layouts/_project_selector.rhtml12
-rw-r--r--app/views/layouts/_projects_menu.rhtml12
-rw-r--r--app/views/layouts/base.rhtml131
-rw-r--r--app/views/my/account.rhtml19
-rw-r--r--app/views/my/blocks/_calendar.rhtml4
-rw-r--r--app/views/news/_news.rhtml9
-rw-r--r--app/views/projects/activity.rhtml30
-rw-r--r--app/views/projects/add_issue.rhtml3
-rw-r--r--app/views/projects/calendar.rhtml64
-rw-r--r--app/views/projects/changelog.rhtml29
-rw-r--r--app/views/projects/gantt.rhtml39
-rw-r--r--app/views/projects/list.rhtml11
-rw-r--r--app/views/projects/list_documents.rhtml4
-rw-r--r--app/views/projects/list_issues.rhtml22
-rw-r--r--app/views/projects/list_news.rhtml6
-rw-r--r--app/views/projects/roadmap.rhtml32
-rw-r--r--app/views/projects/settings/_boards.rhtml10
-rw-r--r--app/views/projects/settings/_issue_categories.rhtml10
-rw-r--r--app/views/projects/settings/_members.rhtml15
-rw-r--r--app/views/projects/settings/_modules.rhtml2
-rw-r--r--app/views/projects/settings/_versions.rhtml10
-rw-r--r--app/views/projects/show.rhtml57
-rw-r--r--app/views/reports/_details.rhtml2
-rw-r--r--app/views/reports/issue_report.rhtml8
-rw-r--r--app/views/repositories/browse.rhtml3
-rw-r--r--app/views/repositories/diff.rhtml10
-rw-r--r--app/views/repositories/entry.rhtml6
-rw-r--r--app/views/repositories/revision.rhtml4
-rw-r--r--app/views/roles/_form.rhtml4
-rw-r--r--app/views/roles/list.rhtml2
-rw-r--r--app/views/roles/workflow.rhtml24
-rw-r--r--app/views/welcome/index.rhtml2
-rw-r--r--app/views/wiki/_sidebar.rhtml4
-rw-r--r--app/views/wiki/show.rhtml5
-rw-r--r--lang/bg.yml1
-rw-r--r--lang/de.yml1
-rw-r--r--lang/en.yml5
-rw-r--r--lang/es.yml1
-rw-r--r--lang/fr.yml1
-rw-r--r--lang/it.yml1
-rw-r--r--lang/ja.yml1
-rw-r--r--lang/nl.yml1
-rw-r--r--lang/pt-br.yml1
-rw-r--r--lang/pt.yml1
-rw-r--r--lang/sv.yml1
-rw-r--r--lang/zh.yml1
-rw-r--r--lib/redmine.rb9
-rw-r--r--public/images/contentbg.pngbin0 -> 152 bytes
-rw-r--r--public/images/mainbg.pngbin0 -> 150 bytes
-rw-r--r--public/images/note.pngbin0 -> 469 bytes
-rw-r--r--public/javascripts/menu.js556
-rw-r--r--public/stylesheets/application.css897
-rw-r--r--public/stylesheets/calendar.css8
-rw-r--r--public/stylesheets/print.css5
-rw-r--r--public/stylesheets/scm.css23
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)%> &#187;" 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)%> &#187;" />
+ </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') %>&nbsp;
- <% 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>
&nbsp;
-<% 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', ('&#187; ' + 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(('&#187; ' + 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 %> &copy 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 %> &copy 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 @@
&nbsp;
</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 ('&#171; ' + (@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)}") + ' &#187;'),
{: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])}
- %>&nbsp;
-</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' %>&nbsp;&nbsp;<%= l(:text_tip_task_end_day) %><br />
<%= image_tag 'arrow_bw.png' %>&nbsp;&nbsp;<%= 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) + ' &#187;'), :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 %>
&nbsp;
<% 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>
-&nbsp;
+<% 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>
-&nbsp;
+<% 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>
-&nbsp;
+<% 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>
-&nbsp;
+<% 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
new file mode 100644
index 000000000..eb6d75080
--- /dev/null
+++ b/public/images/contentbg.png
Binary files differ
diff --git a/public/images/mainbg.png b/public/images/mainbg.png
new file mode 100644
index 000000000..29713c3c1
--- /dev/null
+++ b/public/images/mainbg.png
Binary files differ
diff --git a/public/images/note.png b/public/images/note.png
new file mode 100644
index 000000000..256368397
--- /dev/null
+++ b/public/images/note.png
Binary files differ
diff --git a/public/javascripts/menu.js b/public/javascripts/menu.js
deleted file mode 100644
index 63e3fe66e..000000000
--- a/public/javascripts/menu.js
+++ /dev/null
@@ -1,556 +0,0 @@
-//*****************************************************************************
-// Do not remove this notice.
-//
-// Copyright 2000-2004 by Mike Hall.
-// See http://www.brainjar.com for terms of use.
-//*****************************************************************************
-
-//----------------------------------------------------------------------------
-// Emulation de la fonction push pour IE5.0
-//----------------------------------------------------------------------------
-if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0;i<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 }