##// END OF EJS Templates
Changed the notifications to use a hierarchy UI...
Eric Davis -
r4108:26ef9da02b7e
parent child
Show More
@@ -1,74 +1,84
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2009 Jean-Philippe Lang
2 # Copyright (C) 2006-2009 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 module SettingsHelper
18 module SettingsHelper
19 def administration_settings_tabs
19 def administration_settings_tabs
20 tabs = [{:name => 'general', :partial => 'settings/general', :label => :label_general},
20 tabs = [{:name => 'general', :partial => 'settings/general', :label => :label_general},
21 {:name => 'display', :partial => 'settings/display', :label => :label_display},
21 {:name => 'display', :partial => 'settings/display', :label => :label_display},
22 {:name => 'authentication', :partial => 'settings/authentication', :label => :label_authentication},
22 {:name => 'authentication', :partial => 'settings/authentication', :label => :label_authentication},
23 {:name => 'projects', :partial => 'settings/projects', :label => :label_project_plural},
23 {:name => 'projects', :partial => 'settings/projects', :label => :label_project_plural},
24 {:name => 'issues', :partial => 'settings/issues', :label => :label_issue_tracking},
24 {:name => 'issues', :partial => 'settings/issues', :label => :label_issue_tracking},
25 {:name => 'notifications', :partial => 'settings/notifications', :label => :field_mail_notification},
25 {:name => 'notifications', :partial => 'settings/notifications', :label => :field_mail_notification},
26 {:name => 'mail_handler', :partial => 'settings/mail_handler', :label => :label_incoming_emails},
26 {:name => 'mail_handler', :partial => 'settings/mail_handler', :label => :label_incoming_emails},
27 {:name => 'repositories', :partial => 'settings/repositories', :label => :label_repository_plural}
27 {:name => 'repositories', :partial => 'settings/repositories', :label => :label_repository_plural}
28 ]
28 ]
29 end
29 end
30
30
31 def setting_select(setting, choices, options={})
31 def setting_select(setting, choices, options={})
32 if blank_text = options.delete(:blank)
32 if blank_text = options.delete(:blank)
33 choices = [[blank_text.is_a?(Symbol) ? l(blank_text) : blank_text, '']] + choices
33 choices = [[blank_text.is_a?(Symbol) ? l(blank_text) : blank_text, '']] + choices
34 end
34 end
35 setting_label(setting, options) +
35 setting_label(setting, options) +
36 select_tag("settings[#{setting}]", options_for_select(choices, Setting.send(setting).to_s), options)
36 select_tag("settings[#{setting}]", options_for_select(choices, Setting.send(setting).to_s), options)
37 end
37 end
38
38
39 def setting_multiselect(setting, choices, options={})
39 def setting_multiselect(setting, choices, options={})
40 setting_values = Setting.send(setting)
40 setting_values = Setting.send(setting)
41 setting_values = [] unless setting_values.is_a?(Array)
41 setting_values = [] unless setting_values.is_a?(Array)
42
42
43 setting_label(setting, options) +
43 setting_label(setting, options) +
44 hidden_field_tag("settings[#{setting}][]", '') +
44 hidden_field_tag("settings[#{setting}][]", '') +
45 choices.collect do |choice|
45 choices.collect do |choice|
46 text, value = (choice.is_a?(Array) ? choice : [choice, choice])
46 text, value = (choice.is_a?(Array) ? choice : [choice, choice])
47 content_tag('label',
47 content_tag('label',
48 check_box_tag("settings[#{setting}][]", value, Setting.send(setting).include?(value)) + text.to_s,
48 check_box_tag("settings[#{setting}][]", value, Setting.send(setting).include?(value)) + text.to_s,
49 :class => 'block'
49 :class => 'block'
50 )
50 )
51 end.join
51 end.join
52 end
52 end
53
53
54 def setting_text_field(setting, options={})
54 def setting_text_field(setting, options={})
55 setting_label(setting, options) +
55 setting_label(setting, options) +
56 text_field_tag("settings[#{setting}]", Setting.send(setting), options)
56 text_field_tag("settings[#{setting}]", Setting.send(setting), options)
57 end
57 end
58
58
59 def setting_text_area(setting, options={})
59 def setting_text_area(setting, options={})
60 setting_label(setting, options) +
60 setting_label(setting, options) +
61 text_area_tag("settings[#{setting}]", Setting.send(setting), options)
61 text_area_tag("settings[#{setting}]", Setting.send(setting), options)
62 end
62 end
63
63
64 def setting_check_box(setting, options={})
64 def setting_check_box(setting, options={})
65 setting_label(setting, options) +
65 setting_label(setting, options) +
66 hidden_field_tag("settings[#{setting}]", 0) +
66 hidden_field_tag("settings[#{setting}]", 0) +
67 check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options)
67 check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options)
68 end
68 end
69
69
70 def setting_label(setting, options={})
70 def setting_label(setting, options={})
71 label = options.delete(:label)
71 label = options.delete(:label)
72 label != false ? content_tag("label", l(label || "setting_#{setting}")) : ''
72 label != false ? content_tag("label", l(label || "setting_#{setting}")) : ''
73 end
73 end
74
75 # Renders a notification field for a Redmine::Notifiable option
76 def notification_field(notifiable)
77 return content_tag(:label,
78 check_box_tag('settings[notified_events][]',
79 notifiable.name,
80 Setting.notified_events.include?(notifiable.name)) +
81 l_or_humanize(notifiable.name, :prefix => 'label_'),
82 :class => notifiable.parent.present? ? "parent" : '')
83 end
74 end
84 end
@@ -1,36 +1,38
1 <% if @deliveries %>
1 <% if @deliveries %>
2 <% form_tag({:action => 'edit', :tab => 'notifications'}) do %>
2 <% form_tag({:action => 'edit', :tab => 'notifications'}) do %>
3
3
4 <div class="box tabular settings">
4 <div class="box tabular settings">
5 <p><%= setting_text_field :mail_from, :size => 60 %></p>
5 <p><%= setting_text_field :mail_from, :size => 60 %></p>
6
6
7 <p><%= setting_check_box :bcc_recipients %></p>
7 <p><%= setting_check_box :bcc_recipients %></p>
8
8
9 <p><%= setting_check_box :plain_text_mail %></p>
9 <p><%= setting_check_box :plain_text_mail %></p>
10
10
11 <p><%= setting_select(:default_notification_option, User::MAIL_NOTIFICATION_OPTIONS.collect {|o| [l(o.last), o.first.to_s]}) %></p>
11 <p><%= setting_select(:default_notification_option, User::MAIL_NOTIFICATION_OPTIONS.collect {|o| [l(o.last), o.first.to_s]}) %></p>
12
12
13 </div>
13 </div>
14
14
15 <fieldset class="box settings" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
15 <fieldset class="box" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
16 <%= setting_multiselect(:notified_events,
16 <%= hidden_field_tag 'settings[notified_events][]', '' %>
17 @notifiables.collect {|notifiable| [l_or_humanize(notifiable, :prefix => 'label_'), notifiable]}, :label => false) %>
17 <% @notifiables.each do |notifiable| %>
18
18 <%= notification_field notifiable %>
19 <p><%= check_all_links('notified_events') %></p>
19 <br />
20 <% end %>
21 <p><%= check_all_links('notified_events') %></p>
20 </fieldset>
22 </fieldset>
21
23
22 <fieldset class="box"><legend><%= l(:setting_emails_footer) %></legend>
24 <fieldset class="box"><legend><%= l(:setting_emails_footer) %></legend>
23 <%= setting_text_area :emails_footer, :label => false, :class => 'wiki-edit', :rows => 5 %>
25 <%= setting_text_area :emails_footer, :label => false, :class => 'wiki-edit', :rows => 5 %>
24 </fieldset>
26 </fieldset>
25
27
26 <div style="float:right;">
28 <div style="float:right;">
27 <%= link_to l(:label_send_test_email), :controller => 'admin', :action => 'test_email' %>
29 <%= link_to l(:label_send_test_email), :controller => 'admin', :action => 'test_email' %>
28 </div>
30 </div>
29
31
30 <%= submit_tag l(:button_save) %>
32 <%= submit_tag l(:button_save) %>
31 <% end %>
33 <% end %>
32 <% else %>
34 <% else %>
33 <div class="nodata">
35 <div class="nodata">
34 <%= simple_format(l(:text_email_delivery_not_configured)) %>
36 <%= simple_format(l(:text_email_delivery_not_configured)) %>
35 </div>
37 </div>
36 <% end %>
38 <% end %>
@@ -1,22 +1,25
1 module Redmine
1 module Redmine
2 class Notifiable
2 class Notifiable < Struct.new(:name, :parent)
3 CoreNotifications = [
4 'issue_added',
5 'issue_updated',
6 'issue_note_added',
7 'issue_status_updated',
8 'issue_priority_updated',
9 'news_added',
10 'document_added',
11 'file_added',
12 'message_posted',
13 'wiki_content_added',
14 'wiki_content_updated'
15 ]
16
3
4 def to_s
5 name
6 end
7
17 # TODO: Plugin API for adding a new notification?
8 # TODO: Plugin API for adding a new notification?
18 def self.all
9 def self.all
19 CoreNotifications
10 notifications = []
11 notifications << Notifiable.new('issue_added')
12 notifications << Notifiable.new('issue_updated')
13 notifications << Notifiable.new('issue_note_added', 'issue_updated')
14 notifications << Notifiable.new('issue_status_updated', 'issue_updated')
15 notifications << Notifiable.new('issue_priority_updated', 'issue_updated')
16 notifications << Notifiable.new('news_added')
17 notifications << Notifiable.new('document_added')
18 notifications << Notifiable.new('file_added')
19 notifications << Notifiable.new('message_posted')
20 notifications << Notifiable.new('wiki_content_added')
21 notifications << Notifiable.new('wiki_content_updated')
22 notifications
20 end
23 end
21 end
24 end
22 end
25 end
@@ -1,235 +1,241
1 /* redMine - project management software
1 /* redMine - project management software
2 Copyright (C) 2006-2008 Jean-Philippe Lang */
2 Copyright (C) 2006-2008 Jean-Philippe Lang */
3
3
4 function checkAll (id, checked) {
4 function checkAll (id, checked) {
5 var els = Element.descendants(id);
5 var els = Element.descendants(id);
6 for (var i = 0; i < els.length; i++) {
6 for (var i = 0; i < els.length; i++) {
7 if (els[i].disabled==false) {
7 if (els[i].disabled==false) {
8 els[i].checked = checked;
8 els[i].checked = checked;
9 }
9 }
10 }
10 }
11 }
11 }
12
12
13 function toggleCheckboxesBySelector(selector) {
13 function toggleCheckboxesBySelector(selector) {
14 boxes = $$(selector);
14 boxes = $$(selector);
15 var all_checked = true;
15 var all_checked = true;
16 for (i = 0; i < boxes.length; i++) { if (boxes[i].checked == false) { all_checked = false; } }
16 for (i = 0; i < boxes.length; i++) { if (boxes[i].checked == false) { all_checked = false; } }
17 for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
17 for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
18 }
18 }
19
19
20 function setCheckboxesBySelector(checked, selector) {
21 var boxes = $$(selector);
22 boxes.each(function(ele) {
23 ele.checked = checked;
24 });
25 }
26
20 function showAndScrollTo(id, focus) {
27 function showAndScrollTo(id, focus) {
21 Element.show(id);
28 Element.show(id);
22 if (focus!=null) { Form.Element.focus(focus); }
29 if (focus!=null) { Form.Element.focus(focus); }
23 Element.scrollTo(id);
30 Element.scrollTo(id);
24 }
31 }
25
32
26 function toggleRowGroup(el) {
33 function toggleRowGroup(el) {
27 var tr = Element.up(el, 'tr');
34 var tr = Element.up(el, 'tr');
28 var n = Element.next(tr);
35 var n = Element.next(tr);
29 tr.toggleClassName('open');
36 tr.toggleClassName('open');
30 while (n != undefined && !n.hasClassName('group')) {
37 while (n != undefined && !n.hasClassName('group')) {
31 Element.toggle(n);
38 Element.toggle(n);
32 n = Element.next(n);
39 n = Element.next(n);
33 }
40 }
34 }
41 }
35
42
36 function toggleFieldset(el) {
43 function toggleFieldset(el) {
37 var fieldset = Element.up(el, 'fieldset');
44 var fieldset = Element.up(el, 'fieldset');
38 fieldset.toggleClassName('collapsed');
45 fieldset.toggleClassName('collapsed');
39 Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
46 Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
40 }
47 }
41
48
42 var fileFieldCount = 1;
49 var fileFieldCount = 1;
43
50
44 function addFileField() {
51 function addFileField() {
45 if (fileFieldCount >= 10) return false
52 if (fileFieldCount >= 10) return false
46 fileFieldCount++;
53 fileFieldCount++;
47 var f = document.createElement("input");
54 var f = document.createElement("input");
48 f.type = "file";
55 f.type = "file";
49 f.name = "attachments[" + fileFieldCount + "][file]";
56 f.name = "attachments[" + fileFieldCount + "][file]";
50 f.size = 30;
57 f.size = 30;
51 var d = document.createElement("input");
58 var d = document.createElement("input");
52 d.type = "text";
59 d.type = "text";
53 d.name = "attachments[" + fileFieldCount + "][description]";
60 d.name = "attachments[" + fileFieldCount + "][description]";
54 d.size = 60;
61 d.size = 60;
55 var dLabel = new Element('label');
62 var dLabel = new Element('label');
56 dLabel.addClassName('inline');
63 dLabel.addClassName('inline');
57 // Pulls the languge value used for Optional Description
64 // Pulls the languge value used for Optional Description
58 dLabel.update($('attachment_description_label_content').innerHTML)
65 dLabel.update($('attachment_description_label_content').innerHTML)
59
60 p = document.getElementById("attachments_fields");
66 p = document.getElementById("attachments_fields");
61 p.appendChild(document.createElement("br"));
67 p.appendChild(document.createElement("br"));
62 p.appendChild(f);
68 p.appendChild(f);
63 p.appendChild(dLabel);
69 p.appendChild(dLabel);
64 dLabel.appendChild(d);
70 dLabel.appendChild(d);
65
71
66 }
72 }
67
73
68 function showTab(name) {
74 function showTab(name) {
69 var f = $$('div#content .tab-content');
75 var f = $$('div#content .tab-content');
70 for(var i=0; i<f.length; i++){
76 for(var i=0; i<f.length; i++){
71 Element.hide(f[i]);
77 Element.hide(f[i]);
72 }
78 }
73 var f = $$('div.tabs a');
79 var f = $$('div.tabs a');
74 for(var i=0; i<f.length; i++){
80 for(var i=0; i<f.length; i++){
75 Element.removeClassName(f[i], "selected");
81 Element.removeClassName(f[i], "selected");
76 }
82 }
77 Element.show('tab-content-' + name);
83 Element.show('tab-content-' + name);
78 Element.addClassName('tab-' + name, "selected");
84 Element.addClassName('tab-' + name, "selected");
79 return false;
85 return false;
80 }
86 }
81
87
82 function moveTabRight(el) {
88 function moveTabRight(el) {
83 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
89 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
84 var tabsWidth = 0;
90 var tabsWidth = 0;
85 var i;
91 var i;
86 for (i=0; i<lis.length; i++) {
92 for (i=0; i<lis.length; i++) {
87 if (lis[i].visible()) {
93 if (lis[i].visible()) {
88 tabsWidth += lis[i].getWidth() + 6;
94 tabsWidth += lis[i].getWidth() + 6;
89 }
95 }
90 }
96 }
91 if (tabsWidth < Element.up(el, 'div.tabs').getWidth() - 60) {
97 if (tabsWidth < Element.up(el, 'div.tabs').getWidth() - 60) {
92 return;
98 return;
93 }
99 }
94 i=0;
100 i=0;
95 while (i<lis.length && !lis[i].visible()) {
101 while (i<lis.length && !lis[i].visible()) {
96 i++;
102 i++;
97 }
103 }
98 lis[i].hide();
104 lis[i].hide();
99 }
105 }
100
106
101 function moveTabLeft(el) {
107 function moveTabLeft(el) {
102 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
108 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
103 var i = 0;
109 var i = 0;
104 while (i<lis.length && !lis[i].visible()) {
110 while (i<lis.length && !lis[i].visible()) {
105 i++;
111 i++;
106 }
112 }
107 if (i>0) {
113 if (i>0) {
108 lis[i-1].show();
114 lis[i-1].show();
109 }
115 }
110 }
116 }
111
117
112 function displayTabsButtons() {
118 function displayTabsButtons() {
113 var lis;
119 var lis;
114 var tabsWidth = 0;
120 var tabsWidth = 0;
115 var i;
121 var i;
116 $$('div.tabs').each(function(el) {
122 $$('div.tabs').each(function(el) {
117 lis = el.down('ul').childElements();
123 lis = el.down('ul').childElements();
118 for (i=0; i<lis.length; i++) {
124 for (i=0; i<lis.length; i++) {
119 if (lis[i].visible()) {
125 if (lis[i].visible()) {
120 tabsWidth += lis[i].getWidth() + 6;
126 tabsWidth += lis[i].getWidth() + 6;
121 }
127 }
122 }
128 }
123 if ((tabsWidth < el.getWidth() - 60) && (lis[0].visible())) {
129 if ((tabsWidth < el.getWidth() - 60) && (lis[0].visible())) {
124 el.down('div.tabs-buttons').hide();
130 el.down('div.tabs-buttons').hide();
125 } else {
131 } else {
126 el.down('div.tabs-buttons').show();
132 el.down('div.tabs-buttons').show();
127 }
133 }
128 });
134 });
129 }
135 }
130
136
131 function setPredecessorFieldsVisibility() {
137 function setPredecessorFieldsVisibility() {
132 relationType = $('relation_relation_type');
138 relationType = $('relation_relation_type');
133 if (relationType && (relationType.value == "precedes" || relationType.value == "follows")) {
139 if (relationType && (relationType.value == "precedes" || relationType.value == "follows")) {
134 Element.show('predecessor_fields');
140 Element.show('predecessor_fields');
135 } else {
141 } else {
136 Element.hide('predecessor_fields');
142 Element.hide('predecessor_fields');
137 }
143 }
138 }
144 }
139
145
140 function promptToRemote(text, param, url) {
146 function promptToRemote(text, param, url) {
141 value = prompt(text + ':');
147 value = prompt(text + ':');
142 if (value) {
148 if (value) {
143 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
149 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
144 return false;
150 return false;
145 }
151 }
146 }
152 }
147
153
148 function collapseScmEntry(id) {
154 function collapseScmEntry(id) {
149 var els = document.getElementsByClassName(id, 'browser');
155 var els = document.getElementsByClassName(id, 'browser');
150 for (var i = 0; i < els.length; i++) {
156 for (var i = 0; i < els.length; i++) {
151 if (els[i].hasClassName('open')) {
157 if (els[i].hasClassName('open')) {
152 collapseScmEntry(els[i].id);
158 collapseScmEntry(els[i].id);
153 }
159 }
154 Element.hide(els[i]);
160 Element.hide(els[i]);
155 }
161 }
156 $(id).removeClassName('open');
162 $(id).removeClassName('open');
157 }
163 }
158
164
159 function expandScmEntry(id) {
165 function expandScmEntry(id) {
160 var els = document.getElementsByClassName(id, 'browser');
166 var els = document.getElementsByClassName(id, 'browser');
161 for (var i = 0; i < els.length; i++) {
167 for (var i = 0; i < els.length; i++) {
162 Element.show(els[i]);
168 Element.show(els[i]);
163 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
169 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
164 expandScmEntry(els[i].id);
170 expandScmEntry(els[i].id);
165 }
171 }
166 }
172 }
167 $(id).addClassName('open');
173 $(id).addClassName('open');
168 }
174 }
169
175
170 function scmEntryClick(id) {
176 function scmEntryClick(id) {
171 el = $(id);
177 el = $(id);
172 if (el.hasClassName('open')) {
178 if (el.hasClassName('open')) {
173 collapseScmEntry(id);
179 collapseScmEntry(id);
174 el.addClassName('collapsed');
180 el.addClassName('collapsed');
175 return false;
181 return false;
176 } else if (el.hasClassName('loaded')) {
182 } else if (el.hasClassName('loaded')) {
177 expandScmEntry(id);
183 expandScmEntry(id);
178 el.removeClassName('collapsed');
184 el.removeClassName('collapsed');
179 return false;
185 return false;
180 }
186 }
181 if (el.hasClassName('loading')) {
187 if (el.hasClassName('loading')) {
182 return false;
188 return false;
183 }
189 }
184 el.addClassName('loading');
190 el.addClassName('loading');
185 return true;
191 return true;
186 }
192 }
187
193
188 function scmEntryLoaded(id) {
194 function scmEntryLoaded(id) {
189 Element.addClassName(id, 'open');
195 Element.addClassName(id, 'open');
190 Element.addClassName(id, 'loaded');
196 Element.addClassName(id, 'loaded');
191 Element.removeClassName(id, 'loading');
197 Element.removeClassName(id, 'loading');
192 }
198 }
193
199
194 function randomKey(size) {
200 function randomKey(size) {
195 var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
201 var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
196 var key = '';
202 var key = '';
197 for (i = 0; i < size; i++) {
203 for (i = 0; i < size; i++) {
198 key += chars[Math.floor(Math.random() * chars.length)];
204 key += chars[Math.floor(Math.random() * chars.length)];
199 }
205 }
200 return key;
206 return key;
201 }
207 }
202
208
203 function observeParentIssueField(url) {
209 function observeParentIssueField(url) {
204 new Ajax.Autocompleter('issue_parent_issue_id',
210 new Ajax.Autocompleter('issue_parent_issue_id',
205 'parent_issue_candidates',
211 'parent_issue_candidates',
206 url,
212 url,
207 { minChars: 3,
213 { minChars: 3,
208 frequency: 0.5,
214 frequency: 0.5,
209 paramName: 'q',
215 paramName: 'q',
210 updateElement: function(value) {
216 updateElement: function(value) {
211 document.getElementById('issue_parent_issue_id').value = value.id;
217 document.getElementById('issue_parent_issue_id').value = value.id;
212 }});
218 }});
213 }
219 }
214
220
215 /* shows and hides ajax indicator */
221 /* shows and hides ajax indicator */
216 Ajax.Responders.register({
222 Ajax.Responders.register({
217 onCreate: function(){
223 onCreate: function(){
218 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
224 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
219 Element.show('ajax-indicator');
225 Element.show('ajax-indicator');
220 }
226 }
221 },
227 },
222 onComplete: function(){
228 onComplete: function(){
223 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
229 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
224 Element.hide('ajax-indicator');
230 Element.hide('ajax-indicator');
225 }
231 }
226 }
232 }
227 });
233 });
228
234
229 function hideOnLoad() {
235 function hideOnLoad() {
230 $$('.hol').each(function(el) {
236 $$('.hol').each(function(el) {
231 el.hide();
237 el.hide();
232 });
238 });
233 }
239 }
234
240
235 Event.observe(window, 'load', hideOnLoad);
241 Event.observe(window, 'load', hideOnLoad);
@@ -1,940 +1,941
1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
2
2
3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
4 h1 {margin:0; padding:0; font-size: 24px;}
4 h1 {margin:0; padding:0; font-size: 24px;}
5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
7 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
7 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
8
8
9 /***** Layout *****/
9 /***** Layout *****/
10 #wrapper {background: white;}
10 #wrapper {background: white;}
11
11
12 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
12 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
13 #top-menu ul {margin: 0; padding: 0;}
13 #top-menu ul {margin: 0; padding: 0;}
14 #top-menu li {
14 #top-menu li {
15 float:left;
15 float:left;
16 list-style-type:none;
16 list-style-type:none;
17 margin: 0px 0px 0px 0px;
17 margin: 0px 0px 0px 0px;
18 padding: 0px 0px 0px 0px;
18 padding: 0px 0px 0px 0px;
19 white-space:nowrap;
19 white-space:nowrap;
20 }
20 }
21 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
21 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
22 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
22 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
23
23
24 #account {float:right;}
24 #account {float:right;}
25
25
26 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
26 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
27 #header a {color:#f8f8f8;}
27 #header a {color:#f8f8f8;}
28 #header h1 a.ancestor { font-size: 80%; }
28 #header h1 a.ancestor { font-size: 80%; }
29 #quick-search {float:right;}
29 #quick-search {float:right;}
30
30
31 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
31 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
32 #main-menu ul {margin: 0; padding: 0;}
32 #main-menu ul {margin: 0; padding: 0;}
33 #main-menu li {
33 #main-menu li {
34 float:left;
34 float:left;
35 list-style-type:none;
35 list-style-type:none;
36 margin: 0px 2px 0px 0px;
36 margin: 0px 2px 0px 0px;
37 padding: 0px 0px 0px 0px;
37 padding: 0px 0px 0px 0px;
38 white-space:nowrap;
38 white-space:nowrap;
39 }
39 }
40 #main-menu li a {
40 #main-menu li a {
41 display: block;
41 display: block;
42 color: #fff;
42 color: #fff;
43 text-decoration: none;
43 text-decoration: none;
44 font-weight: bold;
44 font-weight: bold;
45 margin: 0;
45 margin: 0;
46 padding: 4px 10px 4px 10px;
46 padding: 4px 10px 4px 10px;
47 }
47 }
48 #main-menu li a:hover {background:#759FCF; color:#fff;}
48 #main-menu li a:hover {background:#759FCF; color:#fff;}
49 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
49 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
50
50
51 #admin-menu ul {margin: 0; padding: 0;}
51 #admin-menu ul {margin: 0; padding: 0;}
52 #admin-menu li {margin: 0; padding: 0 0 12px 0; list-style-type:none;}
52 #admin-menu li {margin: 0; padding: 0 0 12px 0; list-style-type:none;}
53
53
54 #admin-menu a { background-position: 0% 40%; background-repeat: no-repeat; padding-left: 20px; padding-top: 2px; padding-bottom: 3px;}
54 #admin-menu a { background-position: 0% 40%; background-repeat: no-repeat; padding-left: 20px; padding-top: 2px; padding-bottom: 3px;}
55 #admin-menu a.projects { background-image: url(../images/projects.png); }
55 #admin-menu a.projects { background-image: url(../images/projects.png); }
56 #admin-menu a.users { background-image: url(../images/user.png); }
56 #admin-menu a.users { background-image: url(../images/user.png); }
57 #admin-menu a.groups { background-image: url(../images/group.png); }
57 #admin-menu a.groups { background-image: url(../images/group.png); }
58 #admin-menu a.roles { background-image: url(../images/database_key.png); }
58 #admin-menu a.roles { background-image: url(../images/database_key.png); }
59 #admin-menu a.trackers { background-image: url(../images/ticket.png); }
59 #admin-menu a.trackers { background-image: url(../images/ticket.png); }
60 #admin-menu a.issue_statuses { background-image: url(../images/ticket_edit.png); }
60 #admin-menu a.issue_statuses { background-image: url(../images/ticket_edit.png); }
61 #admin-menu a.workflows { background-image: url(../images/ticket_go.png); }
61 #admin-menu a.workflows { background-image: url(../images/ticket_go.png); }
62 #admin-menu a.custom_fields { background-image: url(../images/textfield.png); }
62 #admin-menu a.custom_fields { background-image: url(../images/textfield.png); }
63 #admin-menu a.enumerations { background-image: url(../images/text_list_bullets.png); }
63 #admin-menu a.enumerations { background-image: url(../images/text_list_bullets.png); }
64 #admin-menu a.settings { background-image: url(../images/changeset.png); }
64 #admin-menu a.settings { background-image: url(../images/changeset.png); }
65 #admin-menu a.plugins { background-image: url(../images/plugin.png); }
65 #admin-menu a.plugins { background-image: url(../images/plugin.png); }
66 #admin-menu a.info { background-image: url(../images/help.png); }
66 #admin-menu a.info { background-image: url(../images/help.png); }
67 #admin-menu a.server_authentication { background-image: url(../images/server_key.png); }
67 #admin-menu a.server_authentication { background-image: url(../images/server_key.png); }
68
68
69 #main {background-color:#EEEEEE;}
69 #main {background-color:#EEEEEE;}
70
70
71 #sidebar{ float: right; width: 22%; position: relative; z-index: 9; padding: 0; margin: 0;}
71 #sidebar{ float: right; width: 22%; position: relative; z-index: 9; padding: 0; margin: 0;}
72 * html #sidebar{ width: 22%; }
72 * html #sidebar{ width: 22%; }
73 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
73 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
74 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
74 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
75 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
75 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
76 #sidebar .contextual { margin-right: 1em; }
76 #sidebar .contextual { margin-right: 1em; }
77
77
78 #content { width: 75%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
78 #content { width: 75%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
79 * html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
79 * html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
80 html>body #content { min-height: 600px; }
80 html>body #content { min-height: 600px; }
81 * html body #content { height: 600px; } /* IE */
81 * html body #content { height: 600px; } /* IE */
82
82
83 #main.nosidebar #sidebar{ display: none; }
83 #main.nosidebar #sidebar{ display: none; }
84 #main.nosidebar #content{ width: auto; border-right: 0; }
84 #main.nosidebar #content{ width: auto; border-right: 0; }
85
85
86 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
86 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
87
87
88 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
88 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
89 #login-form table td {padding: 6px;}
89 #login-form table td {padding: 6px;}
90 #login-form label {font-weight: bold;}
90 #login-form label {font-weight: bold;}
91 #login-form input#username, #login-form input#password { width: 300px; }
91 #login-form input#username, #login-form input#password { width: 300px; }
92
92
93 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
93 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
94
94
95 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
95 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
96
96
97 /***** Links *****/
97 /***** Links *****/
98 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
98 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
99 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
99 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
100 a img{ border: 0; }
100 a img{ border: 0; }
101
101
102 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
102 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
103
103
104 /***** Tables *****/
104 /***** Tables *****/
105 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
105 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
106 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
106 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
107 table.list td { vertical-align: top; }
107 table.list td { vertical-align: top; }
108 table.list td.id { width: 2%; text-align: center;}
108 table.list td.id { width: 2%; text-align: center;}
109 table.list td.checkbox { width: 15px; padding: 0px;}
109 table.list td.checkbox { width: 15px; padding: 0px;}
110 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
110 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
111 table.list td.buttons a { padding-right: 0.6em; }
111 table.list td.buttons a { padding-right: 0.6em; }
112 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
112 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
113
113
114 tr.project td.name a { white-space:nowrap; }
114 tr.project td.name a { white-space:nowrap; }
115
115
116 tr.project.idnt td.name a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
116 tr.project.idnt td.name a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
117 tr.project.idnt-1 td.name {padding-left: 0.5em;}
117 tr.project.idnt-1 td.name {padding-left: 0.5em;}
118 tr.project.idnt-2 td.name {padding-left: 2em;}
118 tr.project.idnt-2 td.name {padding-left: 2em;}
119 tr.project.idnt-3 td.name {padding-left: 3.5em;}
119 tr.project.idnt-3 td.name {padding-left: 3.5em;}
120 tr.project.idnt-4 td.name {padding-left: 5em;}
120 tr.project.idnt-4 td.name {padding-left: 5em;}
121 tr.project.idnt-5 td.name {padding-left: 6.5em;}
121 tr.project.idnt-5 td.name {padding-left: 6.5em;}
122 tr.project.idnt-6 td.name {padding-left: 8em;}
122 tr.project.idnt-6 td.name {padding-left: 8em;}
123 tr.project.idnt-7 td.name {padding-left: 9.5em;}
123 tr.project.idnt-7 td.name {padding-left: 9.5em;}
124 tr.project.idnt-8 td.name {padding-left: 11em;}
124 tr.project.idnt-8 td.name {padding-left: 11em;}
125 tr.project.idnt-9 td.name {padding-left: 12.5em;}
125 tr.project.idnt-9 td.name {padding-left: 12.5em;}
126
126
127 tr.issue { text-align: center; white-space: nowrap; }
127 tr.issue { text-align: center; white-space: nowrap; }
128 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
128 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
129 tr.issue td.subject { text-align: left; }
129 tr.issue td.subject { text-align: left; }
130 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
130 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
131
131
132 tr.issue.idnt td.subject a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
132 tr.issue.idnt td.subject a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
133 tr.issue.idnt-1 td.subject {padding-left: 0.5em;}
133 tr.issue.idnt-1 td.subject {padding-left: 0.5em;}
134 tr.issue.idnt-2 td.subject {padding-left: 2em;}
134 tr.issue.idnt-2 td.subject {padding-left: 2em;}
135 tr.issue.idnt-3 td.subject {padding-left: 3.5em;}
135 tr.issue.idnt-3 td.subject {padding-left: 3.5em;}
136 tr.issue.idnt-4 td.subject {padding-left: 5em;}
136 tr.issue.idnt-4 td.subject {padding-left: 5em;}
137 tr.issue.idnt-5 td.subject {padding-left: 6.5em;}
137 tr.issue.idnt-5 td.subject {padding-left: 6.5em;}
138 tr.issue.idnt-6 td.subject {padding-left: 8em;}
138 tr.issue.idnt-6 td.subject {padding-left: 8em;}
139 tr.issue.idnt-7 td.subject {padding-left: 9.5em;}
139 tr.issue.idnt-7 td.subject {padding-left: 9.5em;}
140 tr.issue.idnt-8 td.subject {padding-left: 11em;}
140 tr.issue.idnt-8 td.subject {padding-left: 11em;}
141 tr.issue.idnt-9 td.subject {padding-left: 12.5em;}
141 tr.issue.idnt-9 td.subject {padding-left: 12.5em;}
142
142
143 tr.entry { border: 1px solid #f8f8f8; }
143 tr.entry { border: 1px solid #f8f8f8; }
144 tr.entry td { white-space: nowrap; }
144 tr.entry td { white-space: nowrap; }
145 tr.entry td.filename { width: 30%; }
145 tr.entry td.filename { width: 30%; }
146 tr.entry td.size { text-align: right; font-size: 90%; }
146 tr.entry td.size { text-align: right; font-size: 90%; }
147 tr.entry td.revision, tr.entry td.author { text-align: center; }
147 tr.entry td.revision, tr.entry td.author { text-align: center; }
148 tr.entry td.age { text-align: right; }
148 tr.entry td.age { text-align: right; }
149 tr.entry.file td.filename a { margin-left: 16px; }
149 tr.entry.file td.filename a { margin-left: 16px; }
150
150
151 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
151 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
152 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
152 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
153
153
154 tr.changeset td.author { text-align: center; width: 15%; }
154 tr.changeset td.author { text-align: center; width: 15%; }
155 tr.changeset td.committed_on { text-align: center; width: 15%; }
155 tr.changeset td.committed_on { text-align: center; width: 15%; }
156
156
157 table.files tr.file td { text-align: center; }
157 table.files tr.file td { text-align: center; }
158 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
158 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
159 table.files tr.file td.digest { font-size: 80%; }
159 table.files tr.file td.digest { font-size: 80%; }
160
160
161 table.members td.roles, table.memberships td.roles { width: 45%; }
161 table.members td.roles, table.memberships td.roles { width: 45%; }
162
162
163 tr.message { height: 2.6em; }
163 tr.message { height: 2.6em; }
164 tr.message td.subject { padding-left: 20px; }
164 tr.message td.subject { padding-left: 20px; }
165 tr.message td.created_on { white-space: nowrap; }
165 tr.message td.created_on { white-space: nowrap; }
166 tr.message td.last_message { font-size: 80%; white-space: nowrap; }
166 tr.message td.last_message { font-size: 80%; white-space: nowrap; }
167 tr.message.locked td.subject { background: url(../images/locked.png) no-repeat 0 1px; }
167 tr.message.locked td.subject { background: url(../images/locked.png) no-repeat 0 1px; }
168 tr.message.sticky td.subject { background: url(../images/bullet_go.png) no-repeat 0 1px; font-weight: bold; }
168 tr.message.sticky td.subject { background: url(../images/bullet_go.png) no-repeat 0 1px; font-weight: bold; }
169
169
170 tr.version.closed, tr.version.closed a { color: #999; }
170 tr.version.closed, tr.version.closed a { color: #999; }
171 tr.version td.name { padding-left: 20px; }
171 tr.version td.name { padding-left: 20px; }
172 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
172 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
173 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; }
173 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; }
174
174
175 tr.user td { width:13%; }
175 tr.user td { width:13%; }
176 tr.user td.email { width:18%; }
176 tr.user td.email { width:18%; }
177 tr.user td { white-space: nowrap; }
177 tr.user td { white-space: nowrap; }
178 tr.user.locked, tr.user.registered { color: #aaa; }
178 tr.user.locked, tr.user.registered { color: #aaa; }
179 tr.user.locked a, tr.user.registered a { color: #aaa; }
179 tr.user.locked a, tr.user.registered a { color: #aaa; }
180
180
181 tr.time-entry { text-align: center; white-space: nowrap; }
181 tr.time-entry { text-align: center; white-space: nowrap; }
182 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
182 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
183 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
183 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
184 td.hours .hours-dec { font-size: 0.9em; }
184 td.hours .hours-dec { font-size: 0.9em; }
185
185
186 table.plugins td { vertical-align: middle; }
186 table.plugins td { vertical-align: middle; }
187 table.plugins td.configure { text-align: right; padding-right: 1em; }
187 table.plugins td.configure { text-align: right; padding-right: 1em; }
188 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
188 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
189 table.plugins span.description { display: block; font-size: 0.9em; }
189 table.plugins span.description { display: block; font-size: 0.9em; }
190 table.plugins span.url { display: block; font-size: 0.9em; }
190 table.plugins span.url { display: block; font-size: 0.9em; }
191
191
192 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
192 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
193 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
193 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
194
194
195 table.list tbody tr:hover { background-color:#ffffdd; }
195 table.list tbody tr:hover { background-color:#ffffdd; }
196 table.list tbody tr.group:hover { background-color:inherit; }
196 table.list tbody tr.group:hover { background-color:inherit; }
197 table td {padding:2px;}
197 table td {padding:2px;}
198 table p {margin:0;}
198 table p {margin:0;}
199 .odd {background-color:#f6f7f8;}
199 .odd {background-color:#f6f7f8;}
200 .even {background-color: #fff;}
200 .even {background-color: #fff;}
201
201
202 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
202 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
203 a.sort.asc { background-image: url(../images/sort_asc.png); }
203 a.sort.asc { background-image: url(../images/sort_asc.png); }
204 a.sort.desc { background-image: url(../images/sort_desc.png); }
204 a.sort.desc { background-image: url(../images/sort_desc.png); }
205
205
206 table.attributes { width: 100% }
206 table.attributes { width: 100% }
207 table.attributes th { vertical-align: top; text-align: left; }
207 table.attributes th { vertical-align: top; text-align: left; }
208 table.attributes td { vertical-align: top; }
208 table.attributes td { vertical-align: top; }
209
209
210 table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
210 table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
211
211
212 td.center {text-align:center;}
212 td.center {text-align:center;}
213
213
214 h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; }
214 h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; }
215
215
216 div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; }
216 div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; }
217 div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; }
217 div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; }
218 div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
218 div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
219 div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
219 div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
220
220
221 #watchers ul {margin: 0; padding: 0;}
221 #watchers ul {margin: 0; padding: 0;}
222 #watchers li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
222 #watchers li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
223 #watchers select {width: 95%; display: block;}
223 #watchers select {width: 95%; display: block;}
224 #watchers a.delete {opacity: 0.4;}
224 #watchers a.delete {opacity: 0.4;}
225 #watchers a.delete:hover {opacity: 1;}
225 #watchers a.delete:hover {opacity: 1;}
226 #watchers img.gravatar {vertical-align: middle;margin: 0 4px 2px 0;}
226 #watchers img.gravatar {vertical-align: middle;margin: 0 4px 2px 0;}
227
227
228 .highlight { background-color: #FCFD8D;}
228 .highlight { background-color: #FCFD8D;}
229 .highlight.token-1 { background-color: #faa;}
229 .highlight.token-1 { background-color: #faa;}
230 .highlight.token-2 { background-color: #afa;}
230 .highlight.token-2 { background-color: #afa;}
231 .highlight.token-3 { background-color: #aaf;}
231 .highlight.token-3 { background-color: #aaf;}
232
232
233 .box{
233 .box{
234 padding:6px;
234 padding:6px;
235 margin-bottom: 10px;
235 margin-bottom: 10px;
236 background-color:#f6f6f6;
236 background-color:#f6f6f6;
237 color:#505050;
237 color:#505050;
238 line-height:1.5em;
238 line-height:1.5em;
239 border: 1px solid #e4e4e4;
239 border: 1px solid #e4e4e4;
240 }
240 }
241
241
242 div.square {
242 div.square {
243 border: 1px solid #999;
243 border: 1px solid #999;
244 float: left;
244 float: left;
245 margin: .3em .4em 0 .4em;
245 margin: .3em .4em 0 .4em;
246 overflow: hidden;
246 overflow: hidden;
247 width: .6em; height: .6em;
247 width: .6em; height: .6em;
248 }
248 }
249 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
249 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
250 .contextual input, .contextual select {font-size:0.9em;}
250 .contextual input, .contextual select {font-size:0.9em;}
251 .message .contextual { margin-top: 0; }
251 .message .contextual { margin-top: 0; }
252
252
253 .splitcontentleft{float:left; width:49%;}
253 .splitcontentleft{float:left; width:49%;}
254 .splitcontentright{float:right; width:49%;}
254 .splitcontentright{float:right; width:49%;}
255 form {display: inline;}
255 form {display: inline;}
256 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
256 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
257 fieldset {border: 1px solid #e4e4e4; margin:0;}
257 fieldset {border: 1px solid #e4e4e4; margin:0;}
258 legend {color: #484848;}
258 legend {color: #484848;}
259 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
259 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
260 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
260 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
261 blockquote blockquote { margin-left: 0;}
261 blockquote blockquote { margin-left: 0;}
262 acronym { border-bottom: 1px dotted; cursor: help; }
262 acronym { border-bottom: 1px dotted; cursor: help; }
263 textarea.wiki-edit { width: 99%; }
263 textarea.wiki-edit { width: 99%; }
264 li p {margin-top: 0;}
264 li p {margin-top: 0;}
265 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
265 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
266 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
266 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
267 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
267 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
268 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
268 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
269
269
270 div.issue div.subject div div { padding-left: 16px; }
270 div.issue div.subject div div { padding-left: 16px; }
271 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
271 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
272 div.issue div.subject>div>p { margin-top: 0.5em; }
272 div.issue div.subject>div>p { margin-top: 0.5em; }
273 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
273 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
274
274
275 #issue_tree table.issues { border: 0; }
275 #issue_tree table.issues { border: 0; }
276 #issue_tree td.checkbox {display:none;}
276 #issue_tree td.checkbox {display:none;}
277
277
278 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
278 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
279 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
279 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
280 fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); }
280 fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); }
281
281
282 fieldset#date-range p { margin: 2px 0 2px 0; }
282 fieldset#date-range p { margin: 2px 0 2px 0; }
283 fieldset#filters table { border-collapse: collapse; }
283 fieldset#filters table { border-collapse: collapse; }
284 fieldset#filters table td { padding: 0; vertical-align: middle; }
284 fieldset#filters table td { padding: 0; vertical-align: middle; }
285 fieldset#filters tr.filter { height: 2em; }
285 fieldset#filters tr.filter { height: 2em; }
286 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
286 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
287 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
287 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
288
288
289 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
289 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
290 div#issue-changesets div.changeset { padding: 4px;}
290 div#issue-changesets div.changeset { padding: 4px;}
291 div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
291 div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
292 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
292 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
293
293
294 div#activity dl, #search-results { margin-left: 2em; }
294 div#activity dl, #search-results { margin-left: 2em; }
295 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
295 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
296 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
296 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
297 div#activity dt.me .time { border-bottom: 1px solid #999; }
297 div#activity dt.me .time { border-bottom: 1px solid #999; }
298 div#activity dt .time { color: #777; font-size: 80%; }
298 div#activity dt .time { color: #777; font-size: 80%; }
299 div#activity dd .description, #search-results dd .description { font-style: italic; }
299 div#activity dd .description, #search-results dd .description { font-style: italic; }
300 div#activity span.project:after, #search-results span.project:after { content: " -"; }
300 div#activity span.project:after, #search-results span.project:after { content: " -"; }
301 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
301 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
302
302
303 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
303 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
304
304
305 div#search-results-counts {float:right;}
305 div#search-results-counts {float:right;}
306 div#search-results-counts ul { margin-top: 0.5em; }
306 div#search-results-counts ul { margin-top: 0.5em; }
307 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
307 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
308
308
309 dt.issue { background-image: url(../images/ticket.png); }
309 dt.issue { background-image: url(../images/ticket.png); }
310 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
310 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
311 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
311 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
312 dt.issue-note { background-image: url(../images/ticket_note.png); }
312 dt.issue-note { background-image: url(../images/ticket_note.png); }
313 dt.changeset { background-image: url(../images/changeset.png); }
313 dt.changeset { background-image: url(../images/changeset.png); }
314 dt.news { background-image: url(../images/news.png); }
314 dt.news { background-image: url(../images/news.png); }
315 dt.message { background-image: url(../images/message.png); }
315 dt.message { background-image: url(../images/message.png); }
316 dt.reply { background-image: url(../images/comments.png); }
316 dt.reply { background-image: url(../images/comments.png); }
317 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
317 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
318 dt.attachment { background-image: url(../images/attachment.png); }
318 dt.attachment { background-image: url(../images/attachment.png); }
319 dt.document { background-image: url(../images/document.png); }
319 dt.document { background-image: url(../images/document.png); }
320 dt.project { background-image: url(../images/projects.png); }
320 dt.project { background-image: url(../images/projects.png); }
321 dt.time-entry { background-image: url(../images/time.png); }
321 dt.time-entry { background-image: url(../images/time.png); }
322
322
323 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
323 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
324
324
325 div#roadmap .related-issues { margin-bottom: 1em; }
325 div#roadmap .related-issues { margin-bottom: 1em; }
326 div#roadmap .related-issues td.checkbox { display: none; }
326 div#roadmap .related-issues td.checkbox { display: none; }
327 div#roadmap .wiki h1:first-child { display: none; }
327 div#roadmap .wiki h1:first-child { display: none; }
328 div#roadmap .wiki h1 { font-size: 120%; }
328 div#roadmap .wiki h1 { font-size: 120%; }
329 div#roadmap .wiki h2 { font-size: 110%; }
329 div#roadmap .wiki h2 { font-size: 110%; }
330
330
331 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
331 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
332 div#version-summary fieldset { margin-bottom: 1em; }
332 div#version-summary fieldset { margin-bottom: 1em; }
333 div#version-summary .total-hours { text-align: right; }
333 div#version-summary .total-hours { text-align: right; }
334
334
335 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
335 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
336 table#time-report tbody tr { font-style: italic; color: #777; }
336 table#time-report tbody tr { font-style: italic; color: #777; }
337 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
337 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
338 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
338 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
339 table#time-report .hours-dec { font-size: 0.9em; }
339 table#time-report .hours-dec { font-size: 0.9em; }
340
340
341 form .attributes { margin-bottom: 8px; }
341 form .attributes { margin-bottom: 8px; }
342 form .attributes p { padding-top: 1px; padding-bottom: 2px; }
342 form .attributes p { padding-top: 1px; padding-bottom: 2px; }
343 form .attributes select { min-width: 50%; }
343 form .attributes select { min-width: 50%; }
344
344
345 ul.projects { margin: 0; padding-left: 1em; }
345 ul.projects { margin: 0; padding-left: 1em; }
346 ul.projects.root { margin: 0; padding: 0; }
346 ul.projects.root { margin: 0; padding: 0; }
347 ul.projects ul.projects { border-left: 3px solid #e0e0e0; }
347 ul.projects ul.projects { border-left: 3px solid #e0e0e0; }
348 ul.projects li.root { list-style-type:none; margin-bottom: 1em; }
348 ul.projects li.root { list-style-type:none; margin-bottom: 1em; }
349 ul.projects li.child { list-style-type:none; margin-top: 1em;}
349 ul.projects li.child { list-style-type:none; margin-top: 1em;}
350 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
350 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
351 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
351 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
352
352
353 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
353 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
354 #tracker_project_ids li { list-style-type:none; }
354 #tracker_project_ids li { list-style-type:none; }
355
355
356 ul.properties {padding:0; font-size: 0.9em; color: #777;}
356 ul.properties {padding:0; font-size: 0.9em; color: #777;}
357 ul.properties li {list-style-type:none;}
357 ul.properties li {list-style-type:none;}
358 ul.properties li span {font-style:italic;}
358 ul.properties li span {font-style:italic;}
359
359
360 .total-hours { font-size: 110%; font-weight: bold; }
360 .total-hours { font-size: 110%; font-weight: bold; }
361 .total-hours span.hours-int { font-size: 120%; }
361 .total-hours span.hours-int { font-size: 120%; }
362
362
363 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
363 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
364 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
364 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
365
365
366 #workflow_copy_form select { width: 200px; }
366 #workflow_copy_form select { width: 200px; }
367
367
368 .pagination {font-size: 90%}
368 .pagination {font-size: 90%}
369 p.pagination {margin-top:8px;}
369 p.pagination {margin-top:8px;}
370
370
371 /***** Tabular forms ******/
371 /***** Tabular forms ******/
372 .tabular p{
372 .tabular p{
373 margin: 0;
373 margin: 0;
374 padding: 5px 0 8px 0;
374 padding: 5px 0 8px 0;
375 padding-left: 180px; /*width of left column containing the label elements*/
375 padding-left: 180px; /*width of left column containing the label elements*/
376 height: 1%;
376 height: 1%;
377 clear:left;
377 clear:left;
378 }
378 }
379
379
380 html>body .tabular p {overflow:hidden;}
380 html>body .tabular p {overflow:hidden;}
381
381
382 .tabular label{
382 .tabular label{
383 font-weight: bold;
383 font-weight: bold;
384 float: left;
384 float: left;
385 text-align: right;
385 text-align: right;
386 margin-left: -180px; /*width of left column*/
386 margin-left: -180px; /*width of left column*/
387 width: 175px; /*width of labels. Should be smaller than left column to create some right
387 width: 175px; /*width of labels. Should be smaller than left column to create some right
388 margin*/
388 margin*/
389 }
389 }
390
390
391 .tabular label.floating{
391 .tabular label.floating{
392 font-weight: normal;
392 font-weight: normal;
393 margin-left: 0px;
393 margin-left: 0px;
394 text-align: left;
394 text-align: left;
395 width: 270px;
395 width: 270px;
396 }
396 }
397
397
398 .tabular label.block{
398 .tabular label.block{
399 font-weight: normal;
399 font-weight: normal;
400 margin-left: 0px !important;
400 margin-left: 0px !important;
401 text-align: left;
401 text-align: left;
402 float: none;
402 float: none;
403 display: block;
403 display: block;
404 width: auto;
404 width: auto;
405 }
405 }
406
406
407 .tabular label.inline{
407 .tabular label.inline{
408 float:none;
408 float:none;
409 margin-left: 5px !important;
409 margin-left: 5px !important;
410 width: auto;
410 width: auto;
411 }
411 }
412
412
413 input#time_entry_comments { width: 90%;}
413 input#time_entry_comments { width: 90%;}
414
414
415 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
415 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
416
416
417 .tabular.settings p{ padding-left: 300px; }
417 .tabular.settings p{ padding-left: 300px; }
418 .tabular.settings label{ margin-left: -300px; width: 295px; }
418 .tabular.settings label{ margin-left: -300px; width: 295px; }
419 .tabular.settings textarea { width: 99%; }
419 .tabular.settings textarea { width: 99%; }
420
420
421 fieldset.settings label { display: block; }
421 fieldset.settings label { display: block; }
422 .parent { padding-left: 20px; }
422
423
423 .required {color: #bb0000;}
424 .required {color: #bb0000;}
424 .summary {font-style: italic;}
425 .summary {font-style: italic;}
425
426
426 #attachments_fields input[type=text] {margin-left: 8px; }
427 #attachments_fields input[type=text] {margin-left: 8px; }
427
428
428 div.attachments { margin-top: 12px; }
429 div.attachments { margin-top: 12px; }
429 div.attachments p { margin:4px 0 2px 0; }
430 div.attachments p { margin:4px 0 2px 0; }
430 div.attachments img { vertical-align: middle; }
431 div.attachments img { vertical-align: middle; }
431 div.attachments span.author { font-size: 0.9em; color: #888; }
432 div.attachments span.author { font-size: 0.9em; color: #888; }
432
433
433 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
434 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
434 .other-formats span + span:before { content: "| "; }
435 .other-formats span + span:before { content: "| "; }
435
436
436 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
437 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
437
438
438 /* Project members tab */
439 /* Project members tab */
439 div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
440 div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
440 div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
441 div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
441 div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; }
442 div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; }
442 div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; }
443 div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; }
443 div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; }
444 div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; }
444 div#tab-content-members fieldset div, div#tab-content-users fieldset div { max-height: 400px; overflow:auto; }
445 div#tab-content-members fieldset div, div#tab-content-users fieldset div { max-height: 400px; overflow:auto; }
445
446
446 table.members td.group { padding-left: 20px; background: url(../images/group.png) no-repeat 0% 50%; }
447 table.members td.group { padding-left: 20px; background: url(../images/group.png) no-repeat 0% 50%; }
447
448
448 input#principal_search, input#user_search {width:100%}
449 input#principal_search, input#user_search {width:100%}
449
450
450 * html div#tab-content-members fieldset div { height: 450px; }
451 * html div#tab-content-members fieldset div { height: 450px; }
451
452
452 /***** Flash & error messages ****/
453 /***** Flash & error messages ****/
453 #errorExplanation, div.flash, .nodata, .warning {
454 #errorExplanation, div.flash, .nodata, .warning {
454 padding: 4px 4px 4px 30px;
455 padding: 4px 4px 4px 30px;
455 margin-bottom: 12px;
456 margin-bottom: 12px;
456 font-size: 1.1em;
457 font-size: 1.1em;
457 border: 2px solid;
458 border: 2px solid;
458 }
459 }
459
460
460 div.flash {margin-top: 8px;}
461 div.flash {margin-top: 8px;}
461
462
462 div.flash.error, #errorExplanation {
463 div.flash.error, #errorExplanation {
463 background: url(../images/exclamation.png) 8px 50% no-repeat;
464 background: url(../images/exclamation.png) 8px 50% no-repeat;
464 background-color: #ffe3e3;
465 background-color: #ffe3e3;
465 border-color: #dd0000;
466 border-color: #dd0000;
466 color: #880000;
467 color: #880000;
467 }
468 }
468
469
469 div.flash.notice {
470 div.flash.notice {
470 background: url(../images/true.png) 8px 5px no-repeat;
471 background: url(../images/true.png) 8px 5px no-repeat;
471 background-color: #dfffdf;
472 background-color: #dfffdf;
472 border-color: #9fcf9f;
473 border-color: #9fcf9f;
473 color: #005f00;
474 color: #005f00;
474 }
475 }
475
476
476 div.flash.warning {
477 div.flash.warning {
477 background: url(../images/warning.png) 8px 5px no-repeat;
478 background: url(../images/warning.png) 8px 5px no-repeat;
478 background-color: #FFEBC1;
479 background-color: #FFEBC1;
479 border-color: #FDBF3B;
480 border-color: #FDBF3B;
480 color: #A6750C;
481 color: #A6750C;
481 text-align: left;
482 text-align: left;
482 }
483 }
483
484
484 .nodata, .warning {
485 .nodata, .warning {
485 text-align: center;
486 text-align: center;
486 background-color: #FFEBC1;
487 background-color: #FFEBC1;
487 border-color: #FDBF3B;
488 border-color: #FDBF3B;
488 color: #A6750C;
489 color: #A6750C;
489 }
490 }
490
491
491 #errorExplanation ul { font-size: 0.9em;}
492 #errorExplanation ul { font-size: 0.9em;}
492 #errorExplanation h2, #errorExplanation p { display: none; }
493 #errorExplanation h2, #errorExplanation p { display: none; }
493
494
494 /***** Ajax indicator ******/
495 /***** Ajax indicator ******/
495 #ajax-indicator {
496 #ajax-indicator {
496 position: absolute; /* fixed not supported by IE */
497 position: absolute; /* fixed not supported by IE */
497 background-color:#eee;
498 background-color:#eee;
498 border: 1px solid #bbb;
499 border: 1px solid #bbb;
499 top:35%;
500 top:35%;
500 left:40%;
501 left:40%;
501 width:20%;
502 width:20%;
502 font-weight:bold;
503 font-weight:bold;
503 text-align:center;
504 text-align:center;
504 padding:0.6em;
505 padding:0.6em;
505 z-index:100;
506 z-index:100;
506 filter:alpha(opacity=50);
507 filter:alpha(opacity=50);
507 opacity: 0.5;
508 opacity: 0.5;
508 }
509 }
509
510
510 html>body #ajax-indicator { position: fixed; }
511 html>body #ajax-indicator { position: fixed; }
511
512
512 #ajax-indicator span {
513 #ajax-indicator span {
513 background-position: 0% 40%;
514 background-position: 0% 40%;
514 background-repeat: no-repeat;
515 background-repeat: no-repeat;
515 background-image: url(../images/loading.gif);
516 background-image: url(../images/loading.gif);
516 padding-left: 26px;
517 padding-left: 26px;
517 vertical-align: bottom;
518 vertical-align: bottom;
518 }
519 }
519
520
520 /***** Calendar *****/
521 /***** Calendar *****/
521 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
522 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
522 table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; }
523 table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; }
523 table.cal thead th.week-number {width: auto;}
524 table.cal thead th.week-number {width: auto;}
524 table.cal tbody tr {height: 100px;}
525 table.cal tbody tr {height: 100px;}
525 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
526 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
526 table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;}
527 table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;}
527 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
528 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
528 table.cal td.odd p.day-num {color: #bbb;}
529 table.cal td.odd p.day-num {color: #bbb;}
529 table.cal td.today {background:#ffffdd;}
530 table.cal td.today {background:#ffffdd;}
530 table.cal td.today p.day-num {font-weight: bold;}
531 table.cal td.today p.day-num {font-weight: bold;}
531 table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
532 table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
532 table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
533 table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
533 table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
534 table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
534 p.cal.legend span {display:block;}
535 p.cal.legend span {display:block;}
535
536
536 /***** Tooltips ******/
537 /***** Tooltips ******/
537 .tooltip{position:relative;z-index:24;}
538 .tooltip{position:relative;z-index:24;}
538 .tooltip:hover{z-index:25;color:#000;}
539 .tooltip:hover{z-index:25;color:#000;}
539 .tooltip span.tip{display: none; text-align:left;}
540 .tooltip span.tip{display: none; text-align:left;}
540
541
541 div.tooltip:hover span.tip{
542 div.tooltip:hover span.tip{
542 display:block;
543 display:block;
543 position:absolute;
544 position:absolute;
544 top:12px; left:24px; width:270px;
545 top:12px; left:24px; width:270px;
545 border:1px solid #555;
546 border:1px solid #555;
546 background-color:#fff;
547 background-color:#fff;
547 padding: 4px;
548 padding: 4px;
548 font-size: 0.8em;
549 font-size: 0.8em;
549 color:#505050;
550 color:#505050;
550 }
551 }
551
552
552 /***** Progress bar *****/
553 /***** Progress bar *****/
553 table.progress {
554 table.progress {
554 border: 1px solid #D7D7D7;
555 border: 1px solid #D7D7D7;
555 border-collapse: collapse;
556 border-collapse: collapse;
556 border-spacing: 0pt;
557 border-spacing: 0pt;
557 empty-cells: show;
558 empty-cells: show;
558 text-align: center;
559 text-align: center;
559 float:left;
560 float:left;
560 margin: 1px 6px 1px 0px;
561 margin: 1px 6px 1px 0px;
561 }
562 }
562
563
563 table.progress td { height: 0.9em; }
564 table.progress td { height: 0.9em; }
564 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
565 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
565 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
566 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
566 table.progress td.open { background: #FFF none repeat scroll 0%; }
567 table.progress td.open { background: #FFF none repeat scroll 0%; }
567 p.pourcent {font-size: 80%;}
568 p.pourcent {font-size: 80%;}
568 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
569 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
569
570
570 /***** Tabs *****/
571 /***** Tabs *****/
571 #content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
572 #content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
572 #content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:1em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
573 #content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:1em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
573 #content .tabs ul li {
574 #content .tabs ul li {
574 float:left;
575 float:left;
575 list-style-type:none;
576 list-style-type:none;
576 white-space:nowrap;
577 white-space:nowrap;
577 margin-right:8px;
578 margin-right:8px;
578 background:#fff;
579 background:#fff;
579 position:relative;
580 position:relative;
580 margin-bottom:-1px;
581 margin-bottom:-1px;
581 }
582 }
582 #content .tabs ul li a{
583 #content .tabs ul li a{
583 display:block;
584 display:block;
584 font-size: 0.9em;
585 font-size: 0.9em;
585 text-decoration:none;
586 text-decoration:none;
586 line-height:1.3em;
587 line-height:1.3em;
587 padding:4px 6px 4px 6px;
588 padding:4px 6px 4px 6px;
588 border: 1px solid #ccc;
589 border: 1px solid #ccc;
589 border-bottom: 1px solid #bbbbbb;
590 border-bottom: 1px solid #bbbbbb;
590 background-color: #eeeeee;
591 background-color: #eeeeee;
591 color:#777;
592 color:#777;
592 font-weight:bold;
593 font-weight:bold;
593 }
594 }
594
595
595 #content .tabs ul li a:hover {
596 #content .tabs ul li a:hover {
596 background-color: #ffffdd;
597 background-color: #ffffdd;
597 text-decoration:none;
598 text-decoration:none;
598 }
599 }
599
600
600 #content .tabs ul li a.selected {
601 #content .tabs ul li a.selected {
601 background-color: #fff;
602 background-color: #fff;
602 border: 1px solid #bbbbbb;
603 border: 1px solid #bbbbbb;
603 border-bottom: 1px solid #fff;
604 border-bottom: 1px solid #fff;
604 }
605 }
605
606
606 #content .tabs ul li a.selected:hover {
607 #content .tabs ul li a.selected:hover {
607 background-color: #fff;
608 background-color: #fff;
608 }
609 }
609
610
610 div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
611 div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
611
612
612 button.tab-left, button.tab-right {
613 button.tab-left, button.tab-right {
613 font-size: 0.9em;
614 font-size: 0.9em;
614 cursor: pointer;
615 cursor: pointer;
615 height:24px;
616 height:24px;
616 border: 1px solid #ccc;
617 border: 1px solid #ccc;
617 border-bottom: 1px solid #bbbbbb;
618 border-bottom: 1px solid #bbbbbb;
618 position:absolute;
619 position:absolute;
619 padding:4px;
620 padding:4px;
620 width: 20px;
621 width: 20px;
621 bottom: -1px;
622 bottom: -1px;
622 }
623 }
623
624
624 button.tab-left {
625 button.tab-left {
625 right: 20px;
626 right: 20px;
626 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
627 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
627 }
628 }
628
629
629 button.tab-right {
630 button.tab-right {
630 right: 0;
631 right: 0;
631 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;
632 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;
632 }
633 }
633
634
634 /***** Auto-complete *****/
635 /***** Auto-complete *****/
635 div.autocomplete {
636 div.autocomplete {
636 position:absolute;
637 position:absolute;
637 width:400px;
638 width:400px;
638 margin:0;
639 margin:0;
639 padding:0;
640 padding:0;
640 }
641 }
641 div.autocomplete ul {
642 div.autocomplete ul {
642 list-style-type:none;
643 list-style-type:none;
643 margin:0;
644 margin:0;
644 padding:0;
645 padding:0;
645 }
646 }
646 div.autocomplete ul li {
647 div.autocomplete ul li {
647 list-style-type:none;
648 list-style-type:none;
648 display:block;
649 display:block;
649 margin:-1px 0 0 0;
650 margin:-1px 0 0 0;
650 padding:2px;
651 padding:2px;
651 cursor:pointer;
652 cursor:pointer;
652 font-size: 90%;
653 font-size: 90%;
653 border: 1px solid #ccc;
654 border: 1px solid #ccc;
654 border-left: 1px solid #ccc;
655 border-left: 1px solid #ccc;
655 border-right: 1px solid #ccc;
656 border-right: 1px solid #ccc;
656 background-color:white;
657 background-color:white;
657 }
658 }
658 div.autocomplete ul li.selected { background-color: #ffb;}
659 div.autocomplete ul li.selected { background-color: #ffb;}
659 div.autocomplete ul li span.informal {
660 div.autocomplete ul li span.informal {
660 font-size: 80%;
661 font-size: 80%;
661 color: #aaa;
662 color: #aaa;
662 }
663 }
663
664
664 #parent_issue_candidates ul li {width: 500px;}
665 #parent_issue_candidates ul li {width: 500px;}
665
666
666 /***** Diff *****/
667 /***** Diff *****/
667 .diff_out { background: #fcc; }
668 .diff_out { background: #fcc; }
668 .diff_in { background: #cfc; }
669 .diff_in { background: #cfc; }
669
670
670 /***** Wiki *****/
671 /***** Wiki *****/
671 div.wiki table {
672 div.wiki table {
672 border: 1px solid #505050;
673 border: 1px solid #505050;
673 border-collapse: collapse;
674 border-collapse: collapse;
674 margin-bottom: 1em;
675 margin-bottom: 1em;
675 }
676 }
676
677
677 div.wiki table, div.wiki td, div.wiki th {
678 div.wiki table, div.wiki td, div.wiki th {
678 border: 1px solid #bbb;
679 border: 1px solid #bbb;
679 padding: 4px;
680 padding: 4px;
680 }
681 }
681
682
682 div.wiki .external {
683 div.wiki .external {
683 background-position: 0% 60%;
684 background-position: 0% 60%;
684 background-repeat: no-repeat;
685 background-repeat: no-repeat;
685 padding-left: 12px;
686 padding-left: 12px;
686 background-image: url(../images/external.png);
687 background-image: url(../images/external.png);
687 }
688 }
688
689
689 div.wiki a.new {
690 div.wiki a.new {
690 color: #b73535;
691 color: #b73535;
691 }
692 }
692
693
693 div.wiki pre {
694 div.wiki pre {
694 margin: 1em 1em 1em 1.6em;
695 margin: 1em 1em 1em 1.6em;
695 padding: 2px 2px 2px 0;
696 padding: 2px 2px 2px 0;
696 background-color: #fafafa;
697 background-color: #fafafa;
697 border: 1px solid #dadada;
698 border: 1px solid #dadada;
698 width:auto;
699 width:auto;
699 overflow-x: auto;
700 overflow-x: auto;
700 overflow-y: hidden;
701 overflow-y: hidden;
701 }
702 }
702
703
703 div.wiki ul.toc {
704 div.wiki ul.toc {
704 background-color: #ffffdd;
705 background-color: #ffffdd;
705 border: 1px solid #e4e4e4;
706 border: 1px solid #e4e4e4;
706 padding: 4px;
707 padding: 4px;
707 line-height: 1.2em;
708 line-height: 1.2em;
708 margin-bottom: 12px;
709 margin-bottom: 12px;
709 margin-right: 12px;
710 margin-right: 12px;
710 margin-left: 0;
711 margin-left: 0;
711 display: table
712 display: table
712 }
713 }
713 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
714 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
714
715
715 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
716 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
716 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
717 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
717 div.wiki ul.toc li { list-style-type:none;}
718 div.wiki ul.toc li { list-style-type:none;}
718 div.wiki ul.toc li.heading2 { margin-left: 6px; }
719 div.wiki ul.toc li.heading2 { margin-left: 6px; }
719 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
720 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
720
721
721 div.wiki ul.toc a {
722 div.wiki ul.toc a {
722 font-size: 0.9em;
723 font-size: 0.9em;
723 font-weight: normal;
724 font-weight: normal;
724 text-decoration: none;
725 text-decoration: none;
725 color: #606060;
726 color: #606060;
726 }
727 }
727 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
728 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
728
729
729 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
730 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
730 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
731 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
731 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
732 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
732
733
733 div.wiki img { vertical-align: middle; }
734 div.wiki img { vertical-align: middle; }
734
735
735 /***** My page layout *****/
736 /***** My page layout *****/
736 .block-receiver {
737 .block-receiver {
737 border:1px dashed #c0c0c0;
738 border:1px dashed #c0c0c0;
738 margin-bottom: 20px;
739 margin-bottom: 20px;
739 padding: 15px 0 15px 0;
740 padding: 15px 0 15px 0;
740 }
741 }
741
742
742 .mypage-box {
743 .mypage-box {
743 margin:0 0 20px 0;
744 margin:0 0 20px 0;
744 color:#505050;
745 color:#505050;
745 line-height:1.5em;
746 line-height:1.5em;
746 }
747 }
747
748
748 .handle {
749 .handle {
749 cursor: move;
750 cursor: move;
750 }
751 }
751
752
752 a.close-icon {
753 a.close-icon {
753 display:block;
754 display:block;
754 margin-top:3px;
755 margin-top:3px;
755 overflow:hidden;
756 overflow:hidden;
756 width:12px;
757 width:12px;
757 height:12px;
758 height:12px;
758 background-repeat: no-repeat;
759 background-repeat: no-repeat;
759 cursor:pointer;
760 cursor:pointer;
760 background-image:url('../images/close.png');
761 background-image:url('../images/close.png');
761 }
762 }
762
763
763 a.close-icon:hover {
764 a.close-icon:hover {
764 background-image:url('../images/close_hl.png');
765 background-image:url('../images/close_hl.png');
765 }
766 }
766
767
767 /***** Gantt chart *****/
768 /***** Gantt chart *****/
768 .gantt_hdr {
769 .gantt_hdr {
769 position:absolute;
770 position:absolute;
770 top:0;
771 top:0;
771 height:16px;
772 height:16px;
772 border-top: 1px solid #c0c0c0;
773 border-top: 1px solid #c0c0c0;
773 border-bottom: 1px solid #c0c0c0;
774 border-bottom: 1px solid #c0c0c0;
774 border-right: 1px solid #c0c0c0;
775 border-right: 1px solid #c0c0c0;
775 text-align: center;
776 text-align: center;
776 overflow: hidden;
777 overflow: hidden;
777 }
778 }
778
779
779 .task {
780 .task {
780 position: absolute;
781 position: absolute;
781 height:8px;
782 height:8px;
782 font-size:0.8em;
783 font-size:0.8em;
783 color:#888;
784 color:#888;
784 padding:0;
785 padding:0;
785 margin:0;
786 margin:0;
786 line-height:0.8em;
787 line-height:0.8em;
787 white-space:nowrap;
788 white-space:nowrap;
788 }
789 }
789
790
790 .task.label {width:100%;}
791 .task.label {width:100%;}
791
792
792 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
793 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
793 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }
794 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }
794 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
795 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
795
796
796 .task_todo.parent { background: #888; border: 1px solid #888; height: 6px;}
797 .task_todo.parent { background: #888; border: 1px solid #888; height: 6px;}
797 .task_late.parent, .task_done.parent { height: 3px;}
798 .task_late.parent, .task_done.parent { height: 3px;}
798 .task_todo.parent .left { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -5px; left: 0px; top: -1px;}
799 .task_todo.parent .left { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -5px; left: 0px; top: -1px;}
799 .task_todo.parent .right { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-right: -5px; right: 0px; top: -1px;}
800 .task_todo.parent .right { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-right: -5px; right: 0px; top: -1px;}
800
801
801 .milestone { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; }
802 .milestone { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; }
802 .milestone_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
803 .milestone_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
803 .milestone_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
804 .milestone_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
804 .milestone_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
805 .milestone_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
805 .project-line { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; }
806 .project-line { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; }
806 .project_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
807 .project_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
807 .project_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
808 .project_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
808 .project_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
809 .project_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
809
810
810 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
811 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
811 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
812 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
812
813
813 /***** Icons *****/
814 /***** Icons *****/
814 .icon {
815 .icon {
815 background-position: 0% 50%;
816 background-position: 0% 50%;
816 background-repeat: no-repeat;
817 background-repeat: no-repeat;
817 padding-left: 20px;
818 padding-left: 20px;
818 padding-top: 2px;
819 padding-top: 2px;
819 padding-bottom: 3px;
820 padding-bottom: 3px;
820 }
821 }
821
822
822 .icon-add { background-image: url(../images/add.png); }
823 .icon-add { background-image: url(../images/add.png); }
823 .icon-edit { background-image: url(../images/edit.png); }
824 .icon-edit { background-image: url(../images/edit.png); }
824 .icon-copy { background-image: url(../images/copy.png); }
825 .icon-copy { background-image: url(../images/copy.png); }
825 .icon-duplicate { background-image: url(../images/duplicate.png); }
826 .icon-duplicate { background-image: url(../images/duplicate.png); }
826 .icon-del { background-image: url(../images/delete.png); }
827 .icon-del { background-image: url(../images/delete.png); }
827 .icon-move { background-image: url(../images/move.png); }
828 .icon-move { background-image: url(../images/move.png); }
828 .icon-save { background-image: url(../images/save.png); }
829 .icon-save { background-image: url(../images/save.png); }
829 .icon-cancel { background-image: url(../images/cancel.png); }
830 .icon-cancel { background-image: url(../images/cancel.png); }
830 .icon-multiple { background-image: url(../images/table_multiple.png); }
831 .icon-multiple { background-image: url(../images/table_multiple.png); }
831 .icon-folder { background-image: url(../images/folder.png); }
832 .icon-folder { background-image: url(../images/folder.png); }
832 .open .icon-folder { background-image: url(../images/folder_open.png); }
833 .open .icon-folder { background-image: url(../images/folder_open.png); }
833 .icon-package { background-image: url(../images/package.png); }
834 .icon-package { background-image: url(../images/package.png); }
834 .icon-home { background-image: url(../images/home.png); }
835 .icon-home { background-image: url(../images/home.png); }
835 .icon-user { background-image: url(../images/user.png); }
836 .icon-user { background-image: url(../images/user.png); }
836 .icon-projects { background-image: url(../images/projects.png); }
837 .icon-projects { background-image: url(../images/projects.png); }
837 .icon-help { background-image: url(../images/help.png); }
838 .icon-help { background-image: url(../images/help.png); }
838 .icon-attachment { background-image: url(../images/attachment.png); }
839 .icon-attachment { background-image: url(../images/attachment.png); }
839 .icon-history { background-image: url(../images/history.png); }
840 .icon-history { background-image: url(../images/history.png); }
840 .icon-time { background-image: url(../images/time.png); }
841 .icon-time { background-image: url(../images/time.png); }
841 .icon-time-add { background-image: url(../images/time_add.png); }
842 .icon-time-add { background-image: url(../images/time_add.png); }
842 .icon-stats { background-image: url(../images/stats.png); }
843 .icon-stats { background-image: url(../images/stats.png); }
843 .icon-warning { background-image: url(../images/warning.png); }
844 .icon-warning { background-image: url(../images/warning.png); }
844 .icon-fav { background-image: url(../images/fav.png); }
845 .icon-fav { background-image: url(../images/fav.png); }
845 .icon-fav-off { background-image: url(../images/fav_off.png); }
846 .icon-fav-off { background-image: url(../images/fav_off.png); }
846 .icon-reload { background-image: url(../images/reload.png); }
847 .icon-reload { background-image: url(../images/reload.png); }
847 .icon-lock { background-image: url(../images/locked.png); }
848 .icon-lock { background-image: url(../images/locked.png); }
848 .icon-unlock { background-image: url(../images/unlock.png); }
849 .icon-unlock { background-image: url(../images/unlock.png); }
849 .icon-checked { background-image: url(../images/true.png); }
850 .icon-checked { background-image: url(../images/true.png); }
850 .icon-details { background-image: url(../images/zoom_in.png); }
851 .icon-details { background-image: url(../images/zoom_in.png); }
851 .icon-report { background-image: url(../images/report.png); }
852 .icon-report { background-image: url(../images/report.png); }
852 .icon-comment { background-image: url(../images/comment.png); }
853 .icon-comment { background-image: url(../images/comment.png); }
853 .icon-summary { background-image: url(../images/lightning.png); }
854 .icon-summary { background-image: url(../images/lightning.png); }
854 .icon-server-authentication { background-image: url(../images/server_key.png); }
855 .icon-server-authentication { background-image: url(../images/server_key.png); }
855 .icon-issue { background-image: url(../images/ticket.png); }
856 .icon-issue { background-image: url(../images/ticket.png); }
856
857
857 .icon-file { background-image: url(../images/files/default.png); }
858 .icon-file { background-image: url(../images/files/default.png); }
858 .icon-file.text-plain { background-image: url(../images/files/text.png); }
859 .icon-file.text-plain { background-image: url(../images/files/text.png); }
859 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
860 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
860 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
861 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
861 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
862 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
862 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
863 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
863 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
864 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
864 .icon-file.image-gif { background-image: url(../images/files/image.png); }
865 .icon-file.image-gif { background-image: url(../images/files/image.png); }
865 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
866 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
866 .icon-file.image-png { background-image: url(../images/files/image.png); }
867 .icon-file.image-png { background-image: url(../images/files/image.png); }
867 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
868 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
868 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
869 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
869 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
870 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
870 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
871 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
871
872
872 img.gravatar {
873 img.gravatar {
873 padding: 2px;
874 padding: 2px;
874 border: solid 1px #d5d5d5;
875 border: solid 1px #d5d5d5;
875 background: #fff;
876 background: #fff;
876 }
877 }
877
878
878 div.issue img.gravatar {
879 div.issue img.gravatar {
879 float: right;
880 float: right;
880 margin: 0 0 0 1em;
881 margin: 0 0 0 1em;
881 padding: 5px;
882 padding: 5px;
882 }
883 }
883
884
884 div.issue table img.gravatar {
885 div.issue table img.gravatar {
885 height: 14px;
886 height: 14px;
886 width: 14px;
887 width: 14px;
887 padding: 2px;
888 padding: 2px;
888 float: left;
889 float: left;
889 margin: 0 0.5em 0 0;
890 margin: 0 0.5em 0 0;
890 }
891 }
891
892
892 h2 img.gravatar {
893 h2 img.gravatar {
893 padding: 3px;
894 padding: 3px;
894 margin: -2px 4px -4px 0;
895 margin: -2px 4px -4px 0;
895 vertical-align: top;
896 vertical-align: top;
896 }
897 }
897
898
898 h4 img.gravatar {
899 h4 img.gravatar {
899 padding: 3px;
900 padding: 3px;
900 margin: -6px 0 -4px 0;
901 margin: -6px 0 -4px 0;
901 vertical-align: top;
902 vertical-align: top;
902 }
903 }
903
904
904 td.username img.gravatar {
905 td.username img.gravatar {
905 float: left;
906 float: left;
906 margin: 0 1em 0 0;
907 margin: 0 1em 0 0;
907 }
908 }
908
909
909 #activity dt img.gravatar {
910 #activity dt img.gravatar {
910 float: left;
911 float: left;
911 margin: 0 1em 1em 0;
912 margin: 0 1em 1em 0;
912 }
913 }
913
914
914 /* Used on 12px Gravatar img tags without the icon background */
915 /* Used on 12px Gravatar img tags without the icon background */
915 .icon-gravatar {
916 .icon-gravatar {
916 float: left;
917 float: left;
917 margin-right: 4px;
918 margin-right: 4px;
918 }
919 }
919
920
920 #activity dt,
921 #activity dt,
921 .journal {
922 .journal {
922 clear: left;
923 clear: left;
923 }
924 }
924
925
925 .journal-link {
926 .journal-link {
926 float: right;
927 float: right;
927 }
928 }
928
929
929 h2 img { vertical-align:middle; }
930 h2 img { vertical-align:middle; }
930
931
931 .hascontextmenu { cursor: context-menu; }
932 .hascontextmenu { cursor: context-menu; }
932
933
933 /***** Media print specific styles *****/
934 /***** Media print specific styles *****/
934 @media print {
935 @media print {
935 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
936 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
936 #main { background: #fff; }
937 #main { background: #fff; }
937 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
938 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
938 #wiki_add_attachment { display:none; }
939 #wiki_add_attachment { display:none; }
939 .hide-when-print { display: none; }
940 .hide-when-print { display: none; }
940 }
941 }
@@ -1,38 +1,31
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require File.dirname(__FILE__) + '/../../../test_helper'
18 require File.dirname(__FILE__) + '/../../../test_helper'
19
19
20 class Redmine::NotifiableTest < ActiveSupport::TestCase
20 class Redmine::NotifiableTest < ActiveSupport::TestCase
21 def setup
21 def setup
22 end
22 end
23
23
24 def test_included_core_notifications
24 def test_all
25 assert_equal 11, Redmine::Notifiable::CoreNotifications.length
25 assert_equal 11, Redmine::Notifiable.all.length
26 Redmine::Notifiable::CoreNotifications.length
27
26
28 %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
27 %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
29 assert Redmine::Notifiable::CoreNotifications.include?(notifiable), "missing #{notifiable}"
28 assert Redmine::Notifiable.all.collect(&:name).include?(notifiable), "missing #{notifiable}"
30 end
31 end
32
33 def test_all_should_include_all_of_the_core_notifications
34 Redmine::Notifiable::CoreNotifications.each do |notifiable|
35 assert Redmine::Notifiable.all.include?(notifiable), "missing #{notifiable} in #all"
36 end
29 end
37 end
30 end
38 end
31 end
General Comments 0
You need to be logged in to leave comments. Login now