##// END OF EJS Templates
Reverts r16051 and r16050 for now (#15361)....
Jean-Philippe Lang -
r15670:49fcec80b7eb
parent child
Show More
@@ -1,18 +1,18
1 <h2><%=l(:label_information_plural)%></h2>
1 <h2><%=l(:label_information_plural)%></h2>
2
2
3 <p><strong><%= Redmine::Info.versioned_name %></strong></p>
3 <p><strong><%= Redmine::Info.versioned_name %></strong></p>
4
4
5 <table class="list">
5 <table class="list">
6 <% @checklist.each do |label, result| %>
6 <% @checklist.each do |label, result| %>
7 <tr>
7 <tr class="<%= cycle 'odd', 'even' %>">
8 <td class="name"><%= label.is_a?(Symbol) ? l(label) : label %></td>
8 <td class="name"><%= label.is_a?(Symbol) ? l(label) : label %></td>
9 <td class="tick"><span class="icon-only <%= (result ? 'icon-ok' : 'icon-error') %>"></span></td>
9 <td class="tick"><span class="icon-only <%= (result ? 'icon-ok' : 'icon-error') %>"></span></td>
10 </tr>
10 </tr>
11 <% end %>
11 <% end %>
12 </table>
12 </table>
13 <br />
13 <br />
14 <div class="box">
14 <div class="box">
15 <pre><%= Redmine::Info.environment %></pre>
15 <pre><%= Redmine::Info.environment %></pre>
16 </div>
16 </div>
17
17
18 <% html_title(l(:label_information_plural)) -%>
18 <% html_title(l(:label_information_plural)) -%>
@@ -1,63 +1,63
1 <%= title l(:label_plugins) %>
1 <%= title l(:label_plugins) %>
2
2
3 <% if @plugins.any? %>
3 <% if @plugins.any? %>
4 <table class="list plugins">
4 <table class="list plugins">
5 <% @plugins.each do |plugin| %>
5 <% @plugins.each do |plugin| %>
6 <tr id="plugin-<%= plugin.id %>">
6 <tr id="plugin-<%= plugin.id %>" class="<%= cycle('odd', 'even') %>">
7 <td class="name"><span class="name"><%= plugin.name %></span>
7 <td class="name"><span class="name"><%= plugin.name %></span>
8 <%= content_tag('span', plugin.description, :class => 'description') unless plugin.description.blank? %>
8 <%= content_tag('span', plugin.description, :class => 'description') unless plugin.description.blank? %>
9 <%= content_tag('span', link_to(plugin.url, plugin.url), :class => 'url') unless plugin.url.blank? %>
9 <%= content_tag('span', link_to(plugin.url, plugin.url), :class => 'url') unless plugin.url.blank? %>
10 </td>
10 </td>
11 <td class="author"><%= plugin.author_url.blank? ? plugin.author : link_to(plugin.author, plugin.author_url) %></td>
11 <td class="author"><%= plugin.author_url.blank? ? plugin.author : link_to(plugin.author, plugin.author_url) %></td>
12 <td class="version"><span class="icon"><%= plugin.version %></span></td>
12 <td class="version"><span class="icon"><%= plugin.version %></span></td>
13 <td class="configure"><%= link_to(l(:button_configure), plugin_settings_path(plugin)) if plugin.configurable? %></td>
13 <td class="configure"><%= link_to(l(:button_configure), plugin_settings_path(plugin)) if plugin.configurable? %></td>
14 </tr>
14 </tr>
15 <% end %>
15 <% end %>
16 </table>
16 </table>
17 <p><a href="#" id="check-for-updates"><%= l(:label_check_for_updates) %></a></p>
17 <p><a href="#" id="check-for-updates"><%= l(:label_check_for_updates) %></a></p>
18 <% else %>
18 <% else %>
19 <p class="nodata"><%= l(:label_no_data) %></p>
19 <p class="nodata"><%= l(:label_no_data) %></p>
20 <% end %>
20 <% end %>
21
21
22 <%= javascript_tag do %>
22 <%= javascript_tag do %>
23 $(document).ready(function(){
23 $(document).ready(function(){
24 $("#check-for-updates").click(function(e){
24 $("#check-for-updates").click(function(e){
25 e.preventDefault();
25 e.preventDefault();
26 $.ajax({
26 $.ajax({
27 dataType: "jsonp",
27 dataType: "jsonp",
28 url: "https://www.redmine.org/plugins/check_updates",
28 url: "https://www.redmine.org/plugins/check_updates",
29 data: <%= raw_json plugin_data_for_updates(@plugins) %>,
29 data: <%= raw_json plugin_data_for_updates(@plugins) %>,
30 timeout: 3000,
30 timeout: 3000,
31 beforeSend: function(){
31 beforeSend: function(){
32 $('#ajax-indicator').show();
32 $('#ajax-indicator').show();
33 },
33 },
34 success: function(data){
34 success: function(data){
35 $('#ajax-indicator').hide();
35 $('#ajax-indicator').hide();
36 $("table.plugins td.version span").addClass("unknown");
36 $("table.plugins td.version span").addClass("unknown");
37 $.each(data, function(plugin_id, plugin_data){
37 $.each(data, function(plugin_id, plugin_data){
38 var s = $("tr#plugin-"+plugin_id+" td.version span");
38 var s = $("tr#plugin-"+plugin_id+" td.version span");
39 s.removeClass("icon-ok icon-warning unknown");
39 s.removeClass("icon-ok icon-warning unknown");
40 if (plugin_data.url) {
40 if (plugin_data.url) {
41 if (s.parent("a").length>0) {
41 if (s.parent("a").length>0) {
42 s.unwrap();
42 s.unwrap();
43 }
43 }
44 s.addClass("found");
44 s.addClass("found");
45 s.wrap($("<a></a>").attr("href", plugin_data.url).attr("target", "_blank"));
45 s.wrap($("<a></a>").attr("href", plugin_data.url).attr("target", "_blank"));
46 }
46 }
47 if (plugin_data.c == s.text()) {
47 if (plugin_data.c == s.text()) {
48 s.addClass("icon-ok");
48 s.addClass("icon-ok");
49 } else if (plugin_data.c) {
49 } else if (plugin_data.c) {
50 s.addClass("icon-warning");
50 s.addClass("icon-warning");
51 s.attr("title", "<%= escape_javascript l(:label_latest_compatible_version) %>: "+plugin_data.c);
51 s.attr("title", "<%= escape_javascript l(:label_latest_compatible_version) %>: "+plugin_data.c);
52 }
52 }
53 });
53 });
54 $("table.plugins td.version span.unknown").addClass("icon-help").attr("title", "<%= escape_javascript l(:label_unknown_plugin) %>");
54 $("table.plugins td.version span.unknown").addClass("icon-help").attr("title", "<%= escape_javascript l(:label_unknown_plugin) %>");
55 },
55 },
56 error: function(){
56 error: function(){
57 $('#ajax-indicator').hide();
57 $('#ajax-indicator').hide();
58 alert("Unable to retrieve plugin informations from www.redmine.org");
58 alert("Unable to retrieve plugin informations from www.redmine.org");
59 }
59 }
60 });
60 });
61 });
61 });
62 });
62 });
63 <% end if @plugins.any? %>
63 <% end if @plugins.any? %>
@@ -1,48 +1,48
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to l(:label_project_new), new_project_path, :class => 'icon icon-add' %>
2 <%= link_to l(:label_project_new), new_project_path, :class => 'icon icon-add' %>
3 </div>
3 </div>
4
4
5 <%= title l(:label_project_plural) %>
5 <%= title l(:label_project_plural) %>
6
6
7 <%= form_tag({}, :method => :get) do %>
7 <%= form_tag({}, :method => :get) do %>
8 <fieldset><legend><%= l(:label_filter_plural) %></legend>
8 <fieldset><legend><%= l(:label_filter_plural) %></legend>
9 <label for='status'><%= l(:field_status) %> :</label>
9 <label for='status'><%= l(:field_status) %> :</label>
10 <%= select_tag 'status', project_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
10 <%= select_tag 'status', project_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
11 <label for='name'><%= l(:label_project) %>:</label>
11 <label for='name'><%= l(:label_project) %>:</label>
12 <%= text_field_tag 'name', params[:name], :size => 30 %>
12 <%= text_field_tag 'name', params[:name], :size => 30 %>
13 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
13 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
14 <%= link_to l(:button_clear), admin_projects_path, :class => 'icon icon-reload' %>
14 <%= link_to l(:button_clear), admin_projects_path, :class => 'icon icon-reload' %>
15 </fieldset>
15 </fieldset>
16 <% end %>
16 <% end %>
17 &nbsp;
17 &nbsp;
18
18
19 <% if @projects.any? %>
19 <% if @projects.any? %>
20 <div class="autoscroll">
20 <div class="autoscroll">
21 <table class="list">
21 <table class="list">
22 <thead><tr>
22 <thead><tr>
23 <th><%=l(:label_project)%></th>
23 <th><%=l(:label_project)%></th>
24 <th><%=l(:field_is_public)%></th>
24 <th><%=l(:field_is_public)%></th>
25 <th><%=l(:field_created_on)%></th>
25 <th><%=l(:field_created_on)%></th>
26 <th></th>
26 <th></th>
27 </tr></thead>
27 </tr></thead>
28 <tbody>
28 <tbody>
29 <% project_tree(@projects, :init_level => true) do |project, level| %>
29 <% project_tree(@projects, :init_level => true) do |project, level| %>
30 <tr class="<%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
30 <tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
31 <td class="name"><span><%= link_to_project_settings(project, {}, :title => project.short_description) %></span></td>
31 <td class="name"><span><%= link_to_project_settings(project, {}, :title => project.short_description) %></span></td>
32 <td><%= checked_image project.is_public? %></td>
32 <td><%= checked_image project.is_public? %></td>
33 <td><%= format_date(project.created_on) %></td>
33 <td><%= format_date(project.created_on) %></td>
34 <td class="buttons">
34 <td class="buttons">
35 <%= link_to(l(:button_archive), archive_project_path(project, :status => params[:status]), :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-lock') unless project.archived? %>
35 <%= link_to(l(:button_archive), archive_project_path(project, :status => params[:status]), :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-lock') unless project.archived? %>
36 <%= link_to(l(:button_unarchive), unarchive_project_path(project, :status => params[:status]), :method => :post, :class => 'icon icon-unlock') if project.archived? && (project.parent.nil? || !project.parent.archived?) %>
36 <%= link_to(l(:button_unarchive), unarchive_project_path(project, :status => params[:status]), :method => :post, :class => 'icon icon-unlock') if project.archived? && (project.parent.nil? || !project.parent.archived?) %>
37 <%= link_to(l(:button_copy), copy_project_path(project), :class => 'icon icon-copy') %>
37 <%= link_to(l(:button_copy), copy_project_path(project), :class => 'icon icon-copy') %>
38 <%= link_to(l(:button_delete), project_path(project), :method => :delete, :class => 'icon icon-del') %>
38 <%= link_to(l(:button_delete), project_path(project), :method => :delete, :class => 'icon icon-del') %>
39 </td>
39 </td>
40 </tr>
40 </tr>
41 <% end %>
41 <% end %>
42 </tbody>
42 </tbody>
43 </table>
43 </table>
44 </div>
44 </div>
45 <span class="pagination"><%= pagination_links_full @project_pages, @project_count %></span>
45 <span class="pagination"><%= pagination_links_full @project_pages, @project_count %></span>
46 <% else %>
46 <% else %>
47 <p class="nodata"><%= l(:label_no_data) %></p>
47 <p class="nodata"><%= l(:label_no_data) %></p>
48 <% end %>
48 <% end %>
@@ -1,31 +1,31
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to l(:label_auth_source_new), {:action => 'new'}, :class => 'icon icon-add' %>
2 <%= link_to l(:label_auth_source_new), {:action => 'new'}, :class => 'icon icon-add' %>
3 </div>
3 </div>
4
4
5 <%= title l(:label_auth_source_plural) %>
5 <%= title l(:label_auth_source_plural) %>
6
6
7 <table class="list">
7 <table class="list">
8 <thead><tr>
8 <thead><tr>
9 <th><%=l(:field_name)%></th>
9 <th><%=l(:field_name)%></th>
10 <th><%=l(:field_type)%></th>
10 <th><%=l(:field_type)%></th>
11 <th><%=l(:field_host)%></th>
11 <th><%=l(:field_host)%></th>
12 <th><%=l(:label_user_plural)%></th>
12 <th><%=l(:label_user_plural)%></th>
13 <th></th>
13 <th></th>
14 </tr></thead>
14 </tr></thead>
15 <tbody>
15 <tbody>
16 <% for source in @auth_sources %>
16 <% for source in @auth_sources %>
17 <tr id="auth-source-<%= source.id %>">
17 <tr id="auth-source-<%= source.id %>" class="<%= cycle("odd", "even") %>">
18 <td class="name"><%= link_to(source.name, :action => 'edit', :id => source)%></td>
18 <td class="name"><%= link_to(source.name, :action => 'edit', :id => source)%></td>
19 <td><%= source.auth_method_name %></td>
19 <td><%= source.auth_method_name %></td>
20 <td><%= source.host %></td>
20 <td><%= source.host %></td>
21 <td><%= source.users.count %></td>
21 <td><%= source.users.count %></td>
22 <td class="buttons">
22 <td class="buttons">
23 <%= link_to l(:button_test), try_connection_auth_source_path(source), :class => 'icon icon-test' %>
23 <%= link_to l(:button_test), try_connection_auth_source_path(source), :class => 'icon icon-test' %>
24 <%= delete_link auth_source_path(source) %>
24 <%= delete_link auth_source_path(source) %>
25 </td>
25 </td>
26 </tr>
26 </tr>
27 <% end %>
27 <% end %>
28 </tbody>
28 </tbody>
29 </table>
29 </table>
30
30
31 <span class="pagination"><%= pagination_links_full @auth_source_pages %></span>
31 <span class="pagination"><%= pagination_links_full @auth_source_pages %></span>
@@ -1,38 +1,38
1 <h2><%= l(:label_board_plural) %></h2>
1 <h2><%= l(:label_board_plural) %></h2>
2
2
3 <table class="list boards">
3 <table class="list boards">
4 <thead><tr>
4 <thead><tr>
5 <th><%= l(:label_board) %></th>
5 <th><%= l(:label_board) %></th>
6 <th><%= l(:label_topic_plural) %></th>
6 <th><%= l(:label_topic_plural) %></th>
7 <th><%= l(:label_message_plural) %></th>
7 <th><%= l(:label_message_plural) %></th>
8 <th><%= l(:label_message_last) %></th>
8 <th><%= l(:label_message_last) %></th>
9 </tr></thead>
9 </tr></thead>
10 <tbody>
10 <tbody>
11 <% Board.board_tree(@boards) do |board, level| %>
11 <% Board.board_tree(@boards) do |board, level| %>
12 <tr>
12 <tr class="<%= cycle 'odd', 'even' %>">
13 <td class="name" style="padding-left: <%= level * 18 %>px;">
13 <td class="name" style="padding-left: <%= level * 18 %>px;">
14 <%= link_to board.name, project_board_path(board.project, board), :class => "board" %><br />
14 <%= link_to board.name, project_board_path(board.project, board), :class => "board" %><br />
15 <%=h board.description %>
15 <%=h board.description %>
16 </td>
16 </td>
17 <td class="topic-count"><%= board.topics_count %></td>
17 <td class="topic-count"><%= board.topics_count %></td>
18 <td class="message-count"><%= board.messages_count %></td>
18 <td class="message-count"><%= board.messages_count %></td>
19 <td class="last-message">
19 <td class="last-message">
20 <% if board.last_message %>
20 <% if board.last_message %>
21 <%= authoring board.last_message.created_on, board.last_message.author %><br />
21 <%= authoring board.last_message.created_on, board.last_message.author %><br />
22 <%= link_to_message board.last_message %>
22 <%= link_to_message board.last_message %>
23 <% end %>
23 <% end %>
24 </td>
24 </td>
25 </tr>
25 </tr>
26 <% end %>
26 <% end %>
27 </tbody>
27 </tbody>
28 </table>
28 </table>
29
29
30 <% other_formats_links do |f| %>
30 <% other_formats_links do |f| %>
31 <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_messages => 1, :key => User.current.rss_key} %>
31 <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_messages => 1, :key => User.current.rss_key} %>
32 <% end %>
32 <% end %>
33
33
34 <% content_for :header_tags do %>
34 <% content_for :header_tags do %>
35 <%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :id => @project, :format => 'atom', :show_messages => 1, :key => User.current.rss_key}) %>
35 <%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :id => @project, :format => 'atom', :show_messages => 1, :key => User.current.rss_key}) %>
36 <% end %>
36 <% end %>
37
37
38 <% html_title l(:label_board_plural) %>
38 <% html_title l(:label_board_plural) %>
@@ -1,66 +1,66
1 <%= board_breadcrumb(@board) %>
1 <%= board_breadcrumb(@board) %>
2
2
3 <div class="contextual">
3 <div class="contextual">
4 <%= link_to l(:label_message_new),
4 <%= link_to l(:label_message_new),
5 new_board_message_path(@board),
5 new_board_message_path(@board),
6 :class => 'icon icon-add',
6 :class => 'icon icon-add',
7 :onclick => 'showAndScrollTo("add-message", "message_subject"); return false;' if User.current.allowed_to?(:add_messages, @board.project) %>
7 :onclick => 'showAndScrollTo("add-message", "message_subject"); return false;' if User.current.allowed_to?(:add_messages, @board.project) %>
8 <%= watcher_link(@board, User.current) %>
8 <%= watcher_link(@board, User.current) %>
9 </div>
9 </div>
10
10
11 <div id="add-message" style="display:none;">
11 <div id="add-message" style="display:none;">
12 <% if User.current.allowed_to?(:add_messages, @board.project) %>
12 <% if User.current.allowed_to?(:add_messages, @board.project) %>
13 <h2><%= link_to @board.name, project_board_path(@project, @board) %> &#187; <%= l(:label_message_new) %></h2>
13 <h2><%= link_to @board.name, project_board_path(@project, @board) %> &#187; <%= l(:label_message_new) %></h2>
14 <%= form_for @message, :url => new_board_message_path(@board), :html => {:multipart => true, :id => 'message-form'} do |f| %>
14 <%= form_for @message, :url => new_board_message_path(@board), :html => {:multipart => true, :id => 'message-form'} do |f| %>
15 <%= render :partial => 'messages/form', :locals => {:f => f} %>
15 <%= render :partial => 'messages/form', :locals => {:f => f} %>
16 <p><%= submit_tag l(:button_create) %>
16 <p><%= submit_tag l(:button_create) %>
17 <%= preview_link(preview_board_message_path(@board), 'message-form') %> |
17 <%= preview_link(preview_board_message_path(@board), 'message-form') %> |
18 <%= link_to l(:button_cancel), "#", :onclick => '$("#add-message").hide(); return false;' %></p>
18 <%= link_to l(:button_cancel), "#", :onclick => '$("#add-message").hide(); return false;' %></p>
19 <% end %>
19 <% end %>
20 <div id="preview" class="wiki"></div>
20 <div id="preview" class="wiki"></div>
21 <% end %>
21 <% end %>
22 </div>
22 </div>
23
23
24 <h2><%= @board.name %></h2>
24 <h2><%= @board.name %></h2>
25 <p class="subtitle"><%= @board.description %></p>
25 <p class="subtitle"><%= @board.description %></p>
26
26
27 <% if @topics.any? %>
27 <% if @topics.any? %>
28 <table class="list messages">
28 <table class="list messages">
29 <thead><tr>
29 <thead><tr>
30 <th><%= l(:field_subject) %></th>
30 <th><%= l(:field_subject) %></th>
31 <th><%= l(:field_author) %></th>
31 <th><%= l(:field_author) %></th>
32 <%= sort_header_tag('created_on', :caption => l(:field_created_on)) %>
32 <%= sort_header_tag('created_on', :caption => l(:field_created_on)) %>
33 <%= sort_header_tag('replies', :caption => l(:label_reply_plural)) %>
33 <%= sort_header_tag('replies', :caption => l(:label_reply_plural)) %>
34 <%= sort_header_tag('updated_on', :caption => l(:label_message_last)) %>
34 <%= sort_header_tag('updated_on', :caption => l(:label_message_last)) %>
35 </tr></thead>
35 </tr></thead>
36 <tbody>
36 <tbody>
37 <% @topics.each do |topic| %>
37 <% @topics.each do |topic| %>
38 <tr id="message-<%= topic.id %>" class="message <%= topic.sticky? ? 'sticky' : '' %> <%= topic.locked? ? 'locked' : '' %>">
38 <tr id="message-<%= topic.id %>" class="message <%= cycle 'odd', 'even' %> <%= topic.sticky? ? 'sticky' : '' %> <%= topic.locked? ? 'locked' : '' %>">
39 <td class="subject icon <%= 'icon-sticky' if topic.sticky? %> <%= 'icon-locked' if topic.locked? %>"><%= link_to topic.subject, board_message_path(@board, topic) %></td>
39 <td class="subject icon <%= 'icon-sticky' if topic.sticky? %> <%= 'icon-locked' if topic.locked? %>"><%= link_to topic.subject, board_message_path(@board, topic) %></td>
40 <td class="author"><%= link_to_user(topic.author) %></td>
40 <td class="author"><%= link_to_user(topic.author) %></td>
41 <td class="created_on"><%= format_time(topic.created_on) %></td>
41 <td class="created_on"><%= format_time(topic.created_on) %></td>
42 <td class="reply-count"><%= topic.replies_count %></td>
42 <td class="reply-count"><%= topic.replies_count %></td>
43 <td class="last_message">
43 <td class="last_message">
44 <% if topic.last_reply %>
44 <% if topic.last_reply %>
45 <%= authoring topic.last_reply.created_on, topic.last_reply.author %><br />
45 <%= authoring topic.last_reply.created_on, topic.last_reply.author %><br />
46 <%= link_to_message topic.last_reply %>
46 <%= link_to_message topic.last_reply %>
47 <% end %>
47 <% end %>
48 </td>
48 </td>
49 </tr>
49 </tr>
50 <% end %>
50 <% end %>
51 </tbody>
51 </tbody>
52 </table>
52 </table>
53 <span class="pagination"><%= pagination_links_full @topic_pages, @topic_count %></span>
53 <span class="pagination"><%= pagination_links_full @topic_pages, @topic_count %></span>
54 <% else %>
54 <% else %>
55 <p class="nodata"><%= l(:label_no_data) %></p>
55 <p class="nodata"><%= l(:label_no_data) %></p>
56 <% end %>
56 <% end %>
57
57
58 <% other_formats_links do |f| %>
58 <% other_formats_links do |f| %>
59 <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
59 <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
60 <% end %>
60 <% end %>
61
61
62 <% html_title @board.name %>
62 <% html_title @board.name %>
63
63
64 <% content_for :header_tags do %>
64 <% content_for :header_tags do %>
65 <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@project}: #{@board}") %>
65 <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@project}: #{@board}") %>
66 <% end %>
66 <% end %>
@@ -1,30 +1,30
1 <table class="list custom_fields">
1 <table class="list custom_fields">
2 <thead><tr>
2 <thead><tr>
3 <th><%=l(:field_name)%></th>
3 <th><%=l(:field_name)%></th>
4 <th><%=l(:field_field_format)%></th>
4 <th><%=l(:field_field_format)%></th>
5 <th><%=l(:field_is_required)%></th>
5 <th><%=l(:field_is_required)%></th>
6 <% if tab[:name] == 'IssueCustomField' %>
6 <% if tab[:name] == 'IssueCustomField' %>
7 <th><%=l(:field_is_for_all)%></th>
7 <th><%=l(:field_is_for_all)%></th>
8 <th><%=l(:label_used_by)%></th>
8 <th><%=l(:label_used_by)%></th>
9 <% end %>
9 <% end %>
10 <th></th>
10 <th></th>
11 </tr></thead>
11 </tr></thead>
12 <tbody>
12 <tbody>
13 <% (@custom_fields_by_type[tab[:name]] || []).sort.each do |custom_field| -%>
13 <% (@custom_fields_by_type[tab[:name]] || []).sort.each do |custom_field| -%>
14 <% back_url = custom_fields_path(:tab => tab[:name]) %>
14 <% back_url = custom_fields_path(:tab => tab[:name]) %>
15 <tr>
15 <tr class="<%= cycle("odd", "even") %>">
16 <td class="name"><%= link_to custom_field.name, edit_custom_field_path(custom_field) %></td>
16 <td class="name"><%= link_to custom_field.name, edit_custom_field_path(custom_field) %></td>
17 <td><%= l(custom_field.format.label) %></td>
17 <td><%= l(custom_field.format.label) %></td>
18 <td><%= checked_image custom_field.is_required? %></td>
18 <td><%= checked_image custom_field.is_required? %></td>
19 <% if tab[:name] == 'IssueCustomField' %>
19 <% if tab[:name] == 'IssueCustomField' %>
20 <td><%= checked_image custom_field.is_for_all? %></td>
20 <td><%= checked_image custom_field.is_for_all? %></td>
21 <td><%= l(:label_x_projects, :count => custom_field.projects.count) if custom_field.is_a? IssueCustomField and !custom_field.is_for_all? %></td>
21 <td><%= l(:label_x_projects, :count => custom_field.projects.count) if custom_field.is_a? IssueCustomField and !custom_field.is_for_all? %></td>
22 <% end %>
22 <% end %>
23 <td class="buttons">
23 <td class="buttons">
24 <%= reorder_handle(custom_field, :url => custom_field_path(custom_field), :param => 'custom_field') %>
24 <%= reorder_handle(custom_field, :url => custom_field_path(custom_field), :param => 'custom_field') %>
25 <%= delete_link custom_field_path(custom_field) %>
25 <%= delete_link custom_field_path(custom_field) %>
26 </td>
26 </td>
27 </tr>
27 </tr>
28 <% end %>
28 <% end; reset_cycle %>
29 </tbody>
29 </tbody>
30 </table>
30 </table>
@@ -1,26 +1,26
1 <% if @addresses.present? %>
1 <% if @addresses.present? %>
2 <table class="list email_addresses">
2 <table class="list email_addresses">
3 <% @addresses.each do |address| %>
3 <% @addresses.each do |address| %>
4 <tr>
4 <tr class="<%= cycle("odd", "even") %>">
5 <td class="email"><%= address.address %></td>
5 <td class="email"><%= address.address %></td>
6 <td class="buttons">
6 <td class="buttons">
7 <%= toggle_email_address_notify_link(address) %>
7 <%= toggle_email_address_notify_link(address) %>
8 <%= delete_link user_email_address_path(@user, address), :remote => true %>
8 <%= delete_link user_email_address_path(@user, address), :remote => true %>
9 </td>
9 </td>
10 </tr>
10 </tr>
11 <% end %>
11 <% end %>
12 </table>
12 </table>
13 <% end %>
13 <% end %>
14
14
15 <% unless @addresses.size >= Setting.max_additional_emails.to_i %>
15 <% unless @addresses.size >= Setting.max_additional_emails.to_i %>
16 <div>
16 <div>
17 <%= form_for @address, :url => user_email_addresses_path(@user), :remote => true do |f| %>
17 <%= form_for @address, :url => user_email_addresses_path(@user), :remote => true do |f| %>
18 <p><%= l(:label_email_address_add) %></p>
18 <p><%= l(:label_email_address_add) %></p>
19 <%= error_messages_for @address %>
19 <%= error_messages_for @address %>
20 <p>
20 <p>
21 <%= f.text_field :address, :size => 40 %>
21 <%= f.text_field :address, :size => 40 %>
22 <%= submit_tag l(:button_add) %>
22 <%= submit_tag l(:button_add) %>
23 </p>
23 </p>
24 <% end %>
24 <% end %>
25 </div>
25 </div>
26 <% end %>
26 <% end %>
@@ -1,36 +1,37
1 <h2><%=l(:label_enumerations)%></h2>
1 <h2><%=l(:label_enumerations)%></h2>
2
2
3 <% Enumeration.get_subclasses.each do |klass| %>
3 <% Enumeration.get_subclasses.each do |klass| %>
4 <h3><%= l(klass::OptionName) %></h3>
4 <h3><%= l(klass::OptionName) %></h3>
5
5
6 <% enumerations = klass.shared %>
6 <% enumerations = klass.shared %>
7 <% if enumerations.any? %>
7 <% if enumerations.any? %>
8 <table class="list enumerations"><thead>
8 <table class="list enumerations"><thead>
9 <tr>
9 <tr>
10 <th><%= l(:field_name) %></th>
10 <th><%= l(:field_name) %></th>
11 <th><%= l(:field_is_default) %></th>
11 <th><%= l(:field_is_default) %></th>
12 <th><%= l(:field_active) %></th>
12 <th><%= l(:field_active) %></th>
13 <th></th>
13 <th></th>
14 </tr></thead>
14 </tr></thead>
15 <% enumerations.each do |enumeration| %>
15 <% enumerations.each do |enumeration| %>
16 <tr>
16 <tr class="<%= cycle('odd', 'even') %>">
17 <td class="name"><%= link_to enumeration, edit_enumeration_path(enumeration) %></td>
17 <td class="name"><%= link_to enumeration, edit_enumeration_path(enumeration) %></td>
18 <td class="tick"><%= checked_image enumeration.is_default? %></td>
18 <td class="tick"><%= checked_image enumeration.is_default? %></td>
19 <td class="tick"><%= checked_image enumeration.active? %></td>
19 <td class="tick"><%= checked_image enumeration.active? %></td>
20 <td class="buttons">
20 <td class="buttons">
21 <%= reorder_handle(enumeration, :url => enumeration_path(enumeration), :param => 'enumeration') %>
21 <%= reorder_handle(enumeration, :url => enumeration_path(enumeration), :param => 'enumeration') %>
22 <%= delete_link enumeration_path(enumeration) %>
22 <%= delete_link enumeration_path(enumeration) %>
23 </td>
23 </td>
24 </tr>
24 </tr>
25 <% end %>
25 <% end %>
26 </table>
26 </table>
27 <% reset_cycle %>
27 <% end %>
28 <% end %>
28
29
29 <p><%= link_to l(:label_enumeration_new), new_enumeration_path(:type => klass.name) %></p>
30 <p><%= link_to l(:label_enumeration_new), new_enumeration_path(:type => klass.name) %></p>
30 <% end %>
31 <% end %>
31
32
32 <% html_title(l(:label_enumerations)) -%>
33 <% html_title(l(:label_enumerations)) -%>
33
34
34 <%= javascript_tag do %>
35 <%= javascript_tag do %>
35 $(function() { $("table.enumerations tbody").positionedItems(); });
36 $(function() { $("table.enumerations tbody").positionedItems(); });
36 <% end %> No newline at end of file
37 <% end %>
@@ -1,45 +1,46
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to(l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add') if User.current.allowed_to?(:manage_files, @project) %>
2 <%= link_to(l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add') if User.current.allowed_to?(:manage_files, @project) %>
3 </div>
3 </div>
4
4
5 <h2><%=l(:label_attachment_plural)%></h2>
5 <h2><%=l(:label_attachment_plural)%></h2>
6
6
7 <% delete_allowed = User.current.allowed_to?(:manage_files, @project) %>
7 <% delete_allowed = User.current.allowed_to?(:manage_files, @project) %>
8
8
9 <table class="list files">
9 <table class="list files">
10 <thead><tr>
10 <thead><tr>
11 <%= sort_header_tag('filename', :caption => l(:field_filename)) %>
11 <%= sort_header_tag('filename', :caption => l(:field_filename)) %>
12 <%= sort_header_tag('created_on', :caption => l(:label_date), :default_order => 'desc') %>
12 <%= sort_header_tag('created_on', :caption => l(:label_date), :default_order => 'desc') %>
13 <%= sort_header_tag('size', :caption => l(:field_filesize), :default_order => 'desc') %>
13 <%= sort_header_tag('size', :caption => l(:field_filesize), :default_order => 'desc') %>
14 <%= sort_header_tag('downloads', :caption => l(:label_downloads_abbr), :default_order => 'desc') %>
14 <%= sort_header_tag('downloads', :caption => l(:label_downloads_abbr), :default_order => 'desc') %>
15 <th>MD5</th>
15 <th>MD5</th>
16 <th></th>
16 <th></th>
17 </tr></thead>
17 </tr></thead>
18 <tbody>
18 <tbody>
19 <% @containers.each do |container| %>
19 <% @containers.each do |container| %>
20 <% next if container.attachments.empty? -%>
20 <% next if container.attachments.empty? -%>
21 <% if container.is_a?(Version) -%>
21 <% if container.is_a?(Version) -%>
22 <tr>
22 <tr>
23 <th colspan="6">
23 <th colspan="6">
24 <%= link_to(container, {:controller => 'versions', :action => 'show', :id => container}, :class => "icon icon-package") %>
24 <%= link_to(container, {:controller => 'versions', :action => 'show', :id => container}, :class => "icon icon-package") %>
25 </th>
25 </th>
26 </tr>
26 </tr>
27 <% end -%>
27 <% end -%>
28 <% container.attachments.each do |file| %>
28 <% container.attachments.each do |file| %>
29 <tr class="file">
29 <tr class="file <%= cycle("odd", "even") %>">
30 <td class="filename"><%= link_to_attachment file, :download => true, :title => file.description %></td>
30 <td class="filename"><%= link_to_attachment file, :download => true, :title => file.description %></td>
31 <td class="created_on"><%= format_time(file.created_on) %></td>
31 <td class="created_on"><%= format_time(file.created_on) %></td>
32 <td class="filesize"><%= number_to_human_size(file.filesize) %></td>
32 <td class="filesize"><%= number_to_human_size(file.filesize) %></td>
33 <td class="downloads"><%= file.downloads %></td>
33 <td class="downloads"><%= file.downloads %></td>
34 <td class="digest"><%= file.digest %></td>
34 <td class="digest"><%= file.digest %></td>
35 <td class="buttons">
35 <td class="buttons">
36 <%= link_to(image_tag('delete.png'), attachment_path(file),
36 <%= link_to(image_tag('delete.png'), attachment_path(file),
37 :data => {:confirm => l(:text_are_you_sure)}, :method => :delete) if delete_allowed %>
37 :data => {:confirm => l(:text_are_you_sure)}, :method => :delete) if delete_allowed %>
38 </td>
38 </td>
39 </tr>
39 </tr>
40 <% end %>
40 <% end
41 reset_cycle %>
41 <% end %>
42 <% end %>
42 </tbody>
43 </tbody>
43 </table>
44 </table>
44
45
45 <% html_title(l(:label_attachment_plural)) -%>
46 <% html_title(l(:label_attachment_plural)) -%>
@@ -1,22 +1,22
1 <p><%= link_to l(:label_user_new), new_group_users_path(@group), :remote => true, :class => "icon icon-add" %></p>
1 <p><%= link_to l(:label_user_new), new_group_users_path(@group), :remote => true, :class => "icon icon-add" %></p>
2
2
3 <% if @group.users.any? %>
3 <% if @group.users.any? %>
4 <table class="list users">
4 <table class="list users">
5 <thead><tr>
5 <thead><tr>
6 <th><%= l(:label_user) %></th>
6 <th><%= l(:label_user) %></th>
7 <th style="width:15%"></th>
7 <th style="width:15%"></th>
8 </tr></thead>
8 </tr></thead>
9 <tbody>
9 <tbody>
10 <% @group.users.sort.each do |user| %>
10 <% @group.users.sort.each do |user| %>
11 <tr id="user-<%= user.id %>">
11 <tr id="user-<%= user.id %>" class="<%= cycle 'odd', 'even' %>">
12 <td class="name"><%= link_to_user user %></td>
12 <td class="name"><%= link_to_user user %></td>
13 <td class="buttons">
13 <td class="buttons">
14 <%= delete_link group_user_path(@group, :user_id => user), :remote => true %>
14 <%= delete_link group_user_path(@group, :user_id => user), :remote => true %>
15 </td>
15 </td>
16 </tr>
16 </tr>
17 <% end %>
17 <% end %>
18 </tbody>
18 </tbody>
19 </table>
19 </table>
20 <% else %>
20 <% else %>
21 <p class="nodata"><%= l(:label_no_data) %></p>
21 <p class="nodata"><%= l(:label_no_data) %></p>
22 <% end %>
22 <% end %>
@@ -1,39 +1,39
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to l(:label_group_new), new_group_path, :class => 'icon icon-add' %>
2 <%= link_to l(:label_group_new), new_group_path, :class => 'icon icon-add' %>
3 </div>
3 </div>
4
4
5 <%= title l(:label_group_plural) %>
5 <%= title l(:label_group_plural) %>
6
6
7 <%= form_tag(groups_path, :method => :get) do %>
7 <%= form_tag(groups_path, :method => :get) do %>
8 <fieldset><legend><%= l(:label_filter_plural) %></legend>
8 <fieldset><legend><%= l(:label_filter_plural) %></legend>
9 <label for='name'><%= l(:label_group) %>:</label>
9 <label for='name'><%= l(:label_group) %>:</label>
10 <%= text_field_tag 'name', params[:name], :size => 30 %>
10 <%= text_field_tag 'name', params[:name], :size => 30 %>
11 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
11 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
12 <%= link_to l(:button_clear), groups_path, :class => 'icon icon-reload' %>
12 <%= link_to l(:button_clear), groups_path, :class => 'icon icon-reload' %>
13 </fieldset>
13 </fieldset>
14 <% end %>
14 <% end %>
15 &nbsp;
15 &nbsp;
16
16
17 <% if @groups.any? %>
17 <% if @groups.any? %>
18 <div class="autoscroll">
18 <div class="autoscroll">
19 <table class="list groups">
19 <table class="list groups">
20 <thead><tr>
20 <thead><tr>
21 <th><%=l(:label_group)%></th>
21 <th><%=l(:label_group)%></th>
22 <th><%=l(:label_user_plural)%></th>
22 <th><%=l(:label_user_plural)%></th>
23 <th></th>
23 <th></th>
24 </tr></thead>
24 </tr></thead>
25 <tbody>
25 <tbody>
26 <% @groups.each do |group| %>
26 <% @groups.each do |group| %>
27 <tr id="group-<%= group.id %>" class="<%= "builtin" if group.builtin? %>">
27 <tr id="group-<%= group.id %>" class="<%= cycle 'odd', 'even' %> <%= "builtin" if group.builtin? %>">
28 <td class="name"><%= link_to group, edit_group_path(group) %></td>
28 <td class="name"><%= link_to group, edit_group_path(group) %></td>
29 <td class="user_count"><%= (@user_count_by_group_id[group.id] || 0) unless group.builtin? %></td>
29 <td class="user_count"><%= (@user_count_by_group_id[group.id] || 0) unless group.builtin? %></td>
30 <td class="buttons"><%= delete_link group unless group.builtin? %></td>
30 <td class="buttons"><%= delete_link group unless group.builtin? %></td>
31 </tr>
31 </tr>
32 <% end %>
32 <% end %>
33 </tbody>
33 </tbody>
34 </table>
34 </table>
35 </div>
35 </div>
36 <span class="pagination"><%= pagination_links_full @group_pages, @group_count %></span>
36 <span class="pagination"><%= pagination_links_full @group_pages, @group_count %></span>
37 <% else %>
37 <% else %>
38 <p class="nodata"><%= l(:label_no_data) %></p>
38 <p class="nodata"><%= l(:label_no_data) %></p>
39 <% end %>
39 <% end %>
@@ -1,38 +1,38
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to l(:label_issue_status_new), new_issue_status_path, :class => 'icon icon-add' %>
2 <%= link_to l(:label_issue_status_new), new_issue_status_path, :class => 'icon icon-add' %>
3 <%= link_to(l(:label_update_issue_done_ratios), update_issue_done_ratio_issue_statuses_path, :class => 'icon icon-multiple', :method => 'post', :data => {:confirm => l(:text_are_you_sure)}) if Issue.use_status_for_done_ratio? %>
3 <%= link_to(l(:label_update_issue_done_ratios), update_issue_done_ratio_issue_statuses_path, :class => 'icon icon-multiple', :method => 'post', :data => {:confirm => l(:text_are_you_sure)}) if Issue.use_status_for_done_ratio? %>
4 </div>
4 </div>
5
5
6 <h2><%=l(:label_issue_status_plural)%></h2>
6 <h2><%=l(:label_issue_status_plural)%></h2>
7
7
8 <table class="list issue_statuses">
8 <table class="list issue_statuses">
9 <thead><tr>
9 <thead><tr>
10 <th><%=l(:field_status)%></th>
10 <th><%=l(:field_status)%></th>
11 <% if Issue.use_status_for_done_ratio? %>
11 <% if Issue.use_status_for_done_ratio? %>
12 <th><%=l(:field_done_ratio)%></th>
12 <th><%=l(:field_done_ratio)%></th>
13 <% end %>
13 <% end %>
14 <th><%=l(:field_is_closed)%></th>
14 <th><%=l(:field_is_closed)%></th>
15 <th></th>
15 <th></th>
16 </tr></thead>
16 </tr></thead>
17 <tbody>
17 <tbody>
18 <% for status in @issue_statuses %>
18 <% for status in @issue_statuses %>
19 <tr>
19 <tr class="<%= cycle("odd", "even") %>">
20 <td class="name"><%= link_to status.name, edit_issue_status_path(status) %></td>
20 <td class="name"><%= link_to status.name, edit_issue_status_path(status) %></td>
21 <% if Issue.use_status_for_done_ratio? %>
21 <% if Issue.use_status_for_done_ratio? %>
22 <td><%= status.default_done_ratio %></td>
22 <td><%= status.default_done_ratio %></td>
23 <% end %>
23 <% end %>
24 <td><%= checked_image status.is_closed? %></td>
24 <td><%= checked_image status.is_closed? %></td>
25 <td class="buttons">
25 <td class="buttons">
26 <%= reorder_handle(status) %>
26 <%= reorder_handle(status) %>
27 <%= delete_link issue_status_path(status) %>
27 <%= delete_link issue_status_path(status) %>
28 </td>
28 </td>
29 </tr>
29 </tr>
30 <% end %>
30 <% end %>
31 </tbody>
31 </tbody>
32 </table>
32 </table>
33
33
34 <% html_title(l(:label_issue_status_plural)) -%>
34 <% html_title(l(:label_issue_status_plural)) -%>
35
35
36 <%= javascript_tag do %>
36 <%= javascript_tag do %>
37 $(function() { $("table.issue_statuses tbody").positionedItems(); });
37 $(function() { $("table.issue_statuses tbody").positionedItems(); });
38 <% end %>
38 <% end %>
@@ -1,20 +1,20
1 <% changesets.each do |changeset| %>
1 <% changesets.each do |changeset| %>
2 <div class="changeset">
2 <div class="changeset <%= cycle('odd', 'even') %>">
3 <p><%= link_to_revision(changeset, changeset.repository,
3 <p><%= link_to_revision(changeset, changeset.repository,
4 :text => "#{l(:label_revision)} #{changeset.format_identifier}") %>
4 :text => "#{l(:label_revision)} #{changeset.format_identifier}") %>
5 <% if changeset.filechanges.any? && User.current.allowed_to?(:browse_repository, changeset.project) %>
5 <% if changeset.filechanges.any? && User.current.allowed_to?(:browse_repository, changeset.project) %>
6 (<%= link_to(l(:label_diff),
6 (<%= link_to(l(:label_diff),
7 :controller => 'repositories',
7 :controller => 'repositories',
8 :action => 'diff',
8 :action => 'diff',
9 :id => changeset.project,
9 :id => changeset.project,
10 :repository_id => changeset.repository.identifier_param,
10 :repository_id => changeset.repository.identifier_param,
11 :path => "",
11 :path => "",
12 :rev => changeset.identifier) %>)
12 :rev => changeset.identifier) %>)
13 <% end %>
13 <% end %>
14 <br />
14 <br />
15 <span class="author"><%= authoring(changeset.committed_on, changeset.author) %></span></p>
15 <span class="author"><%= authoring(changeset.committed_on, changeset.author) %></span></p>
16 <div class="wiki">
16 <div class="wiki">
17 <%= textilizable(changeset, :comments) %>
17 <%= textilizable(changeset, :comments) %>
18 </div>
18 </div>
19 </div>
19 </div>
20 <% end %>
20 <% end %>
@@ -1,43 +1,44
1 <%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do -%>
1 <%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do -%>
2 <%= hidden_field_tag 'back_url', url_for(:params => request.query_parameters), :id => nil %>
2 <%= hidden_field_tag 'back_url', url_for(:params => request.query_parameters), :id => nil %>
3 <div class="autoscroll">
3 <div class="autoscroll">
4 <table class="list issues <%= sort_css_classes %>">
4 <table class="list issues <%= sort_css_classes %>">
5 <thead>
5 <thead>
6 <tr>
6 <tr>
7 <th class="checkbox hide-when-print">
7 <th class="checkbox hide-when-print">
8 <%= check_box_tag 'check_all', '', false, :class => 'toggle-selection',
8 <%= check_box_tag 'check_all', '', false, :class => 'toggle-selection',
9 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
9 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
10 </th>
10 </th>
11 <% query.inline_columns.each do |column| %>
11 <% query.inline_columns.each do |column| %>
12 <%= column_header(column) %>
12 <%= column_header(column) %>
13 <% end %>
13 <% end %>
14 </tr>
14 </tr>
15 </thead>
15 </thead>
16 <tbody>
16 <tbody>
17 <% grouped_issue_list(issues, @query, @issue_count_by_group) do |issue, level, group_name, group_count, group_totals| -%>
17 <% grouped_issue_list(issues, @query, @issue_count_by_group) do |issue, level, group_name, group_count, group_totals| -%>
18 <% if group_name %>
18 <% if group_name %>
19 <% reset_cycle %>
19 <tr class="group open">
20 <tr class="group open">
20 <td colspan="<%= query.inline_columns.size + 1 %>">
21 <td colspan="<%= query.inline_columns.size + 1 %>">
21 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
22 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
22 <span class="name"><%= group_name %></span> <span class="count"><%= group_count %></span> <span class="totals"><%= group_totals %></span>
23 <span class="name"><%= group_name %></span> <span class="count"><%= group_count %></span> <span class="totals"><%= group_totals %></span>
23 <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}",
24 <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}",
24 "toggleAllRowGroups(this)", :class => 'toggle-all') %>
25 "toggleAllRowGroups(this)", :class => 'toggle-all') %>
25 </td>
26 </td>
26 </tr>
27 </tr>
27 <% end %>
28 <% end %>
28 <tr id="issue-<%= issue.id %>" class="hascontextmenu <%= issue.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
29 <tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= issue.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
29 <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
30 <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
30 <%= raw query.inline_columns.map {|column| "<td class=\"#{column.css_classes}\">#{column_content(column, issue)}</td>"}.join %>
31 <%= raw query.inline_columns.map {|column| "<td class=\"#{column.css_classes}\">#{column_content(column, issue)}</td>"}.join %>
31 </tr>
32 </tr>
32 <% @query.block_columns.each do |column|
33 <% @query.block_columns.each do |column|
33 if (text = column_content(column, issue)) && text.present? -%>
34 if (text = column_content(column, issue)) && text.present? -%>
34 <tr class="<%= current_cycle %>">
35 <tr class="<%= current_cycle %>">
35 <td colspan="<%= @query.inline_columns.size + 1 %>" class="<%= column.css_classes %>"><%= text %></td>
36 <td colspan="<%= @query.inline_columns.size + 1 %>" class="<%= column.css_classes %>"><%= text %></td>
36 </tr>
37 </tr>
37 <% end -%>
38 <% end -%>
38 <% end -%>
39 <% end -%>
39 <% end -%>
40 <% end -%>
40 </tbody>
41 </tbody>
41 </table>
42 </table>
42 </div>
43 </div>
43 <% end -%>
44 <% end -%>
@@ -1,29 +1,29
1 <% if issues && issues.any? %>
1 <% if issues && issues.any? %>
2 <%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do %>
2 <%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do %>
3 <table class="list list-simple issues">
3 <table class="list list-simple issues">
4 <thead><tr>
4 <thead><tr>
5 <th class="id">#</th>
5 <th class="id">#</th>
6 <th class="project"><%=l(:field_project)%></th>
6 <th class="project"><%=l(:field_project)%></th>
7 <th class="status"><%=l(:field_status)%></th>
7 <th class="status"><%=l(:field_status)%></th>
8 <th class="subject"><%=l(:field_subject)%></th>
8 <th class="subject"><%=l(:field_subject)%></th>
9 </tr></thead>
9 </tr></thead>
10 <tbody>
10 <tbody>
11 <% for issue in issues %>
11 <% for issue in issues %>
12 <tr id="issue-<%= h(issue.id) %>" class="hascontextmenu <%= issue.css_classes %>">
12 <tr id="issue-<%= h(issue.id) %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= issue.css_classes %>">
13 <td class="id">
13 <td class="id">
14 <%= check_box_tag("ids[]", issue.id, false, :style => 'display:none;', :id => nil) %>
14 <%= check_box_tag("ids[]", issue.id, false, :style => 'display:none;', :id => nil) %>
15 <%= link_to("#{issue.tracker} ##{issue.id}", issue_path(issue)) %>
15 <%= link_to("#{issue.tracker} ##{issue.id}", issue_path(issue)) %>
16 </td>
16 </td>
17 <td class="project"><%= link_to_project(issue.project) %></td>
17 <td class="project"><%= link_to_project(issue.project) %></td>
18 <td class="status"><%= issue.status %></td>
18 <td class="status"><%= issue.status %></td>
19 <td class="subject">
19 <td class="subject">
20 <span><%= link_to(issue.subject, issue_path(issue)) %></span>
20 <span><%= link_to(issue.subject, issue_path(issue)) %></span>
21 </td>
21 </td>
22 </tr>
22 </tr>
23 <% end %>
23 <% end %>
24 </tbody>
24 </tbody>
25 </table>
25 </table>
26 <% end %>
26 <% end %>
27 <% else %>
27 <% else %>
28 <p class="nodata"><%= l(:label_no_data) %></p>
28 <p class="nodata"><%= l(:label_no_data) %></p>
29 <% end %>
29 <% end %>
@@ -1,52 +1,52
1 <% roles = Role.find_all_givable %>
1 <% roles = Role.find_all_givable %>
2
2
3 <p><%= link_to l(:label_add_projects), new_principal_membership_path(principal), :remote => true, :class => "icon icon-add" %></p>
3 <p><%= link_to l(:label_add_projects), new_principal_membership_path(principal), :remote => true, :class => "icon icon-add" %></p>
4
4
5 <% if principal.memberships.any? %>
5 <% if principal.memberships.any? %>
6 <table class="list memberships">
6 <table class="list memberships">
7 <thead><tr>
7 <thead><tr>
8 <th><%= l(:label_project) %></th>
8 <th><%= l(:label_project) %></th>
9 <th><%= l(:label_role_plural) %></th>
9 <th><%= l(:label_role_plural) %></th>
10 <th style="width:15%"></th>
10 <th style="width:15%"></th>
11 <%= call_table_header_hook principal %>
11 <%= call_table_header_hook principal %>
12 </tr></thead>
12 </tr></thead>
13 <tbody>
13 <tbody>
14 <% principal.memberships.preload(:member_roles => :role).each do |membership| %>
14 <% principal.memberships.preload(:member_roles => :role).each do |membership| %>
15 <% next if membership.new_record? %>
15 <% next if membership.new_record? %>
16 <tr id="member-<%= membership.id %>" class="class">
16 <tr id="member-<%= membership.id %>" class="<%= cycle 'odd', 'even' %> class">
17 <td class="project name">
17 <td class="project name">
18 <%= link_to_project membership.project %>
18 <%= link_to_project membership.project %>
19 </td>
19 </td>
20 <td class="roles">
20 <td class="roles">
21 <span id="member-<%= membership.id %>-roles"><%=h membership.roles.sort.collect(&:to_s).join(', ') %></span>
21 <span id="member-<%= membership.id %>-roles"><%=h membership.roles.sort.collect(&:to_s).join(', ') %></span>
22 <%= form_for(:membership, :remote => true,
22 <%= form_for(:membership, :remote => true,
23 :url => principal_membership_path(principal, membership), :method => :put,
23 :url => principal_membership_path(principal, membership), :method => :put,
24 :html => {:id => "member-#{membership.id}-roles-form",
24 :html => {:id => "member-#{membership.id}-roles-form",
25 :style => 'display:none;'}) do %>
25 :style => 'display:none;'}) do %>
26 <p><% roles.each do |role| %>
26 <p><% roles.each do |role| %>
27 <label><%= check_box_tag 'membership[role_ids][]', role.id, membership.roles.include?(role),
27 <label><%= check_box_tag 'membership[role_ids][]', role.id, membership.roles.include?(role),
28 :disabled => membership.member_roles.detect {|mr| mr.role_id == role.id && !mr.inherited_from.nil?},
28 :disabled => membership.member_roles.detect {|mr| mr.role_id == role.id && !mr.inherited_from.nil?},
29 :id => nil %> <%=h role %></label><br />
29 :id => nil %> <%=h role %></label><br />
30 <% end %></p>
30 <% end %></p>
31 <%= hidden_field_tag 'membership[role_ids][]', '', :id => nil %>
31 <%= hidden_field_tag 'membership[role_ids][]', '', :id => nil %>
32 <p><%= submit_tag l(:button_change) %>
32 <p><%= submit_tag l(:button_change) %>
33 <%= link_to_function l(:button_cancel),
33 <%= link_to_function l(:button_cancel),
34 "$('#member-#{membership.id}-roles').show(); $('#member-#{membership.id}-roles-form').hide(); return false;"
34 "$('#member-#{membership.id}-roles').show(); $('#member-#{membership.id}-roles-form').hide(); return false;"
35 %></p>
35 %></p>
36 <% end %>
36 <% end %>
37 </td>
37 </td>
38 <td class="buttons">
38 <td class="buttons">
39 <%= link_to_function l(:button_edit),
39 <%= link_to_function l(:button_edit),
40 "$('#member-#{membership.id}-roles').hide(); $('#member-#{membership.id}-roles-form').show(); return false;",
40 "$('#member-#{membership.id}-roles').hide(); $('#member-#{membership.id}-roles-form').show(); return false;",
41 :class => 'icon icon-edit'
41 :class => 'icon icon-edit'
42 %>
42 %>
43 <%= delete_link principal_membership_path(principal, membership), :remote => true if membership.deletable? %>
43 <%= delete_link principal_membership_path(principal, membership), :remote => true if membership.deletable? %>
44 </td>
44 </td>
45 <%= call_table_row_hook principal, membership %>
45 <%= call_table_row_hook principal, membership %>
46 </tr>
46 </tr>
47 <% end %>
47 <% end; reset_cycle %>
48 </tbody>
48 </tbody>
49 </table>
49 </table>
50 <% else %>
50 <% else %>
51 <p class="nodata"><%= l(:label_no_data) %></p>
51 <p class="nodata"><%= l(:label_no_data) %></p>
52 <% end %>
52 <% end %>
@@ -1,42 +1,42
1 <%= form_tag(project_enumerations_path(@project), :method => :put, :class => "tabular") do %>
1 <%= form_tag(project_enumerations_path(@project), :method => :put, :class => "tabular") do %>
2
2
3 <table class="list">
3 <table class="list">
4 <thead><tr>
4 <thead><tr>
5 <th><%= l(:field_name) %></th>
5 <th><%= l(:field_name) %></th>
6 <th><%= l(:enumeration_system_activity) %></th>
6 <th><%= l(:enumeration_system_activity) %></th>
7 <% TimeEntryActivity.new.available_custom_fields.each do |value| %>
7 <% TimeEntryActivity.new.available_custom_fields.each do |value| %>
8 <th><%= value.name %></th>
8 <th><%= value.name %></th>
9 <% end %>
9 <% end %>
10 <th><%= l(:field_active) %></th>
10 <th><%= l(:field_active) %></th>
11 </tr></thead>
11 </tr></thead>
12
12
13 <% @project.activities(true).each do |enumeration| %>
13 <% @project.activities(true).each do |enumeration| %>
14 <%= fields_for "enumerations[#{enumeration.id}]", enumeration do |ff| %>
14 <%= fields_for "enumerations[#{enumeration.id}]", enumeration do |ff| %>
15 <tr>
15 <tr class="<%= cycle('odd', 'even') %>">
16 <td class="name">
16 <td class="name">
17 <%= ff.hidden_field :parent_id, :value => enumeration.id unless enumeration.project %>
17 <%= ff.hidden_field :parent_id, :value => enumeration.id unless enumeration.project %>
18 <%= enumeration %>
18 <%= enumeration %>
19 </td>
19 </td>
20 <td class="tick"><%= checked_image !enumeration.project %></td>
20 <td class="tick"><%= checked_image !enumeration.project %></td>
21 <% enumeration.custom_field_values.each do |value| %>
21 <% enumeration.custom_field_values.each do |value| %>
22 <td>
22 <td>
23 <%= custom_field_tag "enumerations[#{enumeration.id}]", value %>
23 <%= custom_field_tag "enumerations[#{enumeration.id}]", value %>
24 </td>
24 </td>
25 <% end %>
25 <% end %>
26 <td>
26 <td>
27 <%= ff.check_box :active %>
27 <%= ff.check_box :active %>
28 </td>
28 </td>
29 </tr>
29 </tr>
30 <% end %>
30 <% end %>
31 <% end %>
31 <% end %>
32 </table>
32 </table>
33
33
34 <div class="contextual">
34 <div class="contextual">
35 <%= link_to(l(:button_reset), project_enumerations_path(@project),
35 <%= link_to(l(:button_reset), project_enumerations_path(@project),
36 :method => :delete,
36 :method => :delete,
37 :data => {:confirm => l(:text_are_you_sure)},
37 :data => {:confirm => l(:text_are_you_sure)},
38 :class => 'icon icon-del') %>
38 :class => 'icon icon-del') %>
39 </div>
39 </div>
40
40
41 <%= submit_tag l(:button_save) %>
41 <%= submit_tag l(:button_save) %>
42 <% end %>
42 <% end %>
@@ -1,33 +1,33
1 <% if @project.boards.any? %>
1 <% if @project.boards.any? %>
2 <div class="table-list boards">
2 <div class="table-list boards">
3 <div class="table-list-header">
3 <div class="table-list-header">
4 <div class="table-list-cell"><%= l(:label_board) %></div>
4 <div class="table-list-cell"><%= l(:label_board) %></div>
5 </div>
5 </div>
6 <%= render_boards_tree(@project.boards) do |board, level| %>
6 <%= render_boards_tree(@project.boards) do |board, level| %>
7 <div class="table-list-row">
7 <div class="table-list-row <%= cycle 'odd', 'even' %>">
8 <div class="table-list-cell name" style="padding-left: <%= 2 + level * 16 %>px">
8 <div class="table-list-cell name" style="padding-left: <%= 2 + level * 16 %>px">
9 <%= link_to board.name, project_board_path(@project, board) %>
9 <%= link_to board.name, project_board_path(@project, board) %>
10 </div>
10 </div>
11 <div class="table-list-cell description"><%= board.description %></div>
11 <div class="table-list-cell description"><%= board.description %></div>
12 <div class="table-list-cell buttons">
12 <div class="table-list-cell buttons">
13 <% if User.current.allowed_to?(:manage_boards, @project) %>
13 <% if User.current.allowed_to?(:manage_boards, @project) %>
14 <%= reorder_handle(board) %>
14 <%= reorder_handle(board) %>
15 <%= link_to l(:button_edit), edit_project_board_path(@project, board), :class => 'icon icon-edit' %>
15 <%= link_to l(:button_edit), edit_project_board_path(@project, board), :class => 'icon icon-edit' %>
16 <%= delete_link project_board_path(@project, board) %>
16 <%= delete_link project_board_path(@project, board) %>
17 <% end %>
17 <% end %>
18 </div>
18 </div>
19 </div>
19 </div>
20 <% end %>
20 <% end %>
21 </div>
21 </div>
22
22
23 <%= javascript_tag do %>
23 <%= javascript_tag do %>
24 $(function() { $("div.sort-level").positionedItems(); });
24 $(function() { $("div.sort-level").positionedItems(); });
25 <% end %>
25 <% end %>
26
26
27 <% else %>
27 <% else %>
28 <p class="nodata"><%= l(:label_no_data) %></p>
28 <p class="nodata"><%= l(:label_no_data) %></p>
29 <% end %>
29 <% end %>
30
30
31 <% if User.current.allowed_to?(:manage_boards, @project) %>
31 <% if User.current.allowed_to?(:manage_boards, @project) %>
32 <p><%= link_to l(:label_board_new), new_project_board_path(@project), :class => 'icon icon-add' %></p>
32 <p><%= link_to l(:label_board_new), new_project_board_path(@project), :class => 'icon icon-add' %></p>
33 <% end %>
33 <% end %>
@@ -1,29 +1,29
1 <% if @project.issue_categories.any? %>
1 <% if @project.issue_categories.any? %>
2 <table class="list">
2 <table class="list">
3 <thead><tr>
3 <thead><tr>
4 <th><%= l(:label_issue_category) %></th>
4 <th><%= l(:label_issue_category) %></th>
5 <th><%= l(:field_assigned_to) %></th>
5 <th><%= l(:field_assigned_to) %></th>
6 <th></th>
6 <th></th>
7 </tr></thead>
7 </tr></thead>
8 <tbody>
8 <tbody>
9 <% for category in @project.issue_categories %>
9 <% for category in @project.issue_categories %>
10 <% unless category.new_record? %>
10 <% unless category.new_record? %>
11 <tr>
11 <tr class="<%= cycle 'odd', 'even' %>">
12 <td class="name"><%= category.name %></td>
12 <td class="name"><%= category.name %></td>
13 <td><%= category.assigned_to.name if category.assigned_to %></td>
13 <td><%= category.assigned_to.name if category.assigned_to %></td>
14 <td class="buttons">
14 <td class="buttons">
15 <% if User.current.allowed_to?(:manage_categories, @project) %>
15 <% if User.current.allowed_to?(:manage_categories, @project) %>
16 <%= link_to l(:button_edit), edit_issue_category_path(category), :class => 'icon icon-edit' %>
16 <%= link_to l(:button_edit), edit_issue_category_path(category), :class => 'icon icon-edit' %>
17 <%= delete_link issue_category_path(category) %>
17 <%= delete_link issue_category_path(category) %>
18 <% end %>
18 <% end %>
19 </td>
19 </td>
20 </tr>
20 </tr>
21 <% end %>
21 <% end %>
22 <% end %>
22 <% end %>
23 </tbody>
23 </tbody>
24 </table>
24 </table>
25 <% else %>
25 <% else %>
26 <p class="nodata"><%= l(:label_no_data) %></p>
26 <p class="nodata"><%= l(:label_no_data) %></p>
27 <% end %>
27 <% end %>
28
28
29 <p><%= link_to l(:label_issue_category_new), new_project_issue_category_path(@project), :class => 'icon icon-add' if User.current.allowed_to?(:manage_categories, @project) %></p>
29 <p><%= link_to l(:label_issue_category_new), new_project_issue_category_path(@project), :class => 'icon icon-add' if User.current.allowed_to?(:manage_categories, @project) %></p>
@@ -1,62 +1,62
1 <% roles = Role.find_all_givable
1 <% roles = Role.find_all_givable
2 members = @project.memberships.active.sorted.to_a %>
2 members = @project.memberships.active.sorted.to_a %>
3
3
4 <p><%= link_to l(:label_member_new), new_project_membership_path(@project), :remote => true, :class => "icon icon-add" %></p>
4 <p><%= link_to l(:label_member_new), new_project_membership_path(@project), :remote => true, :class => "icon icon-add" %></p>
5
5
6 <% if members.any? %>
6 <% if members.any? %>
7 <table class="list members">
7 <table class="list members">
8 <thead>
8 <thead>
9 <tr>
9 <tr>
10 <th><%= l(:label_user) %> / <%= l(:label_group) %></th>
10 <th><%= l(:label_user) %> / <%= l(:label_group) %></th>
11 <th><%= l(:label_role_plural) %></th>
11 <th><%= l(:label_role_plural) %></th>
12 <th style="width:15%"></th>
12 <th style="width:15%"></th>
13 <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %>
13 <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %>
14 </tr>
14 </tr>
15 </thead>
15 </thead>
16 <tbody>
16 <tbody>
17 <% members.each do |member| %>
17 <% members.each do |member| %>
18 <% next if member.new_record? %>
18 <% next if member.new_record? %>
19 <tr id="member-<%= member.id %>" class="member">
19 <tr id="member-<%= member.id %>" class="<%= cycle 'odd', 'even' %> member">
20 <td class="name icon icon-<%= member.principal.class.name.downcase %>"><%= link_to_user member.principal %></td>
20 <td class="name icon icon-<%= member.principal.class.name.downcase %>"><%= link_to_user member.principal %></td>
21 <td class="roles">
21 <td class="roles">
22 <span id="member-<%= member.id %>-roles"><%= member.roles.sort.collect(&:to_s).join(', ') %></span>
22 <span id="member-<%= member.id %>-roles"><%= member.roles.sort.collect(&:to_s).join(', ') %></span>
23 <%= form_for(member,
23 <%= form_for(member,
24 {:as => :membership, :remote => true,
24 {:as => :membership, :remote => true,
25 :url => membership_path(member),
25 :url => membership_path(member),
26 :method => :put,
26 :method => :put,
27 :html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }}
27 :html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }}
28 ) do |f| %>
28 ) do |f| %>
29 <p>
29 <p>
30 <% roles.each do |role| %>
30 <% roles.each do |role| %>
31 <label>
31 <label>
32 <%= check_box_tag('membership[role_ids][]',
32 <%= check_box_tag('membership[role_ids][]',
33 role.id, member.roles.include?(role),
33 role.id, member.roles.include?(role),
34 :id => nil,
34 :id => nil,
35 :disabled => !member.role_editable?(role)) %> <%= role %>
35 :disabled => !member.role_editable?(role)) %> <%= role %>
36 </label><br />
36 </label><br />
37 <% end %>
37 <% end %>
38 </p>
38 </p>
39 <%= hidden_field_tag 'membership[role_ids][]', '', :id => nil %>
39 <%= hidden_field_tag 'membership[role_ids][]', '', :id => nil %>
40 <p>
40 <p>
41 <%= submit_tag l(:button_save), :class => "small" %>
41 <%= submit_tag l(:button_save), :class => "small" %>
42 <%= link_to_function(l(:button_cancel),
42 <%= link_to_function(l(:button_cancel),
43 "$('#member-#{member.id}-roles').show(); $('#member-#{member.id}-roles-form').hide(); return false;") %>
43 "$('#member-#{member.id}-roles').show(); $('#member-#{member.id}-roles-form').hide(); return false;") %>
44 </p>
44 </p>
45 <% end %>
45 <% end %>
46 </td>
46 </td>
47 <td class="buttons">
47 <td class="buttons">
48 <%= link_to_function l(:button_edit),
48 <%= link_to_function l(:button_edit),
49 "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;",
49 "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;",
50 :class => 'icon icon-edit' %>
50 :class => 'icon icon-edit' %>
51 <%= delete_link membership_path(member),
51 <%= delete_link membership_path(member),
52 :remote => true,
52 :remote => true,
53 :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %>
53 :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %>
54 </td>
54 </td>
55 <%= call_hook(:view_projects_settings_members_table_row, { :project => @project, :member => member}) %>
55 <%= call_hook(:view_projects_settings_members_table_row, { :project => @project, :member => member}) %>
56 </tr>
56 </tr>
57 <% end %>
57 <% end; reset_cycle %>
58 </tbody>
58 </tbody>
59 </table>
59 </table>
60 <% else %>
60 <% else %>
61 <p class="nodata"><%= l(:label_no_data) %></p>
61 <p class="nodata"><%= l(:label_no_data) %></p>
62 <% end %>
62 <% end %>
@@ -1,41 +1,41
1 <% if @project.repositories.any? %>
1 <% if @project.repositories.any? %>
2 <table class="list">
2 <table class="list">
3 <thead>
3 <thead>
4 <tr>
4 <tr>
5 <th><%= l(:field_identifier) %></th>
5 <th><%= l(:field_identifier) %></th>
6 <th><%= l(:field_repository_is_default) %></th>
6 <th><%= l(:field_repository_is_default) %></th>
7 <th><%= l(:label_scm) %></th>
7 <th><%= l(:label_scm) %></th>
8 <th><%= l(:label_repository) %></th>
8 <th><%= l(:label_repository) %></th>
9 <th></th>
9 <th></th>
10 </tr>
10 </tr>
11 </thead>
11 </thead>
12 <tbody>
12 <tbody>
13 <% @project.repositories.sort.each do |repository| %>
13 <% @project.repositories.sort.each do |repository| %>
14 <tr>
14 <tr class="<%= cycle 'odd', 'even' %>">
15 <td class="name">
15 <td class="name">
16 <%= link_to repository.identifier,
16 <%= link_to repository.identifier,
17 {:controller => 'repositories', :action => 'show',:id => @project, :repository_id => repository.identifier_param} if repository.identifier.present? %>
17 {:controller => 'repositories', :action => 'show',:id => @project, :repository_id => repository.identifier_param} if repository.identifier.present? %>
18 </td>
18 </td>
19 <td><%= checked_image repository.is_default? %></td>
19 <td><%= checked_image repository.is_default? %></td>
20 <td><%= repository.scm_name %></td>
20 <td><%= repository.scm_name %></td>
21 <td><%= repository.url %></td>
21 <td><%= repository.url %></td>
22 <td class="buttons">
22 <td class="buttons">
23 <% if User.current.allowed_to?(:manage_repository, @project) %>
23 <% if User.current.allowed_to?(:manage_repository, @project) %>
24 <%= link_to(l(:label_user_plural), committers_repository_path(repository),
24 <%= link_to(l(:label_user_plural), committers_repository_path(repository),
25 :class => 'icon icon-user') %>
25 :class => 'icon icon-user') %>
26 <%= link_to(l(:button_edit), edit_repository_path(repository),
26 <%= link_to(l(:button_edit), edit_repository_path(repository),
27 :class => 'icon icon-edit') %>
27 :class => 'icon icon-edit') %>
28 <%= delete_link repository_path(repository) %>
28 <%= delete_link repository_path(repository) %>
29 <% end %>
29 <% end %>
30 </td>
30 </td>
31 </tr>
31 </tr>
32 <% end %>
32 <% end %>
33 </tbody>
33 </tbody>
34 </table>
34 </table>
35 <% else %>
35 <% else %>
36 <p class="nodata"><%= l(:label_no_data) %></p>
36 <p class="nodata"><%= l(:label_no_data) %></p>
37 <% end %>
37 <% end %>
38
38
39 <% if User.current.allowed_to?(:manage_repository, @project) %>
39 <% if User.current.allowed_to?(:manage_repository, @project) %>
40 <p><%= link_to l(:label_repository_new), new_project_repository_path(@project), :class => 'icon icon-add' %></p>
40 <p><%= link_to l(:label_repository_new), new_project_repository_path(@project), :class => 'icon icon-add' %></p>
41 <% end %>
41 <% end %>
@@ -1,52 +1,52
1 <%= form_tag(settings_project_path(@project, :tab => 'versions'), :method => :get) do %>
1 <%= form_tag(settings_project_path(@project, :tab => 'versions'), :method => :get) do %>
2 <fieldset><legend><%= l(:label_filter_plural) %></legend>
2 <fieldset><legend><%= l(:label_filter_plural) %></legend>
3 <label for='status'><%= l(:field_status) %> :</label>
3 <label for='status'><%= l(:field_status) %> :</label>
4 <%= select_tag 'version_status', options_for_select([[l(:label_all), '']] + Version::VERSION_STATUSES.collect {|s| [l("version_status_#{s}"), s]}, @version_status), :onchange => "this.form.submit(); return false;" %>
4 <%= select_tag 'version_status', options_for_select([[l(:label_all), '']] + Version::VERSION_STATUSES.collect {|s| [l("version_status_#{s}"), s]}, @version_status), :onchange => "this.form.submit(); return false;" %>
5 <label for='name'><%= l(:label_version) %>:</label>
5 <label for='name'><%= l(:label_version) %>:</label>
6 <%= text_field_tag 'version_name', @version_name, :size => 30 %>
6 <%= text_field_tag 'version_name', @version_name, :size => 30 %>
7 <%= submit_tag l(:button_apply), :name => nil %>
7 <%= submit_tag l(:button_apply), :name => nil %>
8 <%= link_to l(:button_clear), settings_project_path(@project, :tab => 'versions'), :class => 'icon icon-reload' %>
8 <%= link_to l(:button_clear), settings_project_path(@project, :tab => 'versions'), :class => 'icon icon-reload' %>
9 </fieldset>
9 </fieldset>
10 <% end %>
10 <% end %>
11
11
12 <% if @versions.present? %>
12 <% if @versions.present? %>
13 <table class="list versions">
13 <table class="list versions">
14 <thead><tr>
14 <thead><tr>
15 <th><%= l(:label_version) %></th>
15 <th><%= l(:label_version) %></th>
16 <th><%= l(:field_effective_date) %></th>
16 <th><%= l(:field_effective_date) %></th>
17 <th><%= l(:field_description) %></th>
17 <th><%= l(:field_description) %></th>
18 <th><%= l(:field_status) %></th>
18 <th><%= l(:field_status) %></th>
19 <th><%= l(:field_sharing) %></th>
19 <th><%= l(:field_sharing) %></th>
20 <th><%= l(:label_wiki_page) %></th>
20 <th><%= l(:label_wiki_page) %></th>
21 <th style="width:15%"></th>
21 <th style="width:15%"></th>
22 </tr></thead>
22 </tr></thead>
23 <tbody>
23 <tbody>
24 <% @versions.sort.each do |version| %>
24 <% @versions.sort.each do |version| %>
25 <tr class="version <%=h version.status %> <%= 'shared' if version.project != @project %>">
25 <tr class="version <%= cycle 'odd', 'even' %> <%=h version.status %> <%= 'shared' if version.project != @project %>">
26 <td class="name <%= 'icon icon-shared' if version.project != @project %>"><%= link_to_version version %></td>
26 <td class="name <%= 'icon icon-shared' if version.project != @project %>"><%= link_to_version version %></td>
27 <td class="date"><%= format_date(version.effective_date) %></td>
27 <td class="date"><%= format_date(version.effective_date) %></td>
28 <td class="description"><%= version.description %></td>
28 <td class="description"><%= version.description %></td>
29 <td class="status"><%= l("version_status_#{version.status}") %></td>
29 <td class="status"><%= l("version_status_#{version.status}") %></td>
30 <td class="sharing"><%=h format_version_sharing(version.sharing) %></td>
30 <td class="sharing"><%=h format_version_sharing(version.sharing) %></td>
31 <td><%= link_to_if_authorized(version.wiki_page_title, {:controller => 'wiki', :action => 'show', :project_id => version.project, :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %></td>
31 <td><%= link_to_if_authorized(version.wiki_page_title, {:controller => 'wiki', :action => 'show', :project_id => version.project, :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %></td>
32 <td class="buttons">
32 <td class="buttons">
33 <% if version.project == @project && User.current.allowed_to?(:manage_versions, @project) %>
33 <% if version.project == @project && User.current.allowed_to?(:manage_versions, @project) %>
34 <%= link_to l(:button_edit), edit_version_path(version), :class => 'icon icon-edit' %>
34 <%= link_to l(:button_edit), edit_version_path(version), :class => 'icon icon-edit' %>
35 <%= delete_link version_path(version) %>
35 <%= delete_link version_path(version) %>
36 <% end %>
36 <% end %>
37 </td>
37 </td>
38 </tr>
38 </tr>
39 <% end %>
39 <% end; reset_cycle %>
40 </tbody>
40 </tbody>
41 </table>
41 </table>
42 <% else %>
42 <% else %>
43 <p class="nodata"><%= l(:label_no_data) %></p>
43 <p class="nodata"><%= l(:label_no_data) %></p>
44 <% end %>
44 <% end %>
45
45
46 <div class="contextual">
46 <div class="contextual">
47 <% if @versions.any? %>
47 <% if @versions.any? %>
48 <%= link_to l(:label_close_versions), close_completed_project_versions_path(@project), :method => :put %>
48 <%= link_to l(:label_close_versions), close_completed_project_versions_path(@project), :method => :put %>
49 <% end %>
49 <% end %>
50 </div>
50 </div>
51
51
52 <p><%= link_to l(:label_version_new), new_project_version_path(@project, :back_url => ''), :class => 'icon icon-add' if User.current.allowed_to?(:manage_versions, @project) %></p>
52 <p><%= link_to l(:label_version_new), new_project_version_path(@project, :back_url => ''), :class => 'icon icon-add' if User.current.allowed_to?(:manage_versions, @project) %></p>
@@ -1,129 +1,129
1 <div class="contextual">
1 <div class="contextual">
2 <% if User.current.allowed_to?(:add_subprojects, @project) %>
2 <% if User.current.allowed_to?(:add_subprojects, @project) %>
3 <%= link_to l(:label_subproject_new), new_project_path(:parent_id => @project), :class => 'icon icon-add' %>
3 <%= link_to l(:label_subproject_new), new_project_path(:parent_id => @project), :class => 'icon icon-add' %>
4 <% end %>
4 <% end %>
5 <% if User.current.allowed_to?(:close_project, @project) %>
5 <% if User.current.allowed_to?(:close_project, @project) %>
6 <% if @project.active? %>
6 <% if @project.active? %>
7 <%= link_to l(:button_close), close_project_path(@project), :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-lock' %>
7 <%= link_to l(:button_close), close_project_path(@project), :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-lock' %>
8 <% else %>
8 <% else %>
9 <%= link_to l(:button_reopen), reopen_project_path(@project), :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-unlock' %>
9 <%= link_to l(:button_reopen), reopen_project_path(@project), :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-unlock' %>
10 <% end %>
10 <% end %>
11 <% end %>
11 <% end %>
12 </div>
12 </div>
13
13
14 <h2><%=l(:label_overview)%></h2>
14 <h2><%=l(:label_overview)%></h2>
15
15
16 <% unless @project.active? %>
16 <% unless @project.active? %>
17 <p class="warning"><span class="icon icon-lock"><%= l(:text_project_closed) %></span></p>
17 <p class="warning"><span class="icon icon-lock"><%= l(:text_project_closed) %></span></p>
18 <% end %>
18 <% end %>
19
19
20 <div class="splitcontentleft">
20 <div class="splitcontentleft">
21 <% if @project.description.present? %>
21 <% if @project.description.present? %>
22 <div class="wiki">
22 <div class="wiki">
23 <%= textilizable @project.description %>
23 <%= textilizable @project.description %>
24 </div>
24 </div>
25 <% end %>
25 <% end %>
26 <% if @project.homepage.present? || @project.visible_custom_field_values.any?(&:present?) %>
26 <% if @project.homepage.present? || @project.visible_custom_field_values.any?(&:present?) %>
27 <ul>
27 <ul>
28 <% unless @project.homepage.blank? %>
28 <% unless @project.homepage.blank? %>
29 <li><span class="label"><%=l(:field_homepage)%>:</span> <%= link_to_if uri_with_safe_scheme?(@project.homepage), @project.homepage, @project.homepage %></li>
29 <li><span class="label"><%=l(:field_homepage)%>:</span> <%= link_to_if uri_with_safe_scheme?(@project.homepage), @project.homepage, @project.homepage %></li>
30 <% end %>
30 <% end %>
31 <% render_custom_field_values(@project) do |custom_field, formatted| %>
31 <% render_custom_field_values(@project) do |custom_field, formatted| %>
32 <li><span class="label"><%= custom_field.name %>:</span> <%= formatted %></li>
32 <li><span class="label"><%= custom_field.name %>:</span> <%= formatted %></li>
33 <% end %>
33 <% end %>
34 </ul>
34 </ul>
35 <% end %>
35 <% end %>
36
36
37 <% if User.current.allowed_to?(:view_issues, @project) %>
37 <% if User.current.allowed_to?(:view_issues, @project) %>
38 <div class="issues box">
38 <div class="issues box">
39 <h3 class="icon icon-issue"><%=l(:label_issue_tracking)%></h3>
39 <h3 class="icon icon-issue"><%=l(:label_issue_tracking)%></h3>
40 <% if @trackers.present? %>
40 <% if @trackers.present? %>
41 <table class="list issue-report">
41 <table class="list issue-report">
42 <thead>
42 <thead>
43 <tr>
43 <tr>
44 <th></th>
44 <th></th>
45 <th><%=l(:label_open_issues_plural)%></th>
45 <th><%=l(:label_open_issues_plural)%></th>
46 <th><%=l(:label_closed_issues_plural)%></th>
46 <th><%=l(:label_closed_issues_plural)%></th>
47 <th><%=l(:label_total)%></th>
47 <th><%=l(:label_total)%></th>
48 </tr>
48 </tr>
49 </thead>
49 </thead>
50 <tbody>
50 <tbody>
51 <% @trackers.each do |tracker| %>
51 <% @trackers.each do |tracker| %>
52 <tr>
52 <tr class="<%= cycle("odd", "even") %>">
53 <td class="name">
53 <td class="name">
54 <%= link_to tracker.name, project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id) %>
54 <%= link_to tracker.name, project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id) %>
55 </td>
55 </td>
56 <td>
56 <td>
57 <%= link_to @open_issues_by_tracker[tracker].to_i, project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id) %>
57 <%= link_to @open_issues_by_tracker[tracker].to_i, project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id) %>
58 </td>
58 </td>
59 <td>
59 <td>
60 <%= link_to (@total_issues_by_tracker[tracker].to_i - @open_issues_by_tracker[tracker].to_i), project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id, :status_id => 'c') %>
60 <%= link_to (@total_issues_by_tracker[tracker].to_i - @open_issues_by_tracker[tracker].to_i), project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id, :status_id => 'c') %>
61 </td>
61 </td>
62 <td>
62 <td>
63 <%= link_to @total_issues_by_tracker[tracker].to_i, project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id, :status_id => '*') %>
63 <%= link_to @total_issues_by_tracker[tracker].to_i, project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id, :status_id => '*') %>
64 </td>
64 </td>
65 </tr>
65 </tr>
66 <% end %>
66 <% end %>
67 </tbody>
67 </tbody>
68 </table>
68 </table>
69 <% end %>
69 <% end %>
70 <p>
70 <p>
71 <%= link_to l(:label_issue_view_all), project_issues_path(@project, :set_filter => 1) %>
71 <%= link_to l(:label_issue_view_all), project_issues_path(@project, :set_filter => 1) %>
72 <% if User.current.allowed_to?(:view_calendar, @project, :global => true) %>
72 <% if User.current.allowed_to?(:view_calendar, @project, :global => true) %>
73 | <%= link_to l(:label_calendar), project_calendar_path(@project) %>
73 | <%= link_to l(:label_calendar), project_calendar_path(@project) %>
74 <% end %>
74 <% end %>
75 <% if User.current.allowed_to?(:view_gantt, @project, :global => true) %>
75 <% if User.current.allowed_to?(:view_gantt, @project, :global => true) %>
76 | <%= link_to l(:label_gantt), project_gantt_path(@project) %>
76 | <%= link_to l(:label_gantt), project_gantt_path(@project) %>
77 <% end %>
77 <% end %>
78 </p>
78 </p>
79 </div>
79 </div>
80 <% end %>
80 <% end %>
81
81
82 <% if User.current.allowed_to?(:view_time_entries, @project) %>
82 <% if User.current.allowed_to?(:view_time_entries, @project) %>
83 <div class="spent_time box">
83 <div class="spent_time box">
84 <h3 class="icon icon-time"><%= l(:label_spent_time) %></h3>
84 <h3 class="icon icon-time"><%= l(:label_spent_time) %></h3>
85 <% if @total_hours.present? %>
85 <% if @total_hours.present? %>
86 <p><%= l_hours(@total_hours) %></p>
86 <p><%= l_hours(@total_hours) %></p>
87 <% end %>
87 <% end %>
88 <p>
88 <p>
89 <% if User.current.allowed_to?(:log_time, @project) %>
89 <% if User.current.allowed_to?(:log_time, @project) %>
90 <%= link_to l(:button_log_time), new_project_time_entry_path(@project) %> |
90 <%= link_to l(:button_log_time), new_project_time_entry_path(@project) %> |
91 <% end %>
91 <% end %>
92 <%= link_to(l(:label_details), project_time_entries_path(@project)) %> |
92 <%= link_to(l(:label_details), project_time_entries_path(@project)) %> |
93 <%= link_to(l(:label_report), report_project_time_entries_path(@project)) %>
93 <%= link_to(l(:label_report), report_project_time_entries_path(@project)) %>
94 </p>
94 </p>
95 </div>
95 </div>
96 <% end %>
96 <% end %>
97 <%= call_hook(:view_projects_show_left, :project => @project) %>
97 <%= call_hook(:view_projects_show_left, :project => @project) %>
98 </div>
98 </div>
99
99
100 <div class="splitcontentright">
100 <div class="splitcontentright">
101 <%= render :partial => 'members_box' %>
101 <%= render :partial => 'members_box' %>
102
102
103 <% if @news.any? && authorize_for('news', 'index') %>
103 <% if @news.any? && authorize_for('news', 'index') %>
104 <div class="news box">
104 <div class="news box">
105 <h3 class="icon icon-news"><%=l(:label_news_latest)%></h3>
105 <h3 class="icon icon-news"><%=l(:label_news_latest)%></h3>
106 <%= render :partial => 'news/news', :collection => @news %>
106 <%= render :partial => 'news/news', :collection => @news %>
107 <p><%= link_to l(:label_news_view_all), project_news_index_path(@project) %></p>
107 <p><%= link_to l(:label_news_view_all), project_news_index_path(@project) %></p>
108 </div>
108 </div>
109 <% end %>
109 <% end %>
110
110
111 <% if @subprojects.any? %>
111 <% if @subprojects.any? %>
112 <div class="projects box">
112 <div class="projects box">
113 <h3 class="icon icon-projects"><%=l(:label_subproject_plural)%></h3>
113 <h3 class="icon icon-projects"><%=l(:label_subproject_plural)%></h3>
114 <%= @subprojects.collect{|p| link_to p, project_path(p), :class => p.css_classes}.join(", ").html_safe %>
114 <%= @subprojects.collect{|p| link_to p, project_path(p), :class => p.css_classes}.join(", ").html_safe %>
115 </div>
115 </div>
116 <% end %>
116 <% end %>
117
117
118 <%= call_hook(:view_projects_show_right, :project => @project) %>
118 <%= call_hook(:view_projects_show_right, :project => @project) %>
119 </div>
119 </div>
120
120
121 <% content_for :sidebar do %>
121 <% content_for :sidebar do %>
122 <%= call_hook(:view_projects_show_sidebar_bottom, :project => @project) %>
122 <%= call_hook(:view_projects_show_sidebar_bottom, :project => @project) %>
123 <% end %>
123 <% end %>
124
124
125 <% content_for :header_tags do %>
125 <% content_for :header_tags do %>
126 <%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :id => @project, :format => 'atom', :key => User.current.rss_key}) %>
126 <%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :id => @project, :format => 'atom', :key => User.current.rss_key}) %>
127 <% end %>
127 <% end %>
128
128
129 <% html_title(l(:label_overview)) -%>
129 <% html_title(l(:label_overview)) -%>
@@ -1,25 +1,25
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to_if_authorized l(:label_query_new), new_project_query_path(:project_id => @project), :class => 'icon icon-add' %>
2 <%= link_to_if_authorized l(:label_query_new), new_project_query_path(:project_id => @project), :class => 'icon icon-add' %>
3 </div>
3 </div>
4
4
5 <h2><%= l(:label_query_plural) %></h2>
5 <h2><%= l(:label_query_plural) %></h2>
6
6
7 <% if @queries.empty? %>
7 <% if @queries.empty? %>
8 <p><i><%=l(:label_no_data)%></i></p>
8 <p><i><%=l(:label_no_data)%></i></p>
9 <% else %>
9 <% else %>
10 <table class="list">
10 <table class="list">
11 <% @queries.each do |query| %>
11 <% @queries.each do |query| %>
12 <tr>
12 <tr class="<%= cycle('odd', 'even') %>">
13 <td class="name">
13 <td class="name">
14 <%= link_to query.name, :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query %>
14 <%= link_to query.name, :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query %>
15 </td>
15 </td>
16 <td class="buttons">
16 <td class="buttons">
17 <% if query.editable_by?(User.current) %>
17 <% if query.editable_by?(User.current) %>
18 <%= link_to l(:button_edit), edit_query_path(query), :class => 'icon icon-edit' %>
18 <%= link_to l(:button_edit), edit_query_path(query), :class => 'icon icon-edit' %>
19 <%= delete_link query_path(query) %>
19 <%= delete_link query_path(query) %>
20 <% end %>
20 <% end %>
21 </td>
21 </td>
22 </tr>
22 </tr>
23 <% end %>
23 <% end %>
24 </table>
24 </table>
25 <% end %>
25 <% end %>
@@ -1,28 +1,29
1 <% if @statuses.empty? or rows.empty? %>
1 <% if @statuses.empty? or rows.empty? %>
2 <p><i><%=l(:label_no_data)%></i></p>
2 <p><i><%=l(:label_no_data)%></i></p>
3 <% else %>
3 <% else %>
4 <table class="list issue-report">
4 <table class="list issue-report">
5 <thead><tr>
5 <thead><tr>
6 <th></th>
6 <th></th>
7 <% for status in @statuses %>
7 <% for status in @statuses %>
8 <th><%= status.name %></th>
8 <th><%= status.name %></th>
9 <% end %>
9 <% end %>
10 <th><strong><%=l(:label_open_issues_plural)%></strong></th>
10 <th><strong><%=l(:label_open_issues_plural)%></strong></th>
11 <th><strong><%=l(:label_closed_issues_plural)%></strong></th>
11 <th><strong><%=l(:label_closed_issues_plural)%></strong></th>
12 <th><strong><%=l(:label_total)%></strong></th>
12 <th><strong><%=l(:label_total)%></strong></th>
13 </tr></thead>
13 </tr></thead>
14 <tbody>
14 <tbody>
15 <% for row in rows %>
15 <% for row in rows %>
16 <tr>
16 <tr class="<%= cycle("odd", "even") %>">
17 <td class="name"><%= link_to row.name, aggregate_path(@project, field_name, row) %></td>
17 <td class="name"><%= link_to row.name, aggregate_path(@project, field_name, row) %></td>
18 <% for status in @statuses %>
18 <% for status in @statuses %>
19 <td><%= aggregate_link data, { field_name => row.id, "status_id" => status.id }, aggregate_path(@project, field_name, row, :status_id => status.id) %></td>
19 <td><%= aggregate_link data, { field_name => row.id, "status_id" => status.id }, aggregate_path(@project, field_name, row, :status_id => status.id) %></td>
20 <% end %>
20 <% end %>
21 <td><%= aggregate_link data, { field_name => row.id, "closed" => 0 }, aggregate_path(@project, field_name, row, :status_id => "o") %></td>
21 <td><%= aggregate_link data, { field_name => row.id, "closed" => 0 }, aggregate_path(@project, field_name, row, :status_id => "o") %></td>
22 <td><%= aggregate_link data, { field_name => row.id, "closed" => 1 }, aggregate_path(@project, field_name, row, :status_id => "c") %></td>
22 <td><%= aggregate_link data, { field_name => row.id, "closed" => 1 }, aggregate_path(@project, field_name, row, :status_id => "c") %></td>
23 <td><%= aggregate_link data, { field_name => row.id }, aggregate_path(@project, field_name, row, :status_id => "*") %></td>
23 <td><%= aggregate_link data, { field_name => row.id }, aggregate_path(@project, field_name, row, :status_id => "*") %></td>
24 </tr>
24 </tr>
25 <% end %>
25 <% end %>
26 </tbody>
26 </tbody>
27 </table>
27 </table>
28 <% end %>
28 <% end
29 reset_cycle %>
@@ -1,22 +1,23
1 <% if @statuses.empty? or rows.empty? %>
1 <% if @statuses.empty? or rows.empty? %>
2 <p><i><%=l(:label_no_data)%></i></p>
2 <p><i><%=l(:label_no_data)%></i></p>
3 <% else %>
3 <% else %>
4 <table class="list issue-report">
4 <table class="list issue-report">
5 <thead><tr>
5 <thead><tr>
6 <th></th>
6 <th></th>
7 <th><%=l(:label_open_issues_plural)%></th>
7 <th><%=l(:label_open_issues_plural)%></th>
8 <th><%=l(:label_closed_issues_plural)%></th>
8 <th><%=l(:label_closed_issues_plural)%></th>
9 <th><%=l(:label_total)%></th>
9 <th><%=l(:label_total)%></th>
10 </tr></thead>
10 </tr></thead>
11 <tbody>
11 <tbody>
12 <% for row in rows %>
12 <% for row in rows %>
13 <tr>
13 <tr class="<%= cycle("odd", "even") %>">
14 <td class="name"><%= link_to row.name, aggregate_path(@project, field_name, row) %></td>
14 <td class="name"><%= link_to row.name, aggregate_path(@project, field_name, row) %></td>
15 <td><%= aggregate_link data, { field_name => row.id, "closed" => 0 }, aggregate_path(@project, field_name, row, :status_id => "o") %></td>
15 <td><%= aggregate_link data, { field_name => row.id, "closed" => 0 }, aggregate_path(@project, field_name, row, :status_id => "o") %></td>
16 <td><%= aggregate_link data, { field_name => row.id, "closed" => 1 }, aggregate_path(@project, field_name, row, :status_id => "c") %></td>
16 <td><%= aggregate_link data, { field_name => row.id, "closed" => 1 }, aggregate_path(@project, field_name, row, :status_id => "c") %></td>
17 <td><%= aggregate_link data, { field_name => row.id }, aggregate_path(@project, field_name, row, :status_id => "*") %></td>
17 <td><%= aggregate_link data, { field_name => row.id }, aggregate_path(@project, field_name, row, :status_id => "*") %></td>
18 </tr>
18 </tr>
19 <% end %>
19 <% end %>
20 </tbody>
20 </tbody>
21 </table>
21 </table>
22 <% end %>
22 <% end
23 reset_cycle %>
@@ -1,53 +1,53
1 <div class="autoscroll">
1 <div class="autoscroll">
2 <% show_revision_graph = ( @repository.supports_revision_graph? && path.blank? ) %>
2 <% show_revision_graph = ( @repository.supports_revision_graph? && path.blank? ) %>
3 <%= if show_revision_graph && revisions && revisions.any?
3 <%= if show_revision_graph && revisions && revisions.any?
4 indexed_commits, graph_space = index_commits(revisions, @repository.branches) do |scmid|
4 indexed_commits, graph_space = index_commits(revisions, @repository.branches) do |scmid|
5 url_for(
5 url_for(
6 :controller => 'repositories',
6 :controller => 'repositories',
7 :action => 'revision',
7 :action => 'revision',
8 :id => project,
8 :id => project,
9 :repository_id => @repository.identifier_param,
9 :repository_id => @repository.identifier_param,
10 :rev => scmid)
10 :rev => scmid)
11 end
11 end
12 render :partial => 'revision_graph',
12 render :partial => 'revision_graph',
13 :locals => {
13 :locals => {
14 :commits => indexed_commits,
14 :commits => indexed_commits,
15 :space => graph_space
15 :space => graph_space
16 }
16 }
17 end %>
17 end %>
18 <%= form_tag(
18 <%= form_tag(
19 {:controller => 'repositories', :action => 'diff', :id => project,
19 {:controller => 'repositories', :action => 'diff', :id => project,
20 :repository_id => @repository.identifier_param, :path => to_path_param(path)},
20 :repository_id => @repository.identifier_param, :path => to_path_param(path)},
21 :method => :get
21 :method => :get
22 ) do %>
22 ) do %>
23 <table class="list changesets">
23 <table class="list changesets">
24 <thead><tr>
24 <thead><tr>
25 <th>#</th>
25 <th>#</th>
26 <th></th>
26 <th></th>
27 <th></th>
27 <th></th>
28 <th><%= l(:label_date) %></th>
28 <th><%= l(:label_date) %></th>
29 <th><%= l(:field_author) %></th>
29 <th><%= l(:field_author) %></th>
30 <th><%= l(:field_comments) %></th>
30 <th><%= l(:field_comments) %></th>
31 </tr></thead>
31 </tr></thead>
32 <tbody>
32 <tbody>
33 <% show_diff = revisions.size > 1 %>
33 <% show_diff = revisions.size > 1 %>
34 <% line_num = 1 %>
34 <% line_num = 1 %>
35 <% revisions.each do |changeset| %>
35 <% revisions.each do |changeset| %>
36 <tr class="changeset">
36 <tr class="changeset <%= cycle 'odd', 'even' %>">
37 <% id_style = (show_revision_graph ? "padding-left:#{(graph_space + 1) * 20}px" : nil) %>
37 <% id_style = (show_revision_graph ? "padding-left:#{(graph_space + 1) * 20}px" : nil) %>
38 <%= content_tag(:td, :class => 'id', :style => id_style) do %>
38 <%= content_tag(:td, :class => 'id', :style => id_style) do %>
39 <%= link_to_revision(changeset, @repository) %>
39 <%= link_to_revision(changeset, @repository) %>
40 <% end %>
40 <% end %>
41 <td class="checkbox"><%= radio_button_tag('rev', changeset.identifier, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('#cbto-#{line_num+1}').prop('checked',true);") if show_diff && (line_num < revisions.size) %></td>
41 <td class="checkbox"><%= radio_button_tag('rev', changeset.identifier, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('#cbto-#{line_num+1}').prop('checked',true);") if show_diff && (line_num < revisions.size) %></td>
42 <td class="checkbox"><%= radio_button_tag('rev_to', changeset.identifier, (line_num==2), :id => "cbto-#{line_num}", :onclick => "if ($('#cb-#{line_num}').prop('checked')) {$('#cb-#{line_num-1}').prop('checked',true);}") if show_diff && (line_num > 1) %></td>
42 <td class="checkbox"><%= radio_button_tag('rev_to', changeset.identifier, (line_num==2), :id => "cbto-#{line_num}", :onclick => "if ($('#cb-#{line_num}').prop('checked')) {$('#cb-#{line_num-1}').prop('checked',true);}") if show_diff && (line_num > 1) %></td>
43 <td class="committed_on"><%= format_time(changeset.committed_on) %></td>
43 <td class="committed_on"><%= format_time(changeset.committed_on) %></td>
44 <td class="author"><%= changeset.user.blank? ? changeset.author.to_s.truncate(30) : link_to_user(changeset.user) %></td>
44 <td class="author"><%= changeset.user.blank? ? changeset.author.to_s.truncate(30) : link_to_user(changeset.user) %></td>
45 <td class="comments"><%= textilizable(truncate_at_line_break(changeset.comments)) %></td>
45 <td class="comments"><%= textilizable(truncate_at_line_break(changeset.comments)) %></td>
46 </tr>
46 </tr>
47 <% line_num += 1 %>
47 <% line_num += 1 %>
48 <% end %>
48 <% end %>
49 </tbody>
49 </tbody>
50 </table>
50 </table>
51 <%= submit_tag(l(:label_view_diff), :name => nil) if show_diff %>
51 <%= submit_tag(l(:label_view_diff), :name => nil) if show_diff %>
52 <% end %>
52 <% end %>
53 </div>
53 </div>
@@ -1,42 +1,42
1 <h2><%= l(:label_repository) %></h2>
1 <h2><%= l(:label_repository) %></h2>
2
2
3 <%= simple_format(l(:text_repository_usernames_mapping)) %>
3 <%= simple_format(l(:text_repository_usernames_mapping)) %>
4
4
5 <% if @committers.empty? %>
5 <% if @committers.empty? %>
6 <p class="nodata"><%= l(:label_no_data) %></p>
6 <p class="nodata"><%= l(:label_no_data) %></p>
7 <% else %>
7 <% else %>
8
8
9 <%= form_tag({}) do %>
9 <%= form_tag({}) do %>
10 <table class="list">
10 <table class="list">
11 <thead>
11 <thead>
12 <tr>
12 <tr>
13 <th><%= l(:field_login) %></th>
13 <th><%= l(:field_login) %></th>
14 <th><%= l(:label_user) %></th>
14 <th><%= l(:label_user) %></th>
15 </tr>
15 </tr>
16 </thead>
16 </thead>
17 <tbody>
17 <tbody>
18 <% i = 0 -%>
18 <% i = 0 -%>
19 <% @committers.each do |committer, user_id| -%>
19 <% @committers.each do |committer, user_id| -%>
20 <tr>
20 <tr class="<%= cycle 'odd', 'even' %>">
21 <td><%= committer %></td>
21 <td><%= committer %></td>
22 <td>
22 <td>
23 <%= hidden_field_tag "committers[#{i}][]", committer, :id => nil %>
23 <%= hidden_field_tag "committers[#{i}][]", committer, :id => nil %>
24 <%= select_tag "committers[#{i}][]",
24 <%= select_tag "committers[#{i}][]",
25 content_tag(
25 content_tag(
26 'option',
26 'option',
27 "-- #{l :actionview_instancetag_blank_option} --",
27 "-- #{l :actionview_instancetag_blank_option} --",
28 :value => ''
28 :value => ''
29 ) +
29 ) +
30 options_from_collection_for_select(
30 options_from_collection_for_select(
31 @users, 'id', 'name', user_id.to_i
31 @users, 'id', 'name', user_id.to_i
32 ) %>
32 ) %>
33 </td>
33 </td>
34 </tr>
34 </tr>
35 <% i += 1 -%>
35 <% i += 1 -%>
36 <% end -%>
36 <% end -%>
37 </tbody>
37 </tbody>
38 </table>
38 </table>
39 <p><%= submit_tag(l(:button_save)) %></p>
39 <p><%= submit_tag(l(:button_save)) %></p>
40 <% end %>
40 <% end %>
41
41
42 <% end %>
42 <% end %>
@@ -1,112 +1,112
1 <%= error_messages_for 'role' %>
1 <%= error_messages_for 'role' %>
2
2
3 <div class="box tabular">
3 <div class="box tabular">
4 <% unless @role.builtin? %>
4 <% unless @role.builtin? %>
5 <p><%= f.text_field :name, :required => true %></p>
5 <p><%= f.text_field :name, :required => true %></p>
6 <p><%= f.check_box :assignable %></p>
6 <p><%= f.check_box :assignable %></p>
7 <% end %>
7 <% end %>
8
8
9 <% unless @role.anonymous? %>
9 <% unless @role.anonymous? %>
10 <p class="view_issues_shown"><%= f.select :issues_visibility, Role::ISSUES_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %></p>
10 <p class="view_issues_shown"><%= f.select :issues_visibility, Role::ISSUES_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %></p>
11 <% end %>
11 <% end %>
12
12
13 <% unless @role.anonymous? %>
13 <% unless @role.anonymous? %>
14 <p class="view_time_entries_shown"><%= f.select :time_entries_visibility, Role::TIME_ENTRIES_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %></p>
14 <p class="view_time_entries_shown"><%= f.select :time_entries_visibility, Role::TIME_ENTRIES_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %></p>
15 <% end %>
15 <% end %>
16
16
17 <p><%= f.select :users_visibility, Role::USERS_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %></p>
17 <p><%= f.select :users_visibility, Role::USERS_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %></p>
18
18
19 <% unless @role.builtin? %>
19 <% unless @role.builtin? %>
20 <p class="manage_members_shown">
20 <p class="manage_members_shown">
21 <label><%= l(:label_member_management) %></label>
21 <label><%= l(:label_member_management) %></label>
22 <label class="block">
22 <label class="block">
23 <%= radio_button_tag 'role[all_roles_managed]', 1, @role.all_roles_managed?, :id => 'role_all_roles_managed_on',
23 <%= radio_button_tag 'role[all_roles_managed]', 1, @role.all_roles_managed?, :id => 'role_all_roles_managed_on',
24 :data => {:disables => '.role_managed_role input'} %>
24 :data => {:disables => '.role_managed_role input'} %>
25 <%= l(:label_member_management_all_roles) %>
25 <%= l(:label_member_management_all_roles) %>
26 </label>
26 </label>
27 <label class="block">
27 <label class="block">
28 <%= radio_button_tag 'role[all_roles_managed]', 0, !@role.all_roles_managed?, :id => 'role_all_roles_managed_off',
28 <%= radio_button_tag 'role[all_roles_managed]', 0, !@role.all_roles_managed?, :id => 'role_all_roles_managed_off',
29 :data => {:enables => '.role_managed_role input'} %>
29 :data => {:enables => '.role_managed_role input'} %>
30 <%= l(:label_member_management_selected_roles_only) %>:
30 <%= l(:label_member_management_selected_roles_only) %>:
31 </label>
31 </label>
32 <% Role.givable.sorted.each do |role| %>
32 <% Role.givable.sorted.each do |role| %>
33 <label class="block role_managed_role" style="padding-left:2em;">
33 <label class="block role_managed_role" style="padding-left:2em;">
34 <%= check_box_tag 'role[managed_role_ids][]', role.id, @role.managed_roles.to_a.include?(role), :id => nil %>
34 <%= check_box_tag 'role[managed_role_ids][]', role.id, @role.managed_roles.to_a.include?(role), :id => nil %>
35 <%= role.name %>
35 <%= role.name %>
36 </label>
36 </label>
37 <% end %>
37 <% end %>
38 <%= hidden_field_tag 'role[managed_role_ids][]', '' %>
38 <%= hidden_field_tag 'role[managed_role_ids][]', '' %>
39 <% end %>
39 <% end %>
40
40
41 <% if @role.new_record? && @roles.any? %>
41 <% if @role.new_record? && @roles.any? %>
42 <p><label for="copy_workflow_from"><%= l(:label_copy_workflow_from) %></label>
42 <p><label for="copy_workflow_from"><%= l(:label_copy_workflow_from) %></label>
43 <%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@roles, :id, :name, params[:copy_workflow_from] || @copy_from.try(:id))) %></p>
43 <%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@roles, :id, :name, params[:copy_workflow_from] || @copy_from.try(:id))) %></p>
44 <% end %>
44 <% end %>
45 </div>
45 </div>
46
46
47 <h3><%= l(:label_permissions) %></h3>
47 <h3><%= l(:label_permissions) %></h3>
48 <div class="box tabular" id="permissions">
48 <div class="box tabular" id="permissions">
49 <% perms_by_module = @role.setable_permissions.group_by {|p| p.project_module.to_s} %>
49 <% perms_by_module = @role.setable_permissions.group_by {|p| p.project_module.to_s} %>
50 <% perms_by_module.keys.sort.each do |mod| %>
50 <% perms_by_module.keys.sort.each do |mod| %>
51 <fieldset><legend><%= mod.blank? ? l(:label_project) : l_or_humanize(mod, :prefix => 'project_module_') %></legend>
51 <fieldset><legend><%= mod.blank? ? l(:label_project) : l_or_humanize(mod, :prefix => 'project_module_') %></legend>
52 <% perms_by_module[mod].each do |permission| %>
52 <% perms_by_module[mod].each do |permission| %>
53 <label class="floating">
53 <label class="floating">
54 <%= check_box_tag 'role[permissions][]', permission.name, (@role.permissions.include? permission.name),
54 <%= check_box_tag 'role[permissions][]', permission.name, (@role.permissions.include? permission.name),
55 :id => "role_permissions_#{permission.name}",
55 :id => "role_permissions_#{permission.name}",
56 :data => {:shows => ".#{permission.name}_shown"} %>
56 :data => {:shows => ".#{permission.name}_shown"} %>
57 <%= l_or_humanize(permission.name, :prefix => 'permission_') %>
57 <%= l_or_humanize(permission.name, :prefix => 'permission_') %>
58 </label>
58 </label>
59 <% end %>
59 <% end %>
60 </fieldset>
60 </fieldset>
61 <% end %>
61 <% end %>
62 <br /><%= check_all_links 'permissions' %>
62 <br /><%= check_all_links 'permissions' %>
63 <%= hidden_field_tag 'role[permissions][]', '' %>
63 <%= hidden_field_tag 'role[permissions][]', '' %>
64 </div>
64 </div>
65
65
66 <div id="role-permissions-trackers" class="view_issues_shown">
66 <div id="role-permissions-trackers" class="view_issues_shown">
67 <h3><%= l(:label_issue_tracking) %></h3>
67 <h3><%= l(:label_issue_tracking) %></h3>
68 <% permissions = %w(view_issues add_issues edit_issues add_issue_notes delete_issues) %>
68 <% permissions = %w(view_issues add_issues edit_issues add_issue_notes delete_issues) %>
69
69
70 <div class="autoscroll">
70 <div class="autoscroll">
71 <table class="list">
71 <table class="list">
72 <thead>
72 <thead>
73 <tr>
73 <tr>
74 <th><%= l(:label_tracker) %></th>
74 <th><%= l(:label_tracker) %></th>
75 <% permissions.each do |permission| %>
75 <% permissions.each do |permission| %>
76 <th class="<%= "#{permission}_shown" %>"><%= l("permission_#{permission}") %></th>
76 <th class="<%= "#{permission}_shown" %>"><%= l("permission_#{permission}") %></th>
77 <% end %>
77 <% end %>
78 </thead>
78 </thead>
79 <tbody>
79 <tbody>
80 <tr>
80 <tr>
81 <td class="name"><b><%= l(:label_tracker_all) %></b></td>
81 <td class="name"><b><%= l(:label_tracker_all) %></b></td>
82 <% permissions.each do |permission| %>
82 <% permissions.each do |permission| %>
83 <td class="<%= "#{permission}_shown" %>">
83 <td class="<%= "#{permission}_shown" %>">
84 <%= hidden_field_tag "role[permissions_all_trackers][#{permission}]", '0', :id => nil %>
84 <%= hidden_field_tag "role[permissions_all_trackers][#{permission}]", '0', :id => nil %>
85 <%= check_box_tag "role[permissions_all_trackers][#{permission}]",
85 <%= check_box_tag "role[permissions_all_trackers][#{permission}]",
86 '1',
86 '1',
87 @role.permissions_all_trackers?(permission),
87 @role.permissions_all_trackers?(permission),
88 :class => "#{permission}_shown",
88 :class => "#{permission}_shown",
89 :data => {:disables => ".#{permission}_tracker"} %>
89 :data => {:disables => ".#{permission}_tracker"} %>
90 </td>
90 </td>
91 <% end %>
91 <% end %>
92 </tr>
92 </tr>
93 <% Tracker.sorted.all.each do |tracker| %>
93 <% Tracker.sorted.all.each do |tracker| %>
94 <tr>
94 <tr class="<%= cycle("odd", "even") %>">
95 <td class="name"><%= tracker.name %></td>
95 <td class="name"><%= tracker.name %></td>
96 <% permissions.each do |permission| %>
96 <% permissions.each do |permission| %>
97 <td class="<%= "#{permission}_shown" %>"><%= check_box_tag "role[permissions_tracker_ids][#{permission}][]",
97 <td class="<%= "#{permission}_shown" %>"><%= check_box_tag "role[permissions_tracker_ids][#{permission}][]",
98 tracker.id,
98 tracker.id,
99 @role.permissions_tracker_ids?(permission, tracker.id),
99 @role.permissions_tracker_ids?(permission, tracker.id),
100 :class => "#{permission}_tracker",
100 :class => "#{permission}_tracker",
101 :id => "role_permissions_tracker_ids_add_issues_#{tracker.id}" %></td>
101 :id => "role_permissions_tracker_ids_add_issues_#{tracker.id}" %></td>
102 <% end %>
102 <% end %>
103 </tr>
103 </tr>
104 <% end %>
104 <% end %>
105 </tbody>
105 </tbody>
106 </table>
106 </table>
107 </div>
107 </div>
108
108
109 <% permissions.each do |permission| %>
109 <% permissions.each do |permission| %>
110 <%= hidden_field_tag "role[permissions_tracker_ids][#{permission}][]", '' %>
110 <%= hidden_field_tag "role[permissions_tracker_ids][#{permission}][]", '' %>
111 <% end %>
111 <% end %>
112 </div>
112 </div>
@@ -1,31 +1,31
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to l(:label_role_new), new_role_path, :class => 'icon icon-add' %>
2 <%= link_to l(:label_role_new), new_role_path, :class => 'icon icon-add' %>
3 <%= link_to l(:label_permissions_report), permissions_roles_path, :class => 'icon icon-summary' %>
3 <%= link_to l(:label_permissions_report), permissions_roles_path, :class => 'icon icon-summary' %>
4 </div>
4 </div>
5
5
6 <h2><%=l(:label_role_plural)%></h2>
6 <h2><%=l(:label_role_plural)%></h2>
7
7
8 <table class="list roles">
8 <table class="list roles">
9 <thead><tr>
9 <thead><tr>
10 <th><%=l(:label_role)%></th>
10 <th><%=l(:label_role)%></th>
11 <th></th>
11 <th></th>
12 </tr></thead>
12 </tr></thead>
13 <tbody>
13 <tbody>
14 <% for role in @roles %>
14 <% for role in @roles %>
15 <tr class="<%= role.builtin? ? "builtin" : "givable" %>">
15 <tr class="<%= cycle("odd", "even") %> <%= role.builtin? ? "builtin" : "givable" %>">
16 <td class="name"><%= content_tag(role.builtin? ? 'em' : 'span', link_to(role.name, edit_role_path(role))) %></td>
16 <td class="name"><%= content_tag(role.builtin? ? 'em' : 'span', link_to(role.name, edit_role_path(role))) %></td>
17 <td class="buttons">
17 <td class="buttons">
18 <%= reorder_handle(role) unless role.builtin? %>
18 <%= reorder_handle(role) unless role.builtin? %>
19 <%= link_to l(:button_copy), new_role_path(:copy => role), :class => 'icon icon-copy' %>
19 <%= link_to l(:button_copy), new_role_path(:copy => role), :class => 'icon icon-copy' %>
20 <%= delete_link role_path(role) unless role.builtin? %>
20 <%= delete_link role_path(role) unless role.builtin? %>
21 </td>
21 </td>
22 </tr>
22 </tr>
23 <% end %>
23 <% end %>
24 </tbody>
24 </tbody>
25 </table>
25 </table>
26
26
27 <% html_title(l(:label_role_plural)) -%>
27 <% html_title(l(:label_role_plural)) -%>
28
28
29 <%= javascript_tag do %>
29 <%= javascript_tag do %>
30 $(function() { $("table.roles tbody").positionedItems({items: ".givable"}); });
30 $(function() { $("table.roles tbody").positionedItems({items: ".givable"}); });
31 <% end %> No newline at end of file
31 <% end %>
@@ -1,59 +1,59
1 <%= title [l(:label_role_plural), roles_path], l(:label_permissions_report) %>
1 <%= title [l(:label_role_plural), roles_path], l(:label_permissions_report) %>
2
2
3 <%= form_tag(permissions_roles_path, :id => 'permissions_form') do %>
3 <%= form_tag(permissions_roles_path, :id => 'permissions_form') do %>
4 <%= hidden_field_tag 'permissions[0]', '', :id => nil %>
4 <%= hidden_field_tag 'permissions[0]', '', :id => nil %>
5 <div class="autoscroll">
5 <div class="autoscroll">
6 <table class="list permissions">
6 <table class="list permissions">
7 <thead>
7 <thead>
8 <tr>
8 <tr>
9 <th><%=l(:label_permissions)%></th>
9 <th><%=l(:label_permissions)%></th>
10 <% @roles.each do |role| %>
10 <% @roles.each do |role| %>
11 <th>
11 <th>
12 <%= link_to_function('',
12 <%= link_to_function('',
13 "toggleCheckboxesBySelector('input.role-#{role.id}')",
13 "toggleCheckboxesBySelector('input.role-#{role.id}')",
14 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
14 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
15 :class => 'icon-only icon-checked') %>
15 :class => 'icon-only icon-checked') %>
16 <%= content_tag(role.builtin? ? 'em' : 'span', role.name) %>
16 <%= content_tag(role.builtin? ? 'em' : 'span', role.name) %>
17 </th>
17 </th>
18 <% end %>
18 <% end %>
19 </tr>
19 </tr>
20 </thead>
20 </thead>
21 <tbody>
21 <tbody>
22 <% perms_by_module = @permissions.group_by {|p| p.project_module.to_s} %>
22 <% perms_by_module = @permissions.group_by {|p| p.project_module.to_s} %>
23 <% perms_by_module.keys.sort.each do |mod| %>
23 <% perms_by_module.keys.sort.each do |mod| %>
24 <% unless mod.blank? %>
24 <% unless mod.blank? %>
25 <tr class="group open">
25 <tr class="group open">
26 <td>
26 <td>
27 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
27 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
28 <%= l_or_humanize(mod, :prefix => 'project_module_') %>
28 <%= l_or_humanize(mod, :prefix => 'project_module_') %>
29 </td>
29 </td>
30 <% @roles.each do |role| %>
30 <% @roles.each do |role| %>
31 <td class="role"><%= role.name %></td>
31 <td class="role"><%= role.name %></td>
32 <% end %>
32 <% end %>
33 </tr>
33 </tr>
34 <% end %>
34 <% end %>
35 <% perms_by_module[mod].each do |permission| %>
35 <% perms_by_module[mod].each do |permission| %>
36 <tr class="permission-<%= permission.name %>">
36 <tr class="<%= cycle('odd', 'even') %> permission-<%= permission.name %>">
37 <td class="name">
37 <td class="name">
38 <%= link_to_function('',
38 <%= link_to_function('',
39 "toggleCheckboxesBySelector('.permission-#{permission.name} input')",
39 "toggleCheckboxesBySelector('.permission-#{permission.name} input')",
40 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
40 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
41 :class => 'icon-only icon-checked') %>
41 :class => 'icon-only icon-checked') %>
42 <%= l_or_humanize(permission.name, :prefix => 'permission_') %>
42 <%= l_or_humanize(permission.name, :prefix => 'permission_') %>
43 </td>
43 </td>
44 <% @roles.each do |role| %>
44 <% @roles.each do |role| %>
45 <td>
45 <td>
46 <% if role.setable_permissions.include? permission %>
46 <% if role.setable_permissions.include? permission %>
47 <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %>
47 <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %>
48 <% end %>
48 <% end %>
49 </td>
49 </td>
50 <% end %>
50 <% end %>
51 </tr>
51 </tr>
52 <% end %>
52 <% end %>
53 <% end %>
53 <% end %>
54 </tbody>
54 </tbody>
55 </table>
55 </table>
56 </div>
56 </div>
57 <p><%= check_all_links 'permissions_form' %></p>
57 <p><%= check_all_links 'permissions_form' %></p>
58 <p><%= submit_tag l(:button_save) %></p>
58 <p><%= submit_tag l(:button_save) %></p>
59 <% end %>
59 <% end %>
@@ -1,62 +1,63
1 <%= form_tag({}, :data => {:cm_url => time_entries_context_menu_path}) do -%>
1 <%= form_tag({}, :data => {:cm_url => time_entries_context_menu_path}) do -%>
2 <%= hidden_field_tag 'back_url', url_for(:params => request.query_parameters), :id => nil %>
2 <%= hidden_field_tag 'back_url', url_for(:params => request.query_parameters), :id => nil %>
3 <div class="autoscroll">
3 <div class="autoscroll">
4 <table class="list time-entries">
4 <table class="list time-entries">
5 <thead>
5 <thead>
6 <tr>
6 <tr>
7 <th class="checkbox hide-when-print">
7 <th class="checkbox hide-when-print">
8 <%= check_box_tag 'check_all', '', false, :class => 'toggle-selection',
8 <%= check_box_tag 'check_all', '', false, :class => 'toggle-selection',
9 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
9 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
10 </th>
10 </th>
11 <% @query.inline_columns.each do |column| %>
11 <% @query.inline_columns.each do |column| %>
12 <%= column_header(column) %>
12 <%= column_header(column) %>
13 <% end %>
13 <% end %>
14 <th></th>
14 <th></th>
15 </tr>
15 </tr>
16 </thead>
16 </thead>
17 <tbody>
17 <tbody>
18 <% grouped_query_results(entries, @query, @entry_count_by_group) do |entry, group_name, group_count, group_totals| -%>
18 <% grouped_query_results(entries, @query, @entry_count_by_group) do |entry, group_name, group_count, group_totals| -%>
19 <% if group_name %>
19 <% if group_name %>
20 <% reset_cycle %>
20 <tr class="group open">
21 <tr class="group open">
21 <td colspan="<%= @query.inline_columns.size + 2 %>">
22 <td colspan="<%= @query.inline_columns.size + 2 %>">
22 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
23 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
23 <span class="name"><%= group_name %></span>
24 <span class="name"><%= group_name %></span>
24 <% if group_count %>
25 <% if group_count %>
25 <span class="count"><%= group_count %></span>
26 <span class="count"><%= group_count %></span>
26 <% end %>
27 <% end %>
27 <span class="totals"><%= group_totals %></span>
28 <span class="totals"><%= group_totals %></span>
28 <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}",
29 <%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}",
29 "toggleAllRowGroups(this)", :class => 'toggle-all') %>
30 "toggleAllRowGroups(this)", :class => 'toggle-all') %>
30 </td>
31 </td>
31 </tr>
32 </tr>
32 <% end %>
33 <% end %>
33 <tr id="time-entry-<%= entry.id %>" class="time-entry hascontextmenu">
34 <tr id="time-entry-<%= entry.id %>" class="time-entry <%= cycle("odd", "even") %> hascontextmenu">
34 <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", entry.id, false, :id => nil) %></td>
35 <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", entry.id, false, :id => nil) %></td>
35 <%= raw @query.inline_columns.map {|column| "<td class=\"#{column.css_classes}\">#{column_content(column, entry)}</td>"}.join %>
36 <%= raw @query.inline_columns.map {|column| "<td class=\"#{column.css_classes}\">#{column_content(column, entry)}</td>"}.join %>
36 <td class="buttons">
37 <td class="buttons">
37 <% if entry.editable_by?(User.current) -%>
38 <% if entry.editable_by?(User.current) -%>
38 <%= link_to l(:button_edit), edit_time_entry_path(entry),
39 <%= link_to l(:button_edit), edit_time_entry_path(entry),
39 :title => l(:button_edit),
40 :title => l(:button_edit),
40 :class => 'icon-only icon-edit' %>
41 :class => 'icon-only icon-edit' %>
41 <%= link_to l(:button_delete), time_entry_path(entry),
42 <%= link_to l(:button_delete), time_entry_path(entry),
42 :data => {:confirm => l(:text_are_you_sure)},
43 :data => {:confirm => l(:text_are_you_sure)},
43 :method => :delete,
44 :method => :delete,
44 :title => l(:button_delete),
45 :title => l(:button_delete),
45 :class => 'icon-only icon-del' %>
46 :class => 'icon-only icon-del' %>
46 <% end -%>
47 <% end -%>
47 </td>
48 </td>
48 </tr>
49 </tr>
49 <% @query.block_columns.each do |column|
50 <% @query.block_columns.each do |column|
50 if (text = column_content(column, issue)) && text.present? -%>
51 if (text = column_content(column, issue)) && text.present? -%>
51 <tr class="<%= current_cycle %>">
52 <tr class="<%= current_cycle %>">
52 <td colspan="<%= @query.inline_columns.size + 1 %>" class="<%= column.css_classes %>"><%= text %></td>
53 <td colspan="<%= @query.inline_columns.size + 1 %>" class="<%= column.css_classes %>"><%= text %></td>
53 </tr>
54 </tr>
54 <% end -%>
55 <% end -%>
55 <% end -%>
56 <% end -%>
56 <% end -%>
57 <% end -%>
57 </tbody>
58 </tbody>
58 </table>
59 </table>
59 </div>
60 </div>
60 <% end -%>
61 <% end -%>
61
62
62 <%= context_menu %>
63 <%= context_menu %>
@@ -1,19 +1,19
1 <% @report.hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %>
1 <% @report.hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %>
2 <% hours_for_value = select_hours(hours, criterias[level], value) -%>
2 <% hours_for_value = select_hours(hours, criterias[level], value) -%>
3 <% next if hours_for_value.empty? -%>
3 <% next if hours_for_value.empty? -%>
4 <tr class="<%= criterias.length > level+1 ? 'subtotal' : 'last-level' %>">
4 <tr class="<%= cycle('odd', 'even') %> <%= criterias.length > level+1 ? 'subtotal' : 'last-level' %>">
5 <%= ("<td></td>" * level).html_safe %>
5 <%= ("<td></td>" * level).html_safe %>
6 <td class="name"><%= format_criteria_value(@report.available_criteria[criterias[level]], value) %></td>
6 <td class="name"><%= format_criteria_value(@report.available_criteria[criterias[level]], value) %></td>
7 <%= ("<td></td>" * (criterias.length - level - 1)).html_safe -%>
7 <%= ("<td></td>" * (criterias.length - level - 1)).html_safe -%>
8 <% total = 0 -%>
8 <% total = 0 -%>
9 <% @report.periods.each do |period| -%>
9 <% @report.periods.each do |period| -%>
10 <% sum = sum_hours(select_hours(hours_for_value, @report.columns, period.to_s)); total += sum -%>
10 <% sum = sum_hours(select_hours(hours_for_value, @report.columns, period.to_s)); total += sum -%>
11 <td class="hours"><%= html_hours(format_hours(sum)) if sum > 0 %></td>
11 <td class="hours"><%= html_hours(format_hours(sum)) if sum > 0 %></td>
12 <% end -%>
12 <% end -%>
13 <td class="hours"><%= html_hours(format_hours(total)) if total > 0 %></td>
13 <td class="hours"><%= html_hours(format_hours(total)) if total > 0 %></td>
14 </tr>
14 </tr>
15 <% if criterias.length > level+1 -%>
15 <% if criterias.length > level+1 -%>
16 <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %>
16 <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %>
17 <% end -%>
17 <% end -%>
18
18
19 <% end %>
19 <% end %>
@@ -1,78 +1,78
1 <%= title [l(:label_tracker_plural), trackers_path], l(:field_summary) %>
1 <%= title [l(:label_tracker_plural), trackers_path], l(:field_summary) %>
2
2
3 <% if @trackers.any? %>
3 <% if @trackers.any? %>
4 <%= form_tag fields_trackers_path do %>
4 <%= form_tag fields_trackers_path do %>
5 <div class="autoscroll">
5 <div class="autoscroll">
6 <table class="list">
6 <table class="list">
7 <thead>
7 <thead>
8 <tr>
8 <tr>
9 <th></th>
9 <th></th>
10 <% @trackers.each do |tracker| %>
10 <% @trackers.each do |tracker| %>
11 <th>
11 <th>
12 <%= link_to_function('', "toggleCheckboxesBySelector('input.tracker-#{tracker.id}')",
12 <%= link_to_function('', "toggleCheckboxesBySelector('input.tracker-#{tracker.id}')",
13 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
13 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
14 :class => 'icon-only icon-checked') %>
14 :class => 'icon-only icon-checked') %>
15 <%= tracker.name %>
15 <%= tracker.name %>
16 </th>
16 </th>
17 <% end %>
17 <% end %>
18 </tr>
18 </tr>
19 </thead>
19 </thead>
20 <tbody>
20 <tbody>
21 <tr class="group open">
21 <tr class="group open">
22 <td colspan="<%= @trackers.size + 1 %>">
22 <td colspan="<%= @trackers.size + 1 %>">
23 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
23 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
24 <%= l(:field_core_fields) %>
24 <%= l(:field_core_fields) %>
25 </td>
25 </td>
26 </tr>
26 </tr>
27 <% Tracker::CORE_FIELDS.each do |field| %>
27 <% Tracker::CORE_FIELDS.each do |field| %>
28 <tr>
28 <tr class="<%= cycle("odd", "even") %>">
29 <td class="name">
29 <td class="name">
30 <%= link_to_function('', "toggleCheckboxesBySelector('input.core-field-#{field}')",
30 <%= link_to_function('', "toggleCheckboxesBySelector('input.core-field-#{field}')",
31 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
31 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
32 :class => 'icon-only icon-checked') %>
32 :class => 'icon-only icon-checked') %>
33 <%= l("field_#{field}".sub(/_id$/, '')) %>
33 <%= l("field_#{field}".sub(/_id$/, '')) %>
34 </td>
34 </td>
35 <% @trackers.each do |tracker| %>
35 <% @trackers.each do |tracker| %>
36 <td>
36 <td>
37 <%= check_box_tag "trackers[#{tracker.id}][core_fields][]", field, tracker.core_fields.include?(field),
37 <%= check_box_tag "trackers[#{tracker.id}][core_fields][]", field, tracker.core_fields.include?(field),
38 :class => "tracker-#{tracker.id} core-field-#{field}", :id => nil %>
38 :class => "tracker-#{tracker.id} core-field-#{field}", :id => nil %>
39 </td>
39 </td>
40 <% end %>
40 <% end %>
41 </tr>
41 </tr>
42 <% end %>
42 <% end %>
43 <% if @custom_fields.any? %>
43 <% if @custom_fields.any? %>
44 <tr class="group open">
44 <tr class="group open">
45 <td colspan="<%= @trackers.size + 1 %>">
45 <td colspan="<%= @trackers.size + 1 %>">
46 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
46 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
47 <%= l(:label_custom_field_plural) %>
47 <%= l(:label_custom_field_plural) %>
48 </td>
48 </td>
49 </tr>
49 </tr>
50 <% @custom_fields.each do |field| %>
50 <% @custom_fields.each do |field| %>
51 <tr>
51 <tr class="<%= cycle("odd", "even") %>">
52 <td class="name">
52 <td class="name">
53 <%= link_to_function('', "toggleCheckboxesBySelector('input.custom-field-#{field.id}')",
53 <%= link_to_function('', "toggleCheckboxesBySelector('input.custom-field-#{field.id}')",
54 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
54 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
55 :class => 'icon-only icon-checked') %>
55 :class => 'icon-only icon-checked') %>
56 <%= field.name %>
56 <%= field.name %>
57 </td>
57 </td>
58 <% @trackers.each do |tracker| %>
58 <% @trackers.each do |tracker| %>
59 <td>
59 <td>
60 <%= check_box_tag "trackers[#{tracker.id}][custom_field_ids][]", field.id, tracker.custom_fields.include?(field),
60 <%= check_box_tag "trackers[#{tracker.id}][custom_field_ids][]", field.id, tracker.custom_fields.include?(field),
61 :class => "tracker-#{tracker.id} custom-field-#{field.id}", :id => nil %>
61 :class => "tracker-#{tracker.id} custom-field-#{field.id}", :id => nil %>
62 </td>
62 </td>
63 <% end %>
63 <% end %>
64 </tr>
64 </tr>
65 <% end %>
65 <% end %>
66 <% end %>
66 <% end %>
67 </tbody>
67 </tbody>
68 </table>
68 </table>
69 </div>
69 </div>
70 <p><%= submit_tag l(:button_save) %></p>
70 <p><%= submit_tag l(:button_save) %></p>
71 <% @trackers.each do |tracker| %>
71 <% @trackers.each do |tracker| %>
72 <%= hidden_field_tag "trackers[#{tracker.id}][core_fields][]", '' %>
72 <%= hidden_field_tag "trackers[#{tracker.id}][core_fields][]", '' %>
73 <%= hidden_field_tag "trackers[#{tracker.id}][custom_field_ids][]", '' %>
73 <%= hidden_field_tag "trackers[#{tracker.id}][custom_field_ids][]", '' %>
74 <% end %>
74 <% end %>
75 <% end %>
75 <% end %>
76 <% else %>
76 <% else %>
77 <p class="nodata"><%= l(:label_no_data) %></p>
77 <p class="nodata"><%= l(:label_no_data) %></p>
78 <% end %>
78 <% end %>
@@ -1,38 +1,38
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to l(:label_tracker_new), new_tracker_path, :class => 'icon icon-add' %>
2 <%= link_to l(:label_tracker_new), new_tracker_path, :class => 'icon icon-add' %>
3 <%= link_to l(:field_summary), fields_trackers_path, :class => 'icon icon-summary' %>
3 <%= link_to l(:field_summary), fields_trackers_path, :class => 'icon icon-summary' %>
4 </div>
4 </div>
5
5
6 <h2><%=l(:label_tracker_plural)%></h2>
6 <h2><%=l(:label_tracker_plural)%></h2>
7
7
8 <table class="list trackers">
8 <table class="list trackers">
9 <thead><tr>
9 <thead><tr>
10 <th><%=l(:label_tracker)%></th>
10 <th><%=l(:label_tracker)%></th>
11 <th></th>
11 <th></th>
12 <th></th>
12 <th></th>
13 </tr></thead>
13 </tr></thead>
14 <tbody>
14 <tbody>
15 <% for tracker in @trackers %>
15 <% for tracker in @trackers %>
16 <tr>
16 <tr class="<%= cycle("odd", "even") %>">
17 <td class="name"><%= link_to tracker.name, edit_tracker_path(tracker) %></td>
17 <td class="name"><%= link_to tracker.name, edit_tracker_path(tracker) %></td>
18 <td>
18 <td>
19 <% unless tracker.workflow_rules.count > 0 %>
19 <% unless tracker.workflow_rules.count > 0 %>
20 <span class="icon icon-warning">
20 <span class="icon icon-warning">
21 <%= l(:text_tracker_no_workflow) %> (<%= link_to l(:button_edit), workflows_edit_path(:tracker_id => tracker) %>)
21 <%= l(:text_tracker_no_workflow) %> (<%= link_to l(:button_edit), workflows_edit_path(:tracker_id => tracker) %>)
22 </span>
22 </span>
23 <% end %>
23 <% end %>
24 </td>
24 </td>
25 <td class="buttons">
25 <td class="buttons">
26 <%= reorder_handle(tracker) %>
26 <%= reorder_handle(tracker) %>
27 <%= delete_link tracker_path(tracker) %>
27 <%= delete_link tracker_path(tracker) %>
28 </td>
28 </td>
29 </tr>
29 </tr>
30 <% end %>
30 <% end %>
31 </tbody>
31 </tbody>
32 </table>
32 </table>
33
33
34 <% html_title(l(:label_tracker_plural)) -%>
34 <% html_title(l(:label_tracker_plural)) -%>
35
35
36 <%= javascript_tag do %>
36 <%= javascript_tag do %>
37 $(function() { $("table.trackers tbody").positionedItems(); });
37 $(function() { $("table.trackers tbody").positionedItems(); });
38 <% end %>
38 <% end %>
@@ -1,62 +1,62
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to l(:label_user_new), new_user_path, :class => 'icon icon-add' %>
2 <%= link_to l(:label_user_new), new_user_path, :class => 'icon icon-add' %>
3 </div>
3 </div>
4
4
5 <h2><%=l(:label_user_plural)%></h2>
5 <h2><%=l(:label_user_plural)%></h2>
6
6
7 <%= form_tag(users_path, :method => :get) do %>
7 <%= form_tag(users_path, :method => :get) do %>
8 <fieldset><legend><%= l(:label_filter_plural) %></legend>
8 <fieldset><legend><%= l(:label_filter_plural) %></legend>
9 <label for='status'><%= l(:field_status) %>:</label>
9 <label for='status'><%= l(:field_status) %>:</label>
10 <%= select_tag 'status', users_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
10 <%= select_tag 'status', users_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
11
11
12 <% if @groups.present? %>
12 <% if @groups.present? %>
13 <label for='group_id'><%= l(:label_group) %>:</label>
13 <label for='group_id'><%= l(:label_group) %>:</label>
14 <%= select_tag 'group_id', content_tag('option') + options_from_collection_for_select(@groups, :id, :name, params[:group_id].to_i), :onchange => "this.form.submit(); return false;" %>
14 <%= select_tag 'group_id', content_tag('option') + options_from_collection_for_select(@groups, :id, :name, params[:group_id].to_i), :onchange => "this.form.submit(); return false;" %>
15 <% end %>
15 <% end %>
16
16
17 <label for='name'><%= l(:label_user) %>:</label>
17 <label for='name'><%= l(:label_user) %>:</label>
18 <%= text_field_tag 'name', params[:name], :size => 30 %>
18 <%= text_field_tag 'name', params[:name], :size => 30 %>
19 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
19 <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
20 <%= link_to l(:button_clear), users_path, :class => 'icon icon-reload' %>
20 <%= link_to l(:button_clear), users_path, :class => 'icon icon-reload' %>
21 </fieldset>
21 </fieldset>
22 <% end %>
22 <% end %>
23 &nbsp;
23 &nbsp;
24
24
25 <% if @users.any? %>
25 <% if @users.any? %>
26 <div class="autoscroll">
26 <div class="autoscroll">
27 <table class="list users">
27 <table class="list users">
28 <thead><tr>
28 <thead><tr>
29 <%= sort_header_tag('login', :caption => l(:field_login)) %>
29 <%= sort_header_tag('login', :caption => l(:field_login)) %>
30 <%= sort_header_tag('firstname', :caption => l(:field_firstname)) %>
30 <%= sort_header_tag('firstname', :caption => l(:field_firstname)) %>
31 <%= sort_header_tag('lastname', :caption => l(:field_lastname)) %>
31 <%= sort_header_tag('lastname', :caption => l(:field_lastname)) %>
32 <th><%= l(:field_mail) %></th>
32 <th><%= l(:field_mail) %></th>
33 <%= sort_header_tag('admin', :caption => l(:field_admin), :default_order => 'desc') %>
33 <%= sort_header_tag('admin', :caption => l(:field_admin), :default_order => 'desc') %>
34 <%= sort_header_tag('created_on', :caption => l(:field_created_on), :default_order => 'desc') %>
34 <%= sort_header_tag('created_on', :caption => l(:field_created_on), :default_order => 'desc') %>
35 <%= sort_header_tag('last_login_on', :caption => l(:field_last_login_on), :default_order => 'desc') %>
35 <%= sort_header_tag('last_login_on', :caption => l(:field_last_login_on), :default_order => 'desc') %>
36 <th></th>
36 <th></th>
37 </tr></thead>
37 </tr></thead>
38 <tbody>
38 <tbody>
39 <% for user in @users -%>
39 <% for user in @users -%>
40 <tr class="<%= user.css_classes %>">
40 <tr class="<%= user.css_classes %> <%= cycle("odd", "even") %>">
41 <td class="username"><%= avatar(user, :size => "14") %><%= link_to user.login, edit_user_path(user) %></td>
41 <td class="username"><%= avatar(user, :size => "14") %><%= link_to user.login, edit_user_path(user) %></td>
42 <td class="firstname"><%= user.firstname %></td>
42 <td class="firstname"><%= user.firstname %></td>
43 <td class="lastname"><%= user.lastname %></td>
43 <td class="lastname"><%= user.lastname %></td>
44 <td class="email"><%= mail_to(user.mail) %></td>
44 <td class="email"><%= mail_to(user.mail) %></td>
45 <td class="tick"><%= checked_image user.admin? %></td>
45 <td class="tick"><%= checked_image user.admin? %></td>
46 <td class="created_on"><%= format_time(user.created_on) %></td>
46 <td class="created_on"><%= format_time(user.created_on) %></td>
47 <td class="last_login_on"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td>
47 <td class="last_login_on"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td>
48 <td class="buttons">
48 <td class="buttons">
49 <%= change_status_link(user) %>
49 <%= change_status_link(user) %>
50 <%= delete_link user_path(user, :back_url => request.original_fullpath) unless User.current == user %>
50 <%= delete_link user_path(user, :back_url => request.original_fullpath) unless User.current == user %>
51 </td>
51 </td>
52 </tr>
52 </tr>
53 <% end -%>
53 <% end -%>
54 </tbody>
54 </tbody>
55 </table>
55 </table>
56 </div>
56 </div>
57 <span class="pagination"><%= pagination_links_full @user_pages, @user_count %></span>
57 <span class="pagination"><%= pagination_links_full @user_pages, @user_count %></span>
58 <% else %>
58 <% else %>
59 <p class="nodata"><%= l(:label_no_data) %></p>
59 <p class="nodata"><%= l(:label_no_data) %></p>
60 <% end %>
60 <% end %>
61
61
62 <% html_title(l(:label_user_plural)) -%>
62 <% html_title(l(:label_user_plural)) -%>
@@ -1,40 +1,40
1 <%= wiki_page_breadcrumb(@page) %>
1 <%= wiki_page_breadcrumb(@page) %>
2
2
3 <%= title [@page.pretty_title, project_wiki_page_path(@page.project, @page.title, :version => nil)], l(:label_history) %>
3 <%= title [@page.pretty_title, project_wiki_page_path(@page.project, @page.title, :version => nil)], l(:label_history) %>
4
4
5 <%= form_tag({:controller => 'wiki', :action => 'diff',
5 <%= form_tag({:controller => 'wiki', :action => 'diff',
6 :project_id => @page.project, :id => @page.title},
6 :project_id => @page.project, :id => @page.title},
7 :method => :get) do %>
7 :method => :get) do %>
8 <table class="list wiki-page-versions">
8 <table class="list wiki-page-versions">
9 <thead><tr>
9 <thead><tr>
10 <th>#</th>
10 <th>#</th>
11 <th></th>
11 <th></th>
12 <th></th>
12 <th></th>
13 <th><%= l(:field_updated_on) %></th>
13 <th><%= l(:field_updated_on) %></th>
14 <th><%= l(:field_author) %></th>
14 <th><%= l(:field_author) %></th>
15 <th><%= l(:field_comments) %></th>
15 <th><%= l(:field_comments) %></th>
16 <th></th>
16 <th></th>
17 </tr></thead>
17 </tr></thead>
18 <tbody>
18 <tbody>
19 <% show_diff = @versions.size > 1 %>
19 <% show_diff = @versions.size > 1 %>
20 <% line_num = 1 %>
20 <% line_num = 1 %>
21 <% @versions.each do |ver| %>
21 <% @versions.each do |ver| %>
22 <tr class="wiki-page-version">
22 <tr class="wiki-page-version <%= cycle("odd", "even") %>">
23 <td class="id"><%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %></td>
23 <td class="id"><%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %></td>
24 <td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('#cbto-#{line_num+1}').prop('checked', true);") if show_diff && (line_num < @versions.size) %></td>
24 <td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('#cbto-#{line_num+1}').prop('checked', true);") if show_diff && (line_num < @versions.size) %></td>
25 <td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td>
25 <td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td>
26 <td class="updated_on"><%= format_time(ver.updated_on) %></td>
26 <td class="updated_on"><%= format_time(ver.updated_on) %></td>
27 <td class="author"><%= link_to_user ver.author %></td>
27 <td class="author"><%= link_to_user ver.author %></td>
28 <td class="comments"><%= ver.comments %></td>
28 <td class="comments"><%= ver.comments %></td>
29 <td class="buttons">
29 <td class="buttons">
30 <%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %>
30 <%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %>
31 <%= delete_link wiki_page_path(@page, :version => ver.version) if User.current.allowed_to?(:delete_wiki_pages, @page.project) && @version_count > 1 %>
31 <%= delete_link wiki_page_path(@page, :version => ver.version) if User.current.allowed_to?(:delete_wiki_pages, @page.project) && @version_count > 1 %>
32 </td>
32 </td>
33 </tr>
33 </tr>
34 <% line_num += 1 %>
34 <% line_num += 1 %>
35 <% end %>
35 <% end %>
36 </tbody>
36 </tbody>
37 </table>
37 </table>
38 <%= submit_tag l(:label_view_diff), :class => 'small' if show_diff %>
38 <%= submit_tag l(:label_view_diff), :class => 'small' if show_diff %>
39 <span class="pagination"><%= pagination_links_full @version_pages, @version_count %></span>
39 <span class="pagination"><%= pagination_links_full @version_pages, @version_count %></span>
40 <% end %>
40 <% end %>
@@ -1,44 +1,44
1 <table class="list workflows transitions transitions-<%= name %>">
1 <table class="list workflows transitions transitions-<%= name %>">
2 <thead>
2 <thead>
3 <tr>
3 <tr>
4 <th>
4 <th>
5 <%= link_to_function('', "toggleCheckboxesBySelector('table.transitions-#{name} input')",
5 <%= link_to_function('', "toggleCheckboxesBySelector('table.transitions-#{name} input')",
6 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
6 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
7 :class => 'icon-only icon-checked') %>
7 :class => 'icon-only icon-checked') %>
8 <%=l(:label_current_status)%>
8 <%=l(:label_current_status)%>
9 </th>
9 </th>
10 <th colspan="<%= @statuses.length %>"><%=l(:label_new_statuses_allowed)%></th>
10 <th colspan="<%= @statuses.length %>"><%=l(:label_new_statuses_allowed)%></th>
11 </tr>
11 </tr>
12 <tr>
12 <tr>
13 <td></td>
13 <td></td>
14 <% for new_status in @statuses %>
14 <% for new_status in @statuses %>
15 <td style="width:<%= 75 / @statuses.size %>%;">
15 <td style="width:<%= 75 / @statuses.size %>%;">
16 <%= link_to_function('', "toggleCheckboxesBySelector('table.transitions-#{name} input.new-status-#{new_status.id}')",
16 <%= link_to_function('', "toggleCheckboxesBySelector('table.transitions-#{name} input.new-status-#{new_status.id}')",
17 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
17 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
18 :class => 'icon-only icon-checked') %>
18 :class => 'icon-only icon-checked') %>
19 <%= new_status.name %>
19 <%= new_status.name %>
20 </td>
20 </td>
21 <% end %>
21 <% end %>
22 </tr>
22 </tr>
23 </thead>
23 </thead>
24 <tbody>
24 <tbody>
25 <% for old_status in [nil] + @statuses %>
25 <% for old_status in [nil] + @statuses %>
26 <% next if old_status.nil? && name != 'always' %>
26 <% next if old_status.nil? && name != 'always' %>
27 <tr>
27 <tr class="<%= cycle("odd", "even") %>">
28 <td class="name">
28 <td class="name">
29 <%= link_to_function('', "toggleCheckboxesBySelector('table.transitions-#{name} input.old-status-#{old_status.try(:id) || 0}')",
29 <%= link_to_function('', "toggleCheckboxesBySelector('table.transitions-#{name} input.old-status-#{old_status.try(:id) || 0}')",
30 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
30 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}",
31 :class => 'icon-only icon-checked') %>
31 :class => 'icon-only icon-checked') %>
32
32
33 <%= old_status ? old_status.name : content_tag('em', l(:label_issue_new)) %>
33 <%= old_status ? old_status.name : content_tag('em', l(:label_issue_new)) %>
34 </td>
34 </td>
35 <% for new_status in @statuses -%>
35 <% for new_status in @statuses -%>
36 <% checked = workflows.detect {|w| w.old_status == old_status && w.new_status == new_status} %>
36 <% checked = workflows.detect {|w| w.old_status == old_status && w.new_status == new_status} %>
37 <td class="<%= checked ? 'enabled' : '' %>">
37 <td class="<%= checked ? 'enabled' : '' %>">
38 <%= transition_tag workflows, old_status, new_status, name %>
38 <%= transition_tag workflows, old_status, new_status, name %>
39 </td>
39 </td>
40 <% end -%>
40 <% end -%>
41 </tr>
41 </tr>
42 <% end %>
42 <% end %>
43 </tbody>
43 </tbody>
44 </table>
44 </table>
@@ -1,35 +1,35
1 <%= title [l(:label_workflow), workflows_edit_path], l(:field_summary) %>
1 <%= title [l(:label_workflow), workflows_edit_path], l(:field_summary) %>
2
2
3 <% if @roles.empty? || @trackers.empty? %>
3 <% if @roles.empty? || @trackers.empty? %>
4 <p class="nodata"><%= l(:label_no_data) %></p>
4 <p class="nodata"><%= l(:label_no_data) %></p>
5 <% else %>
5 <% else %>
6 <div class="autoscroll">
6 <div class="autoscroll">
7 <table class="list">
7 <table class="list">
8 <thead>
8 <thead>
9 <tr>
9 <tr>
10 <th></th>
10 <th></th>
11 <% @roles.each do |role| %>
11 <% @roles.each do |role| %>
12 <th>
12 <th>
13 <%= content_tag(role.builtin? ? 'em' : 'span', role.name) %>
13 <%= content_tag(role.builtin? ? 'em' : 'span', role.name) %>
14 </th>
14 </th>
15 <% end %>
15 <% end %>
16 </tr>
16 </tr>
17 </thead>
17 </thead>
18 <tbody>
18 <tbody>
19 <% @trackers.each do |tracker| -%>
19 <% @trackers.each do |tracker| -%>
20 <tr>
20 <tr class="<%= cycle('odd', 'even') %>">
21 <td class="name"><%= tracker.name %></td>
21 <td class="name"><%= tracker.name %></td>
22 <% @roles.each do |role| -%>
22 <% @roles.each do |role| -%>
23 <% count = @workflow_counts[[tracker.id, role.id]] || 0 %>
23 <% count = @workflow_counts[[tracker.id, role.id]] || 0 %>
24 <td>
24 <td>
25 <%= link_to((count > 0 ? count : content_tag(:span, nil, :class => 'icon-only icon-not-ok')),
25 <%= link_to((count > 0 ? count : content_tag(:span, nil, :class => 'icon-only icon-not-ok')),
26 {:action => 'edit', :role_id => role, :tracker_id => tracker},
26 {:action => 'edit', :role_id => role, :tracker_id => tracker},
27 :title => l(:button_edit)) %>
27 :title => l(:button_edit)) %>
28 </td>
28 </td>
29 <% end -%>
29 <% end -%>
30 </tr>
30 </tr>
31 <% end -%>
31 <% end -%>
32 </tbody>
32 </tbody>
33 </table>
33 </table>
34 </div>
34 </div>
35 <% end %>
35 <% end %>
@@ -1,123 +1,123
1 <%= render :partial => 'action_menu' %>
1 <%= render :partial => 'action_menu' %>
2
2
3 <%= title l(:label_workflow) %>
3 <%= title l(:label_workflow) %>
4
4
5 <div class="tabs">
5 <div class="tabs">
6 <ul>
6 <ul>
7 <li><%= link_to l(:label_status_transitions), workflows_edit_path(:role_id => @roles, :tracker_id => @trackers) %></li>
7 <li><%= link_to l(:label_status_transitions), workflows_edit_path(:role_id => @roles, :tracker_id => @trackers) %></li>
8 <li><%= link_to l(:label_fields_permissions), workflows_permissions_path(:role_id => @roles, :tracker_id => @trackers), :class => 'selected' %></li>
8 <li><%= link_to l(:label_fields_permissions), workflows_permissions_path(:role_id => @roles, :tracker_id => @trackers), :class => 'selected' %></li>
9 </ul>
9 </ul>
10 </div>
10 </div>
11
11
12 <p><%=l(:text_workflow_edit)%>:</p>
12 <p><%=l(:text_workflow_edit)%>:</p>
13
13
14 <%= form_tag({}, :method => 'get') do %>
14 <%= form_tag({}, :method => 'get') do %>
15 <p>
15 <p>
16 <label><%=l(:label_role)%>:
16 <label><%=l(:label_role)%>:
17 <%= options_for_workflow_select 'role_id[]', Role.sorted.select(&:consider_workflow?), @roles, :id => 'role_id', :class => 'expandable' %>
17 <%= options_for_workflow_select 'role_id[]', Role.sorted.select(&:consider_workflow?), @roles, :id => 'role_id', :class => 'expandable' %>
18 </label>
18 </label>
19 <a href="#" data-expands="#role_id"><span class="toggle-multiselect"></a>
19 <a href="#" data-expands="#role_id"><span class="toggle-multiselect"></a>
20
20
21 <label><%=l(:label_tracker)%>:
21 <label><%=l(:label_tracker)%>:
22 <%= options_for_workflow_select 'tracker_id[]', Tracker.sorted, @trackers, :id => 'tracker_id', :class => 'expandable' %>
22 <%= options_for_workflow_select 'tracker_id[]', Tracker.sorted, @trackers, :id => 'tracker_id', :class => 'expandable' %>
23 </label>
23 </label>
24 <a href="#" data-expands="#tracker_id"><span class="toggle-multiselect"></a>
24 <a href="#" data-expands="#tracker_id"><span class="toggle-multiselect"></a>
25
25
26 <%= submit_tag l(:button_edit), :name => nil %>
26 <%= submit_tag l(:button_edit), :name => nil %>
27
27
28 <%= hidden_field_tag 'used_statuses_only', '0', :id => nil %>
28 <%= hidden_field_tag 'used_statuses_only', '0', :id => nil %>
29 <label><%= check_box_tag 'used_statuses_only', '1', @used_statuses_only %> <%= l(:label_display_used_statuses_only) %></label>
29 <label><%= check_box_tag 'used_statuses_only', '1', @used_statuses_only %> <%= l(:label_display_used_statuses_only) %></label>
30 </p>
30 </p>
31 <% end %>
31 <% end %>
32
32
33 <% if @trackers && @roles && @statuses.any? %>
33 <% if @trackers && @roles && @statuses.any? %>
34 <%= form_tag({}, :id => 'workflow_form' ) do %>
34 <%= form_tag({}, :id => 'workflow_form' ) do %>
35 <%= @trackers.map {|tracker| hidden_field_tag 'tracker_id[]', tracker.id, :id => nil}.join.html_safe %>
35 <%= @trackers.map {|tracker| hidden_field_tag 'tracker_id[]', tracker.id, :id => nil}.join.html_safe %>
36 <%= @roles.map {|role| hidden_field_tag 'role_id[]', role.id, :id => nil}.join.html_safe %>
36 <%= @roles.map {|role| hidden_field_tag 'role_id[]', role.id, :id => nil}.join.html_safe %>
37 <%= hidden_field_tag 'used_statuses_only', params[:used_statuses_only], :id => nil %>
37 <%= hidden_field_tag 'used_statuses_only', params[:used_statuses_only], :id => nil %>
38 <div class="autoscroll">
38 <div class="autoscroll">
39 <table class="list workflows fields_permissions">
39 <table class="list workflows fields_permissions">
40 <thead>
40 <thead>
41 <tr>
41 <tr>
42 <th>
42 <th>
43 </th>
43 </th>
44 <th colspan="<%= @statuses.length %>"><%=l(:label_issue_status)%></th>
44 <th colspan="<%= @statuses.length %>"><%=l(:label_issue_status)%></th>
45 </tr>
45 </tr>
46 <tr>
46 <tr>
47 <td></td>
47 <td></td>
48 <% for status in @statuses %>
48 <% for status in @statuses %>
49 <td style="width:<%= 75 / @statuses.size %>%;">
49 <td style="width:<%= 75 / @statuses.size %>%;">
50 <%= status.name %>
50 <%= status.name %>
51 </td>
51 </td>
52 <% end %>
52 <% end %>
53 </tr>
53 </tr>
54 </thead>
54 </thead>
55 <tbody>
55 <tbody>
56 <tr class="group open">
56 <tr class="group open">
57 <td colspan="<%= @statuses.size + 1 %>">
57 <td colspan="<%= @statuses.size + 1 %>">
58 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
58 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
59 <%= l(:field_core_fields) %>
59 <%= l(:field_core_fields) %>
60 </td>
60 </td>
61 </tr>
61 </tr>
62 <% @fields.each do |field, name| %>
62 <% @fields.each do |field, name| %>
63 <tr>
63 <tr class="<%= cycle("odd", "even") %>">
64 <td class="name">
64 <td class="name">
65 <%= name %> <%= content_tag('span', '*', :class => 'required') if field_required?(field) %>
65 <%= name %> <%= content_tag('span', '*', :class => 'required') if field_required?(field) %>
66 </td>
66 </td>
67 <% for status in @statuses -%>
67 <% for status in @statuses -%>
68 <td class="<%= @permissions[status.id][field].try(:join, ' ') %>">
68 <td class="<%= @permissions[status.id][field].try(:join, ' ') %>">
69 <%= field_permission_tag(@permissions, status, field, @roles) %>
69 <%= field_permission_tag(@permissions, status, field, @roles) %>
70 <% unless status == @statuses.last %><a href="#" class="repeat-value">&#187;</a><% end %>
70 <% unless status == @statuses.last %><a href="#" class="repeat-value">&#187;</a><% end %>
71 </td>
71 </td>
72 <% end -%>
72 <% end -%>
73 </tr>
73 </tr>
74 <% end %>
74 <% end %>
75 <% if @custom_fields.any? %>
75 <% if @custom_fields.any? %>
76 <tr class="group open">
76 <tr class="group open">
77 <td colspan="<%= @statuses.size + 1 %>">
77 <td colspan="<%= @statuses.size + 1 %>">
78 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
78 <span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
79 <%= l(:label_custom_field_plural) %>
79 <%= l(:label_custom_field_plural) %>
80 </td>
80 </td>
81 </tr>
81 </tr>
82 <% @custom_fields.each do |field| %>
82 <% @custom_fields.each do |field| %>
83 <tr>
83 <tr class="<%= cycle("odd", "even") %>">
84 <td class="name">
84 <td class="name">
85 <%= field.name %> <%= content_tag('span', '*', :class => 'required') if field_required?(field) %>
85 <%= field.name %> <%= content_tag('span', '*', :class => 'required') if field_required?(field) %>
86 </td>
86 </td>
87 <% for status in @statuses -%>
87 <% for status in @statuses -%>
88 <td class="<%= @permissions[status.id][field.id.to_s].try(:join, ' ') %>">
88 <td class="<%= @permissions[status.id][field.id.to_s].try(:join, ' ') %>">
89 <%= field_permission_tag(@permissions, status, field, @roles) %>
89 <%= field_permission_tag(@permissions, status, field, @roles) %>
90 <% unless status == @statuses.last %><a href="#" class="repeat-value">&#187;</a><% end %>
90 <% unless status == @statuses.last %><a href="#" class="repeat-value">&#187;</a><% end %>
91 </td>
91 </td>
92 <% end -%>
92 <% end -%>
93 </tr>
93 </tr>
94 <% end %>
94 <% end %>
95 <% end %>
95 <% end %>
96 </tbody>
96 </tbody>
97 </table>
97 </table>
98 </div>
98 </div>
99 <%= submit_tag l(:button_save) %>
99 <%= submit_tag l(:button_save) %>
100 <% end %>
100 <% end %>
101 <% end %>
101 <% end %>
102
102
103 <%= javascript_tag do %>
103 <%= javascript_tag do %>
104 $("a.repeat-value").click(function(e){
104 $("a.repeat-value").click(function(e){
105 e.preventDefault();
105 e.preventDefault();
106 var td = $(this).closest('td');
106 var td = $(this).closest('td');
107 var selected = td.find("select").find(":selected").val();
107 var selected = td.find("select").find(":selected").val();
108 td.nextAll('td').find("select").val(selected);
108 td.nextAll('td').find("select").val(selected);
109 });
109 });
110
110
111 $("a[data-expands]").click(function(e){
111 $("a[data-expands]").click(function(e){
112 e.preventDefault();
112 e.preventDefault();
113 var target = $($(this).attr("data-expands"));
113 var target = $($(this).attr("data-expands"));
114 if (target.attr("multiple")) {
114 if (target.attr("multiple")) {
115 target.attr("multiple", false);
115 target.attr("multiple", false);
116 target.find("option[value=all]").show();
116 target.find("option[value=all]").show();
117 } else {
117 } else {
118 target.attr("multiple", true);
118 target.attr("multiple", true);
119 target.find("option[value=all]").attr("selected", false).hide();
119 target.find("option[value=all]").attr("selected", false).hide();
120 }
120 }
121 });
121 });
122
122
123 <% end %>
123 <% end %>
@@ -1,848 +1,852
1 /* Redmine - project management software
1 /* Redmine - project management software
2 Copyright (C) 2006-2016 Jean-Philippe Lang */
2 Copyright (C) 2006-2016 Jean-Philippe Lang */
3
3
4 function checkAll(id, checked) {
4 function checkAll(id, checked) {
5 $('#'+id).find('input[type=checkbox]:enabled').prop('checked', checked);
5 $('#'+id).find('input[type=checkbox]:enabled').prop('checked', checked);
6 }
6 }
7
7
8 function toggleCheckboxesBySelector(selector) {
8 function toggleCheckboxesBySelector(selector) {
9 var all_checked = true;
9 var all_checked = true;
10 $(selector).each(function(index) {
10 $(selector).each(function(index) {
11 if (!$(this).is(':checked')) { all_checked = false; }
11 if (!$(this).is(':checked')) { all_checked = false; }
12 });
12 });
13 $(selector).prop('checked', !all_checked);
13 $(selector).prop('checked', !all_checked);
14 }
14 }
15
15
16 function showAndScrollTo(id, focus) {
16 function showAndScrollTo(id, focus) {
17 $('#'+id).show();
17 $('#'+id).show();
18 if (focus !== null) {
18 if (focus !== null) {
19 $('#'+focus).focus();
19 $('#'+focus).focus();
20 }
20 }
21 $('html, body').animate({scrollTop: $('#'+id).offset().top}, 100);
21 $('html, body').animate({scrollTop: $('#'+id).offset().top}, 100);
22 }
22 }
23
23
24 function toggleRowGroup(el) {
24 function toggleRowGroup(el) {
25 var tr = $(el).parents('tr').first();
25 var tr = $(el).parents('tr').first();
26 var n = tr.next();
26 var n = tr.next();
27 tr.toggleClass('open');
27 tr.toggleClass('open');
28 while (n.length && !n.hasClass('group')) {
28 while (n.length && !n.hasClass('group')) {
29 n.toggle();
29 n.toggle();
30 n = n.next('tr');
30 n = n.next('tr');
31 }
31 }
32 }
32 }
33
33
34 function collapseAllRowGroups(el) {
34 function collapseAllRowGroups(el) {
35 var tbody = $(el).parents('tbody').first();
35 var tbody = $(el).parents('tbody').first();
36 tbody.children('tr').each(function(index) {
36 tbody.children('tr').each(function(index) {
37 if ($(this).hasClass('group')) {
37 if ($(this).hasClass('group')) {
38 $(this).removeClass('open');
38 $(this).removeClass('open');
39 } else {
39 } else {
40 $(this).hide();
40 $(this).hide();
41 }
41 }
42 });
42 });
43 }
43 }
44
44
45 function expandAllRowGroups(el) {
45 function expandAllRowGroups(el) {
46 var tbody = $(el).parents('tbody').first();
46 var tbody = $(el).parents('tbody').first();
47 tbody.children('tr').each(function(index) {
47 tbody.children('tr').each(function(index) {
48 if ($(this).hasClass('group')) {
48 if ($(this).hasClass('group')) {
49 $(this).addClass('open');
49 $(this).addClass('open');
50 } else {
50 } else {
51 $(this).show();
51 $(this).show();
52 }
52 }
53 });
53 });
54 }
54 }
55
55
56 function toggleAllRowGroups(el) {
56 function toggleAllRowGroups(el) {
57 var tr = $(el).parents('tr').first();
57 var tr = $(el).parents('tr').first();
58 if (tr.hasClass('open')) {
58 if (tr.hasClass('open')) {
59 collapseAllRowGroups(el);
59 collapseAllRowGroups(el);
60 } else {
60 } else {
61 expandAllRowGroups(el);
61 expandAllRowGroups(el);
62 }
62 }
63 }
63 }
64
64
65 function toggleFieldset(el) {
65 function toggleFieldset(el) {
66 var fieldset = $(el).parents('fieldset').first();
66 var fieldset = $(el).parents('fieldset').first();
67 fieldset.toggleClass('collapsed');
67 fieldset.toggleClass('collapsed');
68 fieldset.children('div').toggle();
68 fieldset.children('div').toggle();
69 }
69 }
70
70
71 function hideFieldset(el) {
71 function hideFieldset(el) {
72 var fieldset = $(el).parents('fieldset').first();
72 var fieldset = $(el).parents('fieldset').first();
73 fieldset.toggleClass('collapsed');
73 fieldset.toggleClass('collapsed');
74 fieldset.children('div').hide();
74 fieldset.children('div').hide();
75 }
75 }
76
76
77 // columns selection
77 // columns selection
78 function moveOptions(theSelFrom, theSelTo) {
78 function moveOptions(theSelFrom, theSelTo) {
79 $(theSelFrom).find('option:selected').detach().prop("selected", false).appendTo($(theSelTo));
79 $(theSelFrom).find('option:selected').detach().prop("selected", false).appendTo($(theSelTo));
80 }
80 }
81
81
82 function moveOptionUp(theSel) {
82 function moveOptionUp(theSel) {
83 $(theSel).find('option:selected').each(function(){
83 $(theSel).find('option:selected').each(function(){
84 $(this).prev(':not(:selected)').detach().insertAfter($(this));
84 $(this).prev(':not(:selected)').detach().insertAfter($(this));
85 });
85 });
86 }
86 }
87
87
88 function moveOptionTop(theSel) {
88 function moveOptionTop(theSel) {
89 $(theSel).find('option:selected').detach().prependTo($(theSel));
89 $(theSel).find('option:selected').detach().prependTo($(theSel));
90 }
90 }
91
91
92 function moveOptionDown(theSel) {
92 function moveOptionDown(theSel) {
93 $($(theSel).find('option:selected').get().reverse()).each(function(){
93 $($(theSel).find('option:selected').get().reverse()).each(function(){
94 $(this).next(':not(:selected)').detach().insertBefore($(this));
94 $(this).next(':not(:selected)').detach().insertBefore($(this));
95 });
95 });
96 }
96 }
97
97
98 function moveOptionBottom(theSel) {
98 function moveOptionBottom(theSel) {
99 $(theSel).find('option:selected').detach().appendTo($(theSel));
99 $(theSel).find('option:selected').detach().appendTo($(theSel));
100 }
100 }
101
101
102 function initFilters() {
102 function initFilters() {
103 $('#add_filter_select').change(function() {
103 $('#add_filter_select').change(function() {
104 addFilter($(this).val(), '', []);
104 addFilter($(this).val(), '', []);
105 });
105 });
106 $('#filters-table td.field input[type=checkbox]').each(function() {
106 $('#filters-table td.field input[type=checkbox]').each(function() {
107 toggleFilter($(this).val());
107 toggleFilter($(this).val());
108 });
108 });
109 $('#filters-table').on('click', 'td.field input[type=checkbox]', function() {
109 $('#filters-table').on('click', 'td.field input[type=checkbox]', function() {
110 toggleFilter($(this).val());
110 toggleFilter($(this).val());
111 });
111 });
112 $('#filters-table').on('click', '.toggle-multiselect', function() {
112 $('#filters-table').on('click', '.toggle-multiselect', function() {
113 toggleMultiSelect($(this).siblings('select'));
113 toggleMultiSelect($(this).siblings('select'));
114 });
114 });
115 $('#filters-table').on('keypress', 'input[type=text]', function(e) {
115 $('#filters-table').on('keypress', 'input[type=text]', function(e) {
116 if (e.keyCode == 13) $(this).closest('form').submit();
116 if (e.keyCode == 13) $(this).closest('form').submit();
117 });
117 });
118 }
118 }
119
119
120 function addFilter(field, operator, values) {
120 function addFilter(field, operator, values) {
121 var fieldId = field.replace('.', '_');
121 var fieldId = field.replace('.', '_');
122 var tr = $('#tr_'+fieldId);
122 var tr = $('#tr_'+fieldId);
123 if (tr.length > 0) {
123 if (tr.length > 0) {
124 tr.show();
124 tr.show();
125 } else {
125 } else {
126 buildFilterRow(field, operator, values);
126 buildFilterRow(field, operator, values);
127 }
127 }
128 $('#cb_'+fieldId).prop('checked', true);
128 $('#cb_'+fieldId).prop('checked', true);
129 toggleFilter(field);
129 toggleFilter(field);
130 $('#add_filter_select').val('').find('option').each(function() {
130 $('#add_filter_select').val('').find('option').each(function() {
131 if ($(this).attr('value') == field) {
131 if ($(this).attr('value') == field) {
132 $(this).attr('disabled', true);
132 $(this).attr('disabled', true);
133 }
133 }
134 });
134 });
135 }
135 }
136
136
137 function buildFilterRow(field, operator, values) {
137 function buildFilterRow(field, operator, values) {
138 var fieldId = field.replace('.', '_');
138 var fieldId = field.replace('.', '_');
139 var filterTable = $("#filters-table");
139 var filterTable = $("#filters-table");
140 var filterOptions = availableFilters[field];
140 var filterOptions = availableFilters[field];
141 if (!filterOptions) return;
141 if (!filterOptions) return;
142 var operators = operatorByType[filterOptions['type']];
142 var operators = operatorByType[filterOptions['type']];
143 var filterValues = filterOptions['values'];
143 var filterValues = filterOptions['values'];
144 var i, select;
144 var i, select;
145
145
146 var tr = $('<tr class="filter">').attr('id', 'tr_'+fieldId).html(
146 var tr = $('<tr class="filter">').attr('id', 'tr_'+fieldId).html(
147 '<td class="field"><input checked="checked" id="cb_'+fieldId+'" name="f[]" value="'+field+'" type="checkbox"><label for="cb_'+fieldId+'"> '+filterOptions['name']+'</label></td>' +
147 '<td class="field"><input checked="checked" id="cb_'+fieldId+'" name="f[]" value="'+field+'" type="checkbox"><label for="cb_'+fieldId+'"> '+filterOptions['name']+'</label></td>' +
148 '<td class="operator"><select id="operators_'+fieldId+'" name="op['+field+']"></td>' +
148 '<td class="operator"><select id="operators_'+fieldId+'" name="op['+field+']"></td>' +
149 '<td class="values"></td>'
149 '<td class="values"></td>'
150 );
150 );
151 filterTable.append(tr);
151 filterTable.append(tr);
152
152
153 select = tr.find('td.operator select');
153 select = tr.find('td.operator select');
154 for (i = 0; i < operators.length; i++) {
154 for (i = 0; i < operators.length; i++) {
155 var option = $('<option>').val(operators[i]).text(operatorLabels[operators[i]]);
155 var option = $('<option>').val(operators[i]).text(operatorLabels[operators[i]]);
156 if (operators[i] == operator) { option.attr('selected', true); }
156 if (operators[i] == operator) { option.attr('selected', true); }
157 select.append(option);
157 select.append(option);
158 }
158 }
159 select.change(function(){ toggleOperator(field); });
159 select.change(function(){ toggleOperator(field); });
160
160
161 switch (filterOptions['type']) {
161 switch (filterOptions['type']) {
162 case "list":
162 case "list":
163 case "list_optional":
163 case "list_optional":
164 case "list_status":
164 case "list_status":
165 case "list_subprojects":
165 case "list_subprojects":
166 tr.find('td.values').append(
166 tr.find('td.values').append(
167 '<span style="display:none;"><select class="value" id="values_'+fieldId+'_1" name="v['+field+'][]"></select>' +
167 '<span style="display:none;"><select class="value" id="values_'+fieldId+'_1" name="v['+field+'][]"></select>' +
168 ' <span class="toggle-multiselect">&nbsp;</span></span>'
168 ' <span class="toggle-multiselect">&nbsp;</span></span>'
169 );
169 );
170 select = tr.find('td.values select');
170 select = tr.find('td.values select');
171 if (values.length > 1) { select.attr('multiple', true); }
171 if (values.length > 1) { select.attr('multiple', true); }
172 for (i = 0; i < filterValues.length; i++) {
172 for (i = 0; i < filterValues.length; i++) {
173 var filterValue = filterValues[i];
173 var filterValue = filterValues[i];
174 var option = $('<option>');
174 var option = $('<option>');
175 if ($.isArray(filterValue)) {
175 if ($.isArray(filterValue)) {
176 option.val(filterValue[1]).text(filterValue[0]);
176 option.val(filterValue[1]).text(filterValue[0]);
177 if ($.inArray(filterValue[1], values) > -1) {option.attr('selected', true);}
177 if ($.inArray(filterValue[1], values) > -1) {option.attr('selected', true);}
178 if (filterValue.length == 3) {
178 if (filterValue.length == 3) {
179 var optgroup = select.find('optgroup').filter(function(){return $(this).attr('label') == filterValue[2]});
179 var optgroup = select.find('optgroup').filter(function(){return $(this).attr('label') == filterValue[2]});
180 if (!optgroup.length) {optgroup = $('<optgroup>').attr('label', filterValue[2]);}
180 if (!optgroup.length) {optgroup = $('<optgroup>').attr('label', filterValue[2]);}
181 option = optgroup.append(option);
181 option = optgroup.append(option);
182 }
182 }
183 } else {
183 } else {
184 option.val(filterValue).text(filterValue);
184 option.val(filterValue).text(filterValue);
185 if ($.inArray(filterValue, values) > -1) {option.attr('selected', true);}
185 if ($.inArray(filterValue, values) > -1) {option.attr('selected', true);}
186 }
186 }
187 select.append(option);
187 select.append(option);
188 }
188 }
189 break;
189 break;
190 case "date":
190 case "date":
191 case "date_past":
191 case "date_past":
192 tr.find('td.values').append(
192 tr.find('td.values').append(
193 '<span style="display:none;"><input type="date" name="v['+field+'][]" id="values_'+fieldId+'_1" size="10" class="value date_value" /></span>' +
193 '<span style="display:none;"><input type="date" name="v['+field+'][]" id="values_'+fieldId+'_1" size="10" class="value date_value" /></span>' +
194 ' <span style="display:none;"><input type="date" name="v['+field+'][]" id="values_'+fieldId+'_2" size="10" class="value date_value" /></span>' +
194 ' <span style="display:none;"><input type="date" name="v['+field+'][]" id="values_'+fieldId+'_2" size="10" class="value date_value" /></span>' +
195 ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="3" class="value" /> '+labelDayPlural+'</span>'
195 ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="3" class="value" /> '+labelDayPlural+'</span>'
196 );
196 );
197 $('#values_'+fieldId+'_1').val(values[0]).datepickerFallback(datepickerOptions);
197 $('#values_'+fieldId+'_1').val(values[0]).datepickerFallback(datepickerOptions);
198 $('#values_'+fieldId+'_2').val(values[1]).datepickerFallback(datepickerOptions);
198 $('#values_'+fieldId+'_2').val(values[1]).datepickerFallback(datepickerOptions);
199 $('#values_'+fieldId).val(values[0]);
199 $('#values_'+fieldId).val(values[0]);
200 break;
200 break;
201 case "string":
201 case "string":
202 case "text":
202 case "text":
203 tr.find('td.values').append(
203 tr.find('td.values').append(
204 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="30" class="value" /></span>'
204 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="30" class="value" /></span>'
205 );
205 );
206 $('#values_'+fieldId).val(values[0]);
206 $('#values_'+fieldId).val(values[0]);
207 break;
207 break;
208 case "relation":
208 case "relation":
209 tr.find('td.values').append(
209 tr.find('td.values').append(
210 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="6" class="value" /></span>' +
210 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="6" class="value" /></span>' +
211 '<span style="display:none;"><select class="value" name="v['+field+'][]" id="values_'+fieldId+'_1"></select></span>'
211 '<span style="display:none;"><select class="value" name="v['+field+'][]" id="values_'+fieldId+'_1"></select></span>'
212 );
212 );
213 $('#values_'+fieldId).val(values[0]);
213 $('#values_'+fieldId).val(values[0]);
214 select = tr.find('td.values select');
214 select = tr.find('td.values select');
215 for (i = 0; i < allProjects.length; i++) {
215 for (i = 0; i < allProjects.length; i++) {
216 var filterValue = allProjects[i];
216 var filterValue = allProjects[i];
217 var option = $('<option>');
217 var option = $('<option>');
218 option.val(filterValue[1]).text(filterValue[0]);
218 option.val(filterValue[1]).text(filterValue[0]);
219 if (values[0] == filterValue[1]) { option.attr('selected', true); }
219 if (values[0] == filterValue[1]) { option.attr('selected', true); }
220 select.append(option);
220 select.append(option);
221 }
221 }
222 break;
222 break;
223 case "integer":
223 case "integer":
224 case "float":
224 case "float":
225 case "tree":
225 case "tree":
226 tr.find('td.values').append(
226 tr.find('td.values').append(
227 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_1" size="14" class="value" /></span>' +
227 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_1" size="14" class="value" /></span>' +
228 ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_2" size="14" class="value" /></span>'
228 ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_2" size="14" class="value" /></span>'
229 );
229 );
230 $('#values_'+fieldId+'_1').val(values[0]);
230 $('#values_'+fieldId+'_1').val(values[0]);
231 $('#values_'+fieldId+'_2').val(values[1]);
231 $('#values_'+fieldId+'_2').val(values[1]);
232 break;
232 break;
233 }
233 }
234 }
234 }
235
235
236 function toggleFilter(field) {
236 function toggleFilter(field) {
237 var fieldId = field.replace('.', '_');
237 var fieldId = field.replace('.', '_');
238 if ($('#cb_' + fieldId).is(':checked')) {
238 if ($('#cb_' + fieldId).is(':checked')) {
239 $("#operators_" + fieldId).show().removeAttr('disabled');
239 $("#operators_" + fieldId).show().removeAttr('disabled');
240 toggleOperator(field);
240 toggleOperator(field);
241 } else {
241 } else {
242 $("#operators_" + fieldId).hide().attr('disabled', true);
242 $("#operators_" + fieldId).hide().attr('disabled', true);
243 enableValues(field, []);
243 enableValues(field, []);
244 }
244 }
245 }
245 }
246
246
247 function enableValues(field, indexes) {
247 function enableValues(field, indexes) {
248 var fieldId = field.replace('.', '_');
248 var fieldId = field.replace('.', '_');
249 $('#tr_'+fieldId+' td.values .value').each(function(index) {
249 $('#tr_'+fieldId+' td.values .value').each(function(index) {
250 if ($.inArray(index, indexes) >= 0) {
250 if ($.inArray(index, indexes) >= 0) {
251 $(this).removeAttr('disabled');
251 $(this).removeAttr('disabled');
252 $(this).parents('span').first().show();
252 $(this).parents('span').first().show();
253 } else {
253 } else {
254 $(this).val('');
254 $(this).val('');
255 $(this).attr('disabled', true);
255 $(this).attr('disabled', true);
256 $(this).parents('span').first().hide();
256 $(this).parents('span').first().hide();
257 }
257 }
258
258
259 if ($(this).hasClass('group')) {
259 if ($(this).hasClass('group')) {
260 $(this).addClass('open');
260 $(this).addClass('open');
261 } else {
261 } else {
262 $(this).show();
262 $(this).show();
263 }
263 }
264 });
264 });
265 }
265 }
266
266
267 function toggleOperator(field) {
267 function toggleOperator(field) {
268 var fieldId = field.replace('.', '_');
268 var fieldId = field.replace('.', '_');
269 var operator = $("#operators_" + fieldId);
269 var operator = $("#operators_" + fieldId);
270 switch (operator.val()) {
270 switch (operator.val()) {
271 case "!*":
271 case "!*":
272 case "*":
272 case "*":
273 case "t":
273 case "t":
274 case "ld":
274 case "ld":
275 case "w":
275 case "w":
276 case "lw":
276 case "lw":
277 case "l2w":
277 case "l2w":
278 case "m":
278 case "m":
279 case "lm":
279 case "lm":
280 case "y":
280 case "y":
281 case "o":
281 case "o":
282 case "c":
282 case "c":
283 case "*o":
283 case "*o":
284 case "!o":
284 case "!o":
285 enableValues(field, []);
285 enableValues(field, []);
286 break;
286 break;
287 case "><":
287 case "><":
288 enableValues(field, [0,1]);
288 enableValues(field, [0,1]);
289 break;
289 break;
290 case "<t+":
290 case "<t+":
291 case ">t+":
291 case ">t+":
292 case "><t+":
292 case "><t+":
293 case "t+":
293 case "t+":
294 case ">t-":
294 case ">t-":
295 case "<t-":
295 case "<t-":
296 case "><t-":
296 case "><t-":
297 case "t-":
297 case "t-":
298 enableValues(field, [2]);
298 enableValues(field, [2]);
299 break;
299 break;
300 case "=p":
300 case "=p":
301 case "=!p":
301 case "=!p":
302 case "!p":
302 case "!p":
303 enableValues(field, [1]);
303 enableValues(field, [1]);
304 break;
304 break;
305 default:
305 default:
306 enableValues(field, [0]);
306 enableValues(field, [0]);
307 break;
307 break;
308 }
308 }
309 }
309 }
310
310
311 function toggleMultiSelect(el) {
311 function toggleMultiSelect(el) {
312 if (el.attr('multiple')) {
312 if (el.attr('multiple')) {
313 el.removeAttr('multiple');
313 el.removeAttr('multiple');
314 el.attr('size', 1);
314 el.attr('size', 1);
315 } else {
315 } else {
316 el.attr('multiple', true);
316 el.attr('multiple', true);
317 if (el.children().length > 10)
317 if (el.children().length > 10)
318 el.attr('size', 10);
318 el.attr('size', 10);
319 else
319 else
320 el.attr('size', 4);
320 el.attr('size', 4);
321 }
321 }
322 }
322 }
323
323
324 function showTab(name, url) {
324 function showTab(name, url) {
325 $('#tab-content-' + name).parent().find('.tab-content').hide();
325 $('#tab-content-' + name).parent().find('.tab-content').hide();
326 $('#tab-content-' + name).parent().find('div.tabs a').removeClass('selected');
326 $('#tab-content-' + name).parent().find('div.tabs a').removeClass('selected');
327 $('#tab-content-' + name).show();
327 $('#tab-content-' + name).show();
328 $('#tab-' + name).addClass('selected');
328 $('#tab-' + name).addClass('selected');
329 //replaces current URL with the "href" attribute of the current link
329 //replaces current URL with the "href" attribute of the current link
330 //(only triggered if supported by browser)
330 //(only triggered if supported by browser)
331 if ("replaceState" in window.history) {
331 if ("replaceState" in window.history) {
332 window.history.replaceState(null, document.title, url);
332 window.history.replaceState(null, document.title, url);
333 }
333 }
334 return false;
334 return false;
335 }
335 }
336
336
337 function moveTabRight(el) {
337 function moveTabRight(el) {
338 var lis = $(el).parents('div.tabs').first().find('ul').children();
338 var lis = $(el).parents('div.tabs').first().find('ul').children();
339 var bw = $(el).parents('div.tabs-buttons').outerWidth(true);
339 var bw = $(el).parents('div.tabs-buttons').outerWidth(true);
340 var tabsWidth = 0;
340 var tabsWidth = 0;
341 var i = 0;
341 var i = 0;
342 lis.each(function() {
342 lis.each(function() {
343 if ($(this).is(':visible')) {
343 if ($(this).is(':visible')) {
344 tabsWidth += $(this).outerWidth(true);
344 tabsWidth += $(this).outerWidth(true);
345 }
345 }
346 });
346 });
347 if (tabsWidth < $(el).parents('div.tabs').first().width() - bw) { return; }
347 if (tabsWidth < $(el).parents('div.tabs').first().width() - bw) { return; }
348 $(el).siblings('.tab-left').removeClass('disabled');
348 $(el).siblings('.tab-left').removeClass('disabled');
349 while (i<lis.length && !lis.eq(i).is(':visible')) { i++; }
349 while (i<lis.length && !lis.eq(i).is(':visible')) { i++; }
350 var w = lis.eq(i).width();
350 var w = lis.eq(i).width();
351 lis.eq(i).hide();
351 lis.eq(i).hide();
352 if (tabsWidth - w < $(el).parents('div.tabs').first().width() - bw) {
352 if (tabsWidth - w < $(el).parents('div.tabs').first().width() - bw) {
353 $(el).addClass('disabled');
353 $(el).addClass('disabled');
354 }
354 }
355 }
355 }
356
356
357 function moveTabLeft(el) {
357 function moveTabLeft(el) {
358 var lis = $(el).parents('div.tabs').first().find('ul').children();
358 var lis = $(el).parents('div.tabs').first().find('ul').children();
359 var i = 0;
359 var i = 0;
360 while (i < lis.length && !lis.eq(i).is(':visible')) { i++; }
360 while (i < lis.length && !lis.eq(i).is(':visible')) { i++; }
361 if (i > 0) {
361 if (i > 0) {
362 lis.eq(i-1).show();
362 lis.eq(i-1).show();
363 $(el).siblings('.tab-right').removeClass('disabled');
363 $(el).siblings('.tab-right').removeClass('disabled');
364 }
364 }
365 if (i <= 1) {
365 if (i <= 1) {
366 $(el).addClass('disabled');
366 $(el).addClass('disabled');
367 }
367 }
368 }
368 }
369
369
370 function displayTabsButtons() {
370 function displayTabsButtons() {
371 var lis;
371 var lis;
372 var tabsWidth;
372 var tabsWidth;
373 var el;
373 var el;
374 var numHidden;
374 var numHidden;
375 $('div.tabs').each(function() {
375 $('div.tabs').each(function() {
376 el = $(this);
376 el = $(this);
377 lis = el.find('ul').children();
377 lis = el.find('ul').children();
378 tabsWidth = 0;
378 tabsWidth = 0;
379 numHidden = 0;
379 numHidden = 0;
380 lis.each(function(){
380 lis.each(function(){
381 if ($(this).is(':visible')) {
381 if ($(this).is(':visible')) {
382 tabsWidth += $(this).outerWidth(true);
382 tabsWidth += $(this).outerWidth(true);
383 } else {
383 } else {
384 numHidden++;
384 numHidden++;
385 }
385 }
386 });
386 });
387 var bw = $(el).parents('div.tabs-buttons').outerWidth(true);
387 var bw = $(el).parents('div.tabs-buttons').outerWidth(true);
388 if ((tabsWidth < el.width() - bw) && (lis.length === 0 || lis.first().is(':visible'))) {
388 if ((tabsWidth < el.width() - bw) && (lis.length === 0 || lis.first().is(':visible'))) {
389 el.find('div.tabs-buttons').hide();
389 el.find('div.tabs-buttons').hide();
390 } else {
390 } else {
391 el.find('div.tabs-buttons').show().children('button.tab-left').toggleClass('disabled', numHidden == 0);
391 el.find('div.tabs-buttons').show().children('button.tab-left').toggleClass('disabled', numHidden == 0);
392 }
392 }
393 });
393 });
394 }
394 }
395
395
396 function setPredecessorFieldsVisibility() {
396 function setPredecessorFieldsVisibility() {
397 var relationType = $('#relation_relation_type');
397 var relationType = $('#relation_relation_type');
398 if (relationType.val() == "precedes" || relationType.val() == "follows") {
398 if (relationType.val() == "precedes" || relationType.val() == "follows") {
399 $('#predecessor_fields').show();
399 $('#predecessor_fields').show();
400 } else {
400 } else {
401 $('#predecessor_fields').hide();
401 $('#predecessor_fields').hide();
402 }
402 }
403 }
403 }
404
404
405 function showModal(id, width, title) {
405 function showModal(id, width, title) {
406 var el = $('#'+id).first();
406 var el = $('#'+id).first();
407 if (el.length === 0 || el.is(':visible')) {return;}
407 if (el.length === 0 || el.is(':visible')) {return;}
408 if (!title) title = el.find('h3.title').text();
408 if (!title) title = el.find('h3.title').text();
409 // moves existing modals behind the transparent background
409 // moves existing modals behind the transparent background
410 $(".modal").zIndex(99);
410 $(".modal").zIndex(99);
411 el.dialog({
411 el.dialog({
412 width: width,
412 width: width,
413 modal: true,
413 modal: true,
414 resizable: false,
414 resizable: false,
415 dialogClass: 'modal',
415 dialogClass: 'modal',
416 title: title
416 title: title
417 }).on('dialogclose', function(){
417 }).on('dialogclose', function(){
418 $(".modal").zIndex(101);
418 $(".modal").zIndex(101);
419 });
419 });
420 el.find("input[type=text], input[type=submit]").first().focus();
420 el.find("input[type=text], input[type=submit]").first().focus();
421 }
421 }
422
422
423 function hideModal(el) {
423 function hideModal(el) {
424 var modal;
424 var modal;
425 if (el) {
425 if (el) {
426 modal = $(el).parents('.ui-dialog-content');
426 modal = $(el).parents('.ui-dialog-content');
427 } else {
427 } else {
428 modal = $('#ajax-modal');
428 modal = $('#ajax-modal');
429 }
429 }
430 modal.dialog("close");
430 modal.dialog("close");
431 }
431 }
432
432
433 function submitPreview(url, form, target) {
433 function submitPreview(url, form, target) {
434 $.ajax({
434 $.ajax({
435 url: url,
435 url: url,
436 type: 'post',
436 type: 'post',
437 data: $('#'+form).serialize(),
437 data: $('#'+form).serialize(),
438 success: function(data){
438 success: function(data){
439 $('#'+target).html(data);
439 $('#'+target).html(data);
440 }
440 }
441 });
441 });
442 }
442 }
443
443
444 function collapseScmEntry(id) {
444 function collapseScmEntry(id) {
445 $('.'+id).each(function() {
445 $('.'+id).each(function() {
446 if ($(this).hasClass('open')) {
446 if ($(this).hasClass('open')) {
447 collapseScmEntry($(this).attr('id'));
447 collapseScmEntry($(this).attr('id'));
448 }
448 }
449 $(this).hide();
449 $(this).hide();
450 });
450 });
451 $('#'+id).removeClass('open');
451 $('#'+id).removeClass('open');
452 }
452 }
453
453
454 function expandScmEntry(id) {
454 function expandScmEntry(id) {
455 $('.'+id).each(function() {
455 $('.'+id).each(function() {
456 $(this).show();
456 $(this).show();
457 if ($(this).hasClass('loaded') && !$(this).hasClass('collapsed')) {
457 if ($(this).hasClass('loaded') && !$(this).hasClass('collapsed')) {
458 expandScmEntry($(this).attr('id'));
458 expandScmEntry($(this).attr('id'));
459 }
459 }
460 });
460 });
461 $('#'+id).addClass('open');
461 $('#'+id).addClass('open');
462 }
462 }
463
463
464 function scmEntryClick(id, url) {
464 function scmEntryClick(id, url) {
465 var el = $('#'+id);
465 var el = $('#'+id);
466 if (el.hasClass('open')) {
466 if (el.hasClass('open')) {
467 collapseScmEntry(id);
467 collapseScmEntry(id);
468 el.addClass('collapsed');
468 el.addClass('collapsed');
469 return false;
469 return false;
470 } else if (el.hasClass('loaded')) {
470 } else if (el.hasClass('loaded')) {
471 expandScmEntry(id);
471 expandScmEntry(id);
472 el.removeClass('collapsed');
472 el.removeClass('collapsed');
473 return false;
473 return false;
474 }
474 }
475 if (el.hasClass('loading')) {
475 if (el.hasClass('loading')) {
476 return false;
476 return false;
477 }
477 }
478 el.addClass('loading');
478 el.addClass('loading');
479 $.ajax({
479 $.ajax({
480 url: url,
480 url: url,
481 success: function(data) {
481 success: function(data) {
482 el.after(data);
482 el.after(data);
483 el.addClass('open').addClass('loaded').removeClass('loading');
483 el.addClass('open').addClass('loaded').removeClass('loading');
484 }
484 }
485 });
485 });
486 return true;
486 return true;
487 }
487 }
488
488
489 function randomKey(size) {
489 function randomKey(size) {
490 var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
490 var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
491 var key = '';
491 var key = '';
492 for (var i = 0; i < size; i++) {
492 for (var i = 0; i < size; i++) {
493 key += chars.charAt(Math.floor(Math.random() * chars.length));
493 key += chars.charAt(Math.floor(Math.random() * chars.length));
494 }
494 }
495 return key;
495 return key;
496 }
496 }
497
497
498 function updateIssueFrom(url, el) {
498 function updateIssueFrom(url, el) {
499 $('#all_attributes input, #all_attributes textarea, #all_attributes select').each(function(){
499 $('#all_attributes input, #all_attributes textarea, #all_attributes select').each(function(){
500 $(this).data('valuebeforeupdate', $(this).val());
500 $(this).data('valuebeforeupdate', $(this).val());
501 });
501 });
502 if (el) {
502 if (el) {
503 $("#form_update_triggered_by").val($(el).attr('id'));
503 $("#form_update_triggered_by").val($(el).attr('id'));
504 }
504 }
505 return $.ajax({
505 return $.ajax({
506 url: url,
506 url: url,
507 type: 'post',
507 type: 'post',
508 data: $('#issue-form').serialize()
508 data: $('#issue-form').serialize()
509 });
509 });
510 }
510 }
511
511
512 function replaceIssueFormWith(html){
512 function replaceIssueFormWith(html){
513 var replacement = $(html);
513 var replacement = $(html);
514 $('#all_attributes input, #all_attributes textarea, #all_attributes select').each(function(){
514 $('#all_attributes input, #all_attributes textarea, #all_attributes select').each(function(){
515 var object_id = $(this).attr('id');
515 var object_id = $(this).attr('id');
516 if (object_id && $(this).data('valuebeforeupdate')!=$(this).val()) {
516 if (object_id && $(this).data('valuebeforeupdate')!=$(this).val()) {
517 replacement.find('#'+object_id).val($(this).val());
517 replacement.find('#'+object_id).val($(this).val());
518 }
518 }
519 });
519 });
520 $('#all_attributes').empty();
520 $('#all_attributes').empty();
521 $('#all_attributes').prepend(replacement);
521 $('#all_attributes').prepend(replacement);
522 }
522 }
523
523
524 function updateBulkEditFrom(url) {
524 function updateBulkEditFrom(url) {
525 $.ajax({
525 $.ajax({
526 url: url,
526 url: url,
527 type: 'post',
527 type: 'post',
528 data: $('#bulk_edit_form').serialize()
528 data: $('#bulk_edit_form').serialize()
529 });
529 });
530 }
530 }
531
531
532 function observeAutocompleteField(fieldId, url, options) {
532 function observeAutocompleteField(fieldId, url, options) {
533 $(document).ready(function() {
533 $(document).ready(function() {
534 $('#'+fieldId).autocomplete($.extend({
534 $('#'+fieldId).autocomplete($.extend({
535 source: url,
535 source: url,
536 minLength: 2,
536 minLength: 2,
537 position: {collision: "flipfit"},
537 position: {collision: "flipfit"},
538 search: function(){$('#'+fieldId).addClass('ajax-loading');},
538 search: function(){$('#'+fieldId).addClass('ajax-loading');},
539 response: function(){$('#'+fieldId).removeClass('ajax-loading');}
539 response: function(){$('#'+fieldId).removeClass('ajax-loading');}
540 }, options));
540 }, options));
541 $('#'+fieldId).addClass('autocomplete');
541 $('#'+fieldId).addClass('autocomplete');
542 });
542 });
543 }
543 }
544
544
545 function observeSearchfield(fieldId, targetId, url) {
545 function observeSearchfield(fieldId, targetId, url) {
546 $('#'+fieldId).each(function() {
546 $('#'+fieldId).each(function() {
547 var $this = $(this);
547 var $this = $(this);
548 $this.addClass('autocomplete');
548 $this.addClass('autocomplete');
549 $this.attr('data-value-was', $this.val());
549 $this.attr('data-value-was', $this.val());
550 var check = function() {
550 var check = function() {
551 var val = $this.val();
551 var val = $this.val();
552 if ($this.attr('data-value-was') != val){
552 if ($this.attr('data-value-was') != val){
553 $this.attr('data-value-was', val);
553 $this.attr('data-value-was', val);
554 $.ajax({
554 $.ajax({
555 url: url,
555 url: url,
556 type: 'get',
556 type: 'get',
557 data: {q: $this.val()},
557 data: {q: $this.val()},
558 success: function(data){ if(targetId) $('#'+targetId).html(data); },
558 success: function(data){ if(targetId) $('#'+targetId).html(data); },
559 beforeSend: function(){ $this.addClass('ajax-loading'); },
559 beforeSend: function(){ $this.addClass('ajax-loading'); },
560 complete: function(){ $this.removeClass('ajax-loading'); }
560 complete: function(){ $this.removeClass('ajax-loading'); }
561 });
561 });
562 }
562 }
563 };
563 };
564 var reset = function() {
564 var reset = function() {
565 if (timer) {
565 if (timer) {
566 clearInterval(timer);
566 clearInterval(timer);
567 timer = setInterval(check, 300);
567 timer = setInterval(check, 300);
568 }
568 }
569 };
569 };
570 var timer = setInterval(check, 300);
570 var timer = setInterval(check, 300);
571 $this.bind('keyup click mousemove', reset);
571 $this.bind('keyup click mousemove', reset);
572 });
572 });
573 }
573 }
574
574
575 $(document).ready(function(){
575 $(document).ready(function(){
576 $(".drdn .autocomplete").val('');
576 $(".drdn .autocomplete").val('');
577
577
578 $(".drdn-trigger").click(function(e){
578 $(".drdn-trigger").click(function(e){
579 var drdn = $(this).closest(".drdn");
579 var drdn = $(this).closest(".drdn");
580 if (drdn.hasClass("expanded")) {
580 if (drdn.hasClass("expanded")) {
581 drdn.removeClass("expanded");
581 drdn.removeClass("expanded");
582 } else {
582 } else {
583 $(".drdn").removeClass("expanded");
583 $(".drdn").removeClass("expanded");
584 drdn.addClass("expanded");
584 drdn.addClass("expanded");
585 if (!isMobile()) {
585 if (!isMobile()) {
586 drdn.find(".autocomplete").focus();
586 drdn.find(".autocomplete").focus();
587 }
587 }
588 e.stopPropagation();
588 e.stopPropagation();
589 }
589 }
590 });
590 });
591 $(document).click(function(e){
591 $(document).click(function(e){
592 if ($(e.target).closest(".drdn").length < 1) {
592 if ($(e.target).closest(".drdn").length < 1) {
593 $(".drdn.expanded").removeClass("expanded");
593 $(".drdn.expanded").removeClass("expanded");
594 }
594 }
595 });
595 });
596
596
597 observeSearchfield('projects-quick-search', null, $('#projects-quick-search').data('automcomplete-url'));
597 observeSearchfield('projects-quick-search', null, $('#projects-quick-search').data('automcomplete-url'));
598
598
599 $(".drdn-content").keydown(function(event){
599 $(".drdn-content").keydown(function(event){
600 var items = $(this).find(".drdn-items");
600 var items = $(this).find(".drdn-items");
601 var focused = items.find("a:focus");
601 var focused = items.find("a:focus");
602 switch (event.which) {
602 switch (event.which) {
603 case 40: //down
603 case 40: //down
604 if (focused.length > 0) {
604 if (focused.length > 0) {
605 focused.nextAll("a").first().focus();;
605 focused.nextAll("a").first().focus();;
606 } else {
606 } else {
607 items.find("a").first().focus();;
607 items.find("a").first().focus();;
608 }
608 }
609 event.preventDefault();
609 event.preventDefault();
610 break;
610 break;
611 case 38: //up
611 case 38: //up
612 if (focused.length > 0) {
612 if (focused.length > 0) {
613 var prev = focused.prevAll("a");
613 var prev = focused.prevAll("a");
614 if (prev.length > 0) {
614 if (prev.length > 0) {
615 prev.first().focus();
615 prev.first().focus();
616 } else {
616 } else {
617 $(this).find(".autocomplete").focus();
617 $(this).find(".autocomplete").focus();
618 }
618 }
619 event.preventDefault();
619 event.preventDefault();
620 }
620 }
621 break;
621 break;
622 case 35: //end
622 case 35: //end
623 if (focused.length > 0) {
623 if (focused.length > 0) {
624 focused.nextAll("a").last().focus();
624 focused.nextAll("a").last().focus();
625 event.preventDefault();
625 event.preventDefault();
626 }
626 }
627 break;
627 break;
628 case 36: //home
628 case 36: //home
629 if (focused.length > 0) {
629 if (focused.length > 0) {
630 focused.prevAll("a").last().focus();
630 focused.prevAll("a").last().focus();
631 event.preventDefault();
631 event.preventDefault();
632 }
632 }
633 break;
633 break;
634 }
634 }
635 });
635 });
636 });
636 });
637
637
638 function beforeShowDatePicker(input, inst) {
638 function beforeShowDatePicker(input, inst) {
639 var default_date = null;
639 var default_date = null;
640 switch ($(input).attr("id")) {
640 switch ($(input).attr("id")) {
641 case "issue_start_date" :
641 case "issue_start_date" :
642 if ($("#issue_due_date").size() > 0) {
642 if ($("#issue_due_date").size() > 0) {
643 default_date = $("#issue_due_date").val();
643 default_date = $("#issue_due_date").val();
644 }
644 }
645 break;
645 break;
646 case "issue_due_date" :
646 case "issue_due_date" :
647 if ($("#issue_start_date").size() > 0) {
647 if ($("#issue_start_date").size() > 0) {
648 var start_date = $("#issue_start_date").val();
648 var start_date = $("#issue_start_date").val();
649 if (start_date != "") {
649 if (start_date != "") {
650 start_date = new Date(Date.parse(start_date));
650 start_date = new Date(Date.parse(start_date));
651 if (start_date > new Date()) {
651 if (start_date > new Date()) {
652 default_date = $("#issue_start_date").val();
652 default_date = $("#issue_start_date").val();
653 }
653 }
654 }
654 }
655 }
655 }
656 break;
656 break;
657 }
657 }
658 $(input).datepickerFallback("option", "defaultDate", default_date);
658 $(input).datepickerFallback("option", "defaultDate", default_date);
659 }
659 }
660
660
661 (function($){
661 (function($){
662 $.fn.positionedItems = function(sortableOptions, options){
662 $.fn.positionedItems = function(sortableOptions, options){
663 var settings = $.extend({
663 var settings = $.extend({
664 firstPosition: 1
664 firstPosition: 1
665 }, options );
665 }, options );
666
666
667 return this.sortable($.extend({
667 return this.sortable($.extend({
668 axis: 'y',
668 axis: 'y',
669 handle: ".sort-handle",
669 handle: ".sort-handle",
670 helper: function(event, ui){
670 helper: function(event, ui){
671 ui.children('td').each(function(){
671 ui.children('td').each(function(){
672 $(this).width($(this).width());
672 $(this).width($(this).width());
673 });
673 });
674 return ui;
674 return ui;
675 },
675 },
676 update: function(event, ui) {
676 update: function(event, ui) {
677 var sortable = $(this);
677 var sortable = $(this);
678 var handle = ui.item.find(".sort-handle").addClass("ajax-loading");
678 var handle = ui.item.find(".sort-handle").addClass("ajax-loading");
679 var url = handle.data("reorder-url");
679 var url = handle.data("reorder-url");
680 var param = handle.data("reorder-param");
680 var param = handle.data("reorder-param");
681 var data = {};
681 var data = {};
682 data[param] = {position: ui.item.index() + settings['firstPosition']};
682 data[param] = {position: ui.item.index() + settings['firstPosition']};
683 $.ajax({
683 $.ajax({
684 url: url,
684 url: url,
685 type: 'put',
685 type: 'put',
686 dataType: 'script',
686 dataType: 'script',
687 data: data,
687 data: data,
688 success: function(data){
689 sortable.children(":even").removeClass("even").addClass("odd");
690 sortable.children(":odd").removeClass("odd").addClass("even");
691 },
688 error: function(jqXHR, textStatus, errorThrown){
692 error: function(jqXHR, textStatus, errorThrown){
689 alert(jqXHR.status);
693 alert(jqXHR.status);
690 sortable.sortable("cancel");
694 sortable.sortable("cancel");
691 },
695 },
692 complete: function(jqXHR, textStatus, errorThrown){
696 complete: function(jqXHR, textStatus, errorThrown){
693 handle.removeClass("ajax-loading");
697 handle.removeClass("ajax-loading");
694 }
698 }
695 });
699 });
696 },
700 },
697 }, sortableOptions));
701 }, sortableOptions));
698 }
702 }
699 }( jQuery ));
703 }( jQuery ));
700
704
701 function initMyPageSortable(list, url) {
705 function initMyPageSortable(list, url) {
702 $('#list-'+list).sortable({
706 $('#list-'+list).sortable({
703 connectWith: '.block-receiver',
707 connectWith: '.block-receiver',
704 tolerance: 'pointer',
708 tolerance: 'pointer',
705 update: function(){
709 update: function(){
706 $.ajax({
710 $.ajax({
707 url: url,
711 url: url,
708 type: 'post',
712 type: 'post',
709 data: {'blocks': $.map($('#list-'+list).children(), function(el){return $(el).attr('id');})}
713 data: {'blocks': $.map($('#list-'+list).children(), function(el){return $(el).attr('id');})}
710 });
714 });
711 }
715 }
712 });
716 });
713 $("#list-top, #list-left, #list-right").disableSelection();
717 $("#list-top, #list-left, #list-right").disableSelection();
714 }
718 }
715
719
716 var warnLeavingUnsavedMessage;
720 var warnLeavingUnsavedMessage;
717 function warnLeavingUnsaved(message) {
721 function warnLeavingUnsaved(message) {
718 warnLeavingUnsavedMessage = message;
722 warnLeavingUnsavedMessage = message;
719 $(document).on('submit', 'form', function(){
723 $(document).on('submit', 'form', function(){
720 $('textarea').removeData('changed');
724 $('textarea').removeData('changed');
721 });
725 });
722 $(document).on('change', 'textarea', function(){
726 $(document).on('change', 'textarea', function(){
723 $(this).data('changed', 'changed');
727 $(this).data('changed', 'changed');
724 });
728 });
725 window.onbeforeunload = function(){
729 window.onbeforeunload = function(){
726 var warn = false;
730 var warn = false;
727 $('textarea').blur().each(function(){
731 $('textarea').blur().each(function(){
728 if ($(this).data('changed')) {
732 if ($(this).data('changed')) {
729 warn = true;
733 warn = true;
730 }
734 }
731 });
735 });
732 if (warn) {return warnLeavingUnsavedMessage;}
736 if (warn) {return warnLeavingUnsavedMessage;}
733 };
737 };
734 }
738 }
735
739
736 function setupAjaxIndicator() {
740 function setupAjaxIndicator() {
737 $(document).bind('ajaxSend', function(event, xhr, settings) {
741 $(document).bind('ajaxSend', function(event, xhr, settings) {
738 if ($('.ajax-loading').length === 0 && settings.contentType != 'application/octet-stream') {
742 if ($('.ajax-loading').length === 0 && settings.contentType != 'application/octet-stream') {
739 $('#ajax-indicator').show();
743 $('#ajax-indicator').show();
740 }
744 }
741 });
745 });
742 $(document).bind('ajaxStop', function() {
746 $(document).bind('ajaxStop', function() {
743 $('#ajax-indicator').hide();
747 $('#ajax-indicator').hide();
744 });
748 });
745 }
749 }
746
750
747 function setupTabs() {
751 function setupTabs() {
748 if($('.tabs').length > 0) {
752 if($('.tabs').length > 0) {
749 displayTabsButtons();
753 displayTabsButtons();
750 $(window).resize(displayTabsButtons);
754 $(window).resize(displayTabsButtons);
751 }
755 }
752 }
756 }
753
757
754 function hideOnLoad() {
758 function hideOnLoad() {
755 $('.hol').hide();
759 $('.hol').hide();
756 }
760 }
757
761
758 function addFormObserversForDoubleSubmit() {
762 function addFormObserversForDoubleSubmit() {
759 $('form[method=post]').each(function() {
763 $('form[method=post]').each(function() {
760 if (!$(this).hasClass('multiple-submit')) {
764 if (!$(this).hasClass('multiple-submit')) {
761 $(this).submit(function(form_submission) {
765 $(this).submit(function(form_submission) {
762 if ($(form_submission.target).attr('data-submitted')) {
766 if ($(form_submission.target).attr('data-submitted')) {
763 form_submission.preventDefault();
767 form_submission.preventDefault();
764 } else {
768 } else {
765 $(form_submission.target).attr('data-submitted', true);
769 $(form_submission.target).attr('data-submitted', true);
766 }
770 }
767 });
771 });
768 }
772 }
769 });
773 });
770 }
774 }
771
775
772 function defaultFocus(){
776 function defaultFocus(){
773 if (($('#content :focus').length == 0) && (window.location.hash == '')) {
777 if (($('#content :focus').length == 0) && (window.location.hash == '')) {
774 $('#content input[type=text], #content textarea').first().focus();
778 $('#content input[type=text], #content textarea').first().focus();
775 }
779 }
776 }
780 }
777
781
778 function blockEventPropagation(event) {
782 function blockEventPropagation(event) {
779 event.stopPropagation();
783 event.stopPropagation();
780 event.preventDefault();
784 event.preventDefault();
781 }
785 }
782
786
783 function toggleDisabledOnChange() {
787 function toggleDisabledOnChange() {
784 var checked = $(this).is(':checked');
788 var checked = $(this).is(':checked');
785 $($(this).data('disables')).attr('disabled', checked);
789 $($(this).data('disables')).attr('disabled', checked);
786 $($(this).data('enables')).attr('disabled', !checked);
790 $($(this).data('enables')).attr('disabled', !checked);
787 $($(this).data('shows')).toggle(checked);
791 $($(this).data('shows')).toggle(checked);
788 }
792 }
789 function toggleDisabledInit() {
793 function toggleDisabledInit() {
790 $('input[data-disables], input[data-enables], input[data-shows]').each(toggleDisabledOnChange);
794 $('input[data-disables], input[data-enables], input[data-shows]').each(toggleDisabledOnChange);
791 }
795 }
792
796
793 function toggleNewObjectDropdown() {
797 function toggleNewObjectDropdown() {
794 var dropdown = $('#new-object + ul.menu-children');
798 var dropdown = $('#new-object + ul.menu-children');
795 if(dropdown.hasClass('visible')){
799 if(dropdown.hasClass('visible')){
796 dropdown.removeClass('visible');
800 dropdown.removeClass('visible');
797 }else{
801 }else{
798 dropdown.addClass('visible');
802 dropdown.addClass('visible');
799 }
803 }
800 }
804 }
801
805
802 (function ( $ ) {
806 (function ( $ ) {
803
807
804 // detect if native date input is supported
808 // detect if native date input is supported
805 var nativeDateInputSupported = true;
809 var nativeDateInputSupported = true;
806
810
807 var input = document.createElement('input');
811 var input = document.createElement('input');
808 input.setAttribute('type','date');
812 input.setAttribute('type','date');
809 if (input.type === 'text') {
813 if (input.type === 'text') {
810 nativeDateInputSupported = false;
814 nativeDateInputSupported = false;
811 }
815 }
812
816
813 var notADateValue = 'not-a-date';
817 var notADateValue = 'not-a-date';
814 input.setAttribute('value', notADateValue);
818 input.setAttribute('value', notADateValue);
815 if (input.value === notADateValue) {
819 if (input.value === notADateValue) {
816 nativeDateInputSupported = false;
820 nativeDateInputSupported = false;
817 }
821 }
818
822
819 $.fn.datepickerFallback = function( options ) {
823 $.fn.datepickerFallback = function( options ) {
820 if (nativeDateInputSupported) {
824 if (nativeDateInputSupported) {
821 return this;
825 return this;
822 } else {
826 } else {
823 return this.datepicker( options );
827 return this.datepicker( options );
824 }
828 }
825 };
829 };
826 }( jQuery ));
830 }( jQuery ));
827
831
828 $(document).ready(function(){
832 $(document).ready(function(){
829 $('#content').on('change', 'input[data-disables], input[data-enables], input[data-shows]', toggleDisabledOnChange);
833 $('#content').on('change', 'input[data-disables], input[data-enables], input[data-shows]', toggleDisabledOnChange);
830 toggleDisabledInit();
834 toggleDisabledInit();
831 });
835 });
832
836
833 function keepAnchorOnSignIn(form){
837 function keepAnchorOnSignIn(form){
834 var hash = decodeURIComponent(self.document.location.hash);
838 var hash = decodeURIComponent(self.document.location.hash);
835 if (hash) {
839 if (hash) {
836 if (hash.indexOf("#") === -1) {
840 if (hash.indexOf("#") === -1) {
837 hash = "#" + hash;
841 hash = "#" + hash;
838 }
842 }
839 form.action = form.action + hash;
843 form.action = form.action + hash;
840 }
844 }
841 return true;
845 return true;
842 }
846 }
843
847
844 $(document).ready(setupAjaxIndicator);
848 $(document).ready(setupAjaxIndicator);
845 $(document).ready(hideOnLoad);
849 $(document).ready(hideOnLoad);
846 $(document).ready(addFormObserversForDoubleSubmit);
850 $(document).ready(addFormObserversForDoubleSubmit);
847 $(document).ready(defaultFocus);
851 $(document).ready(defaultFocus);
848 $(document).ready(setupTabs);
852 $(document).ready(setupTabs);
@@ -1,1461 +1,1459
1 html {overflow-y:scroll;}
1 html {overflow-y:scroll;}
2 body { font-family: Verdana, sans-serif; font-size: 12px; color:#333; margin: 0; padding: 0; min-width: 900px; }
2 body { font-family: Verdana, sans-serif; font-size: 12px; color:#333; margin: 0; padding: 0; min-width: 900px; }
3
3
4 h1, h2, h3, h4 {font-family: "Trebuchet MS", Verdana, sans-serif;padding: 2px 10px 1px 0px;margin: 0 0 10px 0;}
4 h1, h2, h3, h4 {font-family: "Trebuchet MS", Verdana, sans-serif;padding: 2px 10px 1px 0px;margin: 0 0 10px 0;}
5 #content h1, h2, h3, h4 {color: #555;}
5 #content h1, h2, h3, h4 {color: #555;}
6 h2, .wiki h1 {font-size: 20px;}
6 h2, .wiki h1 {font-size: 20px;}
7 h3, .wiki h2 {font-size: 16px;}
7 h3, .wiki h2 {font-size: 16px;}
8 h4, .wiki h3 {font-size: 13px;}
8 h4, .wiki h3 {font-size: 13px;}
9 h4 {border-bottom: 1px dotted #bbb;}
9 h4 {border-bottom: 1px dotted #bbb;}
10 pre, code {font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace;}
10 pre, code {font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace;}
11
11
12 /***** Layout *****/
12 /***** Layout *****/
13 #wrapper {background: white;overflow: hidden;}
13 #wrapper {background: white;overflow: hidden;}
14
14
15 #top-menu {background: #3E5B76; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
15 #top-menu {background: #3E5B76; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
16 #top-menu ul {margin: 0; padding: 0;}
16 #top-menu ul {margin: 0; padding: 0;}
17 #top-menu li {
17 #top-menu li {
18 float:left;
18 float:left;
19 list-style-type:none;
19 list-style-type:none;
20 margin: 0px 0px 0px 0px;
20 margin: 0px 0px 0px 0px;
21 padding: 0px 0px 0px 0px;
21 padding: 0px 0px 0px 0px;
22 white-space:nowrap;
22 white-space:nowrap;
23 }
23 }
24 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
24 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
25 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
25 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
26
26
27 #account {float:right;}
27 #account {float:right;}
28
28
29 #header {min-height:5.3em;margin:0;background-color:#628DB6;color:#f8f8f8; padding: 4px 8px 20px 6px; position:relative;}
29 #header {min-height:5.3em;margin:0;background-color:#628DB6;color:#f8f8f8; padding: 4px 8px 20px 6px; position:relative;}
30 #header a {color:#f8f8f8;}
30 #header a {color:#f8f8f8;}
31 #header h1 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
31 #header h1 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
32 #header h1 .breadcrumbs { display:block; font-size: .5em; font-weight: normal; }
32 #header h1 .breadcrumbs { display:block; font-size: .5em; font-weight: normal; }
33
33
34 #quick-search {float:right;}
34 #quick-search {float:right;}
35 #quick-search #q {width:130px; height:24px; box-sizing:border-box; vertical-align:middle; border:1px solid #ccc; border-radius:3px;}
35 #quick-search #q {width:130px; height:24px; box-sizing:border-box; vertical-align:middle; border:1px solid #ccc; border-radius:3px;}
36
36
37 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px; width: 100%;}
37 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px; width: 100%;}
38 #main-menu ul {margin: 0; padding: 0; width: 100%; white-space: nowrap;}
38 #main-menu ul {margin: 0; padding: 0; width: 100%; white-space: nowrap;}
39 #main-menu li {
39 #main-menu li {
40 float:none;
40 float:none;
41 list-style-type:none;
41 list-style-type:none;
42 margin: 0px 2px 0px 0px;
42 margin: 0px 2px 0px 0px;
43 padding: 0px 0px 0px 0px;
43 padding: 0px 0px 0px 0px;
44 white-space:nowrap;
44 white-space:nowrap;
45 display:inline-block;
45 display:inline-block;
46 }
46 }
47 #main-menu li a {
47 #main-menu li a {
48 display: block;
48 display: block;
49 color: #fff;
49 color: #fff;
50 text-decoration: none;
50 text-decoration: none;
51 font-weight: bold;
51 font-weight: bold;
52 margin: 0;
52 margin: 0;
53 padding: 4px 10px 4px 10px;
53 padding: 4px 10px 4px 10px;
54 }
54 }
55 #main-menu li a:hover {background:#759FCF; color:#fff;}
55 #main-menu li a:hover {background:#759FCF; color:#fff;}
56 #main-menu li:hover ul.menu-children, #main-menu li ul.menu-children.visible {display: block;}
56 #main-menu li:hover ul.menu-children, #main-menu li ul.menu-children.visible {display: block;}
57 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
57 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
58 #main-menu li a.new-object { background-color:#759FCF; }
58 #main-menu li a.new-object { background-color:#759FCF; }
59
59
60 #main-menu .menu-children {
60 #main-menu .menu-children {
61 display: none;
61 display: none;
62 position:absolute;
62 position:absolute;
63 width: inherit;
63 width: inherit;
64 z-index:45;
64 z-index:45;
65 background-color:#fff;
65 background-color:#fff;
66 border-right: 1px solid #759FCF;
66 border-right: 1px solid #759FCF;
67 border-bottom: 1px solid #759FCF;
67 border-bottom: 1px solid #759FCF;
68 border-left: 1px solid #759FCF;
68 border-left: 1px solid #759FCF;
69 }
69 }
70 #main-menu .menu-children li {float:left; clear:both; width:100%;}
70 #main-menu .menu-children li {float:left; clear:both; width:100%;}
71 #main-menu .menu-children li a {color: #555; background-color:#fff; font-weight:normal;}
71 #main-menu .menu-children li a {color: #555; background-color:#fff; font-weight:normal;}
72 #main-menu .menu-children li a:hover {color: #fff; background-color: #759FCF;}
72 #main-menu .menu-children li a:hover {color: #fff; background-color: #759FCF;}
73
73
74 #main-menu .tabs-buttons {
74 #main-menu .tabs-buttons {
75 right: 6px;
75 right: 6px;
76 background-color: transparent;
76 background-color: transparent;
77 border-bottom-color: transparent;
77 border-bottom-color: transparent;
78 }
78 }
79
79
80 #admin-menu ul {margin: 0; padding: 0;}
80 #admin-menu ul {margin: 0; padding: 0;}
81 #admin-menu li {margin: 0; padding: 0 0 6px 0; list-style-type:none;}
81 #admin-menu li {margin: 0; padding: 0 0 6px 0; list-style-type:none;}
82
82
83 #main {background-color:#EEEEEE;}
83 #main {background-color:#EEEEEE;}
84
84
85 #sidebar{ float: right; width: 22%; position: relative; z-index: 9; padding: 0; margin: 0;}
85 #sidebar{ float: right; width: 22%; position: relative; z-index: 9; padding: 0; margin: 0;}
86 * html #sidebar{ width: 22%; }
86 * html #sidebar{ width: 22%; }
87 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
87 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
88 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
88 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
89 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
89 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
90 #sidebar .contextual { margin-right: 1em; }
90 #sidebar .contextual { margin-right: 1em; }
91 #sidebar ul, ul.flat {margin: 0; padding: 0;}
91 #sidebar ul, ul.flat {margin: 0; padding: 0;}
92 #sidebar ul li, ul.flat li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
92 #sidebar ul li, ul.flat li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
93 #sidebar div.wiki ul {margin:inherit; padding-left:40px;}
93 #sidebar div.wiki ul {margin:inherit; padding-left:40px;}
94 #sidebar div.wiki ul li {list-style-type:inherit;}
94 #sidebar div.wiki ul li {list-style-type:inherit;}
95
95
96 #content { width: 75%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
96 #content { width: 75%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
97 * html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
97 * html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
98 html>body #content { min-height: 600px; }
98 html>body #content { min-height: 600px; }
99 * html body #content { height: 600px; } /* IE */
99 * html body #content { height: 600px; } /* IE */
100
100
101 #main.nosidebar #sidebar{ display: none; }
101 #main.nosidebar #sidebar{ display: none; }
102 #main.nosidebar #content{ width: auto; border-right: 0; }
102 #main.nosidebar #content{ width: auto; border-right: 0; }
103
103
104 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
104 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
105
105
106 #login-form {margin:5em auto 2em auto; padding:20px; width:340px; border:1px solid #FDBF3B; background-color:#FFEBC1; border-radius:4px; box-sizing: border-box;}
106 #login-form {margin:5em auto 2em auto; padding:20px; width:340px; border:1px solid #FDBF3B; background-color:#FFEBC1; border-radius:4px; box-sizing: border-box;}
107 #login-form label {display:block; margin-bottom:5px;}
107 #login-form label {display:block; margin-bottom:5px;}
108 #login-form input[type=text], #login-form input[type=password] {border:1px solid #ccc; border-radius:3px; margin-bottom:15px; padding:7px; display:block; width:100%; box-sizing: border-box;}
108 #login-form input[type=text], #login-form input[type=password] {border:1px solid #ccc; border-radius:3px; margin-bottom:15px; padding:7px; display:block; width:100%; box-sizing: border-box;}
109 #login-form label {font-weight:bold;}
109 #login-form label {font-weight:bold;}
110 #login-form label[for=autologin] {font-weight:normal;}
110 #login-form label[for=autologin] {font-weight:normal;}
111 #login-form a.lost_password {float:right; font-weight:normal;}
111 #login-form a.lost_password {float:right; font-weight:normal;}
112 #login-form input#openid_url {background:#fff url(../images/openid-bg.gif) no-repeat 4px 50%; padding-left:24px !important;}
112 #login-form input#openid_url {background:#fff url(../images/openid-bg.gif) no-repeat 4px 50%; padding-left:24px !important;}
113 #login-form input#login-submit {margin-top:15px; padding:7px; display:block; width:100%; box-sizing: border-box;}
113 #login-form input#login-submit {margin-top:15px; padding:7px; display:block; width:100%; box-sizing: border-box;}
114
114
115 div.modal { border-radius:5px; background:#fff; z-index:50; padding:4px;}
115 div.modal { border-radius:5px; background:#fff; z-index:50; padding:4px;}
116 div.modal h3.title {display:none;}
116 div.modal h3.title {display:none;}
117 div.modal p.buttons {text-align:right; margin-bottom:0;}
117 div.modal p.buttons {text-align:right; margin-bottom:0;}
118 div.modal .box p {margin: 0.3em 0;}
118 div.modal .box p {margin: 0.3em 0;}
119
119
120 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
120 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
121
121
122 .mobile-show {display: none;}
122 .mobile-show {display: none;}
123
123
124 /***** Links *****/
124 /***** Links *****/
125 a, a:link, a:visited{ color: #169; text-decoration: none; }
125 a, a:link, a:visited{ color: #169; text-decoration: none; }
126 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
126 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
127 a img{ border: 0; }
127 a img{ border: 0; }
128
128
129 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
129 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
130 a.project.closed, a.project.closed:link, a.project.closed:visited { color: #999; }
130 a.project.closed, a.project.closed:link, a.project.closed:visited { color: #999; }
131 a.user.locked, a.user.locked:link, a.user.locked:visited {color: #999;}
131 a.user.locked, a.user.locked:link, a.user.locked:visited {color: #999;}
132
132
133 #sidebar a.selected {line-height:1.7em; padding:1px 3px 2px 2px; margin-left:-2px; background-color:#9DB9D5; color:#fff; border-radius:2px;}
133 #sidebar a.selected {line-height:1.7em; padding:1px 3px 2px 2px; margin-left:-2px; background-color:#9DB9D5; color:#fff; border-radius:2px;}
134 #sidebar a.selected:hover {text-decoration:none;}
134 #sidebar a.selected:hover {text-decoration:none;}
135 #admin-menu a {line-height:1.7em;}
135 #admin-menu a {line-height:1.7em;}
136 #admin-menu a.selected {padding-left: 20px !important; background-position: 2px 40%;}
136 #admin-menu a.selected {padding-left: 20px !important; background-position: 2px 40%;}
137
137
138 a.collapsible {padding-left: 12px; background: url(../images/arrow_expanded.png) no-repeat -3px 40%;}
138 a.collapsible {padding-left: 12px; background: url(../images/arrow_expanded.png) no-repeat -3px 40%;}
139 a.collapsible.collapsed {background: url(../images/arrow_collapsed.png) no-repeat -5px 40%;}
139 a.collapsible.collapsed {background: url(../images/arrow_collapsed.png) no-repeat -5px 40%;}
140
140
141 a#toggle-completed-versions {color:#999;}
141 a#toggle-completed-versions {color:#999;}
142
142
143 a.toggle-checkboxes { margin-left: 5px; padding-left: 12px; background: url(../images/toggle_check.png) no-repeat 0% 50%; }
143 a.toggle-checkboxes { margin-left: 5px; padding-left: 12px; background: url(../images/toggle_check.png) no-repeat 0% 50%; }
144
144
145 /***** Dropdown *****/
145 /***** Dropdown *****/
146 .drdn {position:relative;}
146 .drdn {position:relative;}
147 .drdn-trigger {
147 .drdn-trigger {
148 width:100%;
148 width:100%;
149 height:24px;
149 height:24px;
150 box-sizing:border-box;
150 box-sizing:border-box;
151 overflow:hidden;
151 overflow:hidden;
152 text-overflow:ellipsis;
152 text-overflow:ellipsis;
153 white-space:nowrap;
153 white-space:nowrap;
154 padding:3px 18px 3px 6px;
154 padding:3px 18px 3px 6px;
155 background:#fff url(../images/sort_desc.png) no-repeat 97% 50%;
155 background:#fff url(../images/sort_desc.png) no-repeat 97% 50%;
156 cursor:pointer;
156 cursor:pointer;
157 user-select:none;
157 user-select:none;
158 -moz-user-select:none;
158 -moz-user-select:none;
159 -webkit-user-select:none;
159 -webkit-user-select:none;
160 }
160 }
161 .drdn-content {
161 .drdn-content {
162 display:none;
162 display:none;
163 position:absolute;
163 position:absolute;
164 right:0px;
164 right:0px;
165 top:25px;
165 top:25px;
166 min-width:100px;
166 min-width:100px;
167 background-color:#fff;
167 background-color:#fff;
168 border:1px solid #ccc;
168 border:1px solid #ccc;
169 border-radius:4px;
169 border-radius:4px;
170 color:#555;
170 color:#555;
171 z-index:99;
171 z-index:99;
172 }
172 }
173 .drdn.expanded .drdn-trigger {background-image:url(../images/sort_asc.png);}
173 .drdn.expanded .drdn-trigger {background-image:url(../images/sort_asc.png);}
174 .drdn.expanded .drdn-content {display:block;}
174 .drdn.expanded .drdn-content {display:block;}
175
175
176 .drdn-content .quick-search {margin:8px;}
176 .drdn-content .quick-search {margin:8px;}
177 .drdn-content .autocomplete {box-sizing: border-box; width:100% !important; height:28px;}
177 .drdn-content .autocomplete {box-sizing: border-box; width:100% !important; height:28px;}
178 .drdn-content .autocomplete:focus {border-color:#5ad;}
178 .drdn-content .autocomplete:focus {border-color:#5ad;}
179 .drdn-items {max-height:400px; overflow:auto;}
179 .drdn-items {max-height:400px; overflow:auto;}
180 .quick-search + .drdn-items {border-top:1px solid #ccc;}
180 .quick-search + .drdn-items {border-top:1px solid #ccc;}
181 .drdn-items>* {
181 .drdn-items>* {
182 display:block;
182 display:block;
183 border:1px solid #fff;
183 border:1px solid #fff;
184 color:#555 !important;
184 color:#555 !important;
185 overflow:hidden;
185 overflow:hidden;
186 text-overflow: ellipsis;
186 text-overflow: ellipsis;
187 white-space:nowrap;
187 white-space:nowrap;
188 padding:4px 8px;
188 padding:4px 8px;
189 }
189 }
190 .drdn-items>a:hover {text-decoration:none; background-color:#759FCF; color:#fff !important;}
190 .drdn-items>a:hover {text-decoration:none; background-color:#759FCF; color:#fff !important;}
191 .drdn-items>*:focus {border:1px dotted #bbb;}
191 .drdn-items>*:focus {border:1px dotted #bbb;}
192
192
193 .drdn-items.selection>*:before {
193 .drdn-items.selection>*:before {
194 content:' ';
194 content:' ';
195 display:inline-block;
195 display:inline-block;
196 line-height:1em;
196 line-height:1em;
197 width:1em;
197 width:1em;
198 height:1em;
198 height:1em;
199 margin-right:4px;
199 margin-right:4px;
200 font-weight:bold;
200 font-weight:bold;
201 }
201 }
202 .drdn-items.selection>*.selected:before {
202 .drdn-items.selection>*.selected:before {
203 content:"\2713 ";
203 content:"\2713 ";
204 }
204 }
205 .drdn-items>span {color:#999;}
205 .drdn-items>span {color:#999;}
206
206
207 #project-jump.drdn {width:200px;display:inline-block;}
207 #project-jump.drdn {width:200px;display:inline-block;}
208 #project-jump .drdn-trigger {
208 #project-jump .drdn-trigger {
209 display:inline-block;
209 display:inline-block;
210 border-radius:3px;
210 border-radius:3px;
211 border:1px solid #ccc;
211 border:1px solid #ccc;
212 margin:0 !important;
212 margin:0 !important;
213 vertical-align:middle;
213 vertical-align:middle;
214 color:#555;
214 color:#555;
215 }
215 }
216 #project-jump .drdn-content {width:280px;}
216 #project-jump .drdn-content {width:280px;}
217
217
218 /***** Tables *****/
218 /***** Tables *****/
219 table.list, .table-list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
219 table.list, .table-list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
220 table.list th, .table-list-header { background-color:#EEEEEE; padding: 4px; white-space:nowrap; font-weight:bold; }
220 table.list th, .table-list-header { background-color:#EEEEEE; padding: 4px; white-space:nowrap; font-weight:bold; }
221 table.list td {text-align:center; vertical-align:middle; padding-right:10px;}
221 table.list td {text-align:center; vertical-align:middle; padding-right:10px;}
222 table.list td.id { width: 2%; text-align: center;}
222 table.list td.id { width: 2%; text-align: center;}
223 table.list td.name, table.list td.description, table.list td.subject, table.list td.comments, table.list td.roles {text-align: left;}
223 table.list td.name, table.list td.description, table.list td.subject, table.list td.comments, table.list td.roles {text-align: left;}
224 table.list td.tick {width:15%}
224 table.list td.tick {width:15%}
225 table.list td.checkbox { width: 15px; padding: 2px 0 0 0; }
225 table.list td.checkbox { width: 15px; padding: 2px 0 0 0; }
226 table.list td.checkbox input {padding:0px;}
226 table.list td.checkbox input {padding:0px;}
227 table.list td.buttons, div.buttons { white-space:nowrap; text-align: right; }
227 table.list td.buttons, div.buttons { white-space:nowrap; text-align: right; }
228 table.list td.buttons a, div.buttons a { margin-right: 0.6em; }
228 table.list td.buttons a, div.buttons a { margin-right: 0.6em; }
229 table.list td.buttons img, div.buttons img {vertical-align:middle;}
229 table.list td.buttons img, div.buttons img {vertical-align:middle;}
230 table.list td.reorder {width:15%; white-space:nowrap; text-align:center; }
230 table.list td.reorder {width:15%; white-space:nowrap; text-align:center; }
231 table.list table.progress td {padding-right:0px;}
231 table.list table.progress td {padding-right:0px;}
232 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
232 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
233 #role-permissions-trackers table.list th {white-space:normal;}
233 #role-permissions-trackers table.list th {white-space:normal;}
234
234
235 .table-list-cell {display: table-cell; vertical-align: top; padding:2px; }
235 .table-list-cell {display: table-cell; vertical-align: top; padding:2px; }
236 .table-list div.buttons {width: 15%;}
236 .table-list div.buttons {width: 15%;}
237
237
238 tr.project td.name a { white-space:nowrap; }
238 tr.project td.name a { white-space:nowrap; }
239 tr.project.closed, tr.project.archived { color: #aaa; }
239 tr.project.closed, tr.project.archived { color: #aaa; }
240 tr.project.closed a, tr.project.archived a { color: #aaa; }
240 tr.project.closed a, tr.project.archived a { color: #aaa; }
241
241
242 tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
242 tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
243 tr.project.idnt-1 td.name {padding-left: 0.5em;}
243 tr.project.idnt-1 td.name {padding-left: 0.5em;}
244 tr.project.idnt-2 td.name {padding-left: 2em;}
244 tr.project.idnt-2 td.name {padding-left: 2em;}
245 tr.project.idnt-3 td.name {padding-left: 3.5em;}
245 tr.project.idnt-3 td.name {padding-left: 3.5em;}
246 tr.project.idnt-4 td.name {padding-left: 5em;}
246 tr.project.idnt-4 td.name {padding-left: 5em;}
247 tr.project.idnt-5 td.name {padding-left: 6.5em;}
247 tr.project.idnt-5 td.name {padding-left: 6.5em;}
248 tr.project.idnt-6 td.name {padding-left: 8em;}
248 tr.project.idnt-6 td.name {padding-left: 8em;}
249 tr.project.idnt-7 td.name {padding-left: 9.5em;}
249 tr.project.idnt-7 td.name {padding-left: 9.5em;}
250 tr.project.idnt-8 td.name {padding-left: 11em;}
250 tr.project.idnt-8 td.name {padding-left: 11em;}
251 tr.project.idnt-9 td.name {padding-left: 12.5em;}
251 tr.project.idnt-9 td.name {padding-left: 12.5em;}
252
252
253 tr.issue { text-align: center; white-space: nowrap; }
253 tr.issue { text-align: center; white-space: nowrap; }
254 tr.issue td.subject, tr.issue td.category, td.assigned_to, tr.issue td.string, tr.issue td.text, tr.issue td.list, tr.issue td.relations, tr.issue td.parent { white-space: normal; }
254 tr.issue td.subject, tr.issue td.category, td.assigned_to, tr.issue td.string, tr.issue td.text, tr.issue td.list, tr.issue td.relations, tr.issue td.parent { white-space: normal; }
255 tr.issue td.relations { text-align: left; }
255 tr.issue td.relations { text-align: left; }
256 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
256 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
257 tr.issue td.relations span {white-space: nowrap;}
257 tr.issue td.relations span {white-space: nowrap;}
258 table.issues td.description {color:#777; font-size:90%; padding:4px 4px 4px 24px; text-align:left; white-space:normal;}
258 table.issues td.description {color:#777; font-size:90%; padding:4px 4px 4px 24px; text-align:left; white-space:normal;}
259 table.issues td.description pre {white-space:normal;}
259 table.issues td.description pre {white-space:normal;}
260
260
261 tr.issue.idnt td.subject {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%;}
261 tr.issue.idnt td.subject {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%;}
262 tr.issue.idnt-1 td.subject {padding-left: 24px; background-position: 8px 50%;}
262 tr.issue.idnt-1 td.subject {padding-left: 24px; background-position: 8px 50%;}
263 tr.issue.idnt-2 td.subject {padding-left: 40px; background-position: 24px 50%;}
263 tr.issue.idnt-2 td.subject {padding-left: 40px; background-position: 24px 50%;}
264 tr.issue.idnt-3 td.subject {padding-left: 56px; background-position: 40px 50%;}
264 tr.issue.idnt-3 td.subject {padding-left: 56px; background-position: 40px 50%;}
265 tr.issue.idnt-4 td.subject {padding-left: 72px; background-position: 56px 50%;}
265 tr.issue.idnt-4 td.subject {padding-left: 72px; background-position: 56px 50%;}
266 tr.issue.idnt-5 td.subject {padding-left: 88px; background-position: 72px 50%;}
266 tr.issue.idnt-5 td.subject {padding-left: 88px; background-position: 72px 50%;}
267 tr.issue.idnt-6 td.subject {padding-left: 104px; background-position: 88px 50%;}
267 tr.issue.idnt-6 td.subject {padding-left: 104px; background-position: 88px 50%;}
268 tr.issue.idnt-7 td.subject {padding-left: 120px; background-position: 104px 50%;}
268 tr.issue.idnt-7 td.subject {padding-left: 120px; background-position: 104px 50%;}
269 tr.issue.idnt-8 td.subject {padding-left: 136px; background-position: 120px 50%;}
269 tr.issue.idnt-8 td.subject {padding-left: 136px; background-position: 120px 50%;}
270 tr.issue.idnt-9 td.subject {padding-left: 152px; background-position: 136px 50%;}
270 tr.issue.idnt-9 td.subject {padding-left: 152px; background-position: 136px 50%;}
271
271
272 table.issue-report {table-layout:fixed;}
272 table.issue-report {table-layout:fixed;}
273
273
274 tr.entry { border: 1px solid #f8f8f8; }
274 tr.entry { border: 1px solid #f8f8f8; }
275 tr.entry td { white-space: nowrap; }
275 tr.entry td { white-space: nowrap; }
276 tr.entry td.filename {width:30%; text-align:left;}
276 tr.entry td.filename {width:30%; text-align:left;}
277 tr.entry td.filename_no_report {width:70%; text-align:left;}
277 tr.entry td.filename_no_report {width:70%; text-align:left;}
278 tr.entry td.size { text-align: right; font-size: 90%; }
278 tr.entry td.size { text-align: right; font-size: 90%; }
279 tr.entry td.revision, tr.entry td.author { text-align: center; }
279 tr.entry td.revision, tr.entry td.author { text-align: center; }
280 tr.entry td.age { text-align: right; }
280 tr.entry td.age { text-align: right; }
281 tr.entry.file td.filename a { margin-left: 16px; }
281 tr.entry.file td.filename a { margin-left: 16px; }
282 tr.entry.file td.filename_no_report a { margin-left: 16px; }
282 tr.entry.file td.filename_no_report a { margin-left: 16px; }
283
283
284 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
284 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
285 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
285 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
286
286
287 tr.changeset { height: 20px }
287 tr.changeset { height: 20px }
288 tr.changeset ul, ol { margin-top: 0px; margin-bottom: 0px; }
288 tr.changeset ul, ol { margin-top: 0px; margin-bottom: 0px; }
289 tr.changeset td.revision_graph { width: 15%; background-color: #fffffb; }
289 tr.changeset td.revision_graph { width: 15%; background-color: #fffffb; }
290 tr.changeset td.author { text-align: center; width: 15%; white-space:nowrap;}
290 tr.changeset td.author { text-align: center; width: 15%; white-space:nowrap;}
291 tr.changeset td.committed_on { text-align: center; width: 15%; white-space:nowrap;}
291 tr.changeset td.committed_on { text-align: center; width: 15%; white-space:nowrap;}
292
292
293 table.files tbody th {text-align:left;}
293 table.files tbody th {text-align:left;}
294 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
294 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
295 table.files tr.file td.digest { font-size: 80%; }
295 table.files tr.file td.digest { font-size: 80%; }
296
296
297 table.members td.roles, table.memberships td.roles { width: 45%; }
297 table.members td.roles, table.memberships td.roles { width: 45%; }
298
298
299 tr.message { height: 2.6em; }
299 tr.message { height: 2.6em; }
300 tr.message td.created_on { white-space: nowrap; }
300 tr.message td.created_on { white-space: nowrap; }
301 tr.message td.last_message { font-size: 80%; white-space: nowrap; }
301 tr.message td.last_message { font-size: 80%; white-space: nowrap; }
302 tr.message.sticky td.subject { font-weight: bold; }
302 tr.message.sticky td.subject { font-weight: bold; }
303
303
304 tr.version.closed, tr.version.closed a { color: #999; }
304 tr.version.closed, tr.version.closed a { color: #999; }
305 tr.version td.name { padding-left: 20px; }
305 tr.version td.name { padding-left: 20px; }
306 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; }
306 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; }
307
307
308 tr.member td.icon-user {background:transparent;}
308 tr.member td.icon-user {background:transparent;}
309
309
310 tr.user td {width:13%;white-space: nowrap;}
310 tr.user td {width:13%;white-space: nowrap;}
311 td.username, td.firstname, td.lastname, td.email {text-align:left !important;}
311 td.username, td.firstname, td.lastname, td.email {text-align:left !important;}
312 tr.user td.email { width:18%; }
312 tr.user td.email { width:18%; }
313 tr.user.locked, tr.user.registered { color: #aaa; }
313 tr.user.locked, tr.user.registered { color: #aaa; }
314 tr.user.locked a, tr.user.registered a { color: #aaa; }
314 tr.user.locked a, tr.user.registered a { color: #aaa; }
315
315
316 table.permissions td.role {color:#999;font-size:90%;font-weight:normal !important;text-align:center;vertical-align:bottom;}
316 table.permissions td.role {color:#999;font-size:90%;font-weight:normal !important;text-align:center;vertical-align:bottom;}
317
317
318 tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
318 tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
319
319
320 div.mypage-box table.time-entries tr.time-entry { background-color: #fff; }
321 div.mypage-box table.time-entries tr.odd { background-color:#f6f7f8; }
322 tr.time-entry { text-align: center; white-space: nowrap; }
320 tr.time-entry { text-align: center; white-space: nowrap; }
323 tr.time-entry td.issue, tr.time-entry td.comments, tr.time-entry td.subject, tr.time-entry td.activity { text-align: left; white-space: normal; }
321 tr.time-entry td.issue, tr.time-entry td.comments, tr.time-entry td.subject, tr.time-entry td.activity { text-align: left; white-space: normal; }
324 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
322 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
325 td.hours .hours-dec { font-size: 0.9em; }
323 td.hours .hours-dec { font-size: 0.9em; }
326
324
327 table.plugins td { vertical-align: middle; }
325 table.plugins td { vertical-align: middle; }
328 table.plugins td.configure { text-align: right; padding-right: 1em; }
326 table.plugins td.configure { text-align: right; padding-right: 1em; }
329 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
327 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
330 table.plugins span.description { display: block; font-size: 0.9em; }
328 table.plugins span.description { display: block; font-size: 0.9em; }
331 table.plugins span.url { display: block; font-size: 0.9em; }
329 table.plugins span.url { display: block; font-size: 0.9em; }
332
330
333 table.list.enumerations {table-layout: fixed;}
331 table.list.enumerations {table-layout: fixed;}
334
332
335 tr.group td { padding: 0.8em 0 0.5em 0.3em; border-bottom: 1px solid #ccc; text-align:left; background-color: #fff;}
333 tr.group td { padding: 0.8em 0 0.5em 0.3em; border-bottom: 1px solid #ccc; text-align:left; }
336 tr.group span.name {font-weight:bold;}
334 tr.group span.name {font-weight:bold;}
337 tr.group span.count {font-weight:bold; position:relative; top:-1px; color:#fff; font-size:10px; background:#9DB9D5; padding:0px 6px 1px 6px; border-radius:3px; margin-left:4px;}
335 tr.group span.count {font-weight:bold; position:relative; top:-1px; color:#fff; font-size:10px; background:#9DB9D5; padding:0px 6px 1px 6px; border-radius:3px; margin-left:4px;}
338 tr.group span.totals {color: #aaa; font-size: 80%;}
336 tr.group span.totals {color: #aaa; font-size: 80%;}
339 tr.group span.totals .value {font-weight:bold; color:#777;}
337 tr.group span.totals .value {font-weight:bold; color:#777;}
340 tr.group a.toggle-all { color: #aaa; font-size: 80%; display:none; float:right; margin-right:4px;}
338 tr.group a.toggle-all { color: #aaa; font-size: 80%; display:none; float:right; margin-right:4px;}
341 tr.group:hover a.toggle-all { display:inline;}
339 tr.group:hover a.toggle-all { display:inline;}
342 a.toggle-all:hover {text-decoration:none;}
340 a.toggle-all:hover {text-decoration:none;}
343
341
344 table.list tbody tr:hover { background-color:#ffffdd; }
342 table.list tbody tr:hover { background-color:#ffffdd; }
345 table.list tbody tr.group:hover { background-color:inherit; }
343 table.list tbody tr.group:hover { background-color:inherit; }
346 table td {padding:2px;}
344 table td {padding:2px;}
347 table p {margin:0;}
345 table p {margin:0;}
348 table.list tbody tr:nth-child(odd), #issue-changesets div.changeset:nth-child(odd) {background-color:#f6f7f8;}
346 .odd {background-color:#f6f7f8;}
349 table.list tbody tr:nth-child(even), #issue-changesets div.changeset:nth-child(even) {background-color: #fff;}
347 .even {background-color: #fff;}
350
348
351 tr.builtin td.name {font-style:italic;}
349 tr.builtin td.name {font-style:italic;}
352
350
353 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
351 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
354 a.sort.asc { background-image: url(../images/sort_asc.png); }
352 a.sort.asc { background-image: url(../images/sort_asc.png); }
355 a.sort.desc { background-image: url(../images/sort_desc.png); }
353 a.sort.desc { background-image: url(../images/sort_desc.png); }
356
354
357 table.boards a.board { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
355 table.boards a.board { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
358 table.boards td.last-message {text-align:left;font-size:80%;}
356 table.boards td.last-message {text-align:left;font-size:80%;}
359
357
360 div.table-list.boards .table-list-cell.name {width: 30%;}
358 div.table-list.boards .table-list-cell.name {width: 30%;}
361
359
362 #content table.list-simple {table-layout:fixed;}
360 #content table.list-simple {table-layout:fixed;}
363 #content table.list-simple td {white-space:nowrap; overflow:hidden; text-overflow: ellipsis; text-align:left;}
361 #content table.list-simple td {white-space:nowrap; overflow:hidden; text-overflow: ellipsis; text-align:left;}
364 #content table.list-simple th.id, #content table.list-simple th.project {width:18%;}
362 #content table.list-simple th.id, #content table.list-simple th.project {width:18%;}
365 #content table.list-simple th.status {width:14%;}
363 #content table.list-simple th.status {width:14%;}
366
364
367 table.messages td.last_message {text-align:left;}
365 table.messages td.last_message {text-align:left;}
368
366
369 #query_form_content {font-size:90%;}
367 #query_form_content {font-size:90%;}
370
368
371 .query_sort_criteria_count {
369 .query_sort_criteria_count {
372 display: inline-block;
370 display: inline-block;
373 min-width: 1em;
371 min-width: 1em;
374 }
372 }
375
373
376 table.query-columns {
374 table.query-columns {
377 border-collapse: collapse;
375 border-collapse: collapse;
378 border: 0;
376 border: 0;
379 }
377 }
380
378
381 table.query-columns td.buttons {
379 table.query-columns td.buttons {
382 vertical-align: middle;
380 vertical-align: middle;
383 text-align: center;
381 text-align: center;
384 }
382 }
385 table.query-columns td.buttons input[type=button] {width:35px;}
383 table.query-columns td.buttons input[type=button] {width:35px;}
386 .query-totals {text-align:right;}
384 .query-totals {text-align:right;}
387 .query-totals>span:not(:first-child) {margin-left:0.6em;}
385 .query-totals>span:not(:first-child) {margin-left:0.6em;}
388 .query-totals .value {font-weight:bold;}
386 .query-totals .value {font-weight:bold;}
389 body.controller-issues .query-totals {margin-top:-2.3em;}
387 body.controller-issues .query-totals {margin-top:-2.3em;}
390
388
391 td.center {text-align:center;}
389 td.center {text-align:center;}
392
390
393 #watchers select {width: 95%; display: block;}
391 #watchers select {width: 95%; display: block;}
394 #watchers a.delete {opacity: 0.4; margin-left: 5px;}
392 #watchers a.delete {opacity: 0.4; margin-left: 5px;}
395 #watchers a.delete:hover {opacity: 1;}
393 #watchers a.delete:hover {opacity: 1;}
396 #watchers img.gravatar {margin: 0 4px 2px 0;}
394 #watchers img.gravatar {margin: 0 4px 2px 0;}
397
395
398 span#watchers_inputs {overflow:auto; display:block;}
396 span#watchers_inputs {overflow:auto; display:block;}
399 span.search_for_watchers {display:block;}
397 span.search_for_watchers {display:block;}
400 span.search_for_watchers, span.add_attachment {font-size:80%; line-height:2.5em;}
398 span.search_for_watchers, span.add_attachment {font-size:80%; line-height:2.5em;}
401 span.add_attachment a {padding-left:16px; background: url(../images/bullet_add.png) no-repeat 0 50%; }
399 span.add_attachment a {padding-left:16px; background: url(../images/bullet_add.png) no-repeat 0 50%; }
402
400
403
401
404 .highlight { background-color: #FCFD8D;}
402 .highlight { background-color: #FCFD8D;}
405 .highlight.token-1 { background-color: #faa;}
403 .highlight.token-1 { background-color: #faa;}
406 .highlight.token-2 { background-color: #afa;}
404 .highlight.token-2 { background-color: #afa;}
407 .highlight.token-3 { background-color: #aaf;}
405 .highlight.token-3 { background-color: #aaf;}
408
406
409 .box{
407 .box{
410 padding:6px;
408 padding:6px;
411 margin-bottom: 10px;
409 margin-bottom: 10px;
412 background-color:#f6f6f6;
410 background-color:#f6f6f6;
413 color:#505050;
411 color:#505050;
414 line-height:1.5em;
412 line-height:1.5em;
415 border: 1px solid #e4e4e4;
413 border: 1px solid #e4e4e4;
416 word-wrap: break-word;
414 word-wrap: break-word;
417 border-radius: 3px;
415 border-radius: 3px;
418 }
416 }
419
417
420 div.square {
418 div.square {
421 border: 1px solid #999;
419 border: 1px solid #999;
422 float: left;
420 float: left;
423 margin: .3em .4em 0 .4em;
421 margin: .3em .4em 0 .4em;
424 overflow: hidden;
422 overflow: hidden;
425 width: .6em; height: .6em;
423 width: .6em; height: .6em;
426 }
424 }
427 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin:5px 0px; padding-left: 10px; font-size:0.9em;}
425 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin:5px 0px; padding-left: 10px; font-size:0.9em;}
428 .contextual .icon {padding-top: 2px; padding-bottom: 3px;}
426 .contextual .icon {padding-top: 2px; padding-bottom: 3px;}
429 .contextual input, .contextual select {font-size:0.9em;}
427 .contextual input, .contextual select {font-size:0.9em;}
430 .message .contextual { margin-top: 0; }
428 .message .contextual { margin-top: 0; }
431
429
432 .splitcontent {overflow:auto;}
430 .splitcontent {overflow:auto;}
433 .splitcontentleft{float:left; width:49%;}
431 .splitcontentleft{float:left; width:49%;}
434 .splitcontentright{float:right; width:49%;}
432 .splitcontentright{float:right; width:49%;}
435 form {display: inline;}
433 form {display: inline;}
436 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
434 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
437 input[type="submit"] { -webkit-appearance: button; }
435 input[type="submit"] { -webkit-appearance: button; }
438 fieldset {border: 1px solid #e4e4e4; margin:0;}
436 fieldset {border: 1px solid #e4e4e4; margin:0;}
439 legend {color: #333;}
437 legend {color: #333;}
440 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
438 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
441 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
439 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
442 blockquote blockquote { margin-left: 0;}
440 blockquote blockquote { margin-left: 0;}
443 abbr, span.field-description[title] { border-bottom: 1px dotted #aaa; cursor: help; }
441 abbr, span.field-description[title] { border-bottom: 1px dotted #aaa; cursor: help; }
444 textarea.wiki-edit {width:99%; resize:vertical;}
442 textarea.wiki-edit {width:99%; resize:vertical;}
445 body.textarea-monospace textarea.wiki-edit {font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace; font-size: 12px;}
443 body.textarea-monospace textarea.wiki-edit {font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace; font-size: 12px;}
446 body.textarea-proportional textarea.wiki-edit {font-family: Verdana, sans-serif; font-size: 12px;}
444 body.textarea-proportional textarea.wiki-edit {font-family: Verdana, sans-serif; font-size: 12px;}
447 li p {margin-top: 0;}
445 li p {margin-top: 0;}
448 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px; border: 1px solid #d7d7d7; border-radius:3px;}
446 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px; border: 1px solid #d7d7d7; border-radius:3px;}
449 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
447 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
450 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
448 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
451 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
449 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
452 .ltr {direction:ltr !important; unicode-bidi:bidi-override;}
450 .ltr {direction:ltr !important; unicode-bidi:bidi-override;}
453 .rtl {direction:rtl !important; unicode-bidi:bidi-override;}
451 .rtl {direction:rtl !important; unicode-bidi:bidi-override;}
454
452
455 div.issue div.subject div div { padding-left: 16px; }
453 div.issue div.subject div div { padding-left: 16px; }
456 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
454 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
457 div.issue div.subject>div>p { margin-top: 0.5em; }
455 div.issue div.subject>div>p { margin-top: 0.5em; }
458 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
456 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
459 div.issue span.private, div.journal span.private { position:relative; bottom: 2px; text-transform: uppercase; background: #d22; color: #fff; font-weight:bold; padding: 0px 2px 0px 2px; font-size: 60%; margin-right: 2px; border-radius: 2px;}
457 div.issue span.private, div.journal span.private { position:relative; bottom: 2px; text-transform: uppercase; background: #d22; color: #fff; font-weight:bold; padding: 0px 2px 0px 2px; font-size: 60%; margin-right: 2px; border-radius: 2px;}
460 div.issue .next-prev-links {color:#999;}
458 div.issue .next-prev-links {color:#999;}
461 div.issue .attributes {margin-top: 2em;}
459 div.issue .attributes {margin-top: 2em;}
462 div.issue .attribute {padding-left:180px; clear:left; min-height: 1.8em;}
460 div.issue .attribute {padding-left:180px; clear:left; min-height: 1.8em;}
463 div.issue .attribute .label {width: 170px; margin-left:-180px; font-weight:bold; float:left; overflow:hidden; text-overflow: ellipsis;}
461 div.issue .attribute .label {width: 170px; margin-left:-180px; font-weight:bold; float:left; overflow:hidden; text-overflow: ellipsis;}
464 div.issue .attribute .value {overflow:hidden; text-overflow: ellipsis;}
462 div.issue .attribute .value {overflow:hidden; text-overflow: ellipsis;}
465 div.issue.overdue .due-date .value { color: #c22; }
463 div.issue.overdue .due-date .value { color: #c22; }
466
464
467 #issue_tree table.issues, #relations table.issues { border: 0; }
465 #issue_tree table.issues, #relations table.issues { border: 0; }
468 #issue_tree td.checkbox, #relations td.checkbox {display:none;}
466 #issue_tree td.checkbox, #relations td.checkbox {display:none;}
469 #relations td.buttons {padding:0;}
467 #relations td.buttons {padding:0;}
470
468
471 fieldset.collapsible {border-width: 1px 0 0 0;}
469 fieldset.collapsible {border-width: 1px 0 0 0;}
472 fieldset.collapsible>legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
470 fieldset.collapsible>legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
473 fieldset.collapsible.collapsed>legend { background-image: url(../images/arrow_collapsed.png); }
471 fieldset.collapsible.collapsed>legend { background-image: url(../images/arrow_collapsed.png); }
474
472
475 fieldset#date-range p { margin: 2px 0 2px 0; }
473 fieldset#date-range p { margin: 2px 0 2px 0; }
476 fieldset#filters table { border-collapse: collapse; }
474 fieldset#filters table { border-collapse: collapse; }
477 fieldset#filters table td { padding: 0; vertical-align: middle; }
475 fieldset#filters table td { padding: 0; vertical-align: middle; }
478 fieldset#filters tr.filter { height: 2.1em; }
476 fieldset#filters tr.filter { height: 2.1em; }
479 fieldset#filters td.field { width:230px; }
477 fieldset#filters td.field { width:230px; }
480 fieldset#filters td.operator { width:130px; }
478 fieldset#filters td.operator { width:130px; }
481 fieldset#filters td.operator select {max-width:120px;}
479 fieldset#filters td.operator select {max-width:120px;}
482 fieldset#filters td.values { white-space:nowrap; }
480 fieldset#filters td.values { white-space:nowrap; }
483 fieldset#filters td.values select {min-width:130px; max-width:200px;}
481 fieldset#filters td.values select {min-width:130px; max-width:200px;}
484 fieldset#filters td.values input {height:1em;}
482 fieldset#filters td.values input {height:1em;}
485
483
486 #filters-table {width:60%; float:left;}
484 #filters-table {width:60%; float:left;}
487 .add-filter {width:35%; float:right; text-align: right; vertical-align: top;}
485 .add-filter {width:35%; float:right; text-align: right; vertical-align: top;}
488
486
489 #issue_is_private_wrap {float:right; margin-right:1em;}
487 #issue_is_private_wrap {float:right; margin-right:1em;}
490 .toggle-multiselect {background: url(../images/bullet_toggle_plus.png) no-repeat 0% 40%; padding-left:16px; margin-left:0; margin-right:5px; cursor:pointer;}
488 .toggle-multiselect {background: url(../images/bullet_toggle_plus.png) no-repeat 0% 40%; padding-left:16px; margin-left:0; margin-right:5px; cursor:pointer;}
491 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
489 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
492
490
493 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
491 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
494 div#issue-changesets div.changeset { padding: 4px;}
492 div#issue-changesets div.changeset { padding: 4px;}
495 div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
493 div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
496 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
494 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
497
495
498 div.journal {overflow:auto;}
496 div.journal {overflow:auto;}
499 div.journal.private-notes {border-left:2px solid #d22; padding-left:4px; margin-left:-6px;}
497 div.journal.private-notes {border-left:2px solid #d22; padding-left:4px; margin-left:-6px;}
500 div.journal ul.details, ul.revision-info {color:#959595; margin-bottom: 1.5em;}
498 div.journal ul.details, ul.revision-info {color:#959595; margin-bottom: 1.5em;}
501 div.journal ul.details a, ul.revision-info a {color:#70A7CD;}
499 div.journal ul.details a, ul.revision-info a {color:#70A7CD;}
502 div.journal ul.details a:hover, ul.revision-info a:hover {color:#D14848;}
500 div.journal ul.details a:hover, ul.revision-info a:hover {color:#D14848;}
503
501
504 div#activity dl, #search-results { margin-left: 2em; }
502 div#activity dl, #search-results { margin-left: 2em; }
505 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
503 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
506 div#activity dt.me .time { border-bottom: 1px solid #999; }
504 div#activity dt.me .time { border-bottom: 1px solid #999; }
507 div#activity dt .time { color: #777; font-size: 80%; }
505 div#activity dt .time { color: #777; font-size: 80%; }
508 div#activity dd .description, #search-results dd .description { font-style: italic; }
506 div#activity dd .description, #search-results dd .description { font-style: italic; }
509 div#activity span.project:after, #search-results span.project:after { content: " -"; }
507 div#activity span.project:after, #search-results span.project:after { content: " -"; }
510 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
508 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
511 div#activity dt.grouped {margin-left:5em;}
509 div#activity dt.grouped {margin-left:5em;}
512 div#activity dd.grouped {margin-left:9em;}
510 div#activity dd.grouped {margin-left:9em;}
513 div#activity dt { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; height: 18px;}
511 div#activity dt { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; height: 18px;}
514
512
515 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
513 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
516
514
517 div#search-results-counts {float:right;}
515 div#search-results-counts {float:right;}
518 div#search-results-counts ul { margin-top: 0.5em; }
516 div#search-results-counts ul { margin-top: 0.5em; }
519 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
517 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
520
518
521 div#roadmap .related-issues { margin-bottom: 1em; }
519 div#roadmap .related-issues { margin-bottom: 1em; }
522 div#roadmap .related-issues td.checkbox { display: none; }
520 div#roadmap .related-issues td.checkbox { display: none; }
523 div#roadmap .wiki h1:first-child { display: none; }
521 div#roadmap .wiki h1:first-child { display: none; }
524 div#roadmap .wiki h1 { font-size: 120%; }
522 div#roadmap .wiki h1 { font-size: 120%; }
525 div#roadmap .wiki h2 { font-size: 110%; }
523 div#roadmap .wiki h2 { font-size: 110%; }
526 body.controller-versions.action-show div#roadmap .related-issues {width:70%;}
524 body.controller-versions.action-show div#roadmap .related-issues {width:70%;}
527
525
528 div#version-summary { float:right; width:28%; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
526 div#version-summary { float:right; width:28%; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
529 div#version-summary fieldset { margin-bottom: 1em; }
527 div#version-summary fieldset { margin-bottom: 1em; }
530 div#version-summary fieldset.time-tracking table { width:100%; }
528 div#version-summary fieldset.time-tracking table { width:100%; }
531 div#version-summary th, div#version-summary td.total-hours { text-align: right; }
529 div#version-summary th, div#version-summary td.total-hours { text-align: right; }
532
530
533 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
531 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
534 table#time-report tbody tr.subtotal { font-style: italic; color:#777;}
532 table#time-report tbody tr.subtotal { font-style: italic; color:#777;}
535 table#time-report tbody tr.subtotal td.hours { color:#b0b0b0; }
533 table#time-report tbody tr.subtotal td.hours { color:#b0b0b0; }
536 table#time-report tbody tr.total { font-weight: bold; background-color:#EEEEEE; border-top:1px solid #e4e4e4;}
534 table#time-report tbody tr.total { font-weight: bold; background-color:#EEEEEE; border-top:1px solid #e4e4e4;}
537 table#time-report .hours-dec { font-size: 0.9em; }
535 table#time-report .hours-dec { font-size: 0.9em; }
538
536
539 div.wiki-page .contextual a {opacity: 0.4}
537 div.wiki-page .contextual a {opacity: 0.4}
540 div.wiki-page .contextual a:hover {opacity: 1}
538 div.wiki-page .contextual a:hover {opacity: 1}
541
539
542 form .attributes select { width: 60%; }
540 form .attributes select { width: 60%; }
543 form .attributes select + a.icon-only { vertical-align: middle; margin-left: 4px; }
541 form .attributes select + a.icon-only { vertical-align: middle; margin-left: 4px; }
544 input#issue_subject, input#document_title { width: 99%; }
542 input#issue_subject, input#document_title { width: 99%; }
545 select#issue_done_ratio { width: 95px; }
543 select#issue_done_ratio { width: 95px; }
546
544
547 ul.projects {margin:0; padding-left:1em;}
545 ul.projects {margin:0; padding-left:1em;}
548 ul.projects ul {padding-left:1.6em;}
546 ul.projects ul {padding-left:1.6em;}
549 ul.projects.root {margin:0; padding:0;}
547 ul.projects.root {margin:0; padding:0;}
550 ul.projects li {list-style-type:none;}
548 ul.projects li {list-style-type:none;}
551
549
552 #projects-index {
550 #projects-index {
553 column-count: auto;
551 column-count: auto;
554 column-width: 400px;
552 column-width: 400px;
555 -webkit-column-count: auto;
553 -webkit-column-count: auto;
556 -webkit-column-width: 400px;
554 -webkit-column-width: 400px;
557 -webkit-column-gap : 0.5rem;
555 -webkit-column-gap : 0.5rem;
558 -moz-column-count: auto;
556 -moz-column-count: auto;
559 -moz-column-width: 400px;
557 -moz-column-width: 400px;
560 -moz-column-gap : 0.5rem;
558 -moz-column-gap : 0.5rem;
561 }
559 }
562 #projects-index ul.projects li.root>ul.projects { border-left: 3px solid #e0e0e0; padding-left:1em;}
560 #projects-index ul.projects li.root>ul.projects { border-left: 3px solid #e0e0e0; padding-left:1em;}
563 #projects-index ul.projects li.root {margin-bottom: 1em;}
561 #projects-index ul.projects li.root {margin-bottom: 1em;}
564 #projects-index ul.projects li.child {margin-top: 1em;}
562 #projects-index ul.projects li.child {margin-top: 1em;}
565 #projects-index ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
563 #projects-index ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
566 #projects-index a.icon-fav {padding-left:0; padding-right:20px; background-position:98% 50%;}
564 #projects-index a.icon-fav {padding-left:0; padding-right:20px; background-position:98% 50%;}
567
565
568 #notified-projects>ul, #tracker_project_ids>ul, #custom_field_project_ids>ul {max-height:250px; overflow-y:auto;}
566 #notified-projects>ul, #tracker_project_ids>ul, #custom_field_project_ids>ul {max-height:250px; overflow-y:auto;}
569
567
570 #related-issues li img {vertical-align:middle;}
568 #related-issues li img {vertical-align:middle;}
571
569
572 ul.properties {padding:0; font-size: 0.9em; color: #777;}
570 ul.properties {padding:0; font-size: 0.9em; color: #777;}
573 ul.properties li {list-style-type:none;}
571 ul.properties li {list-style-type:none;}
574 ul.properties li span {font-style:italic;}
572 ul.properties li span {font-style:italic;}
575
573
576 .total-hours { font-size: 110%; font-weight: bold; }
574 .total-hours { font-size: 110%; font-weight: bold; }
577 .total-hours span.hours-int { font-size: 120%; }
575 .total-hours span.hours-int { font-size: 120%; }
578
576
579 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em; position: relative;}
577 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em; position: relative;}
580 #user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select, #user_identity_url { width: 90%; }
578 #user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select, #user_identity_url { width: 90%; }
581
579
582 #workflow_copy_form select { width: 200px; }
580 #workflow_copy_form select { width: 200px; }
583 table.transitions td.enabled {background: #bfb;}
581 table.transitions td.enabled {background: #bfb;}
584 #workflow_form table select {font-size:90%; max-width:100px;}
582 #workflow_form table select {font-size:90%; max-width:100px;}
585 table.fields_permissions td.readonly {background:#ddd;}
583 table.fields_permissions td.readonly {background:#ddd;}
586 table.fields_permissions td.required {background:#d88;}
584 table.fields_permissions td.required {background:#d88;}
587
585
588 select.expandable {vertical-align:top;}
586 select.expandable {vertical-align:top;}
589
587
590 textarea#custom_field_possible_values {width: 95%; resize:vertical}
588 textarea#custom_field_possible_values {width: 95%; resize:vertical}
591 textarea#custom_field_default_value {width: 95%; resize:vertical}
589 textarea#custom_field_default_value {width: 95%; resize:vertical}
592 .sort-handle {display:inline-block; vertical-align:middle;}
590 .sort-handle {display:inline-block; vertical-align:middle;}
593
591
594 input#content_comments {width: 99%}
592 input#content_comments {width: 99%}
595
593
596 span.pagination {margin-left:3px; color:#888; display:block;}
594 span.pagination {margin-left:3px; color:#888; display:block;}
597 .pagination ul.pages {
595 .pagination ul.pages {
598 margin: 0 5px 0 0;
596 margin: 0 5px 0 0;
599 padding: 0;
597 padding: 0;
600 display: inline;
598 display: inline;
601 }
599 }
602 .pagination ul.pages li {
600 .pagination ul.pages li {
603 display: inline-block;
601 display: inline-block;
604 padding: 0;
602 padding: 0;
605 border: 1px solid #ddd;
603 border: 1px solid #ddd;
606 margin-left: -1px;
604 margin-left: -1px;
607 line-height: 2em;
605 line-height: 2em;
608 margin-bottom: 1em;
606 margin-bottom: 1em;
609 white-space: nowrap;
607 white-space: nowrap;
610 text-align: center;
608 text-align: center;
611 }
609 }
612 .pagination ul.pages li a,
610 .pagination ul.pages li a,
613 .pagination ul.pages li span {
611 .pagination ul.pages li span {
614 padding: 3px 8px;
612 padding: 3px 8px;
615 }
613 }
616 .pagination ul.pages li:first-child {
614 .pagination ul.pages li:first-child {
617 border-top-left-radius: 4px;
615 border-top-left-radius: 4px;
618 border-bottom-left-radius: 4px;
616 border-bottom-left-radius: 4px;
619 }
617 }
620 .pagination ul.pages li:last-child {
618 .pagination ul.pages li:last-child {
621 border-top-right-radius: 4px;
619 border-top-right-radius: 4px;
622 border-bottom-right-radius: 4px;
620 border-bottom-right-radius: 4px;
623 }
621 }
624 .pagination ul.pages li.current {
622 .pagination ul.pages li.current {
625 color: white;
623 color: white;
626 background-color: #628DB6;
624 background-color: #628DB6;
627 border-color: #628DB6;
625 border-color: #628DB6;
628 }
626 }
629 .pagination ul.pages li.page:hover {
627 .pagination ul.pages li.page:hover {
630 background-color: #ddd;
628 background-color: #ddd;
631 }
629 }
632 .pagination ul.pages li.page a:hover,
630 .pagination ul.pages li.page a:hover,
633 .pagination ul.pages li.page a:active {
631 .pagination ul.pages li.page a:active {
634 color: #169;
632 color: #169;
635 text-decoration: inherit;
633 text-decoration: inherit;
636 }
634 }
637 .pagination .per-page span.selected {
635 .pagination .per-page span.selected {
638 font-weight: bold;
636 font-weight: bold;
639 }
637 }
640 span.pagination>span {white-space:nowrap;}
638 span.pagination>span {white-space:nowrap;}
641
639
642 #search-form fieldset p {margin:0.2em 0;}
640 #search-form fieldset p {margin:0.2em 0;}
643
641
644 /***** Tabular forms ******/
642 /***** Tabular forms ******/
645 .tabular p{
643 .tabular p{
646 margin: 0;
644 margin: 0;
647 padding: 3px 0 3px 0;
645 padding: 3px 0 3px 0;
648 padding-left: 180px; /* width of left column containing the label elements */
646 padding-left: 180px; /* width of left column containing the label elements */
649 min-height: 2em;
647 min-height: 2em;
650 clear:left;
648 clear:left;
651 }
649 }
652
650
653 html>body .tabular p {overflow:hidden;}
651 html>body .tabular p {overflow:hidden;}
654
652
655 .tabular input, .tabular select {max-width:95%}
653 .tabular input, .tabular select {max-width:95%}
656 .tabular textarea {width:95%; resize:vertical;}
654 .tabular textarea {width:95%; resize:vertical;}
657
655
658 .tabular label{
656 .tabular label{
659 font-weight: bold;
657 font-weight: bold;
660 float: left;
658 float: left;
661 text-align: right;
659 text-align: right;
662 /* width of left column */
660 /* width of left column */
663 margin-left: -180px;
661 margin-left: -180px;
664 /* width of labels. Should be smaller than left column to create some right margin */
662 /* width of labels. Should be smaller than left column to create some right margin */
665 width: 175px;
663 width: 175px;
666 }
664 }
667
665
668 .tabular label.floating{
666 .tabular label.floating{
669 font-weight: normal;
667 font-weight: normal;
670 margin-left: 0px;
668 margin-left: 0px;
671 text-align: left;
669 text-align: left;
672 width: 270px;
670 width: 270px;
673 }
671 }
674
672
675 label.block {
673 label.block {
676 display: block;
674 display: block;
677 width: auto !important;
675 width: auto !important;
678 }
676 }
679
677
680 .tabular label.block{
678 .tabular label.block{
681 font-weight: normal;
679 font-weight: normal;
682 margin-left: 0px !important;
680 margin-left: 0px !important;
683 text-align: left;
681 text-align: left;
684 float: none;
682 float: none;
685 }
683 }
686
684
687 .tabular label.inline{
685 .tabular label.inline{
688 font-weight: normal;
686 font-weight: normal;
689 float:none;
687 float:none;
690 margin-left: 5px !important;
688 margin-left: 5px !important;
691 width: auto;
689 width: auto;
692 }
690 }
693
691
694 label.no-css {
692 label.no-css {
695 font-weight: inherit;
693 font-weight: inherit;
696 float:none;
694 float:none;
697 text-align:left;
695 text-align:left;
698 margin-left:0px;
696 margin-left:0px;
699 width:auto;
697 width:auto;
700 }
698 }
701 input#time_entry_comments { width: 90%;}
699 input#time_entry_comments { width: 90%;}
702
700
703 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
701 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
704
702
705 .tabular.settings p{ padding-left: 300px; }
703 .tabular.settings p{ padding-left: 300px; }
706 .tabular.settings label{ margin-left: -300px; width: 295px; }
704 .tabular.settings label{ margin-left: -300px; width: 295px; }
707 .tabular.settings textarea { width: 99%; }
705 .tabular.settings textarea { width: 99%; }
708
706
709 .settings.enabled_scm table {width:100%}
707 .settings.enabled_scm table {width:100%}
710 .settings.enabled_scm td.scm_name{ font-weight: bold; }
708 .settings.enabled_scm td.scm_name{ font-weight: bold; }
711
709
712 fieldset.settings label { display: block; }
710 fieldset.settings label { display: block; }
713 fieldset#notified_events .parent { padding-left: 20px; }
711 fieldset#notified_events .parent { padding-left: 20px; }
714
712
715 span.required {color: #bb0000;}
713 span.required {color: #bb0000;}
716 .summary {font-style: italic;}
714 .summary {font-style: italic;}
717
715
718 .check_box_group {
716 .check_box_group {
719 display:block;
717 display:block;
720 width:95%;
718 width:95%;
721 max-height:300px;
719 max-height:300px;
722 overflow-y:auto;
720 overflow-y:auto;
723 padding:2px 4px 4px 2px;
721 padding:2px 4px 4px 2px;
724 background:#fff;
722 background:#fff;
725 border:1px solid #9EB1C2;
723 border:1px solid #9EB1C2;
726 border-radius:2px
724 border-radius:2px
727 }
725 }
728 .check_box_group label {
726 .check_box_group label {
729 font-weight: normal;
727 font-weight: normal;
730 margin-left: 0px !important;
728 margin-left: 0px !important;
731 text-align: left;
729 text-align: left;
732 float: none;
730 float: none;
733 display: block;
731 display: block;
734 width: auto;
732 width: auto;
735 }
733 }
736 .check_box_group.bool_cf {border:0; background:inherit;}
734 .check_box_group.bool_cf {border:0; background:inherit;}
737 .check_box_group.bool_cf label {display: inline;}
735 .check_box_group.bool_cf label {display: inline;}
738
736
739 .attachments_fields input.description, #existing-attachments input.description {margin-left:4px; width:340px;}
737 .attachments_fields input.description, #existing-attachments input.description {margin-left:4px; width:340px;}
740 .attachments_fields>span, #existing-attachments>span {display:block; white-space:nowrap;}
738 .attachments_fields>span, #existing-attachments>span {display:block; white-space:nowrap;}
741 .attachments_fields input.filename, #existing-attachments .filename {border:0; width:250px; color:#555; background-color:inherit; }
739 .attachments_fields input.filename, #existing-attachments .filename {border:0; width:250px; color:#555; background-color:inherit; }
742 .tabular input.filename {max-width:75% !important;}
740 .tabular input.filename {max-width:75% !important;}
743 .attachments_fields input.filename {height:1.8em;}
741 .attachments_fields input.filename {height:1.8em;}
744 .attachments_fields .ajax-waiting input.filename {background:url(../images/hourglass.png) no-repeat 0px 50%;}
742 .attachments_fields .ajax-waiting input.filename {background:url(../images/hourglass.png) no-repeat 0px 50%;}
745 .attachments_fields .ajax-loading input.filename {background:url(../images/loading.gif) no-repeat 0px 50%;}
743 .attachments_fields .ajax-loading input.filename {background:url(../images/loading.gif) no-repeat 0px 50%;}
746 .attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; }
744 .attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; }
747
745
748 a.remove-upload:hover {text-decoration:none !important;}
746 a.remove-upload:hover {text-decoration:none !important;}
749 .existing-attachment.deleted .filename {text-decoration:line-through; color:#999 !important;}
747 .existing-attachment.deleted .filename {text-decoration:line-through; color:#999 !important;}
750
748
751 div.fileover { background-color: lavender; }
749 div.fileover { background-color: lavender; }
752
750
753 div.attachments { margin: 12px 0; }
751 div.attachments { margin: 12px 0; }
754 div.attachments p { margin:4px 0 2px 0; }
752 div.attachments p { margin:4px 0 2px 0; }
755 div.attachments img { vertical-align: middle; }
753 div.attachments img { vertical-align: middle; }
756 div.attachments span.author { font-size: 0.9em; color: #888; }
754 div.attachments span.author { font-size: 0.9em; color: #888; }
757
755
758 div.thumbnails {margin:0.6em;}
756 div.thumbnails {margin:0.6em;}
759 div.thumbnails div {background:#fff;border:2px solid #ddd;display:inline-block;margin-right:2px;}
757 div.thumbnails div {background:#fff;border:2px solid #ddd;display:inline-block;margin-right:2px;}
760 div.thumbnails img {margin: 3px; vertical-align: middle;}
758 div.thumbnails img {margin: 3px; vertical-align: middle;}
761 #history div.thumbnails {margin-left: 2em;}
759 #history div.thumbnails {margin-left: 2em;}
762
760
763 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
761 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
764 .other-formats span + span:before { content: "| "; }
762 .other-formats span + span:before { content: "| "; }
765
763
766 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
764 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
767
765
768 em.info {font-style:normal;font-size:90%;color:#888;display:block;}
766 em.info {font-style:normal;font-size:90%;color:#888;display:block;}
769 em.info.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
767 em.info.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
770
768
771 textarea.text_cf {width:95%; resize:vertical;}
769 textarea.text_cf {width:95%; resize:vertical;}
772 input.string_cf, input.link_cf {width:95%;}
770 input.string_cf, input.link_cf {width:95%;}
773 select.bool_cf {width:auto !important;}
771 select.bool_cf {width:auto !important;}
774
772
775 #tab-content-modules fieldset p {margin:3px 0 4px 0;}
773 #tab-content-modules fieldset p {margin:3px 0 4px 0;}
776
774
777 #tab-content-users .splitcontentleft {width: 64%;}
775 #tab-content-users .splitcontentleft {width: 64%;}
778 #tab-content-users .splitcontentright {width: 34%;}
776 #tab-content-users .splitcontentright {width: 34%;}
779 #tab-content-users fieldset {padding:1em; margin-bottom: 1em;}
777 #tab-content-users fieldset {padding:1em; margin-bottom: 1em;}
780 #tab-content-users fieldset legend {font-weight: bold;}
778 #tab-content-users fieldset legend {font-weight: bold;}
781 #tab-content-users fieldset label {display: block;}
779 #tab-content-users fieldset label {display: block;}
782 #tab-content-users #principals {max-height: 400px; overflow: auto;}
780 #tab-content-users #principals {max-height: 400px; overflow: auto;}
783
781
784 #users_for_watcher {height: 200px; overflow:auto;}
782 #users_for_watcher {height: 200px; overflow:auto;}
785 #users_for_watcher label {display: block;}
783 #users_for_watcher label {display: block;}
786
784
787 input#principal_search, input#user_search {width:90%}
785 input#principal_search, input#user_search {width:90%}
788 .roles-selection label {display:inline-block; width:210px;}
786 .roles-selection label {display:inline-block; width:210px;}
789
787
790 input.autocomplete {
788 input.autocomplete {
791 background: #fff url(../images/magnifier.png) no-repeat 2px 50%; padding-left:20px !important;
789 background: #fff url(../images/magnifier.png) no-repeat 2px 50%; padding-left:20px !important;
792 border:1px solid #9EB1C2; border-radius:2px; height:1.5em;
790 border:1px solid #9EB1C2; border-radius:2px; height:1.5em;
793 }
791 }
794 input.autocomplete.ajax-loading {
792 input.autocomplete.ajax-loading {
795 background-image: url(../images/loading.gif);
793 background-image: url(../images/loading.gif);
796 }
794 }
797
795
798 .role-visibility {padding-left:2em;}
796 .role-visibility {padding-left:2em;}
799
797
800 .objects-selection {
798 .objects-selection {
801 height: 300px;
799 height: 300px;
802 overflow: auto;
800 overflow: auto;
803 margin-bottom: 1em;
801 margin-bottom: 1em;
804 }
802 }
805
803
806 .objects-selection label {
804 .objects-selection label {
807 display: block;
805 display: block;
808 }
806 }
809
807
810 .objects-selection>div, #user_group_ids {
808 .objects-selection>div, #user_group_ids {
811 column-count: auto;
809 column-count: auto;
812 column-width: 200px;
810 column-width: 200px;
813 -webkit-column-count: auto;
811 -webkit-column-count: auto;
814 -webkit-column-width: 200px;
812 -webkit-column-width: 200px;
815 -webkit-column-gap : 0.5rem;
813 -webkit-column-gap : 0.5rem;
816 -webkit-column-rule: 1px solid #ccc;
814 -webkit-column-rule: 1px solid #ccc;
817 -moz-column-count: auto;
815 -moz-column-count: auto;
818 -moz-column-width: 200px;
816 -moz-column-width: 200px;
819 -moz-column-gap : 0.5rem;
817 -moz-column-gap : 0.5rem;
820 -moz-column-rule: 1px solid #ccc;
818 -moz-column-rule: 1px solid #ccc;
821 }
819 }
822
820
823 /***** Flash & error messages ****/
821 /***** Flash & error messages ****/
824 #errorExplanation, div.flash, .nodata, .warning, .conflict {
822 #errorExplanation, div.flash, .nodata, .warning, .conflict {
825 padding: 6px 4px 6px 30px;
823 padding: 6px 4px 6px 30px;
826 margin-bottom: 12px;
824 margin-bottom: 12px;
827 font-size: 1.1em;
825 font-size: 1.1em;
828 border: 1px solid;
826 border: 1px solid;
829 border-radius: 3px;
827 border-radius: 3px;
830 }
828 }
831
829
832 div.flash {margin-top: 8px;}
830 div.flash {margin-top: 8px;}
833
831
834 div.flash.error, #errorExplanation {
832 div.flash.error, #errorExplanation {
835 background: url(../images/exclamation.png) 8px 50% no-repeat;
833 background: url(../images/exclamation.png) 8px 50% no-repeat;
836 background-color: #ffe3e3;
834 background-color: #ffe3e3;
837 border-color: #d88;
835 border-color: #d88;
838 color: #880000;
836 color: #880000;
839 }
837 }
840
838
841 div.flash.notice {
839 div.flash.notice {
842 background: url(../images/true.png) 8px 5px no-repeat;
840 background: url(../images/true.png) 8px 5px no-repeat;
843 background-color: #dfffdf;
841 background-color: #dfffdf;
844 border-color: #9fcf9f;
842 border-color: #9fcf9f;
845 color: #005f00;
843 color: #005f00;
846 }
844 }
847
845
848 div.flash.warning, .conflict {
846 div.flash.warning, .conflict {
849 background: url(../images/warning.png) 8px 5px no-repeat;
847 background: url(../images/warning.png) 8px 5px no-repeat;
850 background-color: #F3EDD1;
848 background-color: #F3EDD1;
851 border-color: #eadbbc;
849 border-color: #eadbbc;
852 color: #A6750C;
850 color: #A6750C;
853 text-align: left;
851 text-align: left;
854 }
852 }
855
853
856 .nodata, .warning {
854 .nodata, .warning {
857 text-align: center;
855 text-align: center;
858 background-color: #F3EDD1;
856 background-color: #F3EDD1;
859 border-color: #eadbbc;
857 border-color: #eadbbc;
860 color: #A6750C;
858 color: #A6750C;
861 }
859 }
862
860
863 #errorExplanation ul { font-size: 0.9em;}
861 #errorExplanation ul { font-size: 0.9em;}
864 #errorExplanation h2, #errorExplanation p { display: none; }
862 #errorExplanation h2, #errorExplanation p { display: none; }
865
863
866 .conflict-details {font-size:80%;}
864 .conflict-details {font-size:80%;}
867
865
868 /***** Ajax indicator ******/
866 /***** Ajax indicator ******/
869 #ajax-indicator {
867 #ajax-indicator {
870 position: absolute; /* fixed not supported by IE */
868 position: absolute; /* fixed not supported by IE */
871 background-color:#eee;
869 background-color:#eee;
872 border: 1px solid #bbb;
870 border: 1px solid #bbb;
873 top:35%;
871 top:35%;
874 left:40%;
872 left:40%;
875 width:20%;
873 width:20%;
876 font-weight:bold;
874 font-weight:bold;
877 text-align:center;
875 text-align:center;
878 padding:0.6em;
876 padding:0.6em;
879 z-index:100;
877 z-index:100;
880 opacity: 0.5;
878 opacity: 0.5;
881 }
879 }
882
880
883 html>body #ajax-indicator { position: fixed; }
881 html>body #ajax-indicator { position: fixed; }
884
882
885 #ajax-indicator span {
883 #ajax-indicator span {
886 background-position: 0% 40%;
884 background-position: 0% 40%;
887 background-repeat: no-repeat;
885 background-repeat: no-repeat;
888 background-image: url(../images/loading.gif);
886 background-image: url(../images/loading.gif);
889 padding-left: 26px;
887 padding-left: 26px;
890 vertical-align: bottom;
888 vertical-align: bottom;
891 }
889 }
892
890
893 /***** Calendar *****/
891 /***** Calendar *****/
894 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
892 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
895 table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; }
893 table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; }
896 table.cal thead th.week-number {width: auto;}
894 table.cal thead th.week-number {width: auto;}
897 table.cal tbody tr {height: 100px;}
895 table.cal tbody tr {height: 100px;}
898 table.cal td .icon {padding-top: 2px; padding-bottom: 3px;}
896 table.cal td .icon {padding-top: 2px; padding-bottom: 3px;}
899 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
897 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
900 table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;}
898 table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;}
901 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
899 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
902 table.cal td.odd p.day-num {color: #bbb;}
900 table.cal td.odd p.day-num {color: #bbb;}
903 table.cal td.today {background:#ffffdd;}
901 table.cal td.today {background:#ffffdd;}
904 table.cal td.today p.day-num {font-weight: bold;}
902 table.cal td.today p.day-num {font-weight: bold;}
905 table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
903 table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
906 table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
904 table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
907 table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
905 table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
908 p.cal.legend span {display:block;}
906 p.cal.legend span {display:block;}
909
907
910 /***** Tooltips ******/
908 /***** Tooltips ******/
911 .tooltip{position:relative;z-index:24;}
909 .tooltip{position:relative;z-index:24;}
912 .tooltip:hover{z-index:25;color:#000;}
910 .tooltip:hover{z-index:25;color:#000;}
913 .tooltip span.tip{display: none; text-align:left;}
911 .tooltip span.tip{display: none; text-align:left;}
914
912
915 div.tooltip:hover span.tip{
913 div.tooltip:hover span.tip{
916 display:block;
914 display:block;
917 position:absolute;
915 position:absolute;
918 top:12px; width:270px;
916 top:12px; width:270px;
919 border:1px solid #555;
917 border:1px solid #555;
920 background-color:#fff;
918 background-color:#fff;
921 padding: 4px;
919 padding: 4px;
922 font-size: 0.8em;
920 font-size: 0.8em;
923 color:#505050;
921 color:#505050;
924 }
922 }
925
923
926 img.ui-datepicker-trigger {
924 img.ui-datepicker-trigger {
927 cursor: pointer;
925 cursor: pointer;
928 vertical-align: middle;
926 vertical-align: middle;
929 margin-left: 4px;
927 margin-left: 4px;
930 }
928 }
931
929
932 /***** Progress bar *****/
930 /***** Progress bar *****/
933 table.progress {
931 table.progress {
934 border-collapse: collapse;
932 border-collapse: collapse;
935 border-spacing: 0pt;
933 border-spacing: 0pt;
936 empty-cells: show;
934 empty-cells: show;
937 text-align: center;
935 text-align: center;
938 float:left;
936 float:left;
939 margin: 1px 6px 1px 0px;
937 margin: 1px 6px 1px 0px;
940 }
938 }
941
939
942 table.progress {width:80px;}
940 table.progress {width:80px;}
943 table.progress td { height: 1em; }
941 table.progress td { height: 1em; }
944 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
942 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
945 table.progress td.done { background: #D3EDD3 none repeat scroll 0%; }
943 table.progress td.done { background: #D3EDD3 none repeat scroll 0%; }
946 table.progress td.todo { background: #eee none repeat scroll 0%; }
944 table.progress td.todo { background: #eee none repeat scroll 0%; }
947 p.percent {font-size: 80%; margin:0;}
945 p.percent {font-size: 80%; margin:0;}
948 p.progress-info {clear: left; font-size: 80%; margin-top:-4px; color:#777;}
946 p.progress-info {clear: left; font-size: 80%; margin-top:-4px; color:#777;}
949
947
950 .version-overview table.progress {width:40em;}
948 .version-overview table.progress {width:40em;}
951 .version-overview table.progress td { height: 1.2em; }
949 .version-overview table.progress td { height: 1.2em; }
952
950
953 /***** Tabs *****/
951 /***** Tabs *****/
954 #content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
952 #content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
955 #content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:0.5em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
953 #content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:0.5em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
956 #content .tabs ul li {
954 #content .tabs ul li {
957 float:left;
955 float:left;
958 list-style-type:none;
956 list-style-type:none;
959 white-space:nowrap;
957 white-space:nowrap;
960 margin-right:4px;
958 margin-right:4px;
961 background:#fff;
959 background:#fff;
962 position:relative;
960 position:relative;
963 margin-bottom:-1px;
961 margin-bottom:-1px;
964 }
962 }
965 #content .tabs ul li a{
963 #content .tabs ul li a{
966 display:block;
964 display:block;
967 font-size: 0.9em;
965 font-size: 0.9em;
968 text-decoration:none;
966 text-decoration:none;
969 line-height:1.3em;
967 line-height:1.3em;
970 padding:4px 6px 4px 6px;
968 padding:4px 6px 4px 6px;
971 border: 1px solid #ccc;
969 border: 1px solid #ccc;
972 border-bottom: 1px solid #bbbbbb;
970 border-bottom: 1px solid #bbbbbb;
973 background-color: #f6f6f6;
971 background-color: #f6f6f6;
974 color:#999;
972 color:#999;
975 font-weight:bold;
973 font-weight:bold;
976 border-top-left-radius:3px;
974 border-top-left-radius:3px;
977 border-top-right-radius:3px;
975 border-top-right-radius:3px;
978 }
976 }
979
977
980 #content .tabs ul li a:hover {
978 #content .tabs ul li a:hover {
981 background-color: #ffffdd;
979 background-color: #ffffdd;
982 text-decoration:none;
980 text-decoration:none;
983 }
981 }
984
982
985 #content .tabs ul li a.selected {
983 #content .tabs ul li a.selected {
986 background-color: #fff;
984 background-color: #fff;
987 border: 1px solid #bbbbbb;
985 border: 1px solid #bbbbbb;
988 border-bottom: 1px solid #fff;
986 border-bottom: 1px solid #fff;
989 color:#444;
987 color:#444;
990 }
988 }
991
989
992 #content .tabs ul li a.selected:hover {background-color: #fff;}
990 #content .tabs ul li a.selected:hover {background-color: #fff;}
993
991
994 div.tabs-buttons { position:absolute; right: 0; width: 54px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
992 div.tabs-buttons { position:absolute; right: 0; width: 54px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
995
993
996 button.tab-left, button.tab-right {
994 button.tab-left, button.tab-right {
997 font-size: 0.9em;
995 font-size: 0.9em;
998 cursor: pointer;
996 cursor: pointer;
999 height:24px;
997 height:24px;
1000 border: 1px solid #ccc;
998 border: 1px solid #ccc;
1001 border-bottom: 1px solid #bbbbbb;
999 border-bottom: 1px solid #bbbbbb;
1002 position:absolute;
1000 position:absolute;
1003 padding:4px;
1001 padding:4px;
1004 width: 20px;
1002 width: 20px;
1005 bottom: -1px;
1003 bottom: -1px;
1006 }
1004 }
1007 button.tab-left:hover, button.tab-right:hover {
1005 button.tab-left:hover, button.tab-right:hover {
1008 background-color: #f5f5f5;
1006 background-color: #f5f5f5;
1009 }
1007 }
1010 button.tab-left:focus, button.tab-right:focus {
1008 button.tab-left:focus, button.tab-right:focus {
1011 outline: 0;
1009 outline: 0;
1012 }
1010 }
1013
1011
1014 button.tab-left {
1012 button.tab-left {
1015 right: 20px;
1013 right: 20px;
1016 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
1014 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
1017 border-top-left-radius:3px;
1015 border-top-left-radius:3px;
1018 }
1016 }
1019
1017
1020 button.tab-right {
1018 button.tab-right {
1021 right: 0;
1019 right: 0;
1022 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;
1020 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;
1023 border-top-right-radius:3px;
1021 border-top-right-radius:3px;
1024 }
1022 }
1025
1023
1026 button.tab-left.disabled, button.tab-right.disabled {
1024 button.tab-left.disabled, button.tab-right.disabled {
1027 background-color: #ccc;
1025 background-color: #ccc;
1028 cursor: unset;
1026 cursor: unset;
1029 }
1027 }
1030
1028
1031 /***** Diff *****/
1029 /***** Diff *****/
1032 .diff_out { background: #fcc; }
1030 .diff_out { background: #fcc; }
1033 .diff_out span { background: #faa; }
1031 .diff_out span { background: #faa; }
1034 .diff_in { background: #cfc; }
1032 .diff_in { background: #cfc; }
1035 .diff_in span { background: #afa; }
1033 .diff_in span { background: #afa; }
1036
1034
1037 .text-diff {
1035 .text-diff {
1038 padding: 1em;
1036 padding: 1em;
1039 background-color:#f6f6f6;
1037 background-color:#f6f6f6;
1040 color:#505050;
1038 color:#505050;
1041 border: 1px solid #e4e4e4;
1039 border: 1px solid #e4e4e4;
1042 }
1040 }
1043
1041
1044 /***** Wiki *****/
1042 /***** Wiki *****/
1045 div.wiki table {
1043 div.wiki table {
1046 border-collapse: collapse;
1044 border-collapse: collapse;
1047 margin-bottom: 1em;
1045 margin-bottom: 1em;
1048 }
1046 }
1049
1047
1050 div.wiki table, div.wiki td, div.wiki th {
1048 div.wiki table, div.wiki td, div.wiki th {
1051 border: 1px solid #bbb;
1049 border: 1px solid #bbb;
1052 padding: 4px;
1050 padding: 4px;
1053 }
1051 }
1054
1052
1055 div.wiki .noborder, div.wiki .noborder td, div.wiki .noborder th {border:0;}
1053 div.wiki .noborder, div.wiki .noborder td, div.wiki .noborder th {border:0;}
1056
1054
1057 div.wiki .external {
1055 div.wiki .external {
1058 background-position: 0% 60%;
1056 background-position: 0% 60%;
1059 background-repeat: no-repeat;
1057 background-repeat: no-repeat;
1060 padding-left: 12px;
1058 padding-left: 12px;
1061 background-image: url(../images/external.png);
1059 background-image: url(../images/external.png);
1062 }
1060 }
1063
1061
1064 div.wiki a {word-wrap: break-word;}
1062 div.wiki a {word-wrap: break-word;}
1065 div.wiki a.new {color: #b73535;}
1063 div.wiki a.new {color: #b73535;}
1066
1064
1067 div.wiki ul, div.wiki ol {margin-bottom:1em;}
1065 div.wiki ul, div.wiki ol {margin-bottom:1em;}
1068 div.wiki li>ul, div.wiki li>ol {margin-bottom: 0;}
1066 div.wiki li>ul, div.wiki li>ol {margin-bottom: 0;}
1069
1067
1070 div.wiki pre {
1068 div.wiki pre {
1071 margin: 1em 1em 1em 1.6em;
1069 margin: 1em 1em 1em 1.6em;
1072 padding: 8px;
1070 padding: 8px;
1073 background-color: #fafafa;
1071 background-color: #fafafa;
1074 border: 1px solid #e2e2e2;
1072 border: 1px solid #e2e2e2;
1075 border-radius: 3px;
1073 border-radius: 3px;
1076 width:auto;
1074 width:auto;
1077 overflow-x: auto;
1075 overflow-x: auto;
1078 overflow-y: hidden;
1076 overflow-y: hidden;
1079 }
1077 }
1080
1078
1081 div.wiki ul.toc {
1079 div.wiki ul.toc {
1082 background-color: #ffffdd;
1080 background-color: #ffffdd;
1083 border: 1px solid #e4e4e4;
1081 border: 1px solid #e4e4e4;
1084 padding: 4px;
1082 padding: 4px;
1085 line-height: 1.2em;
1083 line-height: 1.2em;
1086 margin-bottom: 12px;
1084 margin-bottom: 12px;
1087 margin-right: 12px;
1085 margin-right: 12px;
1088 margin-left: 0;
1086 margin-left: 0;
1089 display: table
1087 display: table
1090 }
1088 }
1091 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
1089 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
1092
1090
1093 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
1091 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
1094 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
1092 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
1095 div.wiki ul.toc ul { margin: 0; padding: 0; }
1093 div.wiki ul.toc ul { margin: 0; padding: 0; }
1096 div.wiki ul.toc li {list-style-type:none; margin: 0; font-size:12px;}
1094 div.wiki ul.toc li {list-style-type:none; margin: 0; font-size:12px;}
1097 div.wiki ul.toc>li:first-child {margin-bottom: .5em; color: #777;}
1095 div.wiki ul.toc>li:first-child {margin-bottom: .5em; color: #777;}
1098 div.wiki ul.toc li li {margin-left: 1.5em; font-size:10px;}
1096 div.wiki ul.toc li li {margin-left: 1.5em; font-size:10px;}
1099 div.wiki ul.toc a {
1097 div.wiki ul.toc a {
1100 font-size: 0.9em;
1098 font-size: 0.9em;
1101 font-weight: normal;
1099 font-weight: normal;
1102 text-decoration: none;
1100 text-decoration: none;
1103 color: #606060;
1101 color: #606060;
1104 }
1102 }
1105 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
1103 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
1106
1104
1107 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
1105 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
1108 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
1106 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
1109 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
1107 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
1110
1108
1111 div.wiki img {vertical-align:middle; max-width:100%;}
1109 div.wiki img {vertical-align:middle; max-width:100%;}
1112
1110
1113 /***** My page layout *****/
1111 /***** My page layout *****/
1114 .block-receiver {
1112 .block-receiver {
1115 border:1px dashed #c0c0c0;
1113 border:1px dashed #c0c0c0;
1116 margin-bottom: 20px;
1114 margin-bottom: 20px;
1117 padding: 15px 0 15px 0;
1115 padding: 15px 0 15px 0;
1118 }
1116 }
1119
1117
1120 .mypage-box {
1118 .mypage-box {
1121 margin:0 0 20px 0;
1119 margin:0 0 20px 0;
1122 color:#505050;
1120 color:#505050;
1123 line-height:1.5em;
1121 line-height:1.5em;
1124 }
1122 }
1125 .mypage-box .icon-close {
1123 .mypage-box .icon-close {
1126 float:right;
1124 float:right;
1127 }
1125 }
1128
1126
1129 .handle {cursor: move;}
1127 .handle {cursor: move;}
1130
1128
1131 /***** Gantt chart *****/
1129 /***** Gantt chart *****/
1132 .gantt_hdr {
1130 .gantt_hdr {
1133 position:absolute;
1131 position:absolute;
1134 top:0;
1132 top:0;
1135 height:16px;
1133 height:16px;
1136 border-top: 1px solid #c0c0c0;
1134 border-top: 1px solid #c0c0c0;
1137 border-bottom: 1px solid #c0c0c0;
1135 border-bottom: 1px solid #c0c0c0;
1138 border-right: 1px solid #c0c0c0;
1136 border-right: 1px solid #c0c0c0;
1139 text-align: center;
1137 text-align: center;
1140 overflow: hidden;
1138 overflow: hidden;
1141 }
1139 }
1142
1140
1143 .gantt_hdr.nwday {background-color:#f1f1f1; color:#999;}
1141 .gantt_hdr.nwday {background-color:#f1f1f1; color:#999;}
1144
1142
1145 .gantt_subjects { font-size: 0.8em; }
1143 .gantt_subjects { font-size: 0.8em; }
1146 .gantt_subjects div { line-height:16px;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
1144 .gantt_subjects div { line-height:16px;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
1147
1145
1148 .task {
1146 .task {
1149 position: absolute;
1147 position: absolute;
1150 height:8px;
1148 height:8px;
1151 font-size:0.8em;
1149 font-size:0.8em;
1152 color:#888;
1150 color:#888;
1153 padding:0;
1151 padding:0;
1154 margin:0;
1152 margin:0;
1155 line-height:16px;
1153 line-height:16px;
1156 white-space:nowrap;
1154 white-space:nowrap;
1157 }
1155 }
1158
1156
1159 .task.label {width:100%;}
1157 .task.label {width:100%;}
1160 .task.label.project, .task.label.version { font-weight: bold; }
1158 .task.label.project, .task.label.version { font-weight: bold; }
1161
1159
1162 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
1160 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
1163 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }
1161 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }
1164 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
1162 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
1165
1163
1166 .task_todo.parent { background: #888; border: 1px solid #888; height: 3px;}
1164 .task_todo.parent { background: #888; border: 1px solid #888; height: 3px;}
1167 .task_late.parent, .task_done.parent { height: 3px;}
1165 .task_late.parent, .task_done.parent { height: 3px;}
1168 .task.parent.marker.starting { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; left: 0px; top: -1px;}
1166 .task.parent.marker.starting { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; left: 0px; top: -1px;}
1169 .task.parent.marker.ending { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; right: 0px; top: -1px;}
1167 .task.parent.marker.ending { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; right: 0px; top: -1px;}
1170
1168
1171 .version.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
1169 .version.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
1172 .version.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
1170 .version.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
1173 .version.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
1171 .version.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
1174 .version.marker { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
1172 .version.marker { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
1175
1173
1176 .project.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
1174 .project.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
1177 .project.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
1175 .project.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
1178 .project.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
1176 .project.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
1179 .project.marker { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
1177 .project.marker { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
1180
1178
1181 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
1179 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
1182 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
1180 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
1183
1181
1184 /***** Icons *****/
1182 /***** Icons *****/
1185 .icon {
1183 .icon {
1186 background-position: 0% 50%;
1184 background-position: 0% 50%;
1187 background-repeat: no-repeat;
1185 background-repeat: no-repeat;
1188 padding-left: 20px;
1186 padding-left: 20px;
1189 }
1187 }
1190 .icon-only {
1188 .icon-only {
1191 background-position: 0% 50%;
1189 background-position: 0% 50%;
1192 background-repeat: no-repeat;
1190 background-repeat: no-repeat;
1193 padding-left: 16px;
1191 padding-left: 16px;
1194 display: inline-block;
1192 display: inline-block;
1195 width: 0;
1193 width: 0;
1196 height: 16px;
1194 height: 16px;
1197 overflow: hidden;
1195 overflow: hidden;
1198 padding-top: 0;
1196 padding-top: 0;
1199 padding-bottom: 0;
1197 padding-bottom: 0;
1200 font-size: 8px;
1198 font-size: 8px;
1201 vertical-align: middle;
1199 vertical-align: middle;
1202 }
1200 }
1203 .icon-only::after {
1201 .icon-only::after {
1204 content: "&nbsp;";
1202 content: "&nbsp;";
1205 }
1203 }
1206
1204
1207 .icon-add { background-image: url(../images/add.png); }
1205 .icon-add { background-image: url(../images/add.png); }
1208 .icon-edit { background-image: url(../images/edit.png); }
1206 .icon-edit { background-image: url(../images/edit.png); }
1209 .icon-copy { background-image: url(../images/copy.png); }
1207 .icon-copy { background-image: url(../images/copy.png); }
1210 .icon-duplicate { background-image: url(../images/duplicate.png); }
1208 .icon-duplicate { background-image: url(../images/duplicate.png); }
1211 .icon-del { background-image: url(../images/delete.png); }
1209 .icon-del { background-image: url(../images/delete.png); }
1212 .icon-move { background-image: url(../images/move.png); }
1210 .icon-move { background-image: url(../images/move.png); }
1213 .icon-save { background-image: url(../images/save.png); }
1211 .icon-save { background-image: url(../images/save.png); }
1214 .icon-cancel { background-image: url(../images/cancel.png); }
1212 .icon-cancel { background-image: url(../images/cancel.png); }
1215 .icon-multiple { background-image: url(../images/table_multiple.png); }
1213 .icon-multiple { background-image: url(../images/table_multiple.png); }
1216 .icon-folder { background-image: url(../images/folder.png); }
1214 .icon-folder { background-image: url(../images/folder.png); }
1217 .open .icon-folder { background-image: url(../images/folder_open.png); }
1215 .open .icon-folder { background-image: url(../images/folder_open.png); }
1218 .icon-package { background-image: url(../images/package.png); }
1216 .icon-package { background-image: url(../images/package.png); }
1219 .icon-user { background-image: url(../images/user.png); }
1217 .icon-user { background-image: url(../images/user.png); }
1220 .icon-project, .icon-projects { background-image: url(../images/projects.png); }
1218 .icon-project, .icon-projects { background-image: url(../images/projects.png); }
1221 .icon-help { background-image: url(../images/help.png); }
1219 .icon-help { background-image: url(../images/help.png); }
1222 .icon-attachment { background-image: url(../images/attachment.png); }
1220 .icon-attachment { background-image: url(../images/attachment.png); }
1223 .icon-history { background-image: url(../images/history.png); }
1221 .icon-history { background-image: url(../images/history.png); }
1224 .icon-time-entry, .icon-time { background-image: url(../images/time.png); }
1222 .icon-time-entry, .icon-time { background-image: url(../images/time.png); }
1225 .icon-time-add { background-image: url(../images/time_add.png); }
1223 .icon-time-add { background-image: url(../images/time_add.png); }
1226 .icon-stats { background-image: url(../images/stats.png); }
1224 .icon-stats { background-image: url(../images/stats.png); }
1227 .icon-warning { background-image: url(../images/warning.png); }
1225 .icon-warning { background-image: url(../images/warning.png); }
1228 .icon-error { background-image: url(../images/exclamation.png); }
1226 .icon-error { background-image: url(../images/exclamation.png); }
1229 .icon-fav { background-image: url(../images/fav.png); }
1227 .icon-fav { background-image: url(../images/fav.png); }
1230 .icon-fav-off { background-image: url(../images/fav_off.png); }
1228 .icon-fav-off { background-image: url(../images/fav_off.png); }
1231 .icon-reload { background-image: url(../images/reload.png); }
1229 .icon-reload { background-image: url(../images/reload.png); }
1232 .icon-lock, .icon-locked { background-image: url(../images/locked.png); }
1230 .icon-lock, .icon-locked { background-image: url(../images/locked.png); }
1233 .icon-unlock { background-image: url(../images/unlock.png); }
1231 .icon-unlock { background-image: url(../images/unlock.png); }
1234 .icon-checked { background-image: url(../images/toggle_check.png); }
1232 .icon-checked { background-image: url(../images/toggle_check.png); }
1235 .icon-details { background-image: url(../images/zoom_in.png); }
1233 .icon-details { background-image: url(../images/zoom_in.png); }
1236 .icon-report { background-image: url(../images/report.png); }
1234 .icon-report { background-image: url(../images/report.png); }
1237 .icon-comment, .icon-comments { background-image: url(../images/comment.png); }
1235 .icon-comment, .icon-comments { background-image: url(../images/comment.png); }
1238 .icon-summary { background-image: url(../images/lightning.png); }
1236 .icon-summary { background-image: url(../images/lightning.png); }
1239 .icon-server-authentication { background-image: url(../images/server_key.png); }
1237 .icon-server-authentication { background-image: url(../images/server_key.png); }
1240 .icon-issue { background-image: url(../images/ticket.png); }
1238 .icon-issue { background-image: url(../images/ticket.png); }
1241 .icon-zoom-in { background-image: url(../images/zoom_in.png); }
1239 .icon-zoom-in { background-image: url(../images/zoom_in.png); }
1242 .icon-zoom-out { background-image: url(../images/zoom_out.png); }
1240 .icon-zoom-out { background-image: url(../images/zoom_out.png); }
1243 .icon-magnifier { background-image: url(../images/magnifier.png); }
1241 .icon-magnifier { background-image: url(../images/magnifier.png); }
1244 .icon-passwd { background-image: url(../images/textfield_key.png); }
1242 .icon-passwd { background-image: url(../images/textfield_key.png); }
1245 .icon-arrow-right, .icon-test, .icon-sticky { background-image: url(../images/bullet_go.png); }
1243 .icon-arrow-right, .icon-test, .icon-sticky { background-image: url(../images/bullet_go.png); }
1246 .icon-email { background-image: url(../images/email.png); }
1244 .icon-email { background-image: url(../images/email.png); }
1247 .icon-email-disabled { background-image: url(../images/email_disabled.png); }
1245 .icon-email-disabled { background-image: url(../images/email_disabled.png); }
1248 .icon-email-add { background-image: url(../images/email_add.png); }
1246 .icon-email-add { background-image: url(../images/email_add.png); }
1249 .icon-move-up { background-image: url(../images/1uparrow.png); }
1247 .icon-move-up { background-image: url(../images/1uparrow.png); }
1250 .icon-move-top { background-image: url(../images/2uparrow.png); }
1248 .icon-move-top { background-image: url(../images/2uparrow.png); }
1251 .icon-move-down { background-image: url(../images/1downarrow.png); }
1249 .icon-move-down { background-image: url(../images/1downarrow.png); }
1252 .icon-move-bottom { background-image: url(../images/2downarrow.png); }
1250 .icon-move-bottom { background-image: url(../images/2downarrow.png); }
1253 .icon-ok { background-image: url(../images/true.png); }
1251 .icon-ok { background-image: url(../images/true.png); }
1254 .icon-not-ok { background-image: url(../images/false.png); }
1252 .icon-not-ok { background-image: url(../images/false.png); }
1255 .icon-link-break { background-image: url(../images/link_break.png); }
1253 .icon-link-break { background-image: url(../images/link_break.png); }
1256 .icon-list { background-image: url(../images/text_list_bullets.png); }
1254 .icon-list { background-image: url(../images/text_list_bullets.png); }
1257 .icon-close { background-image: url(../images/close.png); }
1255 .icon-close { background-image: url(../images/close.png); }
1258 .icon-close:hover { background-image: url(../images/close_hl.png); }
1256 .icon-close:hover { background-image: url(../images/close_hl.png); }
1259 .icon-settings { background-image: url(../images/changeset.png); }
1257 .icon-settings { background-image: url(../images/changeset.png); }
1260 .icon-group, .icon-groupnonmember, .icon-groupanonymous { background-image: url(../images/group.png); }
1258 .icon-group, .icon-groupnonmember, .icon-groupanonymous { background-image: url(../images/group.png); }
1261 .icon-roles { background-image: url(../images/database_key.png); }
1259 .icon-roles { background-image: url(../images/database_key.png); }
1262 .icon-issue-edit { background-image: url(../images/ticket_edit.png); }
1260 .icon-issue-edit { background-image: url(../images/ticket_edit.png); }
1263 .icon-workflows { background-image: url(../images/ticket_go.png); }
1261 .icon-workflows { background-image: url(../images/ticket_go.png); }
1264 .icon-custom-fields { background-image: url(../images/textfield.png); }
1262 .icon-custom-fields { background-image: url(../images/textfield.png); }
1265 .icon-plugins { background-image: url(../images/plugin.png); }
1263 .icon-plugins { background-image: url(../images/plugin.png); }
1266 .icon-news { background-image: url(../images/news.png); }
1264 .icon-news { background-image: url(../images/news.png); }
1267 .icon-issue-closed { background-image: url(../images/ticket_checked.png); }
1265 .icon-issue-closed { background-image: url(../images/ticket_checked.png); }
1268 .icon-issue-note { background-image: url(../images/ticket_note.png); }
1266 .icon-issue-note { background-image: url(../images/ticket_note.png); }
1269 .icon-changeset { background-image: url(../images/changeset.png); }
1267 .icon-changeset { background-image: url(../images/changeset.png); }
1270 .icon-message { background-image: url(../images/message.png); }
1268 .icon-message { background-image: url(../images/message.png); }
1271 .icon-reply { background-image: url(../images/comments.png); }
1269 .icon-reply { background-image: url(../images/comments.png); }
1272 .icon-wiki-page { background-image: url(../images/wiki_edit.png); }
1270 .icon-wiki-page { background-image: url(../images/wiki_edit.png); }
1273 .icon-document { background-image: url(../images/document.png); }
1271 .icon-document { background-image: url(../images/document.png); }
1274 .icon-project { background-image: url(../images/projects.png); }
1272 .icon-project { background-image: url(../images/projects.png); }
1275 .icon-add-bullet { background-image: url(../images/bullet_add.png); }
1273 .icon-add-bullet { background-image: url(../images/bullet_add.png); }
1276 .icon-shared { background-image: url(../images/link.png) };
1274 .icon-shared { background-image: url(../images/link.png) };
1277
1275
1278 .icon-file { background-image: url(../images/files/default.png); }
1276 .icon-file { background-image: url(../images/files/default.png); }
1279 .icon-file.text-plain { background-image: url(../images/files/text.png); }
1277 .icon-file.text-plain { background-image: url(../images/files/text.png); }
1280 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
1278 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
1281 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
1279 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
1282 .icon-file.text-x-java { background-image: url(../images/files/java.png); }
1280 .icon-file.text-x-java { background-image: url(../images/files/java.png); }
1283 .icon-file.text-x-javascript { background-image: url(../images/files/js.png); }
1281 .icon-file.text-x-javascript { background-image: url(../images/files/js.png); }
1284 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
1282 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
1285 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
1283 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
1286 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
1284 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
1287 .icon-file.text-css { background-image: url(../images/files/css.png); }
1285 .icon-file.text-css { background-image: url(../images/files/css.png); }
1288 .icon-file.text-html { background-image: url(../images/files/html.png); }
1286 .icon-file.text-html { background-image: url(../images/files/html.png); }
1289 .icon-file.image-gif { background-image: url(../images/files/image.png); }
1287 .icon-file.image-gif { background-image: url(../images/files/image.png); }
1290 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
1288 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
1291 .icon-file.image-png { background-image: url(../images/files/image.png); }
1289 .icon-file.image-png { background-image: url(../images/files/image.png); }
1292 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
1290 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
1293 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
1291 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
1294 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
1292 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
1295 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
1293 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
1296
1294
1297 .sort-handle { width:16px; height:16px; background:url(../images/reorder.png) no-repeat 0 50%; cursor:move; }
1295 .sort-handle { width:16px; height:16px; background:url(../images/reorder.png) no-repeat 0 50%; cursor:move; }
1298 .sort-handle.ajax-loading { background-image: url(../images/loading.gif); }
1296 .sort-handle.ajax-loading { background-image: url(../images/loading.gif); }
1299 tr.ui-sortable-helper { border:1px solid #e4e4e4; }
1297 tr.ui-sortable-helper { border:1px solid #e4e4e4; }
1300
1298
1301 .contextual>*:not(:first-child), .buttons>.icon:not(:first-child) { margin-left: 5px; }
1299 .contextual>*:not(:first-child), .buttons>.icon:not(:first-child) { margin-left: 5px; }
1302
1300
1303 img.gravatar {
1301 img.gravatar {
1304 vertical-align: middle;
1302 vertical-align: middle;
1305 border-radius: 20%;
1303 border-radius: 20%;
1306 }
1304 }
1307
1305
1308 div.issue img.gravatar {
1306 div.issue img.gravatar {
1309 float: left;
1307 float: left;
1310 margin: 0 6px 0 0;
1308 margin: 0 6px 0 0;
1311 }
1309 }
1312
1310
1313 h2 img.gravatar {margin: -2px 4px -4px 0;}
1311 h2 img.gravatar {margin: -2px 4px -4px 0;}
1314 h3 img.gravatar {margin: -4px 4px -4px 0;}
1312 h3 img.gravatar {margin: -4px 4px -4px 0;}
1315 h4 img.gravatar {margin: -2px 4px -4px 0;}
1313 h4 img.gravatar {margin: -2px 4px -4px 0;}
1316 td.username img.gravatar {margin: 0 0.5em 0 0; vertical-align: top;}
1314 td.username img.gravatar {margin: 0 0.5em 0 0; vertical-align: top;}
1317 #activity dt img.gravatar {float: left; margin: 0 1em 1em 0;}
1315 #activity dt img.gravatar {float: left; margin: 0 1em 1em 0;}
1318 /* Used on 12px Gravatar img tags without the icon background */
1316 /* Used on 12px Gravatar img tags without the icon background */
1319 .icon-gravatar {float: left; margin-right: 4px;}
1317 .icon-gravatar {float: left; margin-right: 4px;}
1320
1318
1321 #activity dt, .journal {clear: left;}
1319 #activity dt, .journal {clear: left;}
1322
1320
1323 .journal-link {float: right;}
1321 .journal-link {float: right;}
1324
1322
1325 h2 img { vertical-align:middle; }
1323 h2 img { vertical-align:middle; }
1326
1324
1327 .hascontextmenu { cursor: context-menu; }
1325 .hascontextmenu { cursor: context-menu; }
1328
1326
1329 .sample-data {border:1px solid #ccc; border-collapse:collapse; background-color:#fff; margin:0.5em;}
1327 .sample-data {border:1px solid #ccc; border-collapse:collapse; background-color:#fff; margin:0.5em;}
1330 .sample-data td {border:1px solid #ccc; padding: 2px 4px; font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace;}
1328 .sample-data td {border:1px solid #ccc; padding: 2px 4px; font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace;}
1331 .sample-data tr:first-child td {font-weight:bold; text-align:center;}
1329 .sample-data tr:first-child td {font-weight:bold; text-align:center;}
1332
1330
1333 .ui-progressbar {position: relative;}
1331 .ui-progressbar {position: relative;}
1334 #progress-label {
1332 #progress-label {
1335 position: absolute; left: 50%; top: 4px;
1333 position: absolute; left: 50%; top: 4px;
1336 font-weight: bold;
1334 font-weight: bold;
1337 color: #555; text-shadow: 1px 1px 0 #fff;
1335 color: #555; text-shadow: 1px 1px 0 #fff;
1338 }
1336 }
1339
1337
1340 /* Custom JQuery styles */
1338 /* Custom JQuery styles */
1341 .ui-datepicker-title select {width:70px !important; margin-top:-2px !important; margin-right:4px !important;}
1339 .ui-datepicker-title select {width:70px !important; margin-top:-2px !important; margin-right:4px !important;}
1342
1340
1343
1341
1344 /************* CodeRay styles *************/
1342 /************* CodeRay styles *************/
1345 .syntaxhl div {display: inline;}
1343 .syntaxhl div {display: inline;}
1346 .syntaxhl .code pre { overflow: auto }
1344 .syntaxhl .code pre { overflow: auto }
1347
1345
1348 .syntaxhl .annotation { color:#007 }
1346 .syntaxhl .annotation { color:#007 }
1349 .syntaxhl .attribute-name { color:#b48 }
1347 .syntaxhl .attribute-name { color:#b48 }
1350 .syntaxhl .attribute-value { color:#700 }
1348 .syntaxhl .attribute-value { color:#700 }
1351 .syntaxhl .binary { color:#549 }
1349 .syntaxhl .binary { color:#549 }
1352 .syntaxhl .binary .char { color:#325 }
1350 .syntaxhl .binary .char { color:#325 }
1353 .syntaxhl .binary .delimiter { color:#325 }
1351 .syntaxhl .binary .delimiter { color:#325 }
1354 .syntaxhl .char { color:#D20 }
1352 .syntaxhl .char { color:#D20 }
1355 .syntaxhl .char .content { color:#D20 }
1353 .syntaxhl .char .content { color:#D20 }
1356 .syntaxhl .char .delimiter { color:#710 }
1354 .syntaxhl .char .delimiter { color:#710 }
1357 .syntaxhl .class { color:#B06; font-weight:bold }
1355 .syntaxhl .class { color:#B06; font-weight:bold }
1358 .syntaxhl .class-variable { color:#369 }
1356 .syntaxhl .class-variable { color:#369 }
1359 .syntaxhl .color { color:#0A0 }
1357 .syntaxhl .color { color:#0A0 }
1360 .syntaxhl .comment { color:#777 }
1358 .syntaxhl .comment { color:#777 }
1361 .syntaxhl .comment .char { color:#444 }
1359 .syntaxhl .comment .char { color:#444 }
1362 .syntaxhl .comment .delimiter { color:#444 }
1360 .syntaxhl .comment .delimiter { color:#444 }
1363 .syntaxhl .constant { color:#036; font-weight:bold }
1361 .syntaxhl .constant { color:#036; font-weight:bold }
1364 .syntaxhl .decorator { color:#B0B }
1362 .syntaxhl .decorator { color:#B0B }
1365 .syntaxhl .definition { color:#099; font-weight:bold }
1363 .syntaxhl .definition { color:#099; font-weight:bold }
1366 .syntaxhl .delimiter { color:black }
1364 .syntaxhl .delimiter { color:black }
1367 .syntaxhl .directive { color:#088; font-weight:bold }
1365 .syntaxhl .directive { color:#088; font-weight:bold }
1368 .syntaxhl .docstring { color:#D42; }
1366 .syntaxhl .docstring { color:#D42; }
1369 .syntaxhl .doctype { color:#34b }
1367 .syntaxhl .doctype { color:#34b }
1370 .syntaxhl .done { text-decoration: line-through; color: gray }
1368 .syntaxhl .done { text-decoration: line-through; color: gray }
1371 .syntaxhl .entity { color:#800; font-weight:bold }
1369 .syntaxhl .entity { color:#800; font-weight:bold }
1372 .syntaxhl .error { color:#F00; background-color:#FAA }
1370 .syntaxhl .error { color:#F00; background-color:#FAA }
1373 .syntaxhl .escape { color:#666 }
1371 .syntaxhl .escape { color:#666 }
1374 .syntaxhl .exception { color:#C00; font-weight:bold }
1372 .syntaxhl .exception { color:#C00; font-weight:bold }
1375 .syntaxhl .float { color:#60E }
1373 .syntaxhl .float { color:#60E }
1376 .syntaxhl .function { color:#06B; font-weight:bold }
1374 .syntaxhl .function { color:#06B; font-weight:bold }
1377 .syntaxhl .function .delimiter { color:#059 }
1375 .syntaxhl .function .delimiter { color:#059 }
1378 .syntaxhl .function .content { color:#037 }
1376 .syntaxhl .function .content { color:#037 }
1379 .syntaxhl .global-variable { color:#d70 }
1377 .syntaxhl .global-variable { color:#d70 }
1380 .syntaxhl .hex { color:#02b }
1378 .syntaxhl .hex { color:#02b }
1381 .syntaxhl .id { color:#33D; font-weight:bold }
1379 .syntaxhl .id { color:#33D; font-weight:bold }
1382 .syntaxhl .include { color:#B44; font-weight:bold }
1380 .syntaxhl .include { color:#B44; font-weight:bold }
1383 .syntaxhl .inline { background-color: hsla(0,0%,0%,0.07); color: black }
1381 .syntaxhl .inline { background-color: hsla(0,0%,0%,0.07); color: black }
1384 .syntaxhl .inline-delimiter { font-weight: bold; color: #666 }
1382 .syntaxhl .inline-delimiter { font-weight: bold; color: #666 }
1385 .syntaxhl .instance-variable { color:#33B }
1383 .syntaxhl .instance-variable { color:#33B }
1386 .syntaxhl .integer { color:#00D }
1384 .syntaxhl .integer { color:#00D }
1387 .syntaxhl .imaginary { color:#f00 }
1385 .syntaxhl .imaginary { color:#f00 }
1388 .syntaxhl .important { color:#D00 }
1386 .syntaxhl .important { color:#D00 }
1389 .syntaxhl .key { color: #606 }
1387 .syntaxhl .key { color: #606 }
1390 .syntaxhl .key .char { color: #60f }
1388 .syntaxhl .key .char { color: #60f }
1391 .syntaxhl .key .delimiter { color: #404 }
1389 .syntaxhl .key .delimiter { color: #404 }
1392 .syntaxhl .keyword { color:#080; font-weight:bold }
1390 .syntaxhl .keyword { color:#080; font-weight:bold }
1393 .syntaxhl .label { color:#970; font-weight:bold }
1391 .syntaxhl .label { color:#970; font-weight:bold }
1394 .syntaxhl .local-variable { color:#950 }
1392 .syntaxhl .local-variable { color:#950 }
1395 .syntaxhl .map .content { color:#808 }
1393 .syntaxhl .map .content { color:#808 }
1396 .syntaxhl .map .delimiter { color:#40A}
1394 .syntaxhl .map .delimiter { color:#40A}
1397 .syntaxhl .map { background-color:hsla(200,100%,50%,0.06); }
1395 .syntaxhl .map { background-color:hsla(200,100%,50%,0.06); }
1398 .syntaxhl .namespace { color:#707; font-weight:bold }
1396 .syntaxhl .namespace { color:#707; font-weight:bold }
1399 .syntaxhl .octal { color:#40E }
1397 .syntaxhl .octal { color:#40E }
1400 .syntaxhl .operator { }
1398 .syntaxhl .operator { }
1401 .syntaxhl .predefined { color:#369; font-weight:bold }
1399 .syntaxhl .predefined { color:#369; font-weight:bold }
1402 .syntaxhl .predefined-constant { color:#069 }
1400 .syntaxhl .predefined-constant { color:#069 }
1403 .syntaxhl .predefined-type { color:#0a8; font-weight:bold }
1401 .syntaxhl .predefined-type { color:#0a8; font-weight:bold }
1404 .syntaxhl .preprocessor { color:#579 }
1402 .syntaxhl .preprocessor { color:#579 }
1405 .syntaxhl .pseudo-class { color:#00C; font-weight:bold }
1403 .syntaxhl .pseudo-class { color:#00C; font-weight:bold }
1406 .syntaxhl .regexp { background-color:hsla(300,100%,50%,0.06); }
1404 .syntaxhl .regexp { background-color:hsla(300,100%,50%,0.06); }
1407 .syntaxhl .regexp .content { color:#808 }
1405 .syntaxhl .regexp .content { color:#808 }
1408 .syntaxhl .regexp .delimiter { color:#404 }
1406 .syntaxhl .regexp .delimiter { color:#404 }
1409 .syntaxhl .regexp .modifier { color:#C2C }
1407 .syntaxhl .regexp .modifier { color:#C2C }
1410 .syntaxhl .reserved { color:#080; font-weight:bold }
1408 .syntaxhl .reserved { color:#080; font-weight:bold }
1411 .syntaxhl .shell { background-color:hsla(120,100%,50%,0.06); }
1409 .syntaxhl .shell { background-color:hsla(120,100%,50%,0.06); }
1412 .syntaxhl .shell .content { color:#2B2 }
1410 .syntaxhl .shell .content { color:#2B2 }
1413 .syntaxhl .shell .delimiter { color:#161 }
1411 .syntaxhl .shell .delimiter { color:#161 }
1414 .syntaxhl .string { background-color:hsla(0,100%,50%,0.05); }
1412 .syntaxhl .string { background-color:hsla(0,100%,50%,0.05); }
1415 .syntaxhl .string .char { color: #b0b }
1413 .syntaxhl .string .char { color: #b0b }
1416 .syntaxhl .string .content { color: #D20 }
1414 .syntaxhl .string .content { color: #D20 }
1417 .syntaxhl .string .delimiter { color: #710 }
1415 .syntaxhl .string .delimiter { color: #710 }
1418 .syntaxhl .string .modifier { color: #E40 }
1416 .syntaxhl .string .modifier { color: #E40 }
1419 .syntaxhl .symbol { color:#A60 }
1417 .syntaxhl .symbol { color:#A60 }
1420 .syntaxhl .symbol .content { color:#A60 }
1418 .syntaxhl .symbol .content { color:#A60 }
1421 .syntaxhl .symbol .delimiter { color:#740 }
1419 .syntaxhl .symbol .delimiter { color:#740 }
1422 .syntaxhl .tag { color:#070; font-weight:bold }
1420 .syntaxhl .tag { color:#070; font-weight:bold }
1423 .syntaxhl .type { color:#339; font-weight:bold }
1421 .syntaxhl .type { color:#339; font-weight:bold }
1424 .syntaxhl .value { color: #088 }
1422 .syntaxhl .value { color: #088 }
1425 .syntaxhl .variable { color:#037 }
1423 .syntaxhl .variable { color:#037 }
1426
1424
1427 .syntaxhl .insert { background: hsla(120,100%,50%,0.12) }
1425 .syntaxhl .insert { background: hsla(120,100%,50%,0.12) }
1428 .syntaxhl .delete { background: hsla(0,100%,50%,0.12) }
1426 .syntaxhl .delete { background: hsla(0,100%,50%,0.12) }
1429 .syntaxhl .change { color: #bbf; background: #007 }
1427 .syntaxhl .change { color: #bbf; background: #007 }
1430 .syntaxhl .head { color: #f8f; background: #505 }
1428 .syntaxhl .head { color: #f8f; background: #505 }
1431 .syntaxhl .head .filename { color: white; }
1429 .syntaxhl .head .filename { color: white; }
1432
1430
1433 .syntaxhl .delete .eyecatcher { background-color: hsla(0,100%,50%,0.2); border: 1px solid hsla(0,100%,45%,0.5); margin: -1px; border-bottom: none; border-top-left-radius: 5px; border-top-right-radius: 5px; }
1431 .syntaxhl .delete .eyecatcher { background-color: hsla(0,100%,50%,0.2); border: 1px solid hsla(0,100%,45%,0.5); margin: -1px; border-bottom: none; border-top-left-radius: 5px; border-top-right-radius: 5px; }
1434 .syntaxhl .insert .eyecatcher { background-color: hsla(120,100%,50%,0.2); border: 1px solid hsla(120,100%,25%,0.5); margin: -1px; border-top: none; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; }
1432 .syntaxhl .insert .eyecatcher { background-color: hsla(120,100%,50%,0.2); border: 1px solid hsla(120,100%,25%,0.5); margin: -1px; border-top: none; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; }
1435
1433
1436 .syntaxhl .insert .insert { color: #0c0; background:transparent; font-weight:bold }
1434 .syntaxhl .insert .insert { color: #0c0; background:transparent; font-weight:bold }
1437 .syntaxhl .delete .delete { color: #c00; background:transparent; font-weight:bold }
1435 .syntaxhl .delete .delete { color: #c00; background:transparent; font-weight:bold }
1438 .syntaxhl .change .change { color: #88f }
1436 .syntaxhl .change .change { color: #88f }
1439 .syntaxhl .head .head { color: #f4f }
1437 .syntaxhl .head .head { color: #f4f }
1440
1438
1441 /***** Media print specific styles *****/
1439 /***** Media print specific styles *****/
1442 @media print {
1440 @media print {
1443 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
1441 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
1444 #main { background: #fff; }
1442 #main { background: #fff; }
1445 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
1443 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
1446 #wiki_add_attachment { display:none; }
1444 #wiki_add_attachment { display:none; }
1447 .hide-when-print, .pagination ul.pages, .pagination .per-page { display: none !important; }
1445 .hide-when-print, .pagination ul.pages, .pagination .per-page { display: none !important; }
1448 .autoscroll {overflow-x: visible;}
1446 .autoscroll {overflow-x: visible;}
1449 table.list {margin-top:0.5em;}
1447 table.list {margin-top:0.5em;}
1450 table.list th, table.list td {border: 1px solid #aaa;}
1448 table.list th, table.list td {border: 1px solid #aaa;}
1451 }
1449 }
1452
1450
1453 /* Accessibility specific styles */
1451 /* Accessibility specific styles */
1454 .hidden-for-sighted {
1452 .hidden-for-sighted {
1455 position:absolute;
1453 position:absolute;
1456 left:-10000px;
1454 left:-10000px;
1457 top:auto;
1455 top:auto;
1458 width:1px;
1456 width:1px;
1459 height:1px;
1457 height:1px;
1460 overflow:hidden;
1458 overflow:hidden;
1461 }
1459 }
General Comments 0
You need to be logged in to leave comments. Login now