##// END OF EJS Templates
Use ti tags for sidebar queries (#13242)....
Jean-Philippe Lang -
r11236:ace19cc20fc6
parent child
Show More
@@ -1,373 +1,376
1 # encoding: utf-8
1 # encoding: utf-8
2 #
2 #
3 # Redmine - project management software
3 # Redmine - project management software
4 # Copyright (C) 2006-2013 Jean-Philippe Lang
4 # Copyright (C) 2006-2013 Jean-Philippe Lang
5 #
5 #
6 # This program is free software; you can redistribute it and/or
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License
7 # modify it under the terms of the GNU General Public License
8 # as published by the Free Software Foundation; either version 2
8 # as published by the Free Software Foundation; either version 2
9 # of the License, or (at your option) any later version.
9 # of the License, or (at your option) any later version.
10 #
10 #
11 # This program is distributed in the hope that it will be useful,
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
14 # GNU General Public License for more details.
15 #
15 #
16 # You should have received a copy of the GNU General Public License
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
19
20 module IssuesHelper
20 module IssuesHelper
21 include ApplicationHelper
21 include ApplicationHelper
22
22
23 def issue_list(issues, &block)
23 def issue_list(issues, &block)
24 ancestors = []
24 ancestors = []
25 issues.each do |issue|
25 issues.each do |issue|
26 while (ancestors.any? && !issue.is_descendant_of?(ancestors.last))
26 while (ancestors.any? && !issue.is_descendant_of?(ancestors.last))
27 ancestors.pop
27 ancestors.pop
28 end
28 end
29 yield issue, ancestors.size
29 yield issue, ancestors.size
30 ancestors << issue unless issue.leaf?
30 ancestors << issue unless issue.leaf?
31 end
31 end
32 end
32 end
33
33
34 # Renders a HTML/CSS tooltip
34 # Renders a HTML/CSS tooltip
35 #
35 #
36 # To use, a trigger div is needed. This is a div with the class of "tooltip"
36 # To use, a trigger div is needed. This is a div with the class of "tooltip"
37 # that contains this method wrapped in a span with the class of "tip"
37 # that contains this method wrapped in a span with the class of "tip"
38 #
38 #
39 # <div class="tooltip"><%= link_to_issue(issue) %>
39 # <div class="tooltip"><%= link_to_issue(issue) %>
40 # <span class="tip"><%= render_issue_tooltip(issue) %></span>
40 # <span class="tip"><%= render_issue_tooltip(issue) %></span>
41 # </div>
41 # </div>
42 #
42 #
43 def render_issue_tooltip(issue)
43 def render_issue_tooltip(issue)
44 @cached_label_status ||= l(:field_status)
44 @cached_label_status ||= l(:field_status)
45 @cached_label_start_date ||= l(:field_start_date)
45 @cached_label_start_date ||= l(:field_start_date)
46 @cached_label_due_date ||= l(:field_due_date)
46 @cached_label_due_date ||= l(:field_due_date)
47 @cached_label_assigned_to ||= l(:field_assigned_to)
47 @cached_label_assigned_to ||= l(:field_assigned_to)
48 @cached_label_priority ||= l(:field_priority)
48 @cached_label_priority ||= l(:field_priority)
49 @cached_label_project ||= l(:field_project)
49 @cached_label_project ||= l(:field_project)
50
50
51 link_to_issue(issue) + "<br /><br />".html_safe +
51 link_to_issue(issue) + "<br /><br />".html_safe +
52 "<strong>#{@cached_label_project}</strong>: #{link_to_project(issue.project)}<br />".html_safe +
52 "<strong>#{@cached_label_project}</strong>: #{link_to_project(issue.project)}<br />".html_safe +
53 "<strong>#{@cached_label_status}</strong>: #{h(issue.status.name)}<br />".html_safe +
53 "<strong>#{@cached_label_status}</strong>: #{h(issue.status.name)}<br />".html_safe +
54 "<strong>#{@cached_label_start_date}</strong>: #{format_date(issue.start_date)}<br />".html_safe +
54 "<strong>#{@cached_label_start_date}</strong>: #{format_date(issue.start_date)}<br />".html_safe +
55 "<strong>#{@cached_label_due_date}</strong>: #{format_date(issue.due_date)}<br />".html_safe +
55 "<strong>#{@cached_label_due_date}</strong>: #{format_date(issue.due_date)}<br />".html_safe +
56 "<strong>#{@cached_label_assigned_to}</strong>: #{h(issue.assigned_to)}<br />".html_safe +
56 "<strong>#{@cached_label_assigned_to}</strong>: #{h(issue.assigned_to)}<br />".html_safe +
57 "<strong>#{@cached_label_priority}</strong>: #{h(issue.priority.name)}".html_safe
57 "<strong>#{@cached_label_priority}</strong>: #{h(issue.priority.name)}".html_safe
58 end
58 end
59
59
60 def issue_heading(issue)
60 def issue_heading(issue)
61 h("#{issue.tracker} ##{issue.id}")
61 h("#{issue.tracker} ##{issue.id}")
62 end
62 end
63
63
64 def render_issue_subject_with_tree(issue)
64 def render_issue_subject_with_tree(issue)
65 s = ''
65 s = ''
66 ancestors = issue.root? ? [] : issue.ancestors.visible.all
66 ancestors = issue.root? ? [] : issue.ancestors.visible.all
67 ancestors.each do |ancestor|
67 ancestors.each do |ancestor|
68 s << '<div>' + content_tag('p', link_to_issue(ancestor, :project => (issue.project_id != ancestor.project_id)))
68 s << '<div>' + content_tag('p', link_to_issue(ancestor, :project => (issue.project_id != ancestor.project_id)))
69 end
69 end
70 s << '<div>'
70 s << '<div>'
71 subject = h(issue.subject)
71 subject = h(issue.subject)
72 if issue.is_private?
72 if issue.is_private?
73 subject = content_tag('span', l(:field_is_private), :class => 'private') + ' ' + subject
73 subject = content_tag('span', l(:field_is_private), :class => 'private') + ' ' + subject
74 end
74 end
75 s << content_tag('h3', subject)
75 s << content_tag('h3', subject)
76 s << '</div>' * (ancestors.size + 1)
76 s << '</div>' * (ancestors.size + 1)
77 s.html_safe
77 s.html_safe
78 end
78 end
79
79
80 def render_descendants_tree(issue)
80 def render_descendants_tree(issue)
81 s = '<form><table class="list issues">'
81 s = '<form><table class="list issues">'
82 issue_list(issue.descendants.visible.sort_by(&:lft)) do |child, level|
82 issue_list(issue.descendants.visible.sort_by(&:lft)) do |child, level|
83 css = "issue issue-#{child.id} hascontextmenu"
83 css = "issue issue-#{child.id} hascontextmenu"
84 css << " idnt idnt-#{level}" if level > 0
84 css << " idnt idnt-#{level}" if level > 0
85 s << content_tag('tr',
85 s << content_tag('tr',
86 content_tag('td', check_box_tag("ids[]", child.id, false, :id => nil), :class => 'checkbox') +
86 content_tag('td', check_box_tag("ids[]", child.id, false, :id => nil), :class => 'checkbox') +
87 content_tag('td', link_to_issue(child, :truncate => 60, :project => (issue.project_id != child.project_id)), :class => 'subject') +
87 content_tag('td', link_to_issue(child, :truncate => 60, :project => (issue.project_id != child.project_id)), :class => 'subject') +
88 content_tag('td', h(child.status)) +
88 content_tag('td', h(child.status)) +
89 content_tag('td', link_to_user(child.assigned_to)) +
89 content_tag('td', link_to_user(child.assigned_to)) +
90 content_tag('td', progress_bar(child.done_ratio, :width => '80px')),
90 content_tag('td', progress_bar(child.done_ratio, :width => '80px')),
91 :class => css)
91 :class => css)
92 end
92 end
93 s << '</table></form>'
93 s << '</table></form>'
94 s.html_safe
94 s.html_safe
95 end
95 end
96
96
97 # Returns a link for adding a new subtask to the given issue
97 # Returns a link for adding a new subtask to the given issue
98 def link_to_new_subtask(issue)
98 def link_to_new_subtask(issue)
99 attrs = {
99 attrs = {
100 :tracker_id => issue.tracker,
100 :tracker_id => issue.tracker,
101 :parent_issue_id => issue
101 :parent_issue_id => issue
102 }
102 }
103 link_to(l(:button_add), new_project_issue_path(issue.project, :issue => attrs))
103 link_to(l(:button_add), new_project_issue_path(issue.project, :issue => attrs))
104 end
104 end
105
105
106 class IssueFieldsRows
106 class IssueFieldsRows
107 include ActionView::Helpers::TagHelper
107 include ActionView::Helpers::TagHelper
108
108
109 def initialize
109 def initialize
110 @left = []
110 @left = []
111 @right = []
111 @right = []
112 end
112 end
113
113
114 def left(*args)
114 def left(*args)
115 args.any? ? @left << cells(*args) : @left
115 args.any? ? @left << cells(*args) : @left
116 end
116 end
117
117
118 def right(*args)
118 def right(*args)
119 args.any? ? @right << cells(*args) : @right
119 args.any? ? @right << cells(*args) : @right
120 end
120 end
121
121
122 def size
122 def size
123 @left.size > @right.size ? @left.size : @right.size
123 @left.size > @right.size ? @left.size : @right.size
124 end
124 end
125
125
126 def to_html
126 def to_html
127 html = ''.html_safe
127 html = ''.html_safe
128 blank = content_tag('th', '') + content_tag('td', '')
128 blank = content_tag('th', '') + content_tag('td', '')
129 size.times do |i|
129 size.times do |i|
130 left = @left[i] || blank
130 left = @left[i] || blank
131 right = @right[i] || blank
131 right = @right[i] || blank
132 html << content_tag('tr', left + right)
132 html << content_tag('tr', left + right)
133 end
133 end
134 html
134 html
135 end
135 end
136
136
137 def cells(label, text, options={})
137 def cells(label, text, options={})
138 content_tag('th', "#{label}:", options) + content_tag('td', text, options)
138 content_tag('th', "#{label}:", options) + content_tag('td', text, options)
139 end
139 end
140 end
140 end
141
141
142 def issue_fields_rows
142 def issue_fields_rows
143 r = IssueFieldsRows.new
143 r = IssueFieldsRows.new
144 yield r
144 yield r
145 r.to_html
145 r.to_html
146 end
146 end
147
147
148 def render_custom_fields_rows(issue)
148 def render_custom_fields_rows(issue)
149 return if issue.custom_field_values.empty?
149 return if issue.custom_field_values.empty?
150 ordered_values = []
150 ordered_values = []
151 half = (issue.custom_field_values.size / 2.0).ceil
151 half = (issue.custom_field_values.size / 2.0).ceil
152 half.times do |i|
152 half.times do |i|
153 ordered_values << issue.custom_field_values[i]
153 ordered_values << issue.custom_field_values[i]
154 ordered_values << issue.custom_field_values[i + half]
154 ordered_values << issue.custom_field_values[i + half]
155 end
155 end
156 s = "<tr>\n"
156 s = "<tr>\n"
157 n = 0
157 n = 0
158 ordered_values.compact.each do |value|
158 ordered_values.compact.each do |value|
159 s << "</tr>\n<tr>\n" if n > 0 && (n % 2) == 0
159 s << "</tr>\n<tr>\n" if n > 0 && (n % 2) == 0
160 s << "\t<th>#{ h(value.custom_field.name) }:</th><td>#{ simple_format_without_paragraph(h(show_value(value))) }</td>\n"
160 s << "\t<th>#{ h(value.custom_field.name) }:</th><td>#{ simple_format_without_paragraph(h(show_value(value))) }</td>\n"
161 n += 1
161 n += 1
162 end
162 end
163 s << "</tr>\n"
163 s << "</tr>\n"
164 s.html_safe
164 s.html_safe
165 end
165 end
166
166
167 def issues_destroy_confirmation_message(issues)
167 def issues_destroy_confirmation_message(issues)
168 issues = [issues] unless issues.is_a?(Array)
168 issues = [issues] unless issues.is_a?(Array)
169 message = l(:text_issues_destroy_confirmation)
169 message = l(:text_issues_destroy_confirmation)
170 descendant_count = issues.inject(0) {|memo, i| memo += (i.right - i.left - 1)/2}
170 descendant_count = issues.inject(0) {|memo, i| memo += (i.right - i.left - 1)/2}
171 if descendant_count > 0
171 if descendant_count > 0
172 issues.each do |issue|
172 issues.each do |issue|
173 next if issue.root?
173 next if issue.root?
174 issues.each do |other_issue|
174 issues.each do |other_issue|
175 descendant_count -= 1 if issue.is_descendant_of?(other_issue)
175 descendant_count -= 1 if issue.is_descendant_of?(other_issue)
176 end
176 end
177 end
177 end
178 if descendant_count > 0
178 if descendant_count > 0
179 message << "\n" + l(:text_issues_destroy_descendants_confirmation, :count => descendant_count)
179 message << "\n" + l(:text_issues_destroy_descendants_confirmation, :count => descendant_count)
180 end
180 end
181 end
181 end
182 message
182 message
183 end
183 end
184
184
185 def sidebar_queries
185 def sidebar_queries
186 unless @sidebar_queries
186 unless @sidebar_queries
187 @sidebar_queries = IssueQuery.visible.all(
187 @sidebar_queries = IssueQuery.visible.all(
188 :order => "#{Query.table_name}.name ASC",
188 :order => "#{Query.table_name}.name ASC",
189 # Project specific queries and global queries
189 # Project specific queries and global queries
190 :conditions => (@project.nil? ? ["project_id IS NULL"] : ["project_id IS NULL OR project_id = ?", @project.id])
190 :conditions => (@project.nil? ? ["project_id IS NULL"] : ["project_id IS NULL OR project_id = ?", @project.id])
191 )
191 )
192 end
192 end
193 @sidebar_queries
193 @sidebar_queries
194 end
194 end
195
195
196 def query_links(title, queries)
196 def query_links(title, queries)
197 # links to #index on issues/show
197 # links to #index on issues/show
198 url_params = controller_name == 'issues' ? {:controller => 'issues', :action => 'index', :project_id => @project} : params
198 url_params = controller_name == 'issues' ? {:controller => 'issues', :action => 'index', :project_id => @project} : params
199
199
200 content_tag('h3', h(title)) +
200 content_tag('h3', h(title)) + "\n" +
201 content_tag('ul',
201 queries.collect {|query|
202 queries.collect {|query|
202 css = 'query'
203 css = 'query'
203 css << ' selected' if query == @query
204 css << ' selected' if query == @query
204 link_to(h(query.name), url_params.merge(:query_id => query), :class => css)
205 content_tag('li', link_to(h(query.name), url_params.merge(:query_id => query), :class => css))
205 }.join('<br />').html_safe
206 }.join("\n").html_safe,
207 :class => 'queries'
208 ) + "\n"
206 end
209 end
207
210
208 def render_sidebar_queries
211 def render_sidebar_queries
209 out = ''.html_safe
212 out = ''.html_safe
210 queries = sidebar_queries.select {|q| !q.is_public?}
213 queries = sidebar_queries.select {|q| !q.is_public?}
211 out << query_links(l(:label_my_queries), queries) if queries.any?
214 out << query_links(l(:label_my_queries), queries) if queries.any?
212 queries = sidebar_queries.select {|q| q.is_public?}
215 queries = sidebar_queries.select {|q| q.is_public?}
213 out << query_links(l(:label_query_plural), queries) if queries.any?
216 out << query_links(l(:label_query_plural), queries) if queries.any?
214 out
217 out
215 end
218 end
216
219
217 # Returns the textual representation of a journal details
220 # Returns the textual representation of a journal details
218 # as an array of strings
221 # as an array of strings
219 def details_to_strings(details, no_html=false, options={})
222 def details_to_strings(details, no_html=false, options={})
220 options[:only_path] = (options[:only_path] == false ? false : true)
223 options[:only_path] = (options[:only_path] == false ? false : true)
221 strings = []
224 strings = []
222 values_by_field = {}
225 values_by_field = {}
223 details.each do |detail|
226 details.each do |detail|
224 if detail.property == 'cf'
227 if detail.property == 'cf'
225 field_id = detail.prop_key
228 field_id = detail.prop_key
226 field = CustomField.find_by_id(field_id)
229 field = CustomField.find_by_id(field_id)
227 if field && field.multiple?
230 if field && field.multiple?
228 values_by_field[field_id] ||= {:added => [], :deleted => []}
231 values_by_field[field_id] ||= {:added => [], :deleted => []}
229 if detail.old_value
232 if detail.old_value
230 values_by_field[field_id][:deleted] << detail.old_value
233 values_by_field[field_id][:deleted] << detail.old_value
231 end
234 end
232 if detail.value
235 if detail.value
233 values_by_field[field_id][:added] << detail.value
236 values_by_field[field_id][:added] << detail.value
234 end
237 end
235 next
238 next
236 end
239 end
237 end
240 end
238 strings << show_detail(detail, no_html, options)
241 strings << show_detail(detail, no_html, options)
239 end
242 end
240 values_by_field.each do |field_id, changes|
243 values_by_field.each do |field_id, changes|
241 detail = JournalDetail.new(:property => 'cf', :prop_key => field_id)
244 detail = JournalDetail.new(:property => 'cf', :prop_key => field_id)
242 if changes[:added].any?
245 if changes[:added].any?
243 detail.value = changes[:added]
246 detail.value = changes[:added]
244 strings << show_detail(detail, no_html, options)
247 strings << show_detail(detail, no_html, options)
245 elsif changes[:deleted].any?
248 elsif changes[:deleted].any?
246 detail.old_value = changes[:deleted]
249 detail.old_value = changes[:deleted]
247 strings << show_detail(detail, no_html, options)
250 strings << show_detail(detail, no_html, options)
248 end
251 end
249 end
252 end
250 strings
253 strings
251 end
254 end
252
255
253 # Returns the textual representation of a single journal detail
256 # Returns the textual representation of a single journal detail
254 def show_detail(detail, no_html=false, options={})
257 def show_detail(detail, no_html=false, options={})
255 multiple = false
258 multiple = false
256 case detail.property
259 case detail.property
257 when 'attr'
260 when 'attr'
258 field = detail.prop_key.to_s.gsub(/\_id$/, "")
261 field = detail.prop_key.to_s.gsub(/\_id$/, "")
259 label = l(("field_" + field).to_sym)
262 label = l(("field_" + field).to_sym)
260 case detail.prop_key
263 case detail.prop_key
261 when 'due_date', 'start_date'
264 when 'due_date', 'start_date'
262 value = format_date(detail.value.to_date) if detail.value
265 value = format_date(detail.value.to_date) if detail.value
263 old_value = format_date(detail.old_value.to_date) if detail.old_value
266 old_value = format_date(detail.old_value.to_date) if detail.old_value
264
267
265 when 'project_id', 'status_id', 'tracker_id', 'assigned_to_id',
268 when 'project_id', 'status_id', 'tracker_id', 'assigned_to_id',
266 'priority_id', 'category_id', 'fixed_version_id'
269 'priority_id', 'category_id', 'fixed_version_id'
267 value = find_name_by_reflection(field, detail.value)
270 value = find_name_by_reflection(field, detail.value)
268 old_value = find_name_by_reflection(field, detail.old_value)
271 old_value = find_name_by_reflection(field, detail.old_value)
269
272
270 when 'estimated_hours'
273 when 'estimated_hours'
271 value = "%0.02f" % detail.value.to_f unless detail.value.blank?
274 value = "%0.02f" % detail.value.to_f unless detail.value.blank?
272 old_value = "%0.02f" % detail.old_value.to_f unless detail.old_value.blank?
275 old_value = "%0.02f" % detail.old_value.to_f unless detail.old_value.blank?
273
276
274 when 'parent_id'
277 when 'parent_id'
275 label = l(:field_parent_issue)
278 label = l(:field_parent_issue)
276 value = "##{detail.value}" unless detail.value.blank?
279 value = "##{detail.value}" unless detail.value.blank?
277 old_value = "##{detail.old_value}" unless detail.old_value.blank?
280 old_value = "##{detail.old_value}" unless detail.old_value.blank?
278
281
279 when 'is_private'
282 when 'is_private'
280 value = l(detail.value == "0" ? :general_text_No : :general_text_Yes) unless detail.value.blank?
283 value = l(detail.value == "0" ? :general_text_No : :general_text_Yes) unless detail.value.blank?
281 old_value = l(detail.old_value == "0" ? :general_text_No : :general_text_Yes) unless detail.old_value.blank?
284 old_value = l(detail.old_value == "0" ? :general_text_No : :general_text_Yes) unless detail.old_value.blank?
282 end
285 end
283 when 'cf'
286 when 'cf'
284 custom_field = CustomField.find_by_id(detail.prop_key)
287 custom_field = CustomField.find_by_id(detail.prop_key)
285 if custom_field
288 if custom_field
286 multiple = custom_field.multiple?
289 multiple = custom_field.multiple?
287 label = custom_field.name
290 label = custom_field.name
288 value = format_value(detail.value, custom_field.field_format) if detail.value
291 value = format_value(detail.value, custom_field.field_format) if detail.value
289 old_value = format_value(detail.old_value, custom_field.field_format) if detail.old_value
292 old_value = format_value(detail.old_value, custom_field.field_format) if detail.old_value
290 end
293 end
291 when 'attachment'
294 when 'attachment'
292 label = l(:label_attachment)
295 label = l(:label_attachment)
293 end
296 end
294 call_hook(:helper_issues_show_detail_after_setting,
297 call_hook(:helper_issues_show_detail_after_setting,
295 {:detail => detail, :label => label, :value => value, :old_value => old_value })
298 {:detail => detail, :label => label, :value => value, :old_value => old_value })
296
299
297 label ||= detail.prop_key
300 label ||= detail.prop_key
298 value ||= detail.value
301 value ||= detail.value
299 old_value ||= detail.old_value
302 old_value ||= detail.old_value
300
303
301 unless no_html
304 unless no_html
302 label = content_tag('strong', label)
305 label = content_tag('strong', label)
303 old_value = content_tag("i", h(old_value)) if detail.old_value
306 old_value = content_tag("i", h(old_value)) if detail.old_value
304 old_value = content_tag("del", old_value) if detail.old_value and detail.value.blank?
307 old_value = content_tag("del", old_value) if detail.old_value and detail.value.blank?
305 if detail.property == 'attachment' && !value.blank? && atta = Attachment.find_by_id(detail.prop_key)
308 if detail.property == 'attachment' && !value.blank? && atta = Attachment.find_by_id(detail.prop_key)
306 # Link to the attachment if it has not been removed
309 # Link to the attachment if it has not been removed
307 value = link_to_attachment(atta, :download => true, :only_path => options[:only_path])
310 value = link_to_attachment(atta, :download => true, :only_path => options[:only_path])
308 if options[:only_path] != false && atta.is_text?
311 if options[:only_path] != false && atta.is_text?
309 value += link_to(
312 value += link_to(
310 image_tag('magnifier.png'),
313 image_tag('magnifier.png'),
311 :controller => 'attachments', :action => 'show',
314 :controller => 'attachments', :action => 'show',
312 :id => atta, :filename => atta.filename
315 :id => atta, :filename => atta.filename
313 )
316 )
314 end
317 end
315 else
318 else
316 value = content_tag("i", h(value)) if value
319 value = content_tag("i", h(value)) if value
317 end
320 end
318 end
321 end
319
322
320 if detail.property == 'attr' && detail.prop_key == 'description'
323 if detail.property == 'attr' && detail.prop_key == 'description'
321 s = l(:text_journal_changed_no_detail, :label => label)
324 s = l(:text_journal_changed_no_detail, :label => label)
322 unless no_html
325 unless no_html
323 diff_link = link_to 'diff',
326 diff_link = link_to 'diff',
324 {:controller => 'journals', :action => 'diff', :id => detail.journal_id,
327 {:controller => 'journals', :action => 'diff', :id => detail.journal_id,
325 :detail_id => detail.id, :only_path => options[:only_path]},
328 :detail_id => detail.id, :only_path => options[:only_path]},
326 :title => l(:label_view_diff)
329 :title => l(:label_view_diff)
327 s << " (#{ diff_link })"
330 s << " (#{ diff_link })"
328 end
331 end
329 s.html_safe
332 s.html_safe
330 elsif detail.value.present?
333 elsif detail.value.present?
331 case detail.property
334 case detail.property
332 when 'attr', 'cf'
335 when 'attr', 'cf'
333 if detail.old_value.present?
336 if detail.old_value.present?
334 l(:text_journal_changed, :label => label, :old => old_value, :new => value).html_safe
337 l(:text_journal_changed, :label => label, :old => old_value, :new => value).html_safe
335 elsif multiple
338 elsif multiple
336 l(:text_journal_added, :label => label, :value => value).html_safe
339 l(:text_journal_added, :label => label, :value => value).html_safe
337 else
340 else
338 l(:text_journal_set_to, :label => label, :value => value).html_safe
341 l(:text_journal_set_to, :label => label, :value => value).html_safe
339 end
342 end
340 when 'attachment'
343 when 'attachment'
341 l(:text_journal_added, :label => label, :value => value).html_safe
344 l(:text_journal_added, :label => label, :value => value).html_safe
342 end
345 end
343 else
346 else
344 l(:text_journal_deleted, :label => label, :old => old_value).html_safe
347 l(:text_journal_deleted, :label => label, :old => old_value).html_safe
345 end
348 end
346 end
349 end
347
350
348 # Find the name of an associated record stored in the field attribute
351 # Find the name of an associated record stored in the field attribute
349 def find_name_by_reflection(field, id)
352 def find_name_by_reflection(field, id)
350 unless id.present?
353 unless id.present?
351 return nil
354 return nil
352 end
355 end
353 association = Issue.reflect_on_association(field.to_sym)
356 association = Issue.reflect_on_association(field.to_sym)
354 if association
357 if association
355 record = association.class_name.constantize.find_by_id(id)
358 record = association.class_name.constantize.find_by_id(id)
356 return record.name if record
359 return record.name if record
357 end
360 end
358 end
361 end
359
362
360 # Renders issue children recursively
363 # Renders issue children recursively
361 def render_api_issue_children(issue, api)
364 def render_api_issue_children(issue, api)
362 return if issue.leaf?
365 return if issue.leaf?
363 api.array :children do
366 api.array :children do
364 issue.children.each do |child|
367 issue.children.each do |child|
365 api.issue(:id => child.id) do
368 api.issue(:id => child.id) do
366 api.tracker(:id => child.tracker_id, :name => child.tracker.name) unless child.tracker.nil?
369 api.tracker(:id => child.tracker_id, :name => child.tracker.name) unless child.tracker.nil?
367 api.subject child.subject
370 api.subject child.subject
368 render_api_issue_children(child, api)
371 render_api_issue_children(child, api)
369 end
372 end
370 end
373 end
371 end
374 end
372 end
375 end
373 end
376 end
@@ -1,1148 +1,1148
1 html {overflow-y:scroll;}
1 html {overflow-y:scroll;}
2 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
2 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
3
3
4 h1, h2, h3, h4 {font-family: "Trebuchet MS", Verdana, sans-serif;padding: 2px 10px 1px 0px;margin: 0 0 10px 0;}
4 h1, h2, h3, h4 {font-family: "Trebuchet MS", Verdana, sans-serif;padding: 2px 10px 1px 0px;margin: 0 0 10px 0;}
5 #content h1, h2, h3, h4 {color: #555;}
5 #content h1, h2, h3, h4 {color: #555;}
6 h2, .wiki h1 {font-size: 20px;}
6 h2, .wiki h1 {font-size: 20px;}
7 h3, .wiki h2 {font-size: 16px;}
7 h3, .wiki h2 {font-size: 16px;}
8 h4, .wiki h3 {font-size: 13px;}
8 h4, .wiki h3 {font-size: 13px;}
9 h4 {border-bottom: 1px dotted #bbb;}
9 h4 {border-bottom: 1px dotted #bbb;}
10
10
11 /***** Layout *****/
11 /***** Layout *****/
12 #wrapper {background: white;}
12 #wrapper {background: white;}
13
13
14 #top-menu {background: #3E5B76; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
14 #top-menu {background: #3E5B76; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
15 #top-menu ul {margin: 0; padding: 0;}
15 #top-menu ul {margin: 0; padding: 0;}
16 #top-menu li {
16 #top-menu li {
17 float:left;
17 float:left;
18 list-style-type:none;
18 list-style-type:none;
19 margin: 0px 0px 0px 0px;
19 margin: 0px 0px 0px 0px;
20 padding: 0px 0px 0px 0px;
20 padding: 0px 0px 0px 0px;
21 white-space:nowrap;
21 white-space:nowrap;
22 }
22 }
23 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
23 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
24 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
24 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
25
25
26 #account {float:right;}
26 #account {float:right;}
27
27
28 #header {min-height:5.3em;margin:0;background-color:#628DB6;color:#f8f8f8; padding: 4px 8px 20px 6px; position:relative;}
28 #header {min-height:5.3em;margin:0;background-color:#628DB6;color:#f8f8f8; padding: 4px 8px 20px 6px; position:relative;}
29 #header a {color:#f8f8f8;}
29 #header a {color:#f8f8f8;}
30 #header h1 a.ancestor { font-size: 80%; }
30 #header h1 a.ancestor { font-size: 80%; }
31 #quick-search {float:right;}
31 #quick-search {float:right;}
32
32
33 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
33 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
34 #main-menu ul {margin: 0; padding: 0;}
34 #main-menu ul {margin: 0; padding: 0;}
35 #main-menu li {
35 #main-menu li {
36 float:left;
36 float:left;
37 list-style-type:none;
37 list-style-type:none;
38 margin: 0px 2px 0px 0px;
38 margin: 0px 2px 0px 0px;
39 padding: 0px 0px 0px 0px;
39 padding: 0px 0px 0px 0px;
40 white-space:nowrap;
40 white-space:nowrap;
41 }
41 }
42 #main-menu li a {
42 #main-menu li a {
43 display: block;
43 display: block;
44 color: #fff;
44 color: #fff;
45 text-decoration: none;
45 text-decoration: none;
46 font-weight: bold;
46 font-weight: bold;
47 margin: 0;
47 margin: 0;
48 padding: 4px 10px 4px 10px;
48 padding: 4px 10px 4px 10px;
49 }
49 }
50 #main-menu li a:hover {background:#759FCF; color:#fff;}
50 #main-menu li a:hover {background:#759FCF; color:#fff;}
51 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
51 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
52
52
53 #admin-menu ul {margin: 0; padding: 0;}
53 #admin-menu ul {margin: 0; padding: 0;}
54 #admin-menu li {margin: 0; padding: 0 0 6px 0; list-style-type:none;}
54 #admin-menu li {margin: 0; padding: 0 0 6px 0; list-style-type:none;}
55
55
56 #admin-menu a { background-position: 0% 40%; background-repeat: no-repeat; padding-left: 20px; padding-top: 2px; padding-bottom: 3px;}
56 #admin-menu a { background-position: 0% 40%; background-repeat: no-repeat; padding-left: 20px; padding-top: 2px; padding-bottom: 3px;}
57 #admin-menu a.projects { background-image: url(../images/projects.png); }
57 #admin-menu a.projects { background-image: url(../images/projects.png); }
58 #admin-menu a.users { background-image: url(../images/user.png); }
58 #admin-menu a.users { background-image: url(../images/user.png); }
59 #admin-menu a.groups { background-image: url(../images/group.png); }
59 #admin-menu a.groups { background-image: url(../images/group.png); }
60 #admin-menu a.roles { background-image: url(../images/database_key.png); }
60 #admin-menu a.roles { background-image: url(../images/database_key.png); }
61 #admin-menu a.trackers { background-image: url(../images/ticket.png); }
61 #admin-menu a.trackers { background-image: url(../images/ticket.png); }
62 #admin-menu a.issue_statuses { background-image: url(../images/ticket_edit.png); }
62 #admin-menu a.issue_statuses { background-image: url(../images/ticket_edit.png); }
63 #admin-menu a.workflows { background-image: url(../images/ticket_go.png); }
63 #admin-menu a.workflows { background-image: url(../images/ticket_go.png); }
64 #admin-menu a.custom_fields { background-image: url(../images/textfield.png); }
64 #admin-menu a.custom_fields { background-image: url(../images/textfield.png); }
65 #admin-menu a.enumerations { background-image: url(../images/text_list_bullets.png); }
65 #admin-menu a.enumerations { background-image: url(../images/text_list_bullets.png); }
66 #admin-menu a.settings { background-image: url(../images/changeset.png); }
66 #admin-menu a.settings { background-image: url(../images/changeset.png); }
67 #admin-menu a.plugins { background-image: url(../images/plugin.png); }
67 #admin-menu a.plugins { background-image: url(../images/plugin.png); }
68 #admin-menu a.info { background-image: url(../images/help.png); }
68 #admin-menu a.info { background-image: url(../images/help.png); }
69 #admin-menu a.server_authentication { background-image: url(../images/server_key.png); }
69 #admin-menu a.server_authentication { background-image: url(../images/server_key.png); }
70
70
71 #main {background-color:#EEEEEE;}
71 #main {background-color:#EEEEEE;}
72
72
73 #sidebar{ float: right; width: 22%; position: relative; z-index: 9; padding: 0; margin: 0;}
73 #sidebar{ float: right; width: 22%; position: relative; z-index: 9; padding: 0; margin: 0;}
74 * html #sidebar{ width: 22%; }
74 * html #sidebar{ width: 22%; }
75 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
75 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
76 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
76 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
77 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
77 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
78 #sidebar .contextual { margin-right: 1em; }
78 #sidebar .contextual { margin-right: 1em; }
79 #sidebar ul.watchers, #sidebar ul.queries {margin: 0; padding: 0;}
80 #sidebar ul.watchers li, #sidebar ul.queries li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
79
81
80 #content { width: 75%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
82 #content { width: 75%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
81 * html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
83 * html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
82 html>body #content { min-height: 600px; }
84 html>body #content { min-height: 600px; }
83 * html body #content { height: 600px; } /* IE */
85 * html body #content { height: 600px; } /* IE */
84
86
85 #main.nosidebar #sidebar{ display: none; }
87 #main.nosidebar #sidebar{ display: none; }
86 #main.nosidebar #content{ width: auto; border-right: 0; }
88 #main.nosidebar #content{ width: auto; border-right: 0; }
87
89
88 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
90 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
89
91
90 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
92 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
91 #login-form table td {padding: 6px;}
93 #login-form table td {padding: 6px;}
92 #login-form label {font-weight: bold;}
94 #login-form label {font-weight: bold;}
93 #login-form input#username, #login-form input#password { width: 300px; }
95 #login-form input#username, #login-form input#password { width: 300px; }
94
96
95 div.modal { border-radius:5px; background:#fff; z-index:50; padding:4px;}
97 div.modal { border-radius:5px; background:#fff; z-index:50; padding:4px;}
96 div.modal h3.title {display:none;}
98 div.modal h3.title {display:none;}
97 div.modal p.buttons {text-align:right; margin-bottom:0;}
99 div.modal p.buttons {text-align:right; margin-bottom:0;}
98
100
99 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
101 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
100
102
101 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
103 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
102
104
103 /***** Links *****/
105 /***** Links *****/
104 a, a:link, a:visited{ color: #169; text-decoration: none; }
106 a, a:link, a:visited{ color: #169; text-decoration: none; }
105 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
107 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
106 a img{ border: 0; }
108 a img{ border: 0; }
107
109
108 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
110 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
109 a.project.closed, a.project.closed:link, a.project.closed:visited { color: #999; }
111 a.project.closed, a.project.closed:link, a.project.closed:visited { color: #999; }
110 a.user.locked, a.user.locked:link, a.user.locked:visited {color: #999;}
112 a.user.locked, a.user.locked:link, a.user.locked:visited {color: #999;}
111
113
112 #sidebar a.selected {line-height:1.7em; padding:1px 3px 2px 2px; margin-left:-2px; background-color:#9DB9D5; color:#fff; border-radius:2px;}
114 #sidebar a.selected {line-height:1.7em; padding:1px 3px 2px 2px; margin-left:-2px; background-color:#9DB9D5; color:#fff; border-radius:2px;}
113 #sidebar a.selected:hover {text-decoration:none;}
115 #sidebar a.selected:hover {text-decoration:none;}
114 #admin-menu a {line-height:1.7em;}
116 #admin-menu a {line-height:1.7em;}
115 #admin-menu a.selected {padding-left: 20px !important; background-position: 2px 40%;}
117 #admin-menu a.selected {padding-left: 20px !important; background-position: 2px 40%;}
116
118
117 a.collapsible {padding-left: 12px; background: url(../images/arrow_expanded.png) no-repeat -3px 40%;}
119 a.collapsible {padding-left: 12px; background: url(../images/arrow_expanded.png) no-repeat -3px 40%;}
118 a.collapsible.collapsed {background: url(../images/arrow_collapsed.png) no-repeat -5px 40%;}
120 a.collapsible.collapsed {background: url(../images/arrow_collapsed.png) no-repeat -5px 40%;}
119
121
120 a#toggle-completed-versions {color:#999;}
122 a#toggle-completed-versions {color:#999;}
121 /***** Tables *****/
123 /***** Tables *****/
122 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
124 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
123 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
125 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
124 table.list td { vertical-align: top; padding-right:10px; }
126 table.list td { vertical-align: top; padding-right:10px; }
125 table.list td.id { width: 2%; text-align: center;}
127 table.list td.id { width: 2%; text-align: center;}
126 table.list td.checkbox { width: 15px; padding: 2px 0 0 0; }
128 table.list td.checkbox { width: 15px; padding: 2px 0 0 0; }
127 table.list td.checkbox input {padding:0px;}
129 table.list td.checkbox input {padding:0px;}
128 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
130 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
129 table.list td.buttons a { padding-right: 0.6em; }
131 table.list td.buttons a { padding-right: 0.6em; }
130 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
132 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
131
133
132 tr.project td.name a { white-space:nowrap; }
134 tr.project td.name a { white-space:nowrap; }
133 tr.project.closed, tr.project.archived { color: #aaa; }
135 tr.project.closed, tr.project.archived { color: #aaa; }
134 tr.project.closed a, tr.project.archived a { color: #aaa; }
136 tr.project.closed a, tr.project.archived a { color: #aaa; }
135
137
136 tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
138 tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
137 tr.project.idnt-1 td.name {padding-left: 0.5em;}
139 tr.project.idnt-1 td.name {padding-left: 0.5em;}
138 tr.project.idnt-2 td.name {padding-left: 2em;}
140 tr.project.idnt-2 td.name {padding-left: 2em;}
139 tr.project.idnt-3 td.name {padding-left: 3.5em;}
141 tr.project.idnt-3 td.name {padding-left: 3.5em;}
140 tr.project.idnt-4 td.name {padding-left: 5em;}
142 tr.project.idnt-4 td.name {padding-left: 5em;}
141 tr.project.idnt-5 td.name {padding-left: 6.5em;}
143 tr.project.idnt-5 td.name {padding-left: 6.5em;}
142 tr.project.idnt-6 td.name {padding-left: 8em;}
144 tr.project.idnt-6 td.name {padding-left: 8em;}
143 tr.project.idnt-7 td.name {padding-left: 9.5em;}
145 tr.project.idnt-7 td.name {padding-left: 9.5em;}
144 tr.project.idnt-8 td.name {padding-left: 11em;}
146 tr.project.idnt-8 td.name {padding-left: 11em;}
145 tr.project.idnt-9 td.name {padding-left: 12.5em;}
147 tr.project.idnt-9 td.name {padding-left: 12.5em;}
146
148
147 tr.issue { text-align: center; white-space: nowrap; }
149 tr.issue { text-align: center; white-space: nowrap; }
148 tr.issue td.subject, tr.issue td.category, td.assigned_to, tr.issue td.string, tr.issue td.text, tr.issue td.relations { white-space: normal; }
150 tr.issue td.subject, tr.issue td.category, td.assigned_to, tr.issue td.string, tr.issue td.text, tr.issue td.relations { white-space: normal; }
149 tr.issue td.subject, tr.issue td.relations { text-align: left; }
151 tr.issue td.subject, tr.issue td.relations { text-align: left; }
150 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
152 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
151 tr.issue td.relations span {white-space: nowrap;}
153 tr.issue td.relations span {white-space: nowrap;}
152 table.issues td.description {color:#777; font-size:90%; padding:4px 4px 4px 24px; text-align:left; white-space:normal;}
154 table.issues td.description {color:#777; font-size:90%; padding:4px 4px 4px 24px; text-align:left; white-space:normal;}
153 table.issues td.description pre {white-space:normal;}
155 table.issues td.description pre {white-space:normal;}
154
156
155 tr.issue.idnt td.subject a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
157 tr.issue.idnt td.subject a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
156 tr.issue.idnt-1 td.subject {padding-left: 0.5em;}
158 tr.issue.idnt-1 td.subject {padding-left: 0.5em;}
157 tr.issue.idnt-2 td.subject {padding-left: 2em;}
159 tr.issue.idnt-2 td.subject {padding-left: 2em;}
158 tr.issue.idnt-3 td.subject {padding-left: 3.5em;}
160 tr.issue.idnt-3 td.subject {padding-left: 3.5em;}
159 tr.issue.idnt-4 td.subject {padding-left: 5em;}
161 tr.issue.idnt-4 td.subject {padding-left: 5em;}
160 tr.issue.idnt-5 td.subject {padding-left: 6.5em;}
162 tr.issue.idnt-5 td.subject {padding-left: 6.5em;}
161 tr.issue.idnt-6 td.subject {padding-left: 8em;}
163 tr.issue.idnt-6 td.subject {padding-left: 8em;}
162 tr.issue.idnt-7 td.subject {padding-left: 9.5em;}
164 tr.issue.idnt-7 td.subject {padding-left: 9.5em;}
163 tr.issue.idnt-8 td.subject {padding-left: 11em;}
165 tr.issue.idnt-8 td.subject {padding-left: 11em;}
164 tr.issue.idnt-9 td.subject {padding-left: 12.5em;}
166 tr.issue.idnt-9 td.subject {padding-left: 12.5em;}
165
167
166 tr.entry { border: 1px solid #f8f8f8; }
168 tr.entry { border: 1px solid #f8f8f8; }
167 tr.entry td { white-space: nowrap; }
169 tr.entry td { white-space: nowrap; }
168 tr.entry td.filename { width: 30%; }
170 tr.entry td.filename { width: 30%; }
169 tr.entry td.filename_no_report { width: 70%; }
171 tr.entry td.filename_no_report { width: 70%; }
170 tr.entry td.size { text-align: right; font-size: 90%; }
172 tr.entry td.size { text-align: right; font-size: 90%; }
171 tr.entry td.revision, tr.entry td.author { text-align: center; }
173 tr.entry td.revision, tr.entry td.author { text-align: center; }
172 tr.entry td.age { text-align: right; }
174 tr.entry td.age { text-align: right; }
173 tr.entry.file td.filename a { margin-left: 16px; }
175 tr.entry.file td.filename a { margin-left: 16px; }
174 tr.entry.file td.filename_no_report a { margin-left: 16px; }
176 tr.entry.file td.filename_no_report a { margin-left: 16px; }
175
177
176 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
178 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
177 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
179 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
178
180
179 tr.changeset { height: 20px }
181 tr.changeset { height: 20px }
180 tr.changeset ul, ol { margin-top: 0px; margin-bottom: 0px; }
182 tr.changeset ul, ol { margin-top: 0px; margin-bottom: 0px; }
181 tr.changeset td.revision_graph { width: 15%; background-color: #fffffb; }
183 tr.changeset td.revision_graph { width: 15%; background-color: #fffffb; }
182 tr.changeset td.author { text-align: center; width: 15%; white-space:nowrap;}
184 tr.changeset td.author { text-align: center; width: 15%; white-space:nowrap;}
183 tr.changeset td.committed_on { text-align: center; width: 15%; white-space:nowrap;}
185 tr.changeset td.committed_on { text-align: center; width: 15%; white-space:nowrap;}
184
186
185 table.files tr.file td { text-align: center; }
187 table.files tr.file td { text-align: center; }
186 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
188 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
187 table.files tr.file td.digest { font-size: 80%; }
189 table.files tr.file td.digest { font-size: 80%; }
188
190
189 table.members td.roles, table.memberships td.roles { width: 45%; }
191 table.members td.roles, table.memberships td.roles { width: 45%; }
190
192
191 tr.message { height: 2.6em; }
193 tr.message { height: 2.6em; }
192 tr.message td.subject { padding-left: 20px; }
194 tr.message td.subject { padding-left: 20px; }
193 tr.message td.created_on { white-space: nowrap; }
195 tr.message td.created_on { white-space: nowrap; }
194 tr.message td.last_message { font-size: 80%; white-space: nowrap; }
196 tr.message td.last_message { font-size: 80%; white-space: nowrap; }
195 tr.message.locked td.subject { background: url(../images/locked.png) no-repeat 0 1px; }
197 tr.message.locked td.subject { background: url(../images/locked.png) no-repeat 0 1px; }
196 tr.message.sticky td.subject { background: url(../images/bullet_go.png) no-repeat 0 1px; font-weight: bold; }
198 tr.message.sticky td.subject { background: url(../images/bullet_go.png) no-repeat 0 1px; font-weight: bold; }
197
199
198 tr.version.closed, tr.version.closed a { color: #999; }
200 tr.version.closed, tr.version.closed a { color: #999; }
199 tr.version td.name { padding-left: 20px; }
201 tr.version td.name { padding-left: 20px; }
200 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
202 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
201 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; }
203 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; }
202
204
203 tr.user td { width:13%; }
205 tr.user td { width:13%; }
204 tr.user td.email { width:18%; }
206 tr.user td.email { width:18%; }
205 tr.user td { white-space: nowrap; }
207 tr.user td { white-space: nowrap; }
206 tr.user.locked, tr.user.registered { color: #aaa; }
208 tr.user.locked, tr.user.registered { color: #aaa; }
207 tr.user.locked a, tr.user.registered a { color: #aaa; }
209 tr.user.locked a, tr.user.registered a { color: #aaa; }
208
210
209 table.permissions td.role {color:#999;font-size:90%;font-weight:normal !important;text-align:center;vertical-align:bottom;}
211 table.permissions td.role {color:#999;font-size:90%;font-weight:normal !important;text-align:center;vertical-align:bottom;}
210
212
211 tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
213 tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
212
214
213 tr.time-entry { text-align: center; white-space: nowrap; }
215 tr.time-entry { text-align: center; white-space: nowrap; }
214 tr.time-entry td.issue, tr.time-entry td.comments { text-align: left; white-space: normal; }
216 tr.time-entry td.issue, tr.time-entry td.comments { text-align: left; white-space: normal; }
215 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
217 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
216 td.hours .hours-dec { font-size: 0.9em; }
218 td.hours .hours-dec { font-size: 0.9em; }
217
219
218 table.plugins td { vertical-align: middle; }
220 table.plugins td { vertical-align: middle; }
219 table.plugins td.configure { text-align: right; padding-right: 1em; }
221 table.plugins td.configure { text-align: right; padding-right: 1em; }
220 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
222 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
221 table.plugins span.description { display: block; font-size: 0.9em; }
223 table.plugins span.description { display: block; font-size: 0.9em; }
222 table.plugins span.url { display: block; font-size: 0.9em; }
224 table.plugins span.url { display: block; font-size: 0.9em; }
223
225
224 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
226 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
225 table.list tbody tr.group span.count {position:relative; top:-1px; color:#fff; font-size:10px; background:#9DB9D5; padding:0px 6px 1px 6px; border-radius:3px; margin-left:4px;}
227 table.list tbody tr.group span.count {position:relative; top:-1px; color:#fff; font-size:10px; background:#9DB9D5; padding:0px 6px 1px 6px; border-radius:3px; margin-left:4px;}
226 tr.group a.toggle-all { color: #aaa; font-size: 80%; font-weight: normal; display:none;}
228 tr.group a.toggle-all { color: #aaa; font-size: 80%; font-weight: normal; display:none;}
227 tr.group:hover a.toggle-all { display:inline;}
229 tr.group:hover a.toggle-all { display:inline;}
228 a.toggle-all:hover {text-decoration:none;}
230 a.toggle-all:hover {text-decoration:none;}
229
231
230 table.list tbody tr:hover { background-color:#ffffdd; }
232 table.list tbody tr:hover { background-color:#ffffdd; }
231 table.list tbody tr.group:hover { background-color:inherit; }
233 table.list tbody tr.group:hover { background-color:inherit; }
232 table td {padding:2px;}
234 table td {padding:2px;}
233 table p {margin:0;}
235 table p {margin:0;}
234 .odd {background-color:#f6f7f8;}
236 .odd {background-color:#f6f7f8;}
235 .even {background-color: #fff;}
237 .even {background-color: #fff;}
236
238
237 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
239 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
238 a.sort.asc { background-image: url(../images/sort_asc.png); }
240 a.sort.asc { background-image: url(../images/sort_asc.png); }
239 a.sort.desc { background-image: url(../images/sort_desc.png); }
241 a.sort.desc { background-image: url(../images/sort_desc.png); }
240
242
241 table.attributes { width: 100% }
243 table.attributes { width: 100% }
242 table.attributes th { vertical-align: top; text-align: left; }
244 table.attributes th { vertical-align: top; text-align: left; }
243 table.attributes td { vertical-align: top; }
245 table.attributes td { vertical-align: top; }
244
246
245 table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
247 table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
246 table.boards td.topic-count, table.boards td.message-count {text-align:center;}
248 table.boards td.topic-count, table.boards td.message-count {text-align:center;}
247 table.boards td.last-message {font-size:80%;}
249 table.boards td.last-message {font-size:80%;}
248
250
249 table.messages td.author, table.messages td.created_on, table.messages td.reply-count {text-align:center;}
251 table.messages td.author, table.messages td.created_on, table.messages td.reply-count {text-align:center;}
250
252
251 table.query-columns {
253 table.query-columns {
252 border-collapse: collapse;
254 border-collapse: collapse;
253 border: 0;
255 border: 0;
254 }
256 }
255
257
256 table.query-columns td.buttons {
258 table.query-columns td.buttons {
257 vertical-align: middle;
259 vertical-align: middle;
258 text-align: center;
260 text-align: center;
259 }
261 }
260
262
261 td.center {text-align:center;}
263 td.center {text-align:center;}
262
264
263 h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; }
265 h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; }
264
266
265 div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; }
267 div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; }
266 div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; }
268 div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; }
267 div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
269 div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
268 div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
270 div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
269
271
270 #watchers ul {margin: 0; padding: 0;}
271 #watchers li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
272 #watchers select {width: 95%; display: block;}
272 #watchers select {width: 95%; display: block;}
273 #watchers a.delete {opacity: 0.4; vertical-align: middle;}
273 #watchers a.delete {opacity: 0.4; vertical-align: middle;}
274 #watchers a.delete:hover {opacity: 1;}
274 #watchers a.delete:hover {opacity: 1;}
275 #watchers img.gravatar {margin: 0 4px 2px 0;}
275 #watchers img.gravatar {margin: 0 4px 2px 0;}
276
276
277 span#watchers_inputs {overflow:auto; display:block;}
277 span#watchers_inputs {overflow:auto; display:block;}
278 span.search_for_watchers {display:block;}
278 span.search_for_watchers {display:block;}
279 span.search_for_watchers, span.add_attachment {font-size:80%; line-height:2.5em;}
279 span.search_for_watchers, span.add_attachment {font-size:80%; line-height:2.5em;}
280 span.search_for_watchers a, span.add_attachment a {padding-left:16px; background: url(../images/bullet_add.png) no-repeat 0 50%; }
280 span.search_for_watchers a, span.add_attachment a {padding-left:16px; background: url(../images/bullet_add.png) no-repeat 0 50%; }
281
281
282
282
283 .highlight { background-color: #FCFD8D;}
283 .highlight { background-color: #FCFD8D;}
284 .highlight.token-1 { background-color: #faa;}
284 .highlight.token-1 { background-color: #faa;}
285 .highlight.token-2 { background-color: #afa;}
285 .highlight.token-2 { background-color: #afa;}
286 .highlight.token-3 { background-color: #aaf;}
286 .highlight.token-3 { background-color: #aaf;}
287
287
288 .box{
288 .box{
289 padding:6px;
289 padding:6px;
290 margin-bottom: 10px;
290 margin-bottom: 10px;
291 background-color:#f6f6f6;
291 background-color:#f6f6f6;
292 color:#505050;
292 color:#505050;
293 line-height:1.5em;
293 line-height:1.5em;
294 border: 1px solid #e4e4e4;
294 border: 1px solid #e4e4e4;
295 }
295 }
296
296
297 div.square {
297 div.square {
298 border: 1px solid #999;
298 border: 1px solid #999;
299 float: left;
299 float: left;
300 margin: .3em .4em 0 .4em;
300 margin: .3em .4em 0 .4em;
301 overflow: hidden;
301 overflow: hidden;
302 width: .6em; height: .6em;
302 width: .6em; height: .6em;
303 }
303 }
304 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
304 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
305 .contextual input, .contextual select {font-size:0.9em;}
305 .contextual input, .contextual select {font-size:0.9em;}
306 .message .contextual { margin-top: 0; }
306 .message .contextual { margin-top: 0; }
307
307
308 .splitcontent {overflow:auto;}
308 .splitcontent {overflow:auto;}
309 .splitcontentleft{float:left; width:49%;}
309 .splitcontentleft{float:left; width:49%;}
310 .splitcontentright{float:right; width:49%;}
310 .splitcontentright{float:right; width:49%;}
311 form {display: inline;}
311 form {display: inline;}
312 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
312 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
313 fieldset {border: 1px solid #e4e4e4; margin:0;}
313 fieldset {border: 1px solid #e4e4e4; margin:0;}
314 legend {color: #484848;}
314 legend {color: #484848;}
315 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
315 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
316 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
316 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
317 blockquote blockquote { margin-left: 0;}
317 blockquote blockquote { margin-left: 0;}
318 acronym { border-bottom: 1px dotted; cursor: help; }
318 acronym { border-bottom: 1px dotted; cursor: help; }
319 textarea.wiki-edit {width:99%; resize:vertical;}
319 textarea.wiki-edit {width:99%; resize:vertical;}
320 li p {margin-top: 0;}
320 li p {margin-top: 0;}
321 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
321 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
322 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
322 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
323 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
323 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
324 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
324 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
325
325
326 div.issue div.subject div div { padding-left: 16px; }
326 div.issue div.subject div div { padding-left: 16px; }
327 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
327 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
328 div.issue div.subject>div>p { margin-top: 0.5em; }
328 div.issue div.subject>div>p { margin-top: 0.5em; }
329 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
329 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
330 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;}
330 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;}
331 div.issue .next-prev-links {color:#999;}
331 div.issue .next-prev-links {color:#999;}
332 div.issue table.attributes th {width:22%;}
332 div.issue table.attributes th {width:22%;}
333 div.issue table.attributes td {width:28%;}
333 div.issue table.attributes td {width:28%;}
334
334
335 #issue_tree table.issues, #relations table.issues { border: 0; }
335 #issue_tree table.issues, #relations table.issues { border: 0; }
336 #issue_tree td.checkbox, #relations td.checkbox {display:none;}
336 #issue_tree td.checkbox, #relations td.checkbox {display:none;}
337 #relations td.buttons {padding:0;}
337 #relations td.buttons {padding:0;}
338
338
339 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
339 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
340 fieldset.collapsible>legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
340 fieldset.collapsible>legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
341 fieldset.collapsible.collapsed>legend { background-image: url(../images/arrow_collapsed.png); }
341 fieldset.collapsible.collapsed>legend { background-image: url(../images/arrow_collapsed.png); }
342
342
343 fieldset#date-range p { margin: 2px 0 2px 0; }
343 fieldset#date-range p { margin: 2px 0 2px 0; }
344 fieldset#filters table { border-collapse: collapse; }
344 fieldset#filters table { border-collapse: collapse; }
345 fieldset#filters table td { padding: 0; vertical-align: middle; }
345 fieldset#filters table td { padding: 0; vertical-align: middle; }
346 fieldset#filters tr.filter { height: 2.1em; }
346 fieldset#filters tr.filter { height: 2.1em; }
347 fieldset#filters td.field { width:230px; }
347 fieldset#filters td.field { width:230px; }
348 fieldset#filters td.operator { width:180px; }
348 fieldset#filters td.operator { width:180px; }
349 fieldset#filters td.operator select {max-width:170px;}
349 fieldset#filters td.operator select {max-width:170px;}
350 fieldset#filters td.values { white-space:nowrap; }
350 fieldset#filters td.values { white-space:nowrap; }
351 fieldset#filters td.values select {min-width:130px;}
351 fieldset#filters td.values select {min-width:130px;}
352 fieldset#filters td.values input {height:1em;}
352 fieldset#filters td.values input {height:1em;}
353 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
353 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
354
354
355 .toggle-multiselect {background: url(../images/bullet_toggle_plus.png) no-repeat 0% 40%; padding-left:8px; margin-left:0; cursor:pointer;}
355 .toggle-multiselect {background: url(../images/bullet_toggle_plus.png) no-repeat 0% 40%; padding-left:8px; margin-left:0; cursor:pointer;}
356 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
356 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
357
357
358 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
358 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
359 div#issue-changesets div.changeset { padding: 4px;}
359 div#issue-changesets div.changeset { padding: 4px;}
360 div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
360 div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
361 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
361 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
362
362
363 .journal ul.details img {margin:0 0 -3px 4px;}
363 .journal ul.details img {margin:0 0 -3px 4px;}
364 div.journal {overflow:auto;}
364 div.journal {overflow:auto;}
365 div.journal.private-notes {border-left:2px solid #d22; padding-left:4px; margin-left:-6px;}
365 div.journal.private-notes {border-left:2px solid #d22; padding-left:4px; margin-left:-6px;}
366
366
367 div#activity dl, #search-results { margin-left: 2em; }
367 div#activity dl, #search-results { margin-left: 2em; }
368 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
368 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
369 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
369 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
370 div#activity dt.me .time { border-bottom: 1px solid #999; }
370 div#activity dt.me .time { border-bottom: 1px solid #999; }
371 div#activity dt .time { color: #777; font-size: 80%; }
371 div#activity dt .time { color: #777; font-size: 80%; }
372 div#activity dd .description, #search-results dd .description { font-style: italic; }
372 div#activity dd .description, #search-results dd .description { font-style: italic; }
373 div#activity span.project:after, #search-results span.project:after { content: " -"; }
373 div#activity span.project:after, #search-results span.project:after { content: " -"; }
374 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
374 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
375 div#activity dt.grouped {margin-left:5em;}
375 div#activity dt.grouped {margin-left:5em;}
376 div#activity dd.grouped {margin-left:9em;}
376 div#activity dd.grouped {margin-left:9em;}
377
377
378 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
378 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
379
379
380 div#search-results-counts {float:right;}
380 div#search-results-counts {float:right;}
381 div#search-results-counts ul { margin-top: 0.5em; }
381 div#search-results-counts ul { margin-top: 0.5em; }
382 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
382 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
383
383
384 dt.issue { background-image: url(../images/ticket.png); }
384 dt.issue { background-image: url(../images/ticket.png); }
385 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
385 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
386 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
386 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
387 dt.issue-note { background-image: url(../images/ticket_note.png); }
387 dt.issue-note { background-image: url(../images/ticket_note.png); }
388 dt.changeset { background-image: url(../images/changeset.png); }
388 dt.changeset { background-image: url(../images/changeset.png); }
389 dt.news { background-image: url(../images/news.png); }
389 dt.news { background-image: url(../images/news.png); }
390 dt.message { background-image: url(../images/message.png); }
390 dt.message { background-image: url(../images/message.png); }
391 dt.reply { background-image: url(../images/comments.png); }
391 dt.reply { background-image: url(../images/comments.png); }
392 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
392 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
393 dt.attachment { background-image: url(../images/attachment.png); }
393 dt.attachment { background-image: url(../images/attachment.png); }
394 dt.document { background-image: url(../images/document.png); }
394 dt.document { background-image: url(../images/document.png); }
395 dt.project { background-image: url(../images/projects.png); }
395 dt.project { background-image: url(../images/projects.png); }
396 dt.time-entry { background-image: url(../images/time.png); }
396 dt.time-entry { background-image: url(../images/time.png); }
397
397
398 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
398 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
399
399
400 div#roadmap .related-issues { margin-bottom: 1em; }
400 div#roadmap .related-issues { margin-bottom: 1em; }
401 div#roadmap .related-issues td.checkbox { display: none; }
401 div#roadmap .related-issues td.checkbox { display: none; }
402 div#roadmap .wiki h1:first-child { display: none; }
402 div#roadmap .wiki h1:first-child { display: none; }
403 div#roadmap .wiki h1 { font-size: 120%; }
403 div#roadmap .wiki h1 { font-size: 120%; }
404 div#roadmap .wiki h2 { font-size: 110%; }
404 div#roadmap .wiki h2 { font-size: 110%; }
405 body.controller-versions.action-show div#roadmap .related-issues {width:70%;}
405 body.controller-versions.action-show div#roadmap .related-issues {width:70%;}
406
406
407 div#version-summary { float:right; width:28%; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
407 div#version-summary { float:right; width:28%; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
408 div#version-summary fieldset { margin-bottom: 1em; }
408 div#version-summary fieldset { margin-bottom: 1em; }
409 div#version-summary fieldset.time-tracking table { width:100%; }
409 div#version-summary fieldset.time-tracking table { width:100%; }
410 div#version-summary th, div#version-summary td.total-hours { text-align: right; }
410 div#version-summary th, div#version-summary td.total-hours { text-align: right; }
411
411
412 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
412 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
413 table#time-report tbody tr.subtotal { font-style: italic; color:#777;}
413 table#time-report tbody tr.subtotal { font-style: italic; color:#777;}
414 table#time-report tbody tr.subtotal td.hours { color:#b0b0b0; }
414 table#time-report tbody tr.subtotal td.hours { color:#b0b0b0; }
415 table#time-report tbody tr.total { font-weight: bold; background-color:#EEEEEE; border-top:1px solid #e4e4e4;}
415 table#time-report tbody tr.total { font-weight: bold; background-color:#EEEEEE; border-top:1px solid #e4e4e4;}
416 table#time-report .hours-dec { font-size: 0.9em; }
416 table#time-report .hours-dec { font-size: 0.9em; }
417
417
418 div.wiki-page .contextual a {opacity: 0.4}
418 div.wiki-page .contextual a {opacity: 0.4}
419 div.wiki-page .contextual a:hover {opacity: 1}
419 div.wiki-page .contextual a:hover {opacity: 1}
420
420
421 form .attributes select { width: 60%; }
421 form .attributes select { width: 60%; }
422 input#issue_subject { width: 99%; }
422 input#issue_subject { width: 99%; }
423 select#issue_done_ratio { width: 95px; }
423 select#issue_done_ratio { width: 95px; }
424
424
425 ul.projects {margin:0; padding-left:1em;}
425 ul.projects {margin:0; padding-left:1em;}
426 ul.projects ul {padding-left:1.6em;}
426 ul.projects ul {padding-left:1.6em;}
427 ul.projects.root {margin:0; padding:0;}
427 ul.projects.root {margin:0; padding:0;}
428 ul.projects li {list-style-type:none;}
428 ul.projects li {list-style-type:none;}
429
429
430 #projects-index ul.projects ul.projects { border-left: 3px solid #e0e0e0; padding-left:1em;}
430 #projects-index ul.projects ul.projects { border-left: 3px solid #e0e0e0; padding-left:1em;}
431 #projects-index ul.projects li.root {margin-bottom: 1em;}
431 #projects-index ul.projects li.root {margin-bottom: 1em;}
432 #projects-index ul.projects li.child {margin-top: 1em;}
432 #projects-index ul.projects li.child {margin-top: 1em;}
433 #projects-index ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
433 #projects-index ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
434 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
434 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
435
435
436 #notified-projects ul, #tracker_project_ids ul {max-height:250px; overflow-y:auto;}
436 #notified-projects ul, #tracker_project_ids ul {max-height:250px; overflow-y:auto;}
437
437
438 #related-issues li img {vertical-align:middle;}
438 #related-issues li img {vertical-align:middle;}
439
439
440 ul.properties {padding:0; font-size: 0.9em; color: #777;}
440 ul.properties {padding:0; font-size: 0.9em; color: #777;}
441 ul.properties li {list-style-type:none;}
441 ul.properties li {list-style-type:none;}
442 ul.properties li span {font-style:italic;}
442 ul.properties li span {font-style:italic;}
443
443
444 .total-hours { font-size: 110%; font-weight: bold; }
444 .total-hours { font-size: 110%; font-weight: bold; }
445 .total-hours span.hours-int { font-size: 120%; }
445 .total-hours span.hours-int { font-size: 120%; }
446
446
447 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
447 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
448 #user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select, #user_identity_url { width: 90%; }
448 #user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select, #user_identity_url { width: 90%; }
449
449
450 #workflow_copy_form select { width: 200px; }
450 #workflow_copy_form select { width: 200px; }
451 table.transitions td.enabled {background: #bfb;}
451 table.transitions td.enabled {background: #bfb;}
452 table.fields_permissions select {font-size:90%}
452 table.fields_permissions select {font-size:90%}
453 table.fields_permissions td.readonly {background:#ddd;}
453 table.fields_permissions td.readonly {background:#ddd;}
454 table.fields_permissions td.required {background:#d88;}
454 table.fields_permissions td.required {background:#d88;}
455
455
456 textarea#custom_field_possible_values {width: 99%}
456 textarea#custom_field_possible_values {width: 99%}
457 textarea#custom_field_default_value {width: 99%}
457 textarea#custom_field_default_value {width: 99%}
458
458
459 input#content_comments {width: 99%}
459 input#content_comments {width: 99%}
460
460
461 p.pagination {margin-top:8px; font-size: 90%}
461 p.pagination {margin-top:8px; font-size: 90%}
462
462
463 /***** Tabular forms ******/
463 /***** Tabular forms ******/
464 .tabular p{
464 .tabular p{
465 margin: 0;
465 margin: 0;
466 padding: 3px 0 3px 0;
466 padding: 3px 0 3px 0;
467 padding-left: 180px; /* width of left column containing the label elements */
467 padding-left: 180px; /* width of left column containing the label elements */
468 min-height: 1.8em;
468 min-height: 1.8em;
469 clear:left;
469 clear:left;
470 }
470 }
471
471
472 html>body .tabular p {overflow:hidden;}
472 html>body .tabular p {overflow:hidden;}
473
473
474 .tabular label{
474 .tabular label{
475 font-weight: bold;
475 font-weight: bold;
476 float: left;
476 float: left;
477 text-align: right;
477 text-align: right;
478 /* width of left column */
478 /* width of left column */
479 margin-left: -180px;
479 margin-left: -180px;
480 /* width of labels. Should be smaller than left column to create some right margin */
480 /* width of labels. Should be smaller than left column to create some right margin */
481 width: 175px;
481 width: 175px;
482 }
482 }
483
483
484 .tabular label.floating{
484 .tabular label.floating{
485 font-weight: normal;
485 font-weight: normal;
486 margin-left: 0px;
486 margin-left: 0px;
487 text-align: left;
487 text-align: left;
488 width: 270px;
488 width: 270px;
489 }
489 }
490
490
491 .tabular label.block{
491 .tabular label.block{
492 font-weight: normal;
492 font-weight: normal;
493 margin-left: 0px !important;
493 margin-left: 0px !important;
494 text-align: left;
494 text-align: left;
495 float: none;
495 float: none;
496 display: block;
496 display: block;
497 width: auto;
497 width: auto;
498 }
498 }
499
499
500 .tabular label.inline{
500 .tabular label.inline{
501 font-weight: normal;
501 font-weight: normal;
502 float:none;
502 float:none;
503 margin-left: 5px !important;
503 margin-left: 5px !important;
504 width: auto;
504 width: auto;
505 }
505 }
506
506
507 label.no-css {
507 label.no-css {
508 font-weight: inherit;
508 font-weight: inherit;
509 float:none;
509 float:none;
510 text-align:left;
510 text-align:left;
511 margin-left:0px;
511 margin-left:0px;
512 width:auto;
512 width:auto;
513 }
513 }
514 input#time_entry_comments { width: 90%;}
514 input#time_entry_comments { width: 90%;}
515
515
516 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
516 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
517
517
518 .tabular.settings p{ padding-left: 300px; }
518 .tabular.settings p{ padding-left: 300px; }
519 .tabular.settings label{ margin-left: -300px; width: 295px; }
519 .tabular.settings label{ margin-left: -300px; width: 295px; }
520 .tabular.settings textarea { width: 99%; }
520 .tabular.settings textarea { width: 99%; }
521
521
522 .settings.enabled_scm table {width:100%}
522 .settings.enabled_scm table {width:100%}
523 .settings.enabled_scm td.scm_name{ font-weight: bold; }
523 .settings.enabled_scm td.scm_name{ font-weight: bold; }
524
524
525 fieldset.settings label { display: block; }
525 fieldset.settings label { display: block; }
526 fieldset#notified_events .parent { padding-left: 20px; }
526 fieldset#notified_events .parent { padding-left: 20px; }
527
527
528 span.required {color: #bb0000;}
528 span.required {color: #bb0000;}
529 .summary {font-style: italic;}
529 .summary {font-style: italic;}
530
530
531 #attachments_fields input.description {margin-left:4px; width:340px;}
531 #attachments_fields input.description {margin-left:4px; width:340px;}
532 #attachments_fields span {display:block; white-space:nowrap;}
532 #attachments_fields span {display:block; white-space:nowrap;}
533 #attachments_fields input.filename {border:0; height:1.8em; width:250px; color:#555; background-color:inherit; background:url(../images/attachment.png) no-repeat 1px 50%; padding-left:18px;}
533 #attachments_fields input.filename {border:0; height:1.8em; width:250px; color:#555; background-color:inherit; background:url(../images/attachment.png) no-repeat 1px 50%; padding-left:18px;}
534 #attachments_fields .ajax-waiting input.filename {background:url(../images/hourglass.png) no-repeat 0px 50%;}
534 #attachments_fields .ajax-waiting input.filename {background:url(../images/hourglass.png) no-repeat 0px 50%;}
535 #attachments_fields .ajax-loading input.filename {background:url(../images/loading.gif) no-repeat 0px 50%;}
535 #attachments_fields .ajax-loading input.filename {background:url(../images/loading.gif) no-repeat 0px 50%;}
536 #attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; }
536 #attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; }
537 a.remove-upload {background: url(../images/delete.png) no-repeat 1px 50%; width:1px; display:inline-block; padding-left:16px;}
537 a.remove-upload {background: url(../images/delete.png) no-repeat 1px 50%; width:1px; display:inline-block; padding-left:16px;}
538 a.remove-upload:hover {text-decoration:none !important;}
538 a.remove-upload:hover {text-decoration:none !important;}
539
539
540 div.fileover { background-color: lavender; }
540 div.fileover { background-color: lavender; }
541
541
542 div.attachments { margin-top: 12px; }
542 div.attachments { margin-top: 12px; }
543 div.attachments p { margin:4px 0 2px 0; }
543 div.attachments p { margin:4px 0 2px 0; }
544 div.attachments img { vertical-align: middle; }
544 div.attachments img { vertical-align: middle; }
545 div.attachments span.author { font-size: 0.9em; color: #888; }
545 div.attachments span.author { font-size: 0.9em; color: #888; }
546
546
547 div.thumbnails {margin-top:0.6em;}
547 div.thumbnails {margin-top:0.6em;}
548 div.thumbnails div {background:#fff;border:2px solid #ddd;display:inline-block;margin-right:2px;}
548 div.thumbnails div {background:#fff;border:2px solid #ddd;display:inline-block;margin-right:2px;}
549 div.thumbnails img {margin: 3px;}
549 div.thumbnails img {margin: 3px;}
550
550
551 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
551 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
552 .other-formats span + span:before { content: "| "; }
552 .other-formats span + span:before { content: "| "; }
553
553
554 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
554 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
555
555
556 em.info {font-style:normal;font-size:90%;color:#888;display:block;}
556 em.info {font-style:normal;font-size:90%;color:#888;display:block;}
557 em.info.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
557 em.info.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
558
558
559 textarea.text_cf {width:90%;}
559 textarea.text_cf {width:90%;}
560
560
561 #tab-content-modules fieldset p {margin:3px 0 4px 0;}
561 #tab-content-modules fieldset p {margin:3px 0 4px 0;}
562
562
563 #tab-content-members .splitcontentleft, #tab-content-memberships .splitcontentleft, #tab-content-users .splitcontentleft {width: 64%;}
563 #tab-content-members .splitcontentleft, #tab-content-memberships .splitcontentleft, #tab-content-users .splitcontentleft {width: 64%;}
564 #tab-content-members .splitcontentright, #tab-content-memberships .splitcontentright, #tab-content-users .splitcontentright {width: 34%;}
564 #tab-content-members .splitcontentright, #tab-content-memberships .splitcontentright, #tab-content-users .splitcontentright {width: 34%;}
565 #tab-content-members fieldset, #tab-content-memberships fieldset, #tab-content-users fieldset {padding:1em; margin-bottom: 1em;}
565 #tab-content-members fieldset, #tab-content-memberships fieldset, #tab-content-users fieldset {padding:1em; margin-bottom: 1em;}
566 #tab-content-members fieldset legend, #tab-content-memberships fieldset legend, #tab-content-users fieldset legend {font-weight: bold;}
566 #tab-content-members fieldset legend, #tab-content-memberships fieldset legend, #tab-content-users fieldset legend {font-weight: bold;}
567 #tab-content-members fieldset label, #tab-content-memberships fieldset label, #tab-content-users fieldset label {display: block;}
567 #tab-content-members fieldset label, #tab-content-memberships fieldset label, #tab-content-users fieldset label {display: block;}
568 #tab-content-members #principals, #tab-content-users #principals {max-height: 400px; overflow: auto;}
568 #tab-content-members #principals, #tab-content-users #principals {max-height: 400px; overflow: auto;}
569
569
570 #users_for_watcher {height: 200px; overflow:auto;}
570 #users_for_watcher {height: 200px; overflow:auto;}
571 #users_for_watcher label {display: block;}
571 #users_for_watcher label {display: block;}
572
572
573 table.members td.group { padding-left: 20px; background: url(../images/group.png) no-repeat 0% 50%; }
573 table.members td.group { padding-left: 20px; background: url(../images/group.png) no-repeat 0% 50%; }
574
574
575 input#principal_search, input#user_search {width:90%}
575 input#principal_search, input#user_search {width:90%}
576
576
577 input.autocomplete {
577 input.autocomplete {
578 background: #fff url(../images/magnifier.png) no-repeat 2px 50%; padding-left:20px;
578 background: #fff url(../images/magnifier.png) no-repeat 2px 50%; padding-left:20px;
579 border:1px solid #9EB1C2; border-radius:2px; height:1.5em;
579 border:1px solid #9EB1C2; border-radius:2px; height:1.5em;
580 }
580 }
581 input.autocomplete.ajax-loading {
581 input.autocomplete.ajax-loading {
582 background-image: url(../images/loading.gif);
582 background-image: url(../images/loading.gif);
583 }
583 }
584
584
585 /***** Flash & error messages ****/
585 /***** Flash & error messages ****/
586 #errorExplanation, div.flash, .nodata, .warning, .conflict {
586 #errorExplanation, div.flash, .nodata, .warning, .conflict {
587 padding: 4px 4px 4px 30px;
587 padding: 4px 4px 4px 30px;
588 margin-bottom: 12px;
588 margin-bottom: 12px;
589 font-size: 1.1em;
589 font-size: 1.1em;
590 border: 2px solid;
590 border: 2px solid;
591 }
591 }
592
592
593 div.flash {margin-top: 8px;}
593 div.flash {margin-top: 8px;}
594
594
595 div.flash.error, #errorExplanation {
595 div.flash.error, #errorExplanation {
596 background: url(../images/exclamation.png) 8px 50% no-repeat;
596 background: url(../images/exclamation.png) 8px 50% no-repeat;
597 background-color: #ffe3e3;
597 background-color: #ffe3e3;
598 border-color: #dd0000;
598 border-color: #dd0000;
599 color: #880000;
599 color: #880000;
600 }
600 }
601
601
602 div.flash.notice {
602 div.flash.notice {
603 background: url(../images/true.png) 8px 5px no-repeat;
603 background: url(../images/true.png) 8px 5px no-repeat;
604 background-color: #dfffdf;
604 background-color: #dfffdf;
605 border-color: #9fcf9f;
605 border-color: #9fcf9f;
606 color: #005f00;
606 color: #005f00;
607 }
607 }
608
608
609 div.flash.warning, .conflict {
609 div.flash.warning, .conflict {
610 background: url(../images/warning.png) 8px 5px no-repeat;
610 background: url(../images/warning.png) 8px 5px no-repeat;
611 background-color: #FFEBC1;
611 background-color: #FFEBC1;
612 border-color: #FDBF3B;
612 border-color: #FDBF3B;
613 color: #A6750C;
613 color: #A6750C;
614 text-align: left;
614 text-align: left;
615 }
615 }
616
616
617 .nodata, .warning {
617 .nodata, .warning {
618 text-align: center;
618 text-align: center;
619 background-color: #FFEBC1;
619 background-color: #FFEBC1;
620 border-color: #FDBF3B;
620 border-color: #FDBF3B;
621 color: #A6750C;
621 color: #A6750C;
622 }
622 }
623
623
624 #errorExplanation ul { font-size: 0.9em;}
624 #errorExplanation ul { font-size: 0.9em;}
625 #errorExplanation h2, #errorExplanation p { display: none; }
625 #errorExplanation h2, #errorExplanation p { display: none; }
626
626
627 .conflict-details {font-size:80%;}
627 .conflict-details {font-size:80%;}
628
628
629 /***** Ajax indicator ******/
629 /***** Ajax indicator ******/
630 #ajax-indicator {
630 #ajax-indicator {
631 position: absolute; /* fixed not supported by IE */
631 position: absolute; /* fixed not supported by IE */
632 background-color:#eee;
632 background-color:#eee;
633 border: 1px solid #bbb;
633 border: 1px solid #bbb;
634 top:35%;
634 top:35%;
635 left:40%;
635 left:40%;
636 width:20%;
636 width:20%;
637 font-weight:bold;
637 font-weight:bold;
638 text-align:center;
638 text-align:center;
639 padding:0.6em;
639 padding:0.6em;
640 z-index:100;
640 z-index:100;
641 opacity: 0.5;
641 opacity: 0.5;
642 }
642 }
643
643
644 html>body #ajax-indicator { position: fixed; }
644 html>body #ajax-indicator { position: fixed; }
645
645
646 #ajax-indicator span {
646 #ajax-indicator span {
647 background-position: 0% 40%;
647 background-position: 0% 40%;
648 background-repeat: no-repeat;
648 background-repeat: no-repeat;
649 background-image: url(../images/loading.gif);
649 background-image: url(../images/loading.gif);
650 padding-left: 26px;
650 padding-left: 26px;
651 vertical-align: bottom;
651 vertical-align: bottom;
652 }
652 }
653
653
654 /***** Calendar *****/
654 /***** Calendar *****/
655 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
655 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
656 table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; }
656 table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; }
657 table.cal thead th.week-number {width: auto;}
657 table.cal thead th.week-number {width: auto;}
658 table.cal tbody tr {height: 100px;}
658 table.cal tbody tr {height: 100px;}
659 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
659 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
660 table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;}
660 table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;}
661 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
661 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
662 table.cal td.odd p.day-num {color: #bbb;}
662 table.cal td.odd p.day-num {color: #bbb;}
663 table.cal td.today {background:#ffffdd;}
663 table.cal td.today {background:#ffffdd;}
664 table.cal td.today p.day-num {font-weight: bold;}
664 table.cal td.today p.day-num {font-weight: bold;}
665 table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
665 table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
666 table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
666 table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
667 table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
667 table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
668 p.cal.legend span {display:block;}
668 p.cal.legend span {display:block;}
669
669
670 /***** Tooltips ******/
670 /***** Tooltips ******/
671 .tooltip{position:relative;z-index:24;}
671 .tooltip{position:relative;z-index:24;}
672 .tooltip:hover{z-index:25;color:#000;}
672 .tooltip:hover{z-index:25;color:#000;}
673 .tooltip span.tip{display: none; text-align:left;}
673 .tooltip span.tip{display: none; text-align:left;}
674
674
675 div.tooltip:hover span.tip{
675 div.tooltip:hover span.tip{
676 display:block;
676 display:block;
677 position:absolute;
677 position:absolute;
678 top:12px; left:24px; width:270px;
678 top:12px; left:24px; width:270px;
679 border:1px solid #555;
679 border:1px solid #555;
680 background-color:#fff;
680 background-color:#fff;
681 padding: 4px;
681 padding: 4px;
682 font-size: 0.8em;
682 font-size: 0.8em;
683 color:#505050;
683 color:#505050;
684 }
684 }
685
685
686 img.ui-datepicker-trigger {
686 img.ui-datepicker-trigger {
687 cursor: pointer;
687 cursor: pointer;
688 vertical-align: middle;
688 vertical-align: middle;
689 margin-left: 4px;
689 margin-left: 4px;
690 }
690 }
691
691
692 /***** Progress bar *****/
692 /***** Progress bar *****/
693 table.progress {
693 table.progress {
694 border-collapse: collapse;
694 border-collapse: collapse;
695 border-spacing: 0pt;
695 border-spacing: 0pt;
696 empty-cells: show;
696 empty-cells: show;
697 text-align: center;
697 text-align: center;
698 float:left;
698 float:left;
699 margin: 1px 6px 1px 0px;
699 margin: 1px 6px 1px 0px;
700 }
700 }
701
701
702 table.progress td { height: 1em; }
702 table.progress td { height: 1em; }
703 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
703 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
704 table.progress td.done { background: #D3EDD3 none repeat scroll 0%; }
704 table.progress td.done { background: #D3EDD3 none repeat scroll 0%; }
705 table.progress td.todo { background: #eee none repeat scroll 0%; }
705 table.progress td.todo { background: #eee none repeat scroll 0%; }
706 p.percent {font-size: 80%;}
706 p.percent {font-size: 80%;}
707 p.progress-info {clear: left; font-size: 80%; margin-top:-4px; color:#777;}
707 p.progress-info {clear: left; font-size: 80%; margin-top:-4px; color:#777;}
708
708
709 #roadmap table.progress td { height: 1.2em; }
709 #roadmap table.progress td { height: 1.2em; }
710 /***** Tabs *****/
710 /***** Tabs *****/
711 #content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
711 #content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
712 #content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:0.5em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
712 #content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:0.5em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
713 #content .tabs ul li {
713 #content .tabs ul li {
714 float:left;
714 float:left;
715 list-style-type:none;
715 list-style-type:none;
716 white-space:nowrap;
716 white-space:nowrap;
717 margin-right:4px;
717 margin-right:4px;
718 background:#fff;
718 background:#fff;
719 position:relative;
719 position:relative;
720 margin-bottom:-1px;
720 margin-bottom:-1px;
721 }
721 }
722 #content .tabs ul li a{
722 #content .tabs ul li a{
723 display:block;
723 display:block;
724 font-size: 0.9em;
724 font-size: 0.9em;
725 text-decoration:none;
725 text-decoration:none;
726 line-height:1.3em;
726 line-height:1.3em;
727 padding:4px 6px 4px 6px;
727 padding:4px 6px 4px 6px;
728 border: 1px solid #ccc;
728 border: 1px solid #ccc;
729 border-bottom: 1px solid #bbbbbb;
729 border-bottom: 1px solid #bbbbbb;
730 background-color: #f6f6f6;
730 background-color: #f6f6f6;
731 color:#999;
731 color:#999;
732 font-weight:bold;
732 font-weight:bold;
733 border-top-left-radius:3px;
733 border-top-left-radius:3px;
734 border-top-right-radius:3px;
734 border-top-right-radius:3px;
735 }
735 }
736
736
737 #content .tabs ul li a:hover {
737 #content .tabs ul li a:hover {
738 background-color: #ffffdd;
738 background-color: #ffffdd;
739 text-decoration:none;
739 text-decoration:none;
740 }
740 }
741
741
742 #content .tabs ul li a.selected {
742 #content .tabs ul li a.selected {
743 background-color: #fff;
743 background-color: #fff;
744 border: 1px solid #bbbbbb;
744 border: 1px solid #bbbbbb;
745 border-bottom: 1px solid #fff;
745 border-bottom: 1px solid #fff;
746 color:#444;
746 color:#444;
747 }
747 }
748
748
749 #content .tabs ul li a.selected:hover {background-color: #fff;}
749 #content .tabs ul li a.selected:hover {background-color: #fff;}
750
750
751 div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
751 div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
752
752
753 button.tab-left, button.tab-right {
753 button.tab-left, button.tab-right {
754 font-size: 0.9em;
754 font-size: 0.9em;
755 cursor: pointer;
755 cursor: pointer;
756 height:24px;
756 height:24px;
757 border: 1px solid #ccc;
757 border: 1px solid #ccc;
758 border-bottom: 1px solid #bbbbbb;
758 border-bottom: 1px solid #bbbbbb;
759 position:absolute;
759 position:absolute;
760 padding:4px;
760 padding:4px;
761 width: 20px;
761 width: 20px;
762 bottom: -1px;
762 bottom: -1px;
763 }
763 }
764
764
765 button.tab-left {
765 button.tab-left {
766 right: 20px;
766 right: 20px;
767 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
767 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
768 border-top-left-radius:3px;
768 border-top-left-radius:3px;
769 }
769 }
770
770
771 button.tab-right {
771 button.tab-right {
772 right: 0;
772 right: 0;
773 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;
773 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;
774 border-top-right-radius:3px;
774 border-top-right-radius:3px;
775 }
775 }
776
776
777 /***** Diff *****/
777 /***** Diff *****/
778 .diff_out { background: #fcc; }
778 .diff_out { background: #fcc; }
779 .diff_out span { background: #faa; }
779 .diff_out span { background: #faa; }
780 .diff_in { background: #cfc; }
780 .diff_in { background: #cfc; }
781 .diff_in span { background: #afa; }
781 .diff_in span { background: #afa; }
782
782
783 .text-diff {
783 .text-diff {
784 padding: 1em;
784 padding: 1em;
785 background-color:#f6f6f6;
785 background-color:#f6f6f6;
786 color:#505050;
786 color:#505050;
787 border: 1px solid #e4e4e4;
787 border: 1px solid #e4e4e4;
788 }
788 }
789
789
790 /***** Wiki *****/
790 /***** Wiki *****/
791 div.wiki table {
791 div.wiki table {
792 border-collapse: collapse;
792 border-collapse: collapse;
793 margin-bottom: 1em;
793 margin-bottom: 1em;
794 }
794 }
795
795
796 div.wiki table, div.wiki td, div.wiki th {
796 div.wiki table, div.wiki td, div.wiki th {
797 border: 1px solid #bbb;
797 border: 1px solid #bbb;
798 padding: 4px;
798 padding: 4px;
799 }
799 }
800
800
801 div.wiki .noborder, div.wiki .noborder td, div.wiki .noborder th {border:0;}
801 div.wiki .noborder, div.wiki .noborder td, div.wiki .noborder th {border:0;}
802
802
803 div.wiki .external {
803 div.wiki .external {
804 background-position: 0% 60%;
804 background-position: 0% 60%;
805 background-repeat: no-repeat;
805 background-repeat: no-repeat;
806 padding-left: 12px;
806 padding-left: 12px;
807 background-image: url(../images/external.png);
807 background-image: url(../images/external.png);
808 }
808 }
809
809
810 div.wiki a.new {color: #b73535;}
810 div.wiki a.new {color: #b73535;}
811
811
812 div.wiki ul, div.wiki ol {margin-bottom:1em;}
812 div.wiki ul, div.wiki ol {margin-bottom:1em;}
813
813
814 div.wiki pre {
814 div.wiki pre {
815 margin: 1em 1em 1em 1.6em;
815 margin: 1em 1em 1em 1.6em;
816 padding: 8px;
816 padding: 8px;
817 background-color: #fafafa;
817 background-color: #fafafa;
818 border: 1px solid #e2e2e2;
818 border: 1px solid #e2e2e2;
819 width:auto;
819 width:auto;
820 overflow-x: auto;
820 overflow-x: auto;
821 overflow-y: hidden;
821 overflow-y: hidden;
822 }
822 }
823
823
824 div.wiki ul.toc {
824 div.wiki ul.toc {
825 background-color: #ffffdd;
825 background-color: #ffffdd;
826 border: 1px solid #e4e4e4;
826 border: 1px solid #e4e4e4;
827 padding: 4px;
827 padding: 4px;
828 line-height: 1.2em;
828 line-height: 1.2em;
829 margin-bottom: 12px;
829 margin-bottom: 12px;
830 margin-right: 12px;
830 margin-right: 12px;
831 margin-left: 0;
831 margin-left: 0;
832 display: table
832 display: table
833 }
833 }
834 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
834 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
835
835
836 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
836 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
837 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
837 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
838 div.wiki ul.toc ul { margin: 0; padding: 0; }
838 div.wiki ul.toc ul { margin: 0; padding: 0; }
839 div.wiki ul.toc li {list-style-type:none; margin: 0; font-size:12px;}
839 div.wiki ul.toc li {list-style-type:none; margin: 0; font-size:12px;}
840 div.wiki ul.toc li li {margin-left: 1.5em; font-size:10px;}
840 div.wiki ul.toc li li {margin-left: 1.5em; font-size:10px;}
841 div.wiki ul.toc a {
841 div.wiki ul.toc a {
842 font-size: 0.9em;
842 font-size: 0.9em;
843 font-weight: normal;
843 font-weight: normal;
844 text-decoration: none;
844 text-decoration: none;
845 color: #606060;
845 color: #606060;
846 }
846 }
847 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
847 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
848
848
849 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
849 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
850 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
850 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
851 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
851 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
852
852
853 div.wiki img { vertical-align: middle; }
853 div.wiki img { vertical-align: middle; }
854
854
855 /***** My page layout *****/
855 /***** My page layout *****/
856 .block-receiver {
856 .block-receiver {
857 border:1px dashed #c0c0c0;
857 border:1px dashed #c0c0c0;
858 margin-bottom: 20px;
858 margin-bottom: 20px;
859 padding: 15px 0 15px 0;
859 padding: 15px 0 15px 0;
860 }
860 }
861
861
862 .mypage-box {
862 .mypage-box {
863 margin:0 0 20px 0;
863 margin:0 0 20px 0;
864 color:#505050;
864 color:#505050;
865 line-height:1.5em;
865 line-height:1.5em;
866 }
866 }
867
867
868 .handle {cursor: move;}
868 .handle {cursor: move;}
869
869
870 a.close-icon {
870 a.close-icon {
871 display:block;
871 display:block;
872 margin-top:3px;
872 margin-top:3px;
873 overflow:hidden;
873 overflow:hidden;
874 width:12px;
874 width:12px;
875 height:12px;
875 height:12px;
876 background-repeat: no-repeat;
876 background-repeat: no-repeat;
877 cursor:pointer;
877 cursor:pointer;
878 background-image:url('../images/close.png');
878 background-image:url('../images/close.png');
879 }
879 }
880 a.close-icon:hover {background-image:url('../images/close_hl.png');}
880 a.close-icon:hover {background-image:url('../images/close_hl.png');}
881
881
882 /***** Gantt chart *****/
882 /***** Gantt chart *****/
883 .gantt_hdr {
883 .gantt_hdr {
884 position:absolute;
884 position:absolute;
885 top:0;
885 top:0;
886 height:16px;
886 height:16px;
887 border-top: 1px solid #c0c0c0;
887 border-top: 1px solid #c0c0c0;
888 border-bottom: 1px solid #c0c0c0;
888 border-bottom: 1px solid #c0c0c0;
889 border-right: 1px solid #c0c0c0;
889 border-right: 1px solid #c0c0c0;
890 text-align: center;
890 text-align: center;
891 overflow: hidden;
891 overflow: hidden;
892 }
892 }
893
893
894 .gantt_hdr.nwday {background-color:#f1f1f1;}
894 .gantt_hdr.nwday {background-color:#f1f1f1;}
895
895
896 .gantt_subjects { font-size: 0.8em; }
896 .gantt_subjects { font-size: 0.8em; }
897 .gantt_subjects div { line-height:16px;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
897 .gantt_subjects div { line-height:16px;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
898
898
899 .task {
899 .task {
900 position: absolute;
900 position: absolute;
901 height:8px;
901 height:8px;
902 font-size:0.8em;
902 font-size:0.8em;
903 color:#888;
903 color:#888;
904 padding:0;
904 padding:0;
905 margin:0;
905 margin:0;
906 line-height:16px;
906 line-height:16px;
907 white-space:nowrap;
907 white-space:nowrap;
908 }
908 }
909
909
910 .task.label {width:100%;}
910 .task.label {width:100%;}
911 .task.label.project, .task.label.version { font-weight: bold; }
911 .task.label.project, .task.label.version { font-weight: bold; }
912
912
913 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
913 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
914 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }
914 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }
915 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
915 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
916
916
917 .task_todo.parent { background: #888; border: 1px solid #888; height: 3px;}
917 .task_todo.parent { background: #888; border: 1px solid #888; height: 3px;}
918 .task_late.parent, .task_done.parent { height: 3px;}
918 .task_late.parent, .task_done.parent { height: 3px;}
919 .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;}
919 .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;}
920 .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;}
920 .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;}
921
921
922 .version.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
922 .version.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
923 .version.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
923 .version.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
924 .version.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
924 .version.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
925 .version.marker { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
925 .version.marker { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
926
926
927 .project.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
927 .project.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
928 .project.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
928 .project.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
929 .project.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
929 .project.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
930 .project.marker { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
930 .project.marker { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
931
931
932 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
932 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
933 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
933 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
934
934
935 /***** Icons *****/
935 /***** Icons *****/
936 .icon {
936 .icon {
937 background-position: 0% 50%;
937 background-position: 0% 50%;
938 background-repeat: no-repeat;
938 background-repeat: no-repeat;
939 padding-left: 20px;
939 padding-left: 20px;
940 padding-top: 2px;
940 padding-top: 2px;
941 padding-bottom: 3px;
941 padding-bottom: 3px;
942 }
942 }
943
943
944 .icon-add { background-image: url(../images/add.png); }
944 .icon-add { background-image: url(../images/add.png); }
945 .icon-edit { background-image: url(../images/edit.png); }
945 .icon-edit { background-image: url(../images/edit.png); }
946 .icon-copy { background-image: url(../images/copy.png); }
946 .icon-copy { background-image: url(../images/copy.png); }
947 .icon-duplicate { background-image: url(../images/duplicate.png); }
947 .icon-duplicate { background-image: url(../images/duplicate.png); }
948 .icon-del { background-image: url(../images/delete.png); }
948 .icon-del { background-image: url(../images/delete.png); }
949 .icon-move { background-image: url(../images/move.png); }
949 .icon-move { background-image: url(../images/move.png); }
950 .icon-save { background-image: url(../images/save.png); }
950 .icon-save { background-image: url(../images/save.png); }
951 .icon-cancel { background-image: url(../images/cancel.png); }
951 .icon-cancel { background-image: url(../images/cancel.png); }
952 .icon-multiple { background-image: url(../images/table_multiple.png); }
952 .icon-multiple { background-image: url(../images/table_multiple.png); }
953 .icon-folder { background-image: url(../images/folder.png); }
953 .icon-folder { background-image: url(../images/folder.png); }
954 .open .icon-folder { background-image: url(../images/folder_open.png); }
954 .open .icon-folder { background-image: url(../images/folder_open.png); }
955 .icon-package { background-image: url(../images/package.png); }
955 .icon-package { background-image: url(../images/package.png); }
956 .icon-user { background-image: url(../images/user.png); }
956 .icon-user { background-image: url(../images/user.png); }
957 .icon-projects { background-image: url(../images/projects.png); }
957 .icon-projects { background-image: url(../images/projects.png); }
958 .icon-help { background-image: url(../images/help.png); }
958 .icon-help { background-image: url(../images/help.png); }
959 .icon-attachment { background-image: url(../images/attachment.png); }
959 .icon-attachment { background-image: url(../images/attachment.png); }
960 .icon-history { background-image: url(../images/history.png); }
960 .icon-history { background-image: url(../images/history.png); }
961 .icon-time { background-image: url(../images/time.png); }
961 .icon-time { background-image: url(../images/time.png); }
962 .icon-time-add { background-image: url(../images/time_add.png); }
962 .icon-time-add { background-image: url(../images/time_add.png); }
963 .icon-stats { background-image: url(../images/stats.png); }
963 .icon-stats { background-image: url(../images/stats.png); }
964 .icon-warning { background-image: url(../images/warning.png); }
964 .icon-warning { background-image: url(../images/warning.png); }
965 .icon-fav { background-image: url(../images/fav.png); }
965 .icon-fav { background-image: url(../images/fav.png); }
966 .icon-fav-off { background-image: url(../images/fav_off.png); }
966 .icon-fav-off { background-image: url(../images/fav_off.png); }
967 .icon-reload { background-image: url(../images/reload.png); }
967 .icon-reload { background-image: url(../images/reload.png); }
968 .icon-lock { background-image: url(../images/locked.png); }
968 .icon-lock { background-image: url(../images/locked.png); }
969 .icon-unlock { background-image: url(../images/unlock.png); }
969 .icon-unlock { background-image: url(../images/unlock.png); }
970 .icon-checked { background-image: url(../images/true.png); }
970 .icon-checked { background-image: url(../images/true.png); }
971 .icon-details { background-image: url(../images/zoom_in.png); }
971 .icon-details { background-image: url(../images/zoom_in.png); }
972 .icon-report { background-image: url(../images/report.png); }
972 .icon-report { background-image: url(../images/report.png); }
973 .icon-comment { background-image: url(../images/comment.png); }
973 .icon-comment { background-image: url(../images/comment.png); }
974 .icon-summary { background-image: url(../images/lightning.png); }
974 .icon-summary { background-image: url(../images/lightning.png); }
975 .icon-server-authentication { background-image: url(../images/server_key.png); }
975 .icon-server-authentication { background-image: url(../images/server_key.png); }
976 .icon-issue { background-image: url(../images/ticket.png); }
976 .icon-issue { background-image: url(../images/ticket.png); }
977 .icon-zoom-in { background-image: url(../images/zoom_in.png); }
977 .icon-zoom-in { background-image: url(../images/zoom_in.png); }
978 .icon-zoom-out { background-image: url(../images/zoom_out.png); }
978 .icon-zoom-out { background-image: url(../images/zoom_out.png); }
979 .icon-passwd { background-image: url(../images/textfield_key.png); }
979 .icon-passwd { background-image: url(../images/textfield_key.png); }
980 .icon-test { background-image: url(../images/bullet_go.png); }
980 .icon-test { background-image: url(../images/bullet_go.png); }
981
981
982 .icon-file { background-image: url(../images/files/default.png); }
982 .icon-file { background-image: url(../images/files/default.png); }
983 .icon-file.text-plain { background-image: url(../images/files/text.png); }
983 .icon-file.text-plain { background-image: url(../images/files/text.png); }
984 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
984 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
985 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
985 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
986 .icon-file.text-x-java { background-image: url(../images/files/java.png); }
986 .icon-file.text-x-java { background-image: url(../images/files/java.png); }
987 .icon-file.text-x-javascript { background-image: url(../images/files/js.png); }
987 .icon-file.text-x-javascript { background-image: url(../images/files/js.png); }
988 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
988 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
989 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
989 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
990 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
990 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
991 .icon-file.text-css { background-image: url(../images/files/css.png); }
991 .icon-file.text-css { background-image: url(../images/files/css.png); }
992 .icon-file.text-html { background-image: url(../images/files/html.png); }
992 .icon-file.text-html { background-image: url(../images/files/html.png); }
993 .icon-file.image-gif { background-image: url(../images/files/image.png); }
993 .icon-file.image-gif { background-image: url(../images/files/image.png); }
994 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
994 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
995 .icon-file.image-png { background-image: url(../images/files/image.png); }
995 .icon-file.image-png { background-image: url(../images/files/image.png); }
996 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
996 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
997 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
997 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
998 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
998 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
999 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
999 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
1000
1000
1001 img.gravatar {
1001 img.gravatar {
1002 padding: 2px;
1002 padding: 2px;
1003 border: solid 1px #d5d5d5;
1003 border: solid 1px #d5d5d5;
1004 background: #fff;
1004 background: #fff;
1005 vertical-align: middle;
1005 vertical-align: middle;
1006 }
1006 }
1007
1007
1008 div.issue img.gravatar {
1008 div.issue img.gravatar {
1009 float: left;
1009 float: left;
1010 margin: 0 6px 0 0;
1010 margin: 0 6px 0 0;
1011 padding: 5px;
1011 padding: 5px;
1012 }
1012 }
1013
1013
1014 div.issue table img.gravatar {
1014 div.issue table img.gravatar {
1015 height: 14px;
1015 height: 14px;
1016 width: 14px;
1016 width: 14px;
1017 padding: 2px;
1017 padding: 2px;
1018 float: left;
1018 float: left;
1019 margin: 0 0.5em 0 0;
1019 margin: 0 0.5em 0 0;
1020 }
1020 }
1021
1021
1022 h2 img.gravatar {margin: -2px 4px -4px 0;}
1022 h2 img.gravatar {margin: -2px 4px -4px 0;}
1023 h3 img.gravatar {margin: -4px 4px -4px 0;}
1023 h3 img.gravatar {margin: -4px 4px -4px 0;}
1024 h4 img.gravatar {margin: -6px 4px -4px 0;}
1024 h4 img.gravatar {margin: -6px 4px -4px 0;}
1025 td.username img.gravatar {margin: 0 0.5em 0 0; vertical-align: top;}
1025 td.username img.gravatar {margin: 0 0.5em 0 0; vertical-align: top;}
1026 #activity dt img.gravatar {float: left; margin: 0 1em 1em 0;}
1026 #activity dt img.gravatar {float: left; margin: 0 1em 1em 0;}
1027 /* Used on 12px Gravatar img tags without the icon background */
1027 /* Used on 12px Gravatar img tags without the icon background */
1028 .icon-gravatar {float: left; margin-right: 4px;}
1028 .icon-gravatar {float: left; margin-right: 4px;}
1029
1029
1030 #activity dt, .journal {clear: left;}
1030 #activity dt, .journal {clear: left;}
1031
1031
1032 .journal-link {float: right;}
1032 .journal-link {float: right;}
1033
1033
1034 h2 img { vertical-align:middle; }
1034 h2 img { vertical-align:middle; }
1035
1035
1036 .hascontextmenu { cursor: context-menu; }
1036 .hascontextmenu { cursor: context-menu; }
1037
1037
1038 /************* CodeRay styles *************/
1038 /************* CodeRay styles *************/
1039 .syntaxhl div {display: inline;}
1039 .syntaxhl div {display: inline;}
1040 .syntaxhl .line-numbers {padding: 2px 4px 2px 4px; background-color: #eee; margin:0px 5px 0px 0px;}
1040 .syntaxhl .line-numbers {padding: 2px 4px 2px 4px; background-color: #eee; margin:0px 5px 0px 0px;}
1041 .syntaxhl .code pre { overflow: auto }
1041 .syntaxhl .code pre { overflow: auto }
1042 .syntaxhl .debug { color: white !important; background: blue !important; }
1042 .syntaxhl .debug { color: white !important; background: blue !important; }
1043
1043
1044 .syntaxhl .annotation { color:#007 }
1044 .syntaxhl .annotation { color:#007 }
1045 .syntaxhl .attribute-name { color:#b48 }
1045 .syntaxhl .attribute-name { color:#b48 }
1046 .syntaxhl .attribute-value { color:#700 }
1046 .syntaxhl .attribute-value { color:#700 }
1047 .syntaxhl .binary { color:#509 }
1047 .syntaxhl .binary { color:#509 }
1048 .syntaxhl .char .content { color:#D20 }
1048 .syntaxhl .char .content { color:#D20 }
1049 .syntaxhl .char .delimiter { color:#710 }
1049 .syntaxhl .char .delimiter { color:#710 }
1050 .syntaxhl .char { color:#D20 }
1050 .syntaxhl .char { color:#D20 }
1051 .syntaxhl .class { color:#258; font-weight:bold }
1051 .syntaxhl .class { color:#258; font-weight:bold }
1052 .syntaxhl .class-variable { color:#369 }
1052 .syntaxhl .class-variable { color:#369 }
1053 .syntaxhl .color { color:#0A0 }
1053 .syntaxhl .color { color:#0A0 }
1054 .syntaxhl .comment { color:#385 }
1054 .syntaxhl .comment { color:#385 }
1055 .syntaxhl .comment .char { color:#385 }
1055 .syntaxhl .comment .char { color:#385 }
1056 .syntaxhl .comment .delimiter { color:#385 }
1056 .syntaxhl .comment .delimiter { color:#385 }
1057 .syntaxhl .complex { color:#A08 }
1057 .syntaxhl .complex { color:#A08 }
1058 .syntaxhl .constant { color:#258; font-weight:bold }
1058 .syntaxhl .constant { color:#258; font-weight:bold }
1059 .syntaxhl .decorator { color:#B0B }
1059 .syntaxhl .decorator { color:#B0B }
1060 .syntaxhl .definition { color:#099; font-weight:bold }
1060 .syntaxhl .definition { color:#099; font-weight:bold }
1061 .syntaxhl .delimiter { color:black }
1061 .syntaxhl .delimiter { color:black }
1062 .syntaxhl .directive { color:#088; font-weight:bold }
1062 .syntaxhl .directive { color:#088; font-weight:bold }
1063 .syntaxhl .doc { color:#970 }
1063 .syntaxhl .doc { color:#970 }
1064 .syntaxhl .doc-string { color:#D42; font-weight:bold }
1064 .syntaxhl .doc-string { color:#D42; font-weight:bold }
1065 .syntaxhl .doctype { color:#34b }
1065 .syntaxhl .doctype { color:#34b }
1066 .syntaxhl .entity { color:#800; font-weight:bold }
1066 .syntaxhl .entity { color:#800; font-weight:bold }
1067 .syntaxhl .error { color:#F00; background-color:#FAA }
1067 .syntaxhl .error { color:#F00; background-color:#FAA }
1068 .syntaxhl .escape { color:#666 }
1068 .syntaxhl .escape { color:#666 }
1069 .syntaxhl .exception { color:#C00; font-weight:bold }
1069 .syntaxhl .exception { color:#C00; font-weight:bold }
1070 .syntaxhl .float { color:#06D }
1070 .syntaxhl .float { color:#06D }
1071 .syntaxhl .function { color:#06B; font-weight:bold }
1071 .syntaxhl .function { color:#06B; font-weight:bold }
1072 .syntaxhl .global-variable { color:#d70 }
1072 .syntaxhl .global-variable { color:#d70 }
1073 .syntaxhl .hex { color:#02b }
1073 .syntaxhl .hex { color:#02b }
1074 .syntaxhl .imaginary { color:#f00 }
1074 .syntaxhl .imaginary { color:#f00 }
1075 .syntaxhl .include { color:#B44; font-weight:bold }
1075 .syntaxhl .include { color:#B44; font-weight:bold }
1076 .syntaxhl .inline { background-color: hsla(0,0%,0%,0.07); color: black }
1076 .syntaxhl .inline { background-color: hsla(0,0%,0%,0.07); color: black }
1077 .syntaxhl .inline-delimiter { font-weight: bold; color: #666 }
1077 .syntaxhl .inline-delimiter { font-weight: bold; color: #666 }
1078 .syntaxhl .instance-variable { color:#33B }
1078 .syntaxhl .instance-variable { color:#33B }
1079 .syntaxhl .integer { color:#06D }
1079 .syntaxhl .integer { color:#06D }
1080 .syntaxhl .key .char { color: #60f }
1080 .syntaxhl .key .char { color: #60f }
1081 .syntaxhl .key .delimiter { color: #404 }
1081 .syntaxhl .key .delimiter { color: #404 }
1082 .syntaxhl .key { color: #606 }
1082 .syntaxhl .key { color: #606 }
1083 .syntaxhl .keyword { color:#939; font-weight:bold }
1083 .syntaxhl .keyword { color:#939; font-weight:bold }
1084 .syntaxhl .label { color:#970; font-weight:bold }
1084 .syntaxhl .label { color:#970; font-weight:bold }
1085 .syntaxhl .local-variable { color:#963 }
1085 .syntaxhl .local-variable { color:#963 }
1086 .syntaxhl .namespace { color:#707; font-weight:bold }
1086 .syntaxhl .namespace { color:#707; font-weight:bold }
1087 .syntaxhl .octal { color:#40E }
1087 .syntaxhl .octal { color:#40E }
1088 .syntaxhl .operator { }
1088 .syntaxhl .operator { }
1089 .syntaxhl .predefined { color:#369; font-weight:bold }
1089 .syntaxhl .predefined { color:#369; font-weight:bold }
1090 .syntaxhl .predefined-constant { color:#069 }
1090 .syntaxhl .predefined-constant { color:#069 }
1091 .syntaxhl .predefined-type { color:#0a5; font-weight:bold }
1091 .syntaxhl .predefined-type { color:#0a5; font-weight:bold }
1092 .syntaxhl .preprocessor { color:#579 }
1092 .syntaxhl .preprocessor { color:#579 }
1093 .syntaxhl .pseudo-class { color:#00C; font-weight:bold }
1093 .syntaxhl .pseudo-class { color:#00C; font-weight:bold }
1094 .syntaxhl .regexp .content { color:#808 }
1094 .syntaxhl .regexp .content { color:#808 }
1095 .syntaxhl .regexp .delimiter { color:#404 }
1095 .syntaxhl .regexp .delimiter { color:#404 }
1096 .syntaxhl .regexp .modifier { color:#C2C }
1096 .syntaxhl .regexp .modifier { color:#C2C }
1097 .syntaxhl .regexp { background-color:hsla(300,100%,50%,0.06); }
1097 .syntaxhl .regexp { background-color:hsla(300,100%,50%,0.06); }
1098 .syntaxhl .reserved { color:#080; font-weight:bold }
1098 .syntaxhl .reserved { color:#080; font-weight:bold }
1099 .syntaxhl .shell .content { color:#2B2 }
1099 .syntaxhl .shell .content { color:#2B2 }
1100 .syntaxhl .shell .delimiter { color:#161 }
1100 .syntaxhl .shell .delimiter { color:#161 }
1101 .syntaxhl .shell { background-color:hsla(120,100%,50%,0.06); }
1101 .syntaxhl .shell { background-color:hsla(120,100%,50%,0.06); }
1102 .syntaxhl .string .char { color: #46a }
1102 .syntaxhl .string .char { color: #46a }
1103 .syntaxhl .string .content { color: #46a }
1103 .syntaxhl .string .content { color: #46a }
1104 .syntaxhl .string .delimiter { color: #46a }
1104 .syntaxhl .string .delimiter { color: #46a }
1105 .syntaxhl .string .modifier { color: #46a }
1105 .syntaxhl .string .modifier { color: #46a }
1106 .syntaxhl .symbol .content { color:#d33 }
1106 .syntaxhl .symbol .content { color:#d33 }
1107 .syntaxhl .symbol .delimiter { color:#d33 }
1107 .syntaxhl .symbol .delimiter { color:#d33 }
1108 .syntaxhl .symbol { color:#d33 }
1108 .syntaxhl .symbol { color:#d33 }
1109 .syntaxhl .tag { color:#070 }
1109 .syntaxhl .tag { color:#070 }
1110 .syntaxhl .type { color:#339; font-weight:bold }
1110 .syntaxhl .type { color:#339; font-weight:bold }
1111 .syntaxhl .value { color: #088; }
1111 .syntaxhl .value { color: #088; }
1112 .syntaxhl .variable { color:#037 }
1112 .syntaxhl .variable { color:#037 }
1113
1113
1114 .syntaxhl .insert { background: hsla(120,100%,50%,0.12) }
1114 .syntaxhl .insert { background: hsla(120,100%,50%,0.12) }
1115 .syntaxhl .delete { background: hsla(0,100%,50%,0.12) }
1115 .syntaxhl .delete { background: hsla(0,100%,50%,0.12) }
1116 .syntaxhl .change { color: #bbf; background: #007; }
1116 .syntaxhl .change { color: #bbf; background: #007; }
1117 .syntaxhl .head { color: #f8f; background: #505 }
1117 .syntaxhl .head { color: #f8f; background: #505 }
1118 .syntaxhl .head .filename { color: white; }
1118 .syntaxhl .head .filename { color: white; }
1119
1119
1120 .syntaxhl .delete .eyecatcher { background-color: hsla(0,100%,50%,0.2); border: 1px solid hsla(0,100%,45%,0.5); margin: -1px; border-bottom: none; border-top-left-radius: 5px; border-top-right-radius: 5px; }
1120 .syntaxhl .delete .eyecatcher { background-color: hsla(0,100%,50%,0.2); border: 1px solid hsla(0,100%,45%,0.5); margin: -1px; border-bottom: none; border-top-left-radius: 5px; border-top-right-radius: 5px; }
1121 .syntaxhl .insert .eyecatcher { background-color: hsla(120,100%,50%,0.2); border: 1px solid hsla(120,100%,25%,0.5); margin: -1px; border-top: none; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; }
1121 .syntaxhl .insert .eyecatcher { background-color: hsla(120,100%,50%,0.2); border: 1px solid hsla(120,100%,25%,0.5); margin: -1px; border-top: none; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; }
1122
1122
1123 .syntaxhl .insert .insert { color: #0c0; background:transparent; font-weight:bold }
1123 .syntaxhl .insert .insert { color: #0c0; background:transparent; font-weight:bold }
1124 .syntaxhl .delete .delete { color: #c00; background:transparent; font-weight:bold }
1124 .syntaxhl .delete .delete { color: #c00; background:transparent; font-weight:bold }
1125 .syntaxhl .change .change { color: #88f }
1125 .syntaxhl .change .change { color: #88f }
1126 .syntaxhl .head .head { color: #f4f }
1126 .syntaxhl .head .head { color: #f4f }
1127
1127
1128 /***** Media print specific styles *****/
1128 /***** Media print specific styles *****/
1129 @media print {
1129 @media print {
1130 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
1130 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
1131 #main { background: #fff; }
1131 #main { background: #fff; }
1132 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
1132 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
1133 #wiki_add_attachment { display:none; }
1133 #wiki_add_attachment { display:none; }
1134 .hide-when-print { display: none; }
1134 .hide-when-print { display: none; }
1135 .autoscroll {overflow-x: visible;}
1135 .autoscroll {overflow-x: visible;}
1136 table.list {margin-top:0.5em;}
1136 table.list {margin-top:0.5em;}
1137 table.list th, table.list td {border: 1px solid #aaa;}
1137 table.list th, table.list td {border: 1px solid #aaa;}
1138 }
1138 }
1139
1139
1140 /* Accessibility specific styles */
1140 /* Accessibility specific styles */
1141 .hidden-for-sighted {
1141 .hidden-for-sighted {
1142 position:absolute;
1142 position:absolute;
1143 left:-10000px;
1143 left:-10000px;
1144 top:auto;
1144 top:auto;
1145 width:1px;
1145 width:1px;
1146 height:1px;
1146 height:1px;
1147 overflow:hidden;
1147 overflow:hidden;
1148 }
1148 }
General Comments 0
You need to be logged in to leave comments. Login now