##// END OF EJS Templates
Restyles user search fields and ajax indicator....
Jean-Philippe Lang -
r8754:bd2581e7c958
parent child
Show More
@@ -1,53 +1,55
1 1 <div class="splitcontentleft">
2 2 <% if @group.users.any? %>
3 3 <table class="list users">
4 4 <thead><tr>
5 5 <th><%= l(:label_user) %></th>
6 6 <th style="width:15%"></th>
7 7 </tr></thead>
8 8 <tbody>
9 9 <% @group.users.sort.each do |user| %>
10 10 <tr id="user-<%= user.id %>" class="<%= cycle 'odd', 'even' %>">
11 11 <td class="user"><%= link_to_user user %></td>
12 12 <td class="buttons">
13 13 <%= link_to_remote(
14 14 l(:button_delete),
15 15 { :url => group_user_path(@group, :user_id => user),
16 16 :method => :delete },
17 17 :class => 'icon icon-del'
18 18 ) %>
19 19 </td>
20 20 </tr>
21 21 <% end %>
22 22 </tbody>
23 23 </table>
24 24 <% else %>
25 25 <p class="nodata"><%= l(:label_no_data) %></p>
26 26 <% end %>
27 27 </div>
28 28
29 29 <div class="splitcontentright">
30 30 <% users = User.active.not_in_group(@group).all(:limit => 100) %>
31 31 <% if users.any? %>
32 32 <% remote_form_for(@group, :url => group_users_path(@group), :html => {:method => :post}) do |f| %>
33 33 <fieldset><legend><%=l(:label_user_new)%></legend>
34 34
35 35 <p><%= label_tag "user_search", l(:label_user_search) %><%= text_field_tag 'user_search', nil %></p>
36 36 <%= observe_field(:user_search,
37 37 :frequency => 0.5,
38 38 :update => :users,
39 39 :url => autocomplete_for_user_group_path(@group),
40 40 :method => :get,
41 :before => '$("user_search").addClassName("ajax-loading")',
42 :complete => '$("user_search").removeClassName("ajax-loading")',
41 43 :with => 'q')
42 44 %>
43 45
44 46 <div id="users">
45 47 <%= principals_check_box_tags 'user_ids[]', users %>
46 48 </div>
47 49
48 50 <p><%= submit_tag l(:button_add) %></p>
49 51 </fieldset>
50 52 <% end %>
51 53 <% end %>
52 54
53 55 </div>
@@ -1,89 +1,91
1 1 <%= error_messages_for 'member' %>
2 2 <% roles = Role.find_all_givable
3 3 members = @project.member_principals.find(:all, :include => [:roles, :principal]).sort %>
4 4
5 5 <div class="splitcontentleft">
6 6 <% if members.any? %>
7 7 <table class="list members">
8 8 <thead><tr>
9 9 <th><%= l(:label_user) %> / <%= l(:label_group) %></th>
10 10 <th><%= l(:label_role_plural) %></th>
11 11 <th style="width:15%"></th>
12 12 <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %>
13 13 </tr></thead>
14 14 <tbody>
15 15 <% members.each do |member| %>
16 16 <% next if member.new_record? %>
17 17 <tr id="member-<%= member.id %>" class="<%= cycle 'odd', 'even' %> member">
18 18 <td class="<%= member.principal.class.name.downcase %>"><%= link_to_user member.principal %></td>
19 19 <td class="roles">
20 20 <span id="member-<%= member.id %>-roles"><%=h member.roles.sort.collect(&:to_s).join(', ') %></span>
21 21 <% remote_form_for(:membership, member, :url => membership_path(member),
22 22 :method => :put,
23 23 :html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }) do |f| %>
24 24 <p><% roles.each do |role| %>
25 25 <label><%= check_box_tag 'membership[role_ids][]', role.id, member.roles.include?(role),
26 26 :disabled => member.member_roles.detect {|mr| mr.role_id == role.id && !mr.inherited_from.nil?} %> <%=h role %></label><br />
27 27 <% end %></p>
28 28 <%= hidden_field_tag 'membership[role_ids][]', '' %>
29 29 <p><%= submit_tag l(:button_change), :class => "small" %>
30 30 <%= link_to_function l(:button_cancel),
31 31 "$('member-#{member.id}-roles').show(); $('member-#{member.id}-roles-form').hide(); return false;"
32 32 %></p>
33 33 <% end %>
34 34 </td>
35 35 <td class="buttons">
36 36 <%= link_to_function l(:button_edit),
37 37 "$('member-#{member.id}-roles').hide(); $('member-#{member.id}-roles-form').show(); return false;",
38 38 :class => 'icon icon-edit' %>
39 39 <%= link_to_remote(
40 40 l(:button_delete),
41 41 { :url => membership_path(member),
42 42 :method => :delete,
43 43 :confirm => (!User.current.admin? && member.include?(User.current) ? l(:text_own_membership_delete_confirmation) : nil) },
44 44 :title => l(:button_delete),
45 45 :class => 'icon icon-del'
46 46 ) if member.deletable? %>
47 47 </td>
48 48 <%= call_hook(:view_projects_settings_members_table_row, { :project => @project, :member => member}) %>
49 49 </tr>
50 50 <% end; reset_cycle %>
51 51 </tbody>
52 52 </table>
53 53 <% else %>
54 54 <p class="nodata"><%= l(:label_no_data) %></p>
55 55 <% end %>
56 56 </div>
57 57
58 58 <% principals = Principal.active.find(:all, :limit => 100, :order => 'type, login, lastname ASC') - @project.principals %>
59 59
60 60 <div class="splitcontentright">
61 61 <% if roles.any? && principals.any? %>
62 62 <% remote_form_for(:membership, @member, :url => project_memberships_path(@project), :method => :post,
63 63 :loading => '$(\'member-add-submit\').disable();',
64 64 :complete => 'if($(\'member-add-submit\')) $(\'member-add-submit\').enable();') do |f| %>
65 65 <fieldset><legend><%=l(:label_member_new)%></legend>
66 66
67 67 <p><%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %></p>
68 68 <%= observe_field(:principal_search,
69 69 :frequency => 0.5,
70 70 :update => :principals,
71 71 :url => autocomplete_project_memberships_path(@project),
72 72 :method => :get,
73 :before => '$("principal_search").addClassName("ajax-loading")',
74 :complete => '$("principal_search").removeClassName("ajax-loading")',
73 75 :with => 'q')
74 76 %>
75 77
76 78 <div id="principals">
77 79 <%= principals_check_box_tags 'membership[user_ids][]', principals %>
78 80 </div>
79 81
80 82 <p><%= l(:label_role_plural) %>:
81 83 <% roles.each do |role| %>
82 84 <label><%= check_box_tag 'membership[role_ids][]', role.id %> <%=h role %></label>
83 85 <% end %></p>
84 86
85 87 <p><%= submit_tag l(:button_add), :id => 'member-add-submit' %></p>
86 88 </fieldset>
87 89 <% end %>
88 90 <% end %>
89 91 </div>
@@ -1,30 +1,32
1 1 <h3 class="title"><%= l(:permission_add_issue_watchers) %></h3>
2 2
3 3 <% form_remote_tag :url => {:controller => 'watchers',
4 4 :action => 'create',
5 5 :object_type => watched.class.name.underscore,
6 6 :object_id => watched},
7 7 :method => :post,
8 8 :html => {:id => 'new-watcher-form'} do %>
9 9
10 10 <p><%= label_tag 'user_search', l(:label_user_search) %><%= text_field_tag 'user_search', nil %></p>
11 11 <%= observe_field(:user_search,
12 12 :frequency => 0.5,
13 13 :update => :users_for_watcher,
14 14 :method => :get,
15 :before => '$("user_search").addClassName("ajax-loading")',
16 :complete => '$("user_search").removeClassName("ajax-loading")',
15 17 :url => {
16 18 :controller => 'watchers',
17 19 :action => 'autocomplete_for_user',
18 20 :object_type => watched.class.name.underscore,
19 21 :object_id => watched},
20 22 :with => 'q') %>
21 23
22 24 <div id="users_for_watcher">
23 25 <%= principals_check_box_tags 'watcher[user_ids][]', watched.addable_watcher_users %>
24 26 </div>
25 27
26 28 <p class="buttons">
27 29 <%= submit_tag l(:button_add), :name => nil, :onclick => "hideModal(this);" %>
28 30 <%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
29 31 </p>
30 32 <% end %>
@@ -1,523 +1,523
1 1 /* Redmine - project management software
2 2 Copyright (C) 2006-2012 Jean-Philippe Lang */
3 3
4 4 function checkAll (id, checked) {
5 5 var els = Element.descendants(id);
6 6 for (var i = 0; i < els.length; i++) {
7 7 if (els[i].disabled==false) {
8 8 els[i].checked = checked;
9 9 }
10 10 }
11 11 }
12 12
13 13 function toggleCheckboxesBySelector(selector) {
14 14 boxes = $$(selector);
15 15 var all_checked = true;
16 16 for (i = 0; i < boxes.length; i++) { if (boxes[i].checked == false) { all_checked = false; } }
17 17 for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
18 18 }
19 19
20 20 function setCheckboxesBySelector(checked, selector) {
21 21 var boxes = $$(selector);
22 22 boxes.each(function(ele) {
23 23 ele.checked = checked;
24 24 });
25 25 }
26 26
27 27 function showAndScrollTo(id, focus) {
28 28 Element.show(id);
29 29 if (focus!=null) { Form.Element.focus(focus); }
30 30 Element.scrollTo(id);
31 31 }
32 32
33 33 function toggleRowGroup(el) {
34 34 var tr = Element.up(el, 'tr');
35 35 var n = Element.next(tr);
36 36 tr.toggleClassName('open');
37 37 while (n != undefined && !n.hasClassName('group')) {
38 38 Element.toggle(n);
39 39 n = Element.next(n);
40 40 }
41 41 }
42 42
43 43 function collapseAllRowGroups(el) {
44 44 var tbody = Element.up(el, 'tbody');
45 45 tbody.childElements('tr').each(function(tr) {
46 46 if (tr.hasClassName('group')) {
47 47 tr.removeClassName('open');
48 48 } else {
49 49 tr.hide();
50 50 }
51 51 })
52 52 }
53 53
54 54 function expandAllRowGroups(el) {
55 55 var tbody = Element.up(el, 'tbody');
56 56 tbody.childElements('tr').each(function(tr) {
57 57 if (tr.hasClassName('group')) {
58 58 tr.addClassName('open');
59 59 } else {
60 60 tr.show();
61 61 }
62 62 })
63 63 }
64 64
65 65 function toggleAllRowGroups(el) {
66 66 var tr = Element.up(el, 'tr');
67 67 if (tr.hasClassName('open')) {
68 68 collapseAllRowGroups(el);
69 69 } else {
70 70 expandAllRowGroups(el);
71 71 }
72 72 }
73 73
74 74 function toggleFieldset(el) {
75 75 var fieldset = Element.up(el, 'fieldset');
76 76 fieldset.toggleClassName('collapsed');
77 77 Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
78 78 }
79 79
80 80 function hideFieldset(el) {
81 81 var fieldset = Element.up(el, 'fieldset');
82 82 fieldset.toggleClassName('collapsed');
83 83 fieldset.down('div').hide();
84 84 }
85 85
86 86 function add_filter() {
87 87 select = $('add_filter_select');
88 88 field = select.value
89 89 Element.show('tr_' + field);
90 90 check_box = $('cb_' + field);
91 91 check_box.checked = true;
92 92 toggle_filter(field);
93 93 select.selectedIndex = 0;
94 94
95 95 for (i=0; i<select.options.length; i++) {
96 96 if (select.options[i].value == field) {
97 97 select.options[i].disabled = true;
98 98 }
99 99 }
100 100 }
101 101
102 102 function toggle_filter(field) {
103 103 check_box = $('cb_' + field);
104 104 if (check_box.checked) {
105 105 Element.show("operators_" + field);
106 106 Form.Element.enable("operators_" + field);
107 107 toggle_operator(field);
108 108 } else {
109 109 Element.hide("operators_" + field);
110 110 Form.Element.disable("operators_" + field);
111 111 enableValues(field, []);
112 112 }
113 113 }
114 114
115 115 function enableValues(field, indexes) {
116 116 var f = $$(".values_" + field);
117 117 for(var i=0;i<f.length;i++) {
118 118 if (indexes.include(i)) {
119 119 Form.Element.enable(f[i]);
120 120 f[i].up('span').show();
121 121 } else {
122 122 f[i].value = '';
123 123 Form.Element.disable(f[i]);
124 124 f[i].up('span').hide();
125 125 }
126 126 }
127 127 if (indexes.length > 0) {
128 128 Element.show("div_values_" + field);
129 129 } else {
130 130 Element.hide("div_values_" + field);
131 131 }
132 132 }
133 133
134 134 function toggle_operator(field) {
135 135 operator = $("operators_" + field);
136 136 switch (operator.value) {
137 137 case "!*":
138 138 case "*":
139 139 case "t":
140 140 case "w":
141 141 case "o":
142 142 case "c":
143 143 enableValues(field, []);
144 144 break;
145 145 case "><":
146 146 enableValues(field, [0,1]);
147 147 break;
148 148 case "<t+":
149 149 case ">t+":
150 150 case "t+":
151 151 case ">t-":
152 152 case "<t-":
153 153 case "t-":
154 154 enableValues(field, [2]);
155 155 break;
156 156 default:
157 157 enableValues(field, [0]);
158 158 break;
159 159 }
160 160 }
161 161
162 162 function toggle_multi_select(el) {
163 163 var select = $(el);
164 164 if (select.multiple == true) {
165 165 select.multiple = false;
166 166 } else {
167 167 select.multiple = true;
168 168 }
169 169 }
170 170
171 171 function submit_query_form(id) {
172 172 selectAllOptions("selected_columns");
173 173 $(id).submit();
174 174 }
175 175
176 176 function apply_filters_observer() {
177 177 $$("#query_form input[type=text]").invoke("observe", "keypress", function(e){
178 178 if(e.keyCode == Event.KEY_RETURN) {
179 179 submit_query_form("query_form");
180 180 }
181 181 });
182 182 }
183 183
184 184 var fileFieldCount = 1;
185 185
186 186 function addFileField() {
187 187 var fields = $('attachments_fields');
188 188 if (fields.childElements().length >= 10) return false;
189 189 fileFieldCount++;
190 190 var s = new Element('span');
191 191 s.update(fields.down('span').innerHTML);
192 192 s.down('input.file').name = "attachments[" + fileFieldCount + "][file]";
193 193 s.down('input.description').name = "attachments[" + fileFieldCount + "][description]";
194 194 fields.appendChild(s);
195 195 }
196 196
197 197 function removeFileField(el) {
198 198 var fields = $('attachments_fields');
199 199 var s = Element.up(el, 'span');
200 200 if (fields.childElements().length > 1) {
201 201 s.remove();
202 202 } else {
203 203 s.update(s.innerHTML);
204 204 }
205 205 }
206 206
207 207 function checkFileSize(el, maxSize, message) {
208 208 var files = el.files;
209 209 if (files) {
210 210 for (var i=0; i<files.length; i++) {
211 211 if (files[i].size > maxSize) {
212 212 alert(message);
213 213 el.value = "";
214 214 }
215 215 }
216 216 }
217 217 }
218 218
219 219 function showTab(name) {
220 220 var f = $$('div#content .tab-content');
221 221 for(var i=0; i<f.length; i++){
222 222 Element.hide(f[i]);
223 223 }
224 224 var f = $$('div.tabs a');
225 225 for(var i=0; i<f.length; i++){
226 226 Element.removeClassName(f[i], "selected");
227 227 }
228 228 Element.show('tab-content-' + name);
229 229 Element.addClassName('tab-' + name, "selected");
230 230 return false;
231 231 }
232 232
233 233 function moveTabRight(el) {
234 234 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
235 235 var tabsWidth = 0;
236 236 var i;
237 237 for (i=0; i<lis.length; i++) {
238 238 if (lis[i].visible()) {
239 239 tabsWidth += lis[i].getWidth() + 6;
240 240 }
241 241 }
242 242 if (tabsWidth < Element.up(el, 'div.tabs').getWidth() - 60) {
243 243 return;
244 244 }
245 245 i=0;
246 246 while (i<lis.length && !lis[i].visible()) {
247 247 i++;
248 248 }
249 249 lis[i].hide();
250 250 }
251 251
252 252 function moveTabLeft(el) {
253 253 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
254 254 var i = 0;
255 255 while (i<lis.length && !lis[i].visible()) {
256 256 i++;
257 257 }
258 258 if (i>0) {
259 259 lis[i-1].show();
260 260 }
261 261 }
262 262
263 263 function displayTabsButtons() {
264 264 var lis;
265 265 var tabsWidth = 0;
266 266 var i;
267 267 $$('div.tabs').each(function(el) {
268 268 lis = el.down('ul').childElements();
269 269 for (i=0; i<lis.length; i++) {
270 270 if (lis[i].visible()) {
271 271 tabsWidth += lis[i].getWidth() + 6;
272 272 }
273 273 }
274 274 if ((tabsWidth < el.getWidth() - 60) && (lis[0].visible())) {
275 275 el.down('div.tabs-buttons').hide();
276 276 } else {
277 277 el.down('div.tabs-buttons').show();
278 278 }
279 279 });
280 280 }
281 281
282 282 function setPredecessorFieldsVisibility() {
283 283 relationType = $('relation_relation_type');
284 284 if (relationType && (relationType.value == "precedes" || relationType.value == "follows")) {
285 285 Element.show('predecessor_fields');
286 286 } else {
287 287 Element.hide('predecessor_fields');
288 288 }
289 289 }
290 290
291 291 function promptToRemote(text, param, url) {
292 292 value = prompt(text + ':');
293 293 if (value) {
294 294 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
295 295 return false;
296 296 }
297 297 }
298 298
299 299 function showModal(id, width) {
300 300 el = $(id);
301 301 if (el == undefined || el.visible()) {return;}
302 302 var h = $$('body')[0].getHeight();
303 303 var d = document.createElement("div");
304 304 d.id = 'modalbg';
305 305 $('main').appendChild(d);
306 306 $('modalbg').setStyle({ width: '100%', height: h + 'px' });
307 307 $('modalbg').show();
308 308
309 309 var pageWidth = document.viewport.getWidth();
310 310 if (width) {
311 311 el.setStyle({'width': width});
312 312 }
313 313 el.setStyle({'left': (((pageWidth - el.getWidth())/2 *100) / pageWidth) + '%'});
314 314 el.addClassName('modal');
315 315 el.show();
316 316
317 317 if (el.down("input[type=text]")) {
318 318 el.down("input[type=text]").focus();
319 319 } else if (el.down("input[type=submit]")) {
320 320 el.down("input[type=submit]").focus();
321 321 }
322 322 }
323 323
324 324 function hideModal(el) {
325 325 var modal;
326 326 if (el) {
327 327 modal = Element.up(el, 'div.modal');
328 328 } else {
329 329 modal = $('ajax-modal');
330 330 }
331 331 if (modal) {
332 332 modal.hide();
333 333 }
334 334 var bg = $('modalbg');
335 335 if (bg) {
336 336 bg.remove();
337 337 }
338 338 }
339 339
340 340 function collapseScmEntry(id) {
341 341 var els = document.getElementsByClassName(id, 'browser');
342 342 for (var i = 0; i < els.length; i++) {
343 343 if (els[i].hasClassName('open')) {
344 344 collapseScmEntry(els[i].id);
345 345 }
346 346 Element.hide(els[i]);
347 347 }
348 348 $(id).removeClassName('open');
349 349 }
350 350
351 351 function expandScmEntry(id) {
352 352 var els = document.getElementsByClassName(id, 'browser');
353 353 for (var i = 0; i < els.length; i++) {
354 354 Element.show(els[i]);
355 355 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
356 356 expandScmEntry(els[i].id);
357 357 }
358 358 }
359 359 $(id).addClassName('open');
360 360 }
361 361
362 362 function scmEntryClick(id) {
363 363 el = $(id);
364 364 if (el.hasClassName('open')) {
365 365 collapseScmEntry(id);
366 366 el.addClassName('collapsed');
367 367 return false;
368 368 } else if (el.hasClassName('loaded')) {
369 369 expandScmEntry(id);
370 370 el.removeClassName('collapsed');
371 371 return false;
372 372 }
373 373 if (el.hasClassName('loading')) {
374 374 return false;
375 375 }
376 376 el.addClassName('loading');
377 377 return true;
378 378 }
379 379
380 380 function scmEntryLoaded(id) {
381 381 Element.addClassName(id, 'open');
382 382 Element.addClassName(id, 'loaded');
383 383 Element.removeClassName(id, 'loading');
384 384 }
385 385
386 386 function randomKey(size) {
387 387 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');
388 388 var key = '';
389 389 for (i = 0; i < size; i++) {
390 390 key += chars[Math.floor(Math.random() * chars.length)];
391 391 }
392 392 return key;
393 393 }
394 394
395 395 function observeParentIssueField(url) {
396 396 new Ajax.Autocompleter('issue_parent_issue_id',
397 397 'parent_issue_candidates',
398 398 url,
399 399 { minChars: 3,
400 400 frequency: 0.5,
401 401 paramName: 'q',
402 402 method: 'get',
403 403 updateElement: function(value) {
404 404 document.getElementById('issue_parent_issue_id').value = value.id;
405 405 }});
406 406 }
407 407
408 408 function observeRelatedIssueField(url) {
409 409 new Ajax.Autocompleter('relation_issue_to_id',
410 410 'related_issue_candidates',
411 411 url,
412 412 { minChars: 3,
413 413 frequency: 0.5,
414 414 paramName: 'q',
415 415 method: 'get',
416 416 updateElement: function(value) {
417 417 document.getElementById('relation_issue_to_id').value = value.id;
418 418 },
419 419 parameters: 'scope=all'
420 420 });
421 421 }
422 422
423 423 function setVisible(id, visible) {
424 424 var el = $(id);
425 425 if (el) {if (visible) {el.show();} else {el.hide();}}
426 426 }
427 427
428 428 function observeProjectModules() {
429 429 var f = function() {
430 430 /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */
431 431 var c = ($('project_enabled_module_names_issue_tracking').checked == true);
432 432 setVisible('project_trackers', c);
433 433 setVisible('project_issue_custom_fields', c);
434 434 };
435 435
436 436 Event.observe(window, 'load', f);
437 437 Event.observe('project_enabled_module_names_issue_tracking', 'change', f);
438 438 }
439 439
440 440 /*
441 441 * Class used to warn user when leaving a page with unsaved textarea
442 442 * Author: mathias.fischer@berlinonline.de
443 443 */
444 444
445 445 var WarnLeavingUnsaved = Class.create({
446 446 observedForms: false,
447 447 observedElements: false,
448 448 changedForms: false,
449 449 message: null,
450 450
451 451 initialize: function(message){
452 452 this.observedForms = $$('form');
453 453 this.observedElements = $$('textarea');
454 454 this.message = message;
455 455
456 456 this.observedElements.each(this.observeChange.bind(this));
457 457 this.observedForms.each(this.submitAction.bind(this));
458 458
459 459 window.onbeforeunload = this.unload.bind(this);
460 460 },
461 461
462 462 unload: function(){
463 463 this.observedElements.each(function(el) {el.blur();})
464 464 if(this.changedForms)
465 465 return this.message;
466 466 },
467 467
468 468 setChanged: function(){
469 469 this.changedForms = true;
470 470 },
471 471
472 472 setUnchanged: function(){
473 473 this.changedForms = false;
474 474 },
475 475
476 476 observeChange: function(element){
477 477 element.observe('change',this.setChanged.bindAsEventListener(this));
478 478 },
479 479
480 480 submitAction: function(element){
481 481 element.observe('submit',this.setUnchanged.bindAsEventListener(this));
482 482 }
483 483 });
484 484
485 485 /*
486 486 * 1 - registers a callback which copies the csrf token into the
487 487 * X-CSRF-Token header with each ajax request. Necessary to
488 488 * work with rails applications which have fixed
489 489 * CVE-2011-0447
490 490 * 2 - shows and hides ajax indicator
491 491 */
492 492 Ajax.Responders.register({
493 493 onCreate: function(request){
494 494 var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
495 495
496 496 if (csrf_meta_tag) {
497 497 var header = 'X-CSRF-Token',
498 498 token = csrf_meta_tag.readAttribute('content');
499 499
500 500 if (!request.options.requestHeaders) {
501 501 request.options.requestHeaders = {};
502 502 }
503 503 request.options.requestHeaders[header] = token;
504 504 }
505 505
506 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
506 if ($('ajax-indicator') && Ajax.activeRequestCount > 0 && $$('input.ajax-loading').size() == 0) {
507 507 Element.show('ajax-indicator');
508 508 }
509 509 },
510 510 onComplete: function(){
511 511 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
512 512 Element.hide('ajax-indicator');
513 513 }
514 514 }
515 515 });
516 516
517 517 function hideOnLoad() {
518 518 $$('.hol').each(function(el) {
519 519 el.hide();
520 520 });
521 521 }
522 522
523 523 Event.observe(window, 'load', hideOnLoad);
@@ -1,1056 +1,1063
1 1 html {overflow-y:scroll;}
2 2 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
3 3
4 4 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
5 5 h1 {margin:0; padding:0; font-size: 24px;}
6 6 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
7 7 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
8 8 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
9 9
10 10 /***** Layout *****/
11 11 #wrapper {background: white;}
12 12
13 13 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
14 14 #top-menu ul {margin: 0; padding: 0;}
15 15 #top-menu li {
16 16 float:left;
17 17 list-style-type:none;
18 18 margin: 0px 0px 0px 0px;
19 19 padding: 0px 0px 0px 0px;
20 20 white-space:nowrap;
21 21 }
22 22 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
23 23 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
24 24
25 25 #account {float:right;}
26 26
27 27 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
28 28 #header a {color:#f8f8f8;}
29 29 #header h1 a.ancestor { font-size: 80%; }
30 30 #quick-search {float:right;}
31 31
32 32 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
33 33 #main-menu ul {margin: 0; padding: 0;}
34 34 #main-menu li {
35 35 float:left;
36 36 list-style-type:none;
37 37 margin: 0px 2px 0px 0px;
38 38 padding: 0px 0px 0px 0px;
39 39 white-space:nowrap;
40 40 }
41 41 #main-menu li a {
42 42 display: block;
43 43 color: #fff;
44 44 text-decoration: none;
45 45 font-weight: bold;
46 46 margin: 0;
47 47 padding: 4px 10px 4px 10px;
48 48 }
49 49 #main-menu li a:hover {background:#759FCF; color:#fff;}
50 50 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
51 51
52 52 #admin-menu ul {margin: 0; padding: 0;}
53 53 #admin-menu li {margin: 0; padding: 0 0 6px 0; list-style-type:none;}
54 54
55 55 #admin-menu a { background-position: 0% 40%; background-repeat: no-repeat; padding-left: 20px; padding-top: 2px; padding-bottom: 3px;}
56 56 #admin-menu a.projects { background-image: url(../images/projects.png); }
57 57 #admin-menu a.users { background-image: url(../images/user.png); }
58 58 #admin-menu a.groups { background-image: url(../images/group.png); }
59 59 #admin-menu a.roles { background-image: url(../images/database_key.png); }
60 60 #admin-menu a.trackers { background-image: url(../images/ticket.png); }
61 61 #admin-menu a.issue_statuses { background-image: url(../images/ticket_edit.png); }
62 62 #admin-menu a.workflows { background-image: url(../images/ticket_go.png); }
63 63 #admin-menu a.custom_fields { background-image: url(../images/textfield.png); }
64 64 #admin-menu a.enumerations { background-image: url(../images/text_list_bullets.png); }
65 65 #admin-menu a.settings { background-image: url(../images/changeset.png); }
66 66 #admin-menu a.plugins { background-image: url(../images/plugin.png); }
67 67 #admin-menu a.info { background-image: url(../images/help.png); }
68 68 #admin-menu a.server_authentication { background-image: url(../images/server_key.png); }
69 69
70 70 #main {background-color:#EEEEEE;}
71 71
72 72 #sidebar{ float: right; width: 22%; position: relative; z-index: 9; padding: 0; margin: 0;}
73 73 * html #sidebar{ width: 22%; }
74 74 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
75 75 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
76 76 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
77 77 #sidebar .contextual { margin-right: 1em; }
78 78
79 79 #content { width: 75%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
80 80 * html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
81 81 html>body #content { min-height: 600px; }
82 82 * html body #content { height: 600px; } /* IE */
83 83
84 84 #main.nosidebar #sidebar{ display: none; }
85 85 #main.nosidebar #content{ width: auto; border-right: 0; }
86 86
87 87 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
88 88
89 89 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
90 90 #login-form table td {padding: 6px;}
91 91 #login-form label {font-weight: bold;}
92 92 #login-form input#username, #login-form input#password { width: 300px; }
93 93
94 94 #modalbg {position:absolute; top:0; left:0; width:100%; height:100%; background:#ccc; z-index:49; opacity:0.5;}
95 95 html>body #modalbg {position:fixed;}
96 96 div.modal { border-radius:5px; position:absolute; top:25%; background:#fff; border:2px solid #759FCF; z-index:50; padding:0px; padding:8px; box-shadow: 1px 1px 8px #888; }
97 97 div.modal h3.title {background:#759FCF; color:#fff; border:0; padding-left:8px; margin:-8px; margin-bottom: 1em; border-top-left-radius:2px;border-top-right-radius:2px;}
98 98 div.modal p.buttons {text-align:right; margin-bottom:0;}
99 99 html>body div.modal {position:fixed;}
100 100
101 101 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
102 102
103 103 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
104 104
105 105 /***** Links *****/
106 106 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
107 107 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
108 108 a img{ border: 0; }
109 109
110 110 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
111 111
112 112 #sidebar a.selected {line-height:1.7em; padding:1px 3px 2px 2px; margin-left:-2px; background-color:#9DB9D5; color:#fff; border-radius:2px; -moz-border-radius:2px;}
113 113 #sidebar a.selected:hover {text-decoration:none;}
114 114 #admin-menu a {line-height:1.7em;}
115 115 #admin-menu a.selected {padding-left: 20px !important; background-position: 2px 40%;}
116 116
117 117 a.collapsible {padding-left: 12px; background: url(../images/arrow_expanded.png) no-repeat -3px 40%;}
118 118 a.collapsible.collapsed {background: url(../images/arrow_collapsed.png) no-repeat -5px 40%;}
119 119
120 120 a#toggle-completed-versions {color:#999;}
121 121 /***** Tables *****/
122 122 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
123 123 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
124 124 table.list td { vertical-align: top; }
125 125 table.list td.id { width: 2%; text-align: center;}
126 126 table.list td.checkbox { width: 15px; padding: 2px 0 0 0; }
127 127 table.list td.checkbox input {padding:0px;}
128 128 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
129 129 table.list td.buttons a { padding-right: 0.6em; }
130 130 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
131 131
132 132 tr.project td.name a { white-space:nowrap; }
133 133
134 134 tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
135 135 tr.project.idnt-1 td.name {padding-left: 0.5em;}
136 136 tr.project.idnt-2 td.name {padding-left: 2em;}
137 137 tr.project.idnt-3 td.name {padding-left: 3.5em;}
138 138 tr.project.idnt-4 td.name {padding-left: 5em;}
139 139 tr.project.idnt-5 td.name {padding-left: 6.5em;}
140 140 tr.project.idnt-6 td.name {padding-left: 8em;}
141 141 tr.project.idnt-7 td.name {padding-left: 9.5em;}
142 142 tr.project.idnt-8 td.name {padding-left: 11em;}
143 143 tr.project.idnt-9 td.name {padding-left: 12.5em;}
144 144
145 145 tr.issue { text-align: center; white-space: nowrap; }
146 146 tr.issue td.subject, tr.issue td.category, td.assigned_to, tr.issue td.string, tr.issue td.text { white-space: normal; }
147 147 tr.issue td.subject { text-align: left; }
148 148 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
149 149
150 150 tr.issue.idnt td.subject a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
151 151 tr.issue.idnt-1 td.subject {padding-left: 0.5em;}
152 152 tr.issue.idnt-2 td.subject {padding-left: 2em;}
153 153 tr.issue.idnt-3 td.subject {padding-left: 3.5em;}
154 154 tr.issue.idnt-4 td.subject {padding-left: 5em;}
155 155 tr.issue.idnt-5 td.subject {padding-left: 6.5em;}
156 156 tr.issue.idnt-6 td.subject {padding-left: 8em;}
157 157 tr.issue.idnt-7 td.subject {padding-left: 9.5em;}
158 158 tr.issue.idnt-8 td.subject {padding-left: 11em;}
159 159 tr.issue.idnt-9 td.subject {padding-left: 12.5em;}
160 160
161 161 tr.entry { border: 1px solid #f8f8f8; }
162 162 tr.entry td { white-space: nowrap; }
163 163 tr.entry td.filename { width: 30%; }
164 164 tr.entry td.filename_no_report { width: 70%; }
165 165 tr.entry td.size { text-align: right; font-size: 90%; }
166 166 tr.entry td.revision, tr.entry td.author { text-align: center; }
167 167 tr.entry td.age { text-align: right; }
168 168 tr.entry.file td.filename a { margin-left: 16px; }
169 169 tr.entry.file td.filename_no_report a { margin-left: 16px; }
170 170
171 171 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
172 172 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
173 173
174 174 tr.changeset { height: 20px }
175 175 tr.changeset ul, ol { margin-top: 0px; margin-bottom: 0px; }
176 176 tr.changeset td.revision_graph { width: 15%; background-color: #fffffb; }
177 177 tr.changeset td.author { text-align: center; width: 15%; white-space:nowrap;}
178 178 tr.changeset td.committed_on { text-align: center; width: 15%; white-space:nowrap;}
179 179
180 180 table.files tr.file td { text-align: center; }
181 181 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
182 182 table.files tr.file td.digest { font-size: 80%; }
183 183
184 184 table.members td.roles, table.memberships td.roles { width: 45%; }
185 185
186 186 tr.message { height: 2.6em; }
187 187 tr.message td.subject { padding-left: 20px; }
188 188 tr.message td.created_on { white-space: nowrap; }
189 189 tr.message td.last_message { font-size: 80%; white-space: nowrap; }
190 190 tr.message.locked td.subject { background: url(../images/locked.png) no-repeat 0 1px; }
191 191 tr.message.sticky td.subject { background: url(../images/bullet_go.png) no-repeat 0 1px; font-weight: bold; }
192 192
193 193 tr.version.closed, tr.version.closed a { color: #999; }
194 194 tr.version td.name { padding-left: 20px; }
195 195 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
196 196 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; }
197 197
198 198 tr.user td { width:13%; }
199 199 tr.user td.email { width:18%; }
200 200 tr.user td { white-space: nowrap; }
201 201 tr.user.locked, tr.user.registered { color: #aaa; }
202 202 tr.user.locked a, tr.user.registered a { color: #aaa; }
203 203
204 204 table.permissions td.role {color:#999;font-size:90%;font-weight:normal !important;text-align:center;vertical-align:bottom;}
205 205
206 206 tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
207 207
208 208 tr.time-entry { text-align: center; white-space: nowrap; }
209 209 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
210 210 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
211 211 td.hours .hours-dec { font-size: 0.9em; }
212 212
213 213 table.plugins td { vertical-align: middle; }
214 214 table.plugins td.configure { text-align: right; padding-right: 1em; }
215 215 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
216 216 table.plugins span.description { display: block; font-size: 0.9em; }
217 217 table.plugins span.url { display: block; font-size: 0.9em; }
218 218
219 219 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
220 220 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
221 221 tr.group a.toggle-all { color: #aaa; font-size: 80%; font-weight: normal; display:none;}
222 222 tr.group:hover a.toggle-all { display:inline;}
223 223 a.toggle-all:hover {text-decoration:none;}
224 224
225 225 table.list tbody tr:hover { background-color:#ffffdd; }
226 226 table.list tbody tr.group:hover { background-color:inherit; }
227 227 table td {padding:2px;}
228 228 table p {margin:0;}
229 229 .odd {background-color:#f6f7f8;}
230 230 .even {background-color: #fff;}
231 231
232 232 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
233 233 a.sort.asc { background-image: url(../images/sort_asc.png); }
234 234 a.sort.desc { background-image: url(../images/sort_desc.png); }
235 235
236 236 table.attributes { width: 100% }
237 237 table.attributes th { vertical-align: top; text-align: left; }
238 238 table.attributes td { vertical-align: top; }
239 239
240 240 table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
241 241
242 242 td.center {text-align:center;}
243 243
244 244 h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; }
245 245
246 246 div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; }
247 247 div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; }
248 248 div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
249 249 div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
250 250
251 251 #watchers ul {margin: 0; padding: 0;}
252 252 #watchers li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
253 253 #watchers select {width: 95%; display: block;}
254 254 #watchers a.delete {opacity: 0.4;}
255 255 #watchers a.delete:hover {opacity: 1;}
256 256 #watchers img.gravatar {margin: 0 4px 2px 0;}
257 257
258 258 .highlight { background-color: #FCFD8D;}
259 259 .highlight.token-1 { background-color: #faa;}
260 260 .highlight.token-2 { background-color: #afa;}
261 261 .highlight.token-3 { background-color: #aaf;}
262 262
263 263 .box{
264 264 padding:6px;
265 265 margin-bottom: 10px;
266 266 background-color:#f6f6f6;
267 267 color:#505050;
268 268 line-height:1.5em;
269 269 border: 1px solid #e4e4e4;
270 270 }
271 271
272 272 div.square {
273 273 border: 1px solid #999;
274 274 float: left;
275 275 margin: .3em .4em 0 .4em;
276 276 overflow: hidden;
277 277 width: .6em; height: .6em;
278 278 }
279 279 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
280 280 .contextual input, .contextual select {font-size:0.9em;}
281 281 .message .contextual { margin-top: 0; }
282 282
283 283 .splitcontent {overflow:auto;}
284 284 .splitcontentleft{float:left; width:49%;}
285 285 .splitcontentright{float:right; width:49%;}
286 286 form {display: inline;}
287 287 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
288 288 fieldset {border: 1px solid #e4e4e4; margin:0;}
289 289 legend {color: #484848;}
290 290 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
291 291 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
292 292 blockquote blockquote { margin-left: 0;}
293 293 acronym { border-bottom: 1px dotted; cursor: help; }
294 294 textarea.wiki-edit { width: 99%; }
295 295 li p {margin-top: 0;}
296 296 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
297 297 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
298 298 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
299 299 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
300 300
301 301 div.issue div.subject div div { padding-left: 16px; }
302 302 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
303 303 div.issue div.subject>div>p { margin-top: 0.5em; }
304 304 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
305 305 div.issue span.private { position:relative; bottom: 2px; text-transform: uppercase; background: #d22; color: #fff; font-weight:bold; padding: 0px 2px 0px 2px; font-size: 60%; margin-right: 2px; border-radius: 2px; -moz-border-radius: 2px;}
306 306 div.issue .next-prev-links {color:#999;}
307 307 div.issue table.attributes th {width:22%;}
308 308 div.issue table.attributes td {width:28%;}
309 309
310 310 #issue_tree table.issues, #relations table.issues { border: 0; }
311 311 #issue_tree td.checkbox, #relations td.checkbox {display:none;}
312 312 #relations td.buttons {padding:0;}
313 313
314 314 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
315 315 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
316 316 fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); }
317 317
318 318 fieldset#date-range p { margin: 2px 0 2px 0; }
319 319 fieldset#filters table { border-collapse: collapse; }
320 320 fieldset#filters table td { padding: 0; vertical-align: middle; }
321 321 fieldset#filters tr.filter { height: 2em; }
322 322 fieldset#filters td.field { width:200px; }
323 323 fieldset#filters td.operator { width:170px; }
324 324 fieldset#filters td.values { white-space:nowrap; }
325 325 fieldset#filters td.values select {min-width:130px;}
326 326 fieldset#filters td.values img { vertical-align: middle; margin-left:1px; }
327 327 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
328 328 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
329 329
330 330 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
331 331 div#issue-changesets div.changeset { padding: 4px;}
332 332 div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
333 333 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
334 334
335 335 div#activity dl, #search-results { margin-left: 2em; }
336 336 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
337 337 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
338 338 div#activity dt.me .time { border-bottom: 1px solid #999; }
339 339 div#activity dt .time { color: #777; font-size: 80%; }
340 340 div#activity dd .description, #search-results dd .description { font-style: italic; }
341 341 div#activity span.project:after, #search-results span.project:after { content: " -"; }
342 342 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
343 343
344 344 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
345 345
346 346 div#search-results-counts {float:right;}
347 347 div#search-results-counts ul { margin-top: 0.5em; }
348 348 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
349 349
350 350 dt.issue { background-image: url(../images/ticket.png); }
351 351 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
352 352 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
353 353 dt.issue-note { background-image: url(../images/ticket_note.png); }
354 354 dt.changeset { background-image: url(../images/changeset.png); }
355 355 dt.news { background-image: url(../images/news.png); }
356 356 dt.message { background-image: url(../images/message.png); }
357 357 dt.reply { background-image: url(../images/comments.png); }
358 358 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
359 359 dt.attachment { background-image: url(../images/attachment.png); }
360 360 dt.document { background-image: url(../images/document.png); }
361 361 dt.project { background-image: url(../images/projects.png); }
362 362 dt.time-entry { background-image: url(../images/time.png); }
363 363
364 364 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
365 365
366 366 div#roadmap .related-issues { margin-bottom: 1em; }
367 367 div#roadmap .related-issues td.checkbox { display: none; }
368 368 div#roadmap .wiki h1:first-child { display: none; }
369 369 div#roadmap .wiki h1 { font-size: 120%; }
370 370 div#roadmap .wiki h2 { font-size: 110%; }
371 371 body.controller-versions.action-show div#roadmap .related-issues {width:70%;}
372 372
373 373 div#version-summary { float:right; width:28%; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
374 374 div#version-summary fieldset { margin-bottom: 1em; }
375 375 div#version-summary fieldset.time-tracking table { width:100%; }
376 376 div#version-summary th, div#version-summary td.total-hours { text-align: right; }
377 377
378 378 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
379 379 table#time-report tbody tr.subtotal { font-style: italic; color:#777;}
380 380 table#time-report tbody tr.subtotal td.hours { color:#b0b0b0; }
381 381 table#time-report tbody tr.total { font-weight: bold; background-color:#EEEEEE; border-top:1px solid #e4e4e4;}
382 382 table#time-report .hours-dec { font-size: 0.9em; }
383 383
384 384 div.wiki-page .contextual a {opacity: 0.4}
385 385 div.wiki-page .contextual a:hover {opacity: 1}
386 386
387 387 form .attributes select { width: 60%; }
388 388 input#issue_subject { width: 99%; }
389 389 select#issue_done_ratio { width: 95px; }
390 390
391 391 ul.projects { margin: 0; padding-left: 1em; }
392 392 ul.projects.root { margin: 0; padding: 0; }
393 393 ul.projects ul.projects { border-left: 3px solid #e0e0e0; }
394 394 ul.projects li.root { list-style-type:none; margin-bottom: 1em; }
395 395 ul.projects li.child { list-style-type:none; margin-top: 1em;}
396 396 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
397 397 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
398 398
399 399 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
400 400 #tracker_project_ids li { list-style-type:none; }
401 401
402 402 #related-issues li img {vertical-align:middle;}
403 403
404 404 ul.properties {padding:0; font-size: 0.9em; color: #777;}
405 405 ul.properties li {list-style-type:none;}
406 406 ul.properties li span {font-style:italic;}
407 407
408 408 .total-hours { font-size: 110%; font-weight: bold; }
409 409 .total-hours span.hours-int { font-size: 120%; }
410 410
411 411 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
412 412 #user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select, #user_identity_url { width: 90%; }
413 413
414 414 #workflow_copy_form select { width: 200px; }
415 415
416 416 textarea#custom_field_possible_values {width: 99%}
417 417 input#content_comments {width: 99%}
418 418
419 419 .pagination {font-size: 90%}
420 420 p.pagination {margin-top:8px;}
421 421
422 422 /***** Tabular forms ******/
423 423 .tabular p{
424 424 margin: 0;
425 425 padding: 3px 0 3px 0;
426 426 padding-left: 180px; /* width of left column containing the label elements */
427 427 min-height: 1.8em;
428 428 clear:left;
429 429 }
430 430
431 431 html>body .tabular p {overflow:hidden;}
432 432
433 433 .tabular label{
434 434 font-weight: bold;
435 435 float: left;
436 436 text-align: right;
437 437 /* width of left column */
438 438 margin-left: -180px;
439 439 /* width of labels. Should be smaller than left column to create some right margin */
440 440 width: 175px;
441 441 }
442 442
443 443 .tabular label.floating{
444 444 font-weight: normal;
445 445 margin-left: 0px;
446 446 text-align: left;
447 447 width: 270px;
448 448 }
449 449
450 450 .tabular label.block{
451 451 font-weight: normal;
452 452 margin-left: 0px !important;
453 453 text-align: left;
454 454 float: none;
455 455 display: block;
456 456 width: auto;
457 457 }
458 458
459 459 .tabular label.inline{
460 460 float:none;
461 461 margin-left: 5px !important;
462 462 width: auto;
463 463 }
464 464
465 465 label.no-css {
466 466 font-weight: inherit;
467 467 float:none;
468 468 text-align:left;
469 469 margin-left:0px;
470 470 width:auto;
471 471 }
472 472 input#time_entry_comments { width: 90%;}
473 473
474 474 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
475 475
476 476 .tabular.settings p{ padding-left: 300px; }
477 477 .tabular.settings label{ margin-left: -300px; width: 295px; }
478 478 .tabular.settings textarea { width: 99%; }
479 479
480 480 .settings.enabled_scm table {width:100%}
481 481 .settings.enabled_scm td.scm_name{ font-weight: bold; }
482 482
483 483 fieldset.settings label { display: block; }
484 484 fieldset#notified_events .parent { padding-left: 20px; }
485 485
486 486 .required {color: #bb0000;}
487 487 .summary {font-style: italic;}
488 488
489 489 #attachments_fields input.description {margin-left: 8px; width:340px;}
490 490 #attachments_fields span {display:block; white-space:nowrap;}
491 491 #attachments_fields img {vertical-align: middle;}
492 492
493 493 div.attachments { margin-top: 12px; }
494 494 div.attachments p { margin:4px 0 2px 0; }
495 495 div.attachments img { vertical-align: middle; }
496 496 div.attachments span.author { font-size: 0.9em; color: #888; }
497 497
498 498 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
499 499 .other-formats span + span:before { content: "| "; }
500 500
501 501 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
502 502
503 503 em.info {font-style:normal;font-size:90%;color:#888;display:block;}
504 504 em.info.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
505 505
506 506 /* Project members tab */
507 507 div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
508 508 div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
509 509 div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; }
510 510 div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; }
511 511 div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; }
512 512 div#tab-content-members fieldset div, div#tab-content-users fieldset div { max-height: 400px; overflow:auto; }
513 513
514 514 #users_for_watcher {height: 200px; overflow:auto;}
515 515 #users_for_watcher label {display: block;}
516 516
517 517 table.members td.group { padding-left: 20px; background: url(../images/group.png) no-repeat 0% 50%; }
518 518
519 519 input#principal_search, input#user_search {width:100%}
520 input#principal_search, input#user_search {
521 background: url(../images/magnifier.png) no-repeat 2px 50%; padding-left:20px;
522 border:1px solid #9EB1C2; border-radius:3px; height:1.5em; width:95%;
523 }
524 input#principal_search.ajax-loading, input#user_search.ajax-loading {
525 background-image: url(../images/loading.gif);
526 }
520 527
521 528 * html div#tab-content-members fieldset div { height: 450px; }
522 529
523 530 /***** Flash & error messages ****/
524 531 #errorExplanation, div.flash, .nodata, .warning, .conflict {
525 532 padding: 4px 4px 4px 30px;
526 533 margin-bottom: 12px;
527 534 font-size: 1.1em;
528 535 border: 2px solid;
529 536 }
530 537
531 538 div.flash {margin-top: 8px;}
532 539
533 540 div.flash.error, #errorExplanation {
534 541 background: url(../images/exclamation.png) 8px 50% no-repeat;
535 542 background-color: #ffe3e3;
536 543 border-color: #dd0000;
537 544 color: #880000;
538 545 }
539 546
540 547 div.flash.notice {
541 548 background: url(../images/true.png) 8px 5px no-repeat;
542 549 background-color: #dfffdf;
543 550 border-color: #9fcf9f;
544 551 color: #005f00;
545 552 }
546 553
547 554 div.flash.warning, .conflict {
548 555 background: url(../images/warning.png) 8px 5px no-repeat;
549 556 background-color: #FFEBC1;
550 557 border-color: #FDBF3B;
551 558 color: #A6750C;
552 559 text-align: left;
553 560 }
554 561
555 562 .nodata, .warning {
556 563 text-align: center;
557 564 background-color: #FFEBC1;
558 565 border-color: #FDBF3B;
559 566 color: #A6750C;
560 567 }
561 568
562 569 #errorExplanation ul { font-size: 0.9em;}
563 570 #errorExplanation h2, #errorExplanation p { display: none; }
564 571
565 572 .conflict-details {font-size:80%;}
566 573
567 574 /***** Ajax indicator ******/
568 575 #ajax-indicator {
569 576 position: absolute; /* fixed not supported by IE */
570 577 background-color:#eee;
571 578 border: 1px solid #bbb;
572 579 top:35%;
573 580 left:40%;
574 581 width:20%;
575 582 font-weight:bold;
576 583 text-align:center;
577 584 padding:0.6em;
578 585 z-index:100;
579 586 opacity: 0.5;
580 587 }
581 588
582 589 html>body #ajax-indicator { position: fixed; }
583 590
584 591 #ajax-indicator span {
585 592 background-position: 0% 40%;
586 593 background-repeat: no-repeat;
587 594 background-image: url(../images/loading.gif);
588 595 padding-left: 26px;
589 596 vertical-align: bottom;
590 597 }
591 598
592 599 /***** Calendar *****/
593 600 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
594 601 table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; }
595 602 table.cal thead th.week-number {width: auto;}
596 603 table.cal tbody tr {height: 100px;}
597 604 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
598 605 table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;}
599 606 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
600 607 table.cal td.odd p.day-num {color: #bbb;}
601 608 table.cal td.today {background:#ffffdd;}
602 609 table.cal td.today p.day-num {font-weight: bold;}
603 610 table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
604 611 table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
605 612 table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
606 613 p.cal.legend span {display:block;}
607 614
608 615 /***** Tooltips ******/
609 616 .tooltip{position:relative;z-index:24;}
610 617 .tooltip:hover{z-index:25;color:#000;}
611 618 .tooltip span.tip{display: none; text-align:left;}
612 619
613 620 div.tooltip:hover span.tip{
614 621 display:block;
615 622 position:absolute;
616 623 top:12px; left:24px; width:270px;
617 624 border:1px solid #555;
618 625 background-color:#fff;
619 626 padding: 4px;
620 627 font-size: 0.8em;
621 628 color:#505050;
622 629 }
623 630
624 631 /***** Progress bar *****/
625 632 table.progress {
626 633 border-collapse: collapse;
627 634 border-spacing: 0pt;
628 635 empty-cells: show;
629 636 text-align: center;
630 637 float:left;
631 638 margin: 1px 6px 1px 0px;
632 639 }
633 640
634 641 table.progress td { height: 1em; }
635 642 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
636 643 table.progress td.done { background: #D3EDD3 none repeat scroll 0%; }
637 644 table.progress td.todo { background: #eee none repeat scroll 0%; }
638 645 p.pourcent {font-size: 80%;}
639 646 p.progress-info {clear: left; font-size: 80%; margin-top:-4px; color:#777;}
640 647
641 648 #roadmap table.progress td { height: 1.2em; }
642 649 /***** Tabs *****/
643 650 #content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
644 651 #content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:0.5em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
645 652 #content .tabs ul li {
646 653 float:left;
647 654 list-style-type:none;
648 655 white-space:nowrap;
649 656 margin-right:4px;
650 657 background:#fff;
651 658 position:relative;
652 659 margin-bottom:-1px;
653 660 }
654 661 #content .tabs ul li a{
655 662 display:block;
656 663 font-size: 0.9em;
657 664 text-decoration:none;
658 665 line-height:1.3em;
659 666 padding:4px 6px 4px 6px;
660 667 border: 1px solid #ccc;
661 668 border-bottom: 1px solid #bbbbbb;
662 669 background-color: #f6f6f6;
663 670 color:#999;
664 671 font-weight:bold;
665 672 border-top-left-radius:3px;
666 673 border-top-right-radius:3px;
667 674 }
668 675
669 676 #content .tabs ul li a:hover {
670 677 background-color: #ffffdd;
671 678 text-decoration:none;
672 679 }
673 680
674 681 #content .tabs ul li a.selected {
675 682 background-color: #fff;
676 683 border: 1px solid #bbbbbb;
677 684 border-bottom: 1px solid #fff;
678 685 color:#444;
679 686 }
680 687
681 688 #content .tabs ul li a.selected:hover {
682 689 background-color: #fff;
683 690 }
684 691
685 692 div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
686 693
687 694 button.tab-left, button.tab-right {
688 695 font-size: 0.9em;
689 696 cursor: pointer;
690 697 height:24px;
691 698 border: 1px solid #ccc;
692 699 border-bottom: 1px solid #bbbbbb;
693 700 position:absolute;
694 701 padding:4px;
695 702 width: 20px;
696 703 bottom: -1px;
697 704 }
698 705
699 706 button.tab-left {
700 707 right: 20px;
701 708 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
702 709 border-top-left-radius:3px;
703 710 }
704 711
705 712 button.tab-right {
706 713 right: 0;
707 714 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;
708 715 border-top-right-radius:3px;
709 716 }
710 717
711 718 /***** Auto-complete *****/
712 719 div.autocomplete {
713 720 position:absolute;
714 721 width:400px;
715 722 margin:0;
716 723 padding:0;
717 724 }
718 725 div.autocomplete ul {
719 726 list-style-type:none;
720 727 margin:0;
721 728 padding:0;
722 729 }
723 730 div.autocomplete ul li {
724 731 list-style-type:none;
725 732 display:block;
726 733 margin:-1px 0 0 0;
727 734 padding:2px;
728 735 cursor:pointer;
729 736 font-size: 90%;
730 737 border: 1px solid #ccc;
731 738 border-left: 1px solid #ccc;
732 739 border-right: 1px solid #ccc;
733 740 background-color:white;
734 741 }
735 742 div.autocomplete ul li.selected { background-color: #ffb;}
736 743 div.autocomplete ul li span.informal {
737 744 font-size: 80%;
738 745 color: #aaa;
739 746 }
740 747
741 748 #parent_issue_candidates ul li {width: 500px;}
742 749 #related_issue_candidates ul li {width: 500px;}
743 750
744 751 /***** Diff *****/
745 752 .diff_out { background: #fcc; }
746 753 .diff_out span { background: #faa; }
747 754 .diff_in { background: #cfc; }
748 755 .diff_in span { background: #afa; }
749 756
750 757 .text-diff {
751 758 padding: 1em;
752 759 background-color:#f6f6f6;
753 760 color:#505050;
754 761 border: 1px solid #e4e4e4;
755 762 }
756 763
757 764 /***** Wiki *****/
758 765 div.wiki table {
759 766 border-collapse: collapse;
760 767 margin-bottom: 1em;
761 768 }
762 769
763 770 div.wiki table, div.wiki td, div.wiki th {
764 771 border: 1px solid #bbb;
765 772 padding: 4px;
766 773 }
767 774
768 775 div.wiki .noborder, div.wiki .noborder td, div.wiki .noborder th {border:0;}
769 776
770 777 div.wiki .external {
771 778 background-position: 0% 60%;
772 779 background-repeat: no-repeat;
773 780 padding-left: 12px;
774 781 background-image: url(../images/external.png);
775 782 }
776 783
777 784 div.wiki a.new {
778 785 color: #b73535;
779 786 }
780 787
781 788 div.wiki ul, div.wiki ol {margin-bottom:1em;}
782 789
783 790 div.wiki pre {
784 791 margin: 1em 1em 1em 1.6em;
785 792 padding: 2px 2px 2px 0;
786 793 background-color: #fafafa;
787 794 border: 1px solid #dadada;
788 795 width:auto;
789 796 overflow-x: auto;
790 797 overflow-y: hidden;
791 798 }
792 799
793 800 div.wiki ul.toc {
794 801 background-color: #ffffdd;
795 802 border: 1px solid #e4e4e4;
796 803 padding: 4px;
797 804 line-height: 1.2em;
798 805 margin-bottom: 12px;
799 806 margin-right: 12px;
800 807 margin-left: 0;
801 808 display: table
802 809 }
803 810 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
804 811
805 812 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
806 813 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
807 814 div.wiki ul.toc ul { margin: 0; padding: 0; }
808 815 div.wiki ul.toc li { list-style-type:none; margin: 0;}
809 816 div.wiki ul.toc li li { margin-left: 1.5em; }
810 817 div.wiki ul.toc li li li { font-size: 0.8em; }
811 818
812 819 div.wiki ul.toc a {
813 820 font-size: 0.9em;
814 821 font-weight: normal;
815 822 text-decoration: none;
816 823 color: #606060;
817 824 }
818 825 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
819 826
820 827 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
821 828 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
822 829 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
823 830
824 831 div.wiki img { vertical-align: middle; }
825 832
826 833 /***** My page layout *****/
827 834 .block-receiver {
828 835 border:1px dashed #c0c0c0;
829 836 margin-bottom: 20px;
830 837 padding: 15px 0 15px 0;
831 838 }
832 839
833 840 .mypage-box {
834 841 margin:0 0 20px 0;
835 842 color:#505050;
836 843 line-height:1.5em;
837 844 }
838 845
839 846 .handle {
840 847 cursor: move;
841 848 }
842 849
843 850 a.close-icon {
844 851 display:block;
845 852 margin-top:3px;
846 853 overflow:hidden;
847 854 width:12px;
848 855 height:12px;
849 856 background-repeat: no-repeat;
850 857 cursor:pointer;
851 858 background-image:url('../images/close.png');
852 859 }
853 860
854 861 a.close-icon:hover {
855 862 background-image:url('../images/close_hl.png');
856 863 }
857 864
858 865 /***** Gantt chart *****/
859 866 .gantt_hdr {
860 867 position:absolute;
861 868 top:0;
862 869 height:16px;
863 870 border-top: 1px solid #c0c0c0;
864 871 border-bottom: 1px solid #c0c0c0;
865 872 border-right: 1px solid #c0c0c0;
866 873 text-align: center;
867 874 overflow: hidden;
868 875 }
869 876
870 877 .gantt_subjects { font-size: 0.8em; }
871 878 .gantt_subjects div { line-height:16px;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
872 879
873 880 .task {
874 881 position: absolute;
875 882 height:8px;
876 883 font-size:0.8em;
877 884 color:#888;
878 885 padding:0;
879 886 margin:0;
880 887 line-height:16px;
881 888 white-space:nowrap;
882 889 }
883 890
884 891 .task.label {width:100%;}
885 892 .task.label.project, .task.label.version { font-weight: bold; }
886 893
887 894 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
888 895 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }
889 896 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
890 897
891 898 .task_todo.parent { background: #888; border: 1px solid #888; height: 3px;}
892 899 .task_late.parent, .task_done.parent { height: 3px;}
893 900 .task.parent.marker.starting { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; left: 0px; top: -1px;}
894 901 .task.parent.marker.ending { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; right: 0px; top: -1px;}
895 902
896 903 .version.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
897 904 .version.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
898 905 .version.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
899 906 .version.marker { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
900 907
901 908 .project.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
902 909 .project.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
903 910 .project.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
904 911 .project.marker { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
905 912
906 913 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
907 914 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
908 915
909 916 /***** Icons *****/
910 917 .icon {
911 918 background-position: 0% 50%;
912 919 background-repeat: no-repeat;
913 920 padding-left: 20px;
914 921 padding-top: 2px;
915 922 padding-bottom: 3px;
916 923 }
917 924
918 925 .icon-add { background-image: url(../images/add.png); }
919 926 .icon-edit { background-image: url(../images/edit.png); }
920 927 .icon-copy { background-image: url(../images/copy.png); }
921 928 .icon-duplicate { background-image: url(../images/duplicate.png); }
922 929 .icon-del { background-image: url(../images/delete.png); }
923 930 .icon-move { background-image: url(../images/move.png); }
924 931 .icon-save { background-image: url(../images/save.png); }
925 932 .icon-cancel { background-image: url(../images/cancel.png); }
926 933 .icon-multiple { background-image: url(../images/table_multiple.png); }
927 934 .icon-folder { background-image: url(../images/folder.png); }
928 935 .open .icon-folder { background-image: url(../images/folder_open.png); }
929 936 .icon-package { background-image: url(../images/package.png); }
930 937 .icon-user { background-image: url(../images/user.png); }
931 938 .icon-projects { background-image: url(../images/projects.png); }
932 939 .icon-help { background-image: url(../images/help.png); }
933 940 .icon-attachment { background-image: url(../images/attachment.png); }
934 941 .icon-history { background-image: url(../images/history.png); }
935 942 .icon-time { background-image: url(../images/time.png); }
936 943 .icon-time-add { background-image: url(../images/time_add.png); }
937 944 .icon-stats { background-image: url(../images/stats.png); }
938 945 .icon-warning { background-image: url(../images/warning.png); }
939 946 .icon-fav { background-image: url(../images/fav.png); }
940 947 .icon-fav-off { background-image: url(../images/fav_off.png); }
941 948 .icon-reload { background-image: url(../images/reload.png); }
942 949 .icon-lock { background-image: url(../images/locked.png); }
943 950 .icon-unlock { background-image: url(../images/unlock.png); }
944 951 .icon-checked { background-image: url(../images/true.png); }
945 952 .icon-details { background-image: url(../images/zoom_in.png); }
946 953 .icon-report { background-image: url(../images/report.png); }
947 954 .icon-comment { background-image: url(../images/comment.png); }
948 955 .icon-summary { background-image: url(../images/lightning.png); }
949 956 .icon-server-authentication { background-image: url(../images/server_key.png); }
950 957 .icon-issue { background-image: url(../images/ticket.png); }
951 958 .icon-zoom-in { background-image: url(../images/zoom_in.png); }
952 959 .icon-zoom-out { background-image: url(../images/zoom_out.png); }
953 960 .icon-passwd { background-image: url(../images/textfield_key.png); }
954 961
955 962 .icon-file { background-image: url(../images/files/default.png); }
956 963 .icon-file.text-plain { background-image: url(../images/files/text.png); }
957 964 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
958 965 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
959 966 .icon-file.text-x-java { background-image: url(../images/files/java.png); }
960 967 .icon-file.text-x-javascript { background-image: url(../images/files/js.png); }
961 968 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
962 969 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
963 970 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
964 971 .icon-file.text-css { background-image: url(../images/files/css.png); }
965 972 .icon-file.text-html { background-image: url(../images/files/html.png); }
966 973 .icon-file.image-gif { background-image: url(../images/files/image.png); }
967 974 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
968 975 .icon-file.image-png { background-image: url(../images/files/image.png); }
969 976 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
970 977 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
971 978 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
972 979 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
973 980
974 981 img.gravatar {
975 982 padding: 2px;
976 983 border: solid 1px #d5d5d5;
977 984 background: #fff;
978 985 vertical-align: middle;
979 986 }
980 987
981 988 div.issue img.gravatar {
982 989 float: left;
983 990 margin: 0 6px 0 0;
984 991 padding: 5px;
985 992 }
986 993
987 994 div.issue table img.gravatar {
988 995 height: 14px;
989 996 width: 14px;
990 997 padding: 2px;
991 998 float: left;
992 999 margin: 0 0.5em 0 0;
993 1000 }
994 1001
995 1002 h2 img.gravatar {
996 1003 margin: -2px 4px -4px 0;
997 1004 }
998 1005
999 1006 h3 img.gravatar {
1000 1007 margin: -4px 4px -4px 0;
1001 1008 }
1002 1009
1003 1010 h4 img.gravatar {
1004 1011 margin: -6px 4px -4px 0;
1005 1012 }
1006 1013
1007 1014 td.username img.gravatar {
1008 1015 margin: 0 0.5em 0 0;
1009 1016 vertical-align: top;
1010 1017 }
1011 1018
1012 1019 #activity dt img.gravatar {
1013 1020 float: left;
1014 1021 margin: 0 1em 1em 0;
1015 1022 }
1016 1023
1017 1024 /* Used on 12px Gravatar img tags without the icon background */
1018 1025 .icon-gravatar {
1019 1026 float: left;
1020 1027 margin-right: 4px;
1021 1028 }
1022 1029
1023 1030 #activity dt,
1024 1031 .journal {
1025 1032 clear: left;
1026 1033 }
1027 1034
1028 1035 .journal-link {
1029 1036 float: right;
1030 1037 }
1031 1038
1032 1039 h2 img { vertical-align:middle; }
1033 1040
1034 1041 .hascontextmenu { cursor: context-menu; }
1035 1042
1036 1043 /***** Media print specific styles *****/
1037 1044 @media print {
1038 1045 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
1039 1046 #main { background: #fff; }
1040 1047 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
1041 1048 #wiki_add_attachment { display:none; }
1042 1049 .hide-when-print { display: none; }
1043 1050 .autoscroll {overflow-x: visible;}
1044 1051 table.list {margin-top:0.5em;}
1045 1052 table.list th, table.list td {border: 1px solid #aaa;}
1046 1053 }
1047 1054
1048 1055 /* Accessibility specific styles */
1049 1056 .hidden-for-sighted {
1050 1057 position:absolute;
1051 1058 left:-10000px;
1052 1059 top:auto;
1053 1060 width:1px;
1054 1061 height:1px;
1055 1062 overflow:hidden;
1056 1063 }
General Comments 0
You need to be logged in to leave comments. Login now