##// END OF EJS Templates
scm: git: mercurial: add a new feature of revision graph (#5501)...
Toshi MARUYAMA -
r7605:5d98eb6ece85
parent child
Show More
@@ -0,0 +1,13
1 <%= javascript_include_tag "raphael.js" %>
2 <script type="text/javascript" charset="utf-8">
3 var chunk = {commits:<%= commits.values.to_json %>}
4 </script>
5 <%= javascript_include_tag "revision_graph.js" %>
6
7 <script type="text/javascript">
8 window.onload = function(){
9 branchGraph(document.getElementById("holder"));
10 }
11 </script>
12
13 <div id="holder" class="graph"></div>
@@ -0,0 +1,172
1 var commits = chunk.commits,
2 comms = {},
3 pixelsX = [],
4 pixelsY = [],
5 mmax = Math.max,
6 max_rdmid = 0,
7 max_space = 0,
8 parents = {};
9 for (var i = 0, ii = commits.length; i < ii; i++) {
10 for (var j = 0, jj = commits[i].parents.length; j < jj; j++) {
11 parents[commits[i].parents[j][0]] = true;
12 }
13 max_rdmid = Math.max(max_rdmid, commits[i].rdmid);
14 max_space = Math.max(max_space, commits[i].space);
15 }
16
17 for (i = 0; i < ii; i++) {
18 if (commits[i].scmid in parents) {
19 commits[i].isParent = true;
20 }
21 comms[commits[i].scmid] = commits[i];
22 }
23 var colors = ["#000"];
24 for (var k = 0; k < max_space; k++) {
25 colors.push(Raphael.getColor());
26 }
27
28 function branchGraph(holder) {
29 var xstep = 20, ystep = 20;
30 var ch, cw;
31 cw = max_space * xstep + xstep;
32 ch = max_rdmid * ystep + ystep;
33 var r = Raphael("holder", cw, ch),
34 top = r.set();
35 var cuday = 0, cumonth = "";
36
37 for (i = 0; i < ii; i++) {
38 var x, y;
39 y = 10 + ystep *(max_rdmid - commits[i].rdmid);
40 x = 3 + xstep * commits[i].space;
41 var stroke = "none";
42 r.circle(x, y, 3).attr({fill: colors[commits[i].space], stroke: stroke});
43 if (commits[i].refs != null && commits[i].refs != "") {
44 var longrefs = commits[i].refs
45 var shortrefs = commits[i].refs;
46 if (shortrefs.length > 15) {
47 shortrefs = shortrefs.substr(0,13) + "...";
48 }
49 var t = r.text(x+5,y+5,shortrefs).attr({font: "12px Fontin-Sans, Arial", fill: "#666",
50 title: longrefs, cursor: "pointer", rotation: "0"});
51
52 var textbox = t.getBBox();
53 t.translate(textbox.width / 2, textbox.height / -3);
54 }
55 for (var j = 0, jj = commits[i].parents.length; j < jj; j++) {
56 var c = comms[commits[i].parents[j][0]];
57 var p,arrow;
58 if (c) {
59 var cy, cx;
60 cy = 10 + ystep * (max_rdmid - c.rdmid),
61 cx = 3 + xstep * c.space;
62
63 if (c.space == commits[i].space) {
64 p = r.path("M" + x + "," + y + "L" + cx + "," + cy);
65 } else {
66 p = r.path(["M", x, y, "C",x,y,x, y+(cy-y)/2,x+(cx-x)/2, y+(cy-y)/2,
67 "C", x+(cx-x)/2,y+(cy-y)/2, cx, cy-(cy-y)/2, cx, cy]);
68 }
69 } else {
70 p = r.path("M" + x + "," + y + "L" + x + "," + ch);
71 }
72 p.attr({stroke: colors[commits[i].space], "stroke-width": 1.5});
73 }
74 (function (c, x, y) {
75 top.push(r.circle(x, y, 10).attr({fill: "#000", opacity: 0,
76 cursor: "pointer", href: commits[i].href})
77 .hover(function () {}, function () {})
78 );
79 }(commits[i], x, y));
80 }
81 top.toFront();
82 var hw = holder.offsetWidth,
83 hh = holder.offsetHeight,
84 drag,
85 dragger = function (e) {
86 if (drag) {
87 e = e || window.event;
88 holder.scrollLeft = drag.sl - (e.clientX - drag.x);
89 holder.scrollTop = drag.st - (e.clientY - drag.y);
90 }
91 };
92 holder.onmousedown = function (e) {
93 e = e || window.event;
94 drag = {x: e.clientX, y: e.clientY, st: holder.scrollTop, sl: holder.scrollLeft};
95 document.onmousemove = dragger;
96 };
97 document.onmouseup = function () {
98 drag = false;
99 document.onmousemove = null;
100 };
101 holder.scrollLeft = cw;
102 };
103
104 Raphael.fn.popupit = function (x, y, set, dir, size) {
105 dir = dir == null ? 2 : dir;
106 size = size || 5;
107 x = Math.round(x);
108 y = Math.round(y);
109 var bb = set.getBBox(),
110 w = Math.round(bb.width / 2),
111 h = Math.round(bb.height / 2),
112 dx = [0, w + size * 2, 0, -w - size * 2],
113 dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
114 p = ["M", x - dx[dir], y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0),
115 0, "a", size, size, 0, 0, 1, -size, -size,
116 "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0,
117 -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
118 "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0),
119 0, "a", size, size, 0, 0, 1, size, size,
120 "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0,
121 mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
122 "l", -mmax(w - size, 0), 0, "z"].join(","),
123 xy = [{x: x, y: y + size * 2 + h},
124 {x: x - size * 2 - w, y: y},
125 {x: x, y: y - size * 2 - h},
126 {x: x + size * 2 + w, y: y}]
127 [dir];
128 set.translate(xy.x - w - bb.x, xy.y - h - bb.y);
129 return this.set(this.path(p).attr({fill: "#234", stroke: "none"})
130 .insertBefore(set.node ? set : set[0]), set);
131 };
132
133 Raphael.fn.popup = function (x, y, text, dir, size) {
134 dir = dir == null ? 2 : dir > 3 ? 3 : dir;
135 size = size || 5;
136 text = text || "$9.99";
137 var res = this.set(),
138 d = 3;
139 res.push(this.path().attr({fill: "#000", stroke: "#000"}));
140 res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
141 res.update = function (X, Y, withAnimation) {
142 X = X || x;
143 Y = Y || y;
144 var bb = this[1].getBBox(),
145 w = bb.width / 2,
146 h = bb.height / 2,
147 dx = [0, w + size * 2, 0, -w - size * 2],
148 dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
149 p = ["M", X - dx[dir], Y - dy[dir], "l", -size, (dir == 2) * -size,
150 -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size,
151 "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size,
152 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
153 "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0),
154 0, "a", size, size, 0, 0, 1, size, size,
155 "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0,
156 mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
157 "l", -mmax(w - size, 0), 0, "z"].join(","),
158 xy = [{x: X, y: Y + size * 2 + h},
159 {x: X - size * 2 - w, y: Y},
160 {x: X, y: Y - size * 2 - h},
161 {x: X + size * 2 + w, y: Y}]
162 [dir];
163 xy.path = p;
164 if (withAnimation) {
165 this.animate(xy, 500, ">");
166 } else {
167 this.attr(xy);
168 }
169 return this;
170 };
171 return res.update(x, y);
172 };
@@ -1,286 +1,342
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require 'iconv'
19 19 require 'redmine/codeset_util'
20 20
21 21 module RepositoriesHelper
22 22 def format_revision(revision)
23 23 if revision.respond_to? :format_identifier
24 24 revision.format_identifier
25 25 else
26 26 revision.to_s
27 27 end
28 28 end
29 29
30 30 def truncate_at_line_break(text, length = 255)
31 31 if text
32 32 text.gsub(%r{^(.{#{length}}[^\n]*)\n.+$}m, '\\1...')
33 33 end
34 34 end
35 35
36 36 def render_properties(properties)
37 37 unless properties.nil? || properties.empty?
38 38 content = ''
39 39 properties.keys.sort.each do |property|
40 40 content << content_tag('li', "<b>#{h property}</b>: <span>#{h properties[property]}</span>".html_safe)
41 41 end
42 42 content_tag('ul', content.html_safe, :class => 'properties')
43 43 end
44 44 end
45 45
46 46 def render_changeset_changes
47 47 changes = @changeset.changes.find(:all, :limit => 1000, :order => 'path').collect do |change|
48 48 case change.action
49 49 when 'A'
50 50 # Detects moved/copied files
51 51 if !change.from_path.blank?
52 52 change.action =
53 53 @changeset.changes.detect {|c| c.action == 'D' && c.path == change.from_path} ? 'R' : 'C'
54 54 end
55 55 change
56 56 when 'D'
57 57 @changeset.changes.detect {|c| c.from_path == change.path} ? nil : change
58 58 else
59 59 change
60 60 end
61 61 end.compact
62 62
63 63 tree = { }
64 64 changes.each do |change|
65 65 p = tree
66 66 dirs = change.path.to_s.split('/').select {|d| !d.blank?}
67 67 path = ''
68 68 dirs.each do |dir|
69 69 path += '/' + dir
70 70 p[:s] ||= {}
71 71 p = p[:s]
72 72 p[path] ||= {}
73 73 p = p[path]
74 74 end
75 75 p[:c] = change
76 76 end
77 77 render_changes_tree(tree[:s])
78 78 end
79 79
80 80 def render_changes_tree(tree)
81 81 return '' if tree.nil?
82 82 output = ''
83 83 output << '<ul>'
84 84 tree.keys.sort.each do |file|
85 85 style = 'change'
86 86 text = File.basename(h(file))
87 87 if s = tree[file][:s]
88 88 style << ' folder'
89 89 path_param = to_path_param(@repository.relative_path(file))
90 90 text = link_to(h(text), :controller => 'repositories',
91 91 :action => 'show',
92 92 :id => @project,
93 93 :path => path_param,
94 94 :rev => @changeset.identifier)
95 95 output << "<li class='#{style}'>#{text}</li>"
96 96 output << render_changes_tree(s)
97 97 elsif c = tree[file][:c]
98 98 style << " change-#{c.action}"
99 99 path_param = to_path_param(@repository.relative_path(c.path))
100 100 text = link_to(h(text), :controller => 'repositories',
101 101 :action => 'entry',
102 102 :id => @project,
103 103 :path => path_param,
104 104 :rev => @changeset.identifier) unless c.action == 'D'
105 105 text << " - #{h(c.revision)}" unless c.revision.blank?
106 106 text << ' ('.html_safe + link_to(l(:label_diff), :controller => 'repositories',
107 107 :action => 'diff',
108 108 :id => @project,
109 109 :path => path_param,
110 110 :rev => @changeset.identifier) + ') '.html_safe if c.action == 'M'
111 111 text << ' '.html_safe + content_tag('span', h(c.from_path), :class => 'copied-from') unless c.from_path.blank?
112 112 output << "<li class='#{style}'>#{text}</li>"
113 113 end
114 114 end
115 115 output << '</ul>'
116 116 output.html_safe
117 117 end
118 118
119 119 def to_utf8(str)
120 120 return str if str.nil?
121 121 str = to_utf8_internal(str)
122 122 if str.respond_to?(:force_encoding)
123 123 str.force_encoding('UTF-8')
124 124 end
125 125 str
126 126 end
127 127
128 128 def to_utf8_internal(str)
129 129 return str if str.nil?
130 130 if str.respond_to?(:force_encoding)
131 131 str.force_encoding('ASCII-8BIT')
132 132 end
133 133 return str if str.empty?
134 134 return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
135 135 if str.respond_to?(:force_encoding)
136 136 str.force_encoding('UTF-8')
137 137 end
138 138 @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip)
139 139 @encodings.each do |encoding|
140 140 begin
141 141 return Iconv.conv('UTF-8', encoding, str)
142 142 rescue Iconv::Failure
143 143 # do nothing here and try the next encoding
144 144 end
145 145 end
146 146 str = Redmine::CodesetUtil.replace_invalid_utf8(str)
147 147 end
148 148 private :to_utf8_internal
149 149
150 150 def repository_field_tags(form, repository)
151 151 method = repository.class.name.demodulize.underscore + "_field_tags"
152 152 if repository.is_a?(Repository) &&
153 153 respond_to?(method) && method != 'repository_field_tags'
154 154 send(method, form, repository)
155 155 end
156 156 end
157 157
158 158 def scm_select_tag(repository)
159 159 scm_options = [["--- #{l(:actionview_instancetag_blank_option)} ---", '']]
160 160 Redmine::Scm::Base.all.each do |scm|
161 161 if Setting.enabled_scm.include?(scm) ||
162 162 (repository && repository.class.name.demodulize == scm)
163 163 scm_options << ["Repository::#{scm}".constantize.scm_name, scm]
164 164 end
165 165 end
166 166 select_tag('repository_scm',
167 167 options_for_select(scm_options, repository.class.name.demodulize),
168 168 :disabled => (repository && !repository.new_record?),
169 169 :onchange => remote_function(
170 170 :url => {
171 171 :controller => 'repositories',
172 172 :action => 'edit',
173 173 :id => @project
174 174 },
175 175 :method => :get,
176 176 :with => "Form.serialize(this.form)")
177 177 )
178 178 end
179 179
180 180 def with_leading_slash(path)
181 181 path.to_s.starts_with?('/') ? path : "/#{path}"
182 182 end
183 183
184 184 def without_leading_slash(path)
185 185 path.gsub(%r{^/+}, '')
186 186 end
187 187
188 188 def subversion_field_tags(form, repository)
189 189 content_tag('p', form.text_field(:url, :size => 60, :required => true,
190 190 :disabled => (repository && !repository.root_url.blank?)) +
191 191 '<br />'.html_safe +
192 192 '(file:///, http://, https://, svn://, svn+[tunnelscheme]://)') +
193 193 content_tag('p', form.text_field(:login, :size => 30)) +
194 194 content_tag('p', form.password_field(
195 195 :password, :size => 30, :name => 'ignore',
196 196 :value => ((repository.new_record? || repository.password.blank?) ? '' : ('x'*15)),
197 197 :onfocus => "this.value=''; this.name='repository[password]';",
198 198 :onchange => "this.name='repository[password]';"))
199 199 end
200 200
201 201 def darcs_field_tags(form, repository)
202 202 content_tag('p', form.text_field(
203 203 :url, :label => l(:field_path_to_repository),
204 204 :size => 60, :required => true,
205 205 :disabled => (repository && !repository.new_record?))) +
206 206 content_tag('p', form.select(
207 207 :log_encoding, [nil] + Setting::ENCODINGS,
208 208 :label => l(:field_commit_logs_encoding), :required => true))
209 209 end
210 210
211 211 def mercurial_field_tags(form, repository)
212 212 content_tag('p', form.text_field(
213 213 :url, :label => l(:field_path_to_repository),
214 214 :size => 60, :required => true,
215 215 :disabled => (repository && !repository.root_url.blank?)
216 216 ) +
217 217 '<br />'.html_safe + l(:text_mercurial_repository_note)) +
218 218 content_tag('p', form.select(
219 219 :path_encoding, [nil] + Setting::ENCODINGS,
220 220 :label => l(:field_scm_path_encoding)
221 221 ) +
222 222 '<br />'.html_safe + l(:text_scm_path_encoding_note))
223 223 end
224 224
225 225 def git_field_tags(form, repository)
226 226 content_tag('p', form.text_field(
227 227 :url, :label => l(:field_path_to_repository),
228 228 :size => 60, :required => true,
229 229 :disabled => (repository && !repository.root_url.blank?)
230 230 ) +
231 231 '<br />'.html_safe +
232 232 l(:text_git_repository_note)) +
233 233 content_tag('p', form.select(
234 234 :path_encoding, [nil] + Setting::ENCODINGS,
235 235 :label => l(:field_scm_path_encoding)
236 236 ) +
237 237 '<br />'.html_safe + l(:text_scm_path_encoding_note)) +
238 238 content_tag('p', form.check_box(
239 239 :extra_report_last_commit,
240 240 :label => l(:label_git_report_last_commit)
241 241 ))
242 242 end
243 243
244 244 def cvs_field_tags(form, repository)
245 245 content_tag('p', form.text_field(
246 246 :root_url,
247 247 :label => l(:field_cvsroot),
248 248 :size => 60, :required => true,
249 249 :disabled => !repository.new_record?)) +
250 250 content_tag('p', form.text_field(
251 251 :url,
252 252 :label => l(:field_cvs_module),
253 253 :size => 30, :required => true,
254 254 :disabled => !repository.new_record?)) +
255 255 content_tag('p', form.select(
256 256 :log_encoding, [nil] + Setting::ENCODINGS,
257 257 :label => l(:field_commit_logs_encoding), :required => true)) +
258 258 content_tag('p', form.select(
259 259 :path_encoding, [nil] + Setting::ENCODINGS,
260 260 :label => l(:field_scm_path_encoding)
261 261 ) +
262 262 '<br />'.html_safe + l(:text_scm_path_encoding_note))
263 263 end
264 264
265 265 def bazaar_field_tags(form, repository)
266 266 content_tag('p', form.text_field(
267 267 :url, :label => l(:field_path_to_repository),
268 268 :size => 60, :required => true,
269 269 :disabled => (repository && !repository.new_record?))) +
270 270 content_tag('p', form.select(
271 271 :log_encoding, [nil] + Setting::ENCODINGS,
272 272 :label => l(:field_commit_logs_encoding), :required => true))
273 273 end
274 274
275 275 def filesystem_field_tags(form, repository)
276 276 content_tag('p', form.text_field(
277 277 :url, :label => l(:field_root_directory),
278 278 :size => 60, :required => true,
279 279 :disabled => (repository && !repository.root_url.blank?))) +
280 280 content_tag('p', form.select(
281 281 :path_encoding, [nil] + Setting::ENCODINGS,
282 282 :label => l(:field_scm_path_encoding)
283 283 ) +
284 284 '<br />'.html_safe + l(:text_scm_path_encoding_note))
285 285 end
286
287 def index_commits(commits, heads, href_proc = nil)
288 return nil if commits.nil? or commits.first.parents.nil?
289 map = {}
290 commit_hashes = []
291 refs_map = {}
292 href_proc ||= Proc.new {|x|x}
293 heads.each{|r| refs_map[r.scmid] ||= []; refs_map[r.scmid] << r}
294 commits.reverse.each_with_index do |c, i|
295 h = {}
296 h[:parents] = c.parents.collect do |p|
297 [p.scmid, 0, 0]
298 end
299 h[:rdmid] = i
300 h[:space] = 0
301 h[:refs] = refs_map[c.scmid].join(" ") if refs_map.include? c.scmid
302 h[:scmid] = c.scmid
303 h[:href] = href_proc.call(c.scmid)
304 commit_hashes << h
305 map[c.scmid] = h
306 end
307 heads.sort! do |a,b|
308 a.to_s <=> b.to_s
309 end
310 j = 0
311 heads.each do |h|
312 if map.include? h.scmid then
313 j = mark_chain(j += 1, map[h.scmid], map)
314 end
315 end
316 # when no head matched anything use first commit
317 if j == 0 then
318 mark_chain(j += 1, map.values.first, map)
319 end
320 map
321 end
322
323 def mark_chain(mark, commit, map)
324 stack = [[mark, commit]]
325 markmax = mark
326 until stack.empty?
327 current = stack.pop
328 m, commit = current
329 commit[:space] = m if commit[:space] == 0
330 m1 = m - 1
331 commit[:parents].each_with_index do |p, i|
332 psha = p[0]
333 if map.include? psha and map[psha][:space] == 0 then
334 stack << [m1 += 1, map[psha]] if i == 0
335 stack = [[m1 += 1, map[psha]]] + stack if i > 0
336 end
337 end
338 markmax = m1 if markmax < m1
339 end
340 markmax
341 end
286 342 end
@@ -1,28 +1,55
1 1 <% form_tag({:controller => 'repositories', :action => 'diff', :id => @project, :path => to_path_param(path)}, :method => :get) do %>
2 2 <table class="list changesets">
3 3 <thead><tr>
4 <% if @repository.supports_revision_graph? %>
5 <th></th>
6 <% end %>
4 7 <th>#</th>
5 8 <th></th>
6 9 <th></th>
7 10 <th><%= l(:label_date) %></th>
8 11 <th><%= l(:field_author) %></th>
9 12 <th><%= l(:field_comments) %></th>
10 13 </tr></thead>
11 14 <tbody>
12 15 <% show_diff = revisions.size > 1 %>
13 16 <% line_num = 1 %>
14 17 <% revisions.each do |changeset| %>
15 18 <tr class="changeset <%= cycle 'odd', 'even' %>">
19 <% if @repository.supports_revision_graph? %>
20 <% if line_num == 1 %>
21 <td class="revision_graph" rowspan="<%= revisions.size %>">
22 <% href_base = Proc.new {|x| url_for(:controller => 'repositories',
23 :action => 'revision',
24 :id => project,
25 :rev => x) } %>
26 <%= render :partial => 'revision_graph',
27 :locals => {
28 :commits => index_commits(
29 revisions,
30 @repository.branches,
31 href_base
32 )
33 } %>
34 </td>
35 <% end %>
36 <% end %>
16 37 <td class="id"><%= link_to_revision(changeset, project) %></td>
17 38 <td class="checkbox"><%= radio_button_tag('rev', changeset.identifier, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < revisions.size) %></td>
18 39 <td class="checkbox"><%= radio_button_tag('rev_to', changeset.identifier, (line_num==2), :id => "cbto-#{line_num}", :onclick => "if ($('cb-#{line_num}').checked==true) {$('cb-#{line_num-1}').checked=true;}") if show_diff && (line_num > 1) %></td>
19 40 <td class="committed_on"><%= format_time(changeset.committed_on) %></td>
20 41 <td class="author"><%= h truncate(changeset.author.to_s, :length => 30) %></td>
42 <% if @repository.supports_revision_graph? %>
43 <td class="comments_nowrap">
44 <%= textilizable(truncate(truncate_at_line_break(changeset.comments, 0), :length => 90)) %>
45 </td>
46 <% else %>
21 47 <td class="comments"><%= textilizable(truncate_at_line_break(changeset.comments)) %></td>
48 <% end %>
22 49 </tr>
23 50 <% line_num += 1 %>
24 51 <% end %>
25 52 </tbody>
26 53 </table>
27 54 <%= submit_tag(l(:label_view_diff), :name => nil) if show_diff %>
28 55 <% end %>
@@ -1,1008 +1,1011
1 1 html {overflow-y:scroll;}
2 2 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
3 3
4 4 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
5 5 h1 {margin:0; padding:0; font-size: 24px;}
6 6 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
7 7 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
8 8 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
9 9
10 10 /***** Layout *****/
11 11 #wrapper {background: white;}
12 12
13 13 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
14 14 #top-menu ul {margin: 0; padding: 0;}
15 15 #top-menu li {
16 16 float:left;
17 17 list-style-type:none;
18 18 margin: 0px 0px 0px 0px;
19 19 padding: 0px 0px 0px 0px;
20 20 white-space:nowrap;
21 21 }
22 22 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
23 23 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
24 24
25 25 #account {float:right;}
26 26
27 27 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
28 28 #header a {color:#f8f8f8;}
29 29 #header h1 a.ancestor { font-size: 80%; }
30 30 #quick-search {float:right;}
31 31
32 32 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
33 33 #main-menu ul {margin: 0; padding: 0;}
34 34 #main-menu li {
35 35 float:left;
36 36 list-style-type:none;
37 37 margin: 0px 2px 0px 0px;
38 38 padding: 0px 0px 0px 0px;
39 39 white-space:nowrap;
40 40 }
41 41 #main-menu li a {
42 42 display: block;
43 43 color: #fff;
44 44 text-decoration: none;
45 45 font-weight: bold;
46 46 margin: 0;
47 47 padding: 4px 10px 4px 10px;
48 48 }
49 49 #main-menu li a:hover {background:#759FCF; color:#fff;}
50 50 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
51 51
52 52 #admin-menu ul {margin: 0; padding: 0;}
53 53 #admin-menu li {margin: 0; padding: 0 0 12px 0; list-style-type:none;}
54 54
55 55 #admin-menu a { background-position: 0% 40%; background-repeat: no-repeat; padding-left: 20px; padding-top: 2px; padding-bottom: 3px;}
56 56 #admin-menu a.projects { background-image: url(../images/projects.png); }
57 57 #admin-menu a.users { background-image: url(../images/user.png); }
58 58 #admin-menu a.groups { background-image: url(../images/group.png); }
59 59 #admin-menu a.roles { background-image: url(../images/database_key.png); }
60 60 #admin-menu a.trackers { background-image: url(../images/ticket.png); }
61 61 #admin-menu a.issue_statuses { background-image: url(../images/ticket_edit.png); }
62 62 #admin-menu a.workflows { background-image: url(../images/ticket_go.png); }
63 63 #admin-menu a.custom_fields { background-image: url(../images/textfield.png); }
64 64 #admin-menu a.enumerations { background-image: url(../images/text_list_bullets.png); }
65 65 #admin-menu a.settings { background-image: url(../images/changeset.png); }
66 66 #admin-menu a.plugins { background-image: url(../images/plugin.png); }
67 67 #admin-menu a.info { background-image: url(../images/help.png); }
68 68 #admin-menu a.server_authentication { background-image: url(../images/server_key.png); }
69 69
70 70 #main {background-color:#EEEEEE;}
71 71
72 72 #sidebar{ float: right; width: 22%; position: relative; z-index: 9; padding: 0; margin: 0;}
73 73 * html #sidebar{ width: 22%; }
74 74 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
75 75 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
76 76 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
77 77 #sidebar .contextual { margin-right: 1em; }
78 78
79 79 #content { width: 75%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
80 80 * html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
81 81 html>body #content { min-height: 600px; }
82 82 * html body #content { height: 600px; } /* IE */
83 83
84 84 #main.nosidebar #sidebar{ display: none; }
85 85 #main.nosidebar #content{ width: auto; border-right: 0; }
86 86
87 87 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
88 88
89 89 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
90 90 #login-form table td {padding: 6px;}
91 91 #login-form label {font-weight: bold;}
92 92 #login-form input#username, #login-form input#password { width: 300px; }
93 93
94 94 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
95 95
96 96 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
97 97
98 98 /***** Links *****/
99 99 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
100 100 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
101 101 a img{ border: 0; }
102 102
103 103 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
104 104
105 105 /***** Tables *****/
106 106 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
107 107 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
108 108 table.list td { vertical-align: top; }
109 109 table.list td.id { width: 2%; text-align: center;}
110 110 table.list td.checkbox { width: 15px; padding: 2px 0 0 0; }
111 111 table.list td.checkbox input {padding:0px;}
112 112 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
113 113 table.list td.buttons a { padding-right: 0.6em; }
114 114 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
115 115
116 116 tr.project td.name a { white-space:nowrap; }
117 117
118 118 tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
119 119 tr.project.idnt-1 td.name {padding-left: 0.5em;}
120 120 tr.project.idnt-2 td.name {padding-left: 2em;}
121 121 tr.project.idnt-3 td.name {padding-left: 3.5em;}
122 122 tr.project.idnt-4 td.name {padding-left: 5em;}
123 123 tr.project.idnt-5 td.name {padding-left: 6.5em;}
124 124 tr.project.idnt-6 td.name {padding-left: 8em;}
125 125 tr.project.idnt-7 td.name {padding-left: 9.5em;}
126 126 tr.project.idnt-8 td.name {padding-left: 11em;}
127 127 tr.project.idnt-9 td.name {padding-left: 12.5em;}
128 128
129 129 tr.issue { text-align: center; white-space: nowrap; }
130 130 tr.issue td.subject, tr.issue td.category, td.assigned_to, tr.issue td.string, tr.issue td.text { white-space: normal; }
131 131 tr.issue td.subject { text-align: left; }
132 132 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
133 133
134 134 tr.issue.idnt td.subject a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
135 135 tr.issue.idnt-1 td.subject {padding-left: 0.5em;}
136 136 tr.issue.idnt-2 td.subject {padding-left: 2em;}
137 137 tr.issue.idnt-3 td.subject {padding-left: 3.5em;}
138 138 tr.issue.idnt-4 td.subject {padding-left: 5em;}
139 139 tr.issue.idnt-5 td.subject {padding-left: 6.5em;}
140 140 tr.issue.idnt-6 td.subject {padding-left: 8em;}
141 141 tr.issue.idnt-7 td.subject {padding-left: 9.5em;}
142 142 tr.issue.idnt-8 td.subject {padding-left: 11em;}
143 143 tr.issue.idnt-9 td.subject {padding-left: 12.5em;}
144 144
145 145 tr.entry { border: 1px solid #f8f8f8; }
146 146 tr.entry td { white-space: nowrap; }
147 147 tr.entry td.filename { width: 30%; }
148 148 tr.entry td.filename_no_report { width: 70%; }
149 149 tr.entry td.size { text-align: right; font-size: 90%; }
150 150 tr.entry td.revision, tr.entry td.author { text-align: center; }
151 151 tr.entry td.age { text-align: right; }
152 152 tr.entry.file td.filename a { margin-left: 16px; }
153 153 tr.entry.file td.filename_no_report a { margin-left: 16px; }
154 154
155 155 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
156 156 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
157 157
158 tr.changeset { height: 20px }
158 159 tr.changeset ul, ol { margin-top: 0px; margin-bottom: 0px; }
160 tr.changeset td.revision_graph { width: 15%; background-color: #fffffb; }
159 161 tr.changeset td.author { text-align: center; width: 15%; white-space:nowrap;}
160 162 tr.changeset td.committed_on { text-align: center; width: 15%; white-space:nowrap;}
163 tr.changeset td.comments_nowrap { width: 45%; white-space:nowrap;}
161 164
162 165 table.files tr.file td { text-align: center; }
163 166 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
164 167 table.files tr.file td.digest { font-size: 80%; }
165 168
166 169 table.members td.roles, table.memberships td.roles { width: 45%; }
167 170
168 171 tr.message { height: 2.6em; }
169 172 tr.message td.subject { padding-left: 20px; }
170 173 tr.message td.created_on { white-space: nowrap; }
171 174 tr.message td.last_message { font-size: 80%; white-space: nowrap; }
172 175 tr.message.locked td.subject { background: url(../images/locked.png) no-repeat 0 1px; }
173 176 tr.message.sticky td.subject { background: url(../images/bullet_go.png) no-repeat 0 1px; font-weight: bold; }
174 177
175 178 tr.version.closed, tr.version.closed a { color: #999; }
176 179 tr.version td.name { padding-left: 20px; }
177 180 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
178 181 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; }
179 182
180 183 tr.user td { width:13%; }
181 184 tr.user td.email { width:18%; }
182 185 tr.user td { white-space: nowrap; }
183 186 tr.user.locked, tr.user.registered { color: #aaa; }
184 187 tr.user.locked a, tr.user.registered a { color: #aaa; }
185 188
186 189 tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
187 190
188 191 tr.time-entry { text-align: center; white-space: nowrap; }
189 192 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
190 193 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
191 194 td.hours .hours-dec { font-size: 0.9em; }
192 195
193 196 table.plugins td { vertical-align: middle; }
194 197 table.plugins td.configure { text-align: right; padding-right: 1em; }
195 198 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
196 199 table.plugins span.description { display: block; font-size: 0.9em; }
197 200 table.plugins span.url { display: block; font-size: 0.9em; }
198 201
199 202 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
200 203 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
201 204 tr.group a.toggle-all { color: #aaa; font-size: 80%; font-weight: normal; display:none;}
202 205 tr.group:hover a.toggle-all { display:inline;}
203 206 a.toggle-all:hover {text-decoration:none;}
204 207
205 208 table.list tbody tr:hover { background-color:#ffffdd; }
206 209 table.list tbody tr.group:hover { background-color:inherit; }
207 210 table td {padding:2px;}
208 211 table p {margin:0;}
209 212 .odd {background-color:#f6f7f8;}
210 213 .even {background-color: #fff;}
211 214
212 215 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
213 216 a.sort.asc { background-image: url(../images/sort_asc.png); }
214 217 a.sort.desc { background-image: url(../images/sort_desc.png); }
215 218
216 219 table.attributes { width: 100% }
217 220 table.attributes th { vertical-align: top; text-align: left; }
218 221 table.attributes td { vertical-align: top; }
219 222
220 223 table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
221 224
222 225 td.center {text-align:center;}
223 226
224 227 h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; }
225 228
226 229 div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; }
227 230 div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; }
228 231 div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
229 232 div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
230 233
231 234 #watchers ul {margin: 0; padding: 0;}
232 235 #watchers li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
233 236 #watchers select {width: 95%; display: block;}
234 237 #watchers a.delete {opacity: 0.4;}
235 238 #watchers a.delete:hover {opacity: 1;}
236 239 #watchers img.gravatar {vertical-align: middle;margin: 0 4px 2px 0;}
237 240
238 241 .highlight { background-color: #FCFD8D;}
239 242 .highlight.token-1 { background-color: #faa;}
240 243 .highlight.token-2 { background-color: #afa;}
241 244 .highlight.token-3 { background-color: #aaf;}
242 245
243 246 .box{
244 247 padding:6px;
245 248 margin-bottom: 10px;
246 249 background-color:#f6f6f6;
247 250 color:#505050;
248 251 line-height:1.5em;
249 252 border: 1px solid #e4e4e4;
250 253 }
251 254
252 255 div.square {
253 256 border: 1px solid #999;
254 257 float: left;
255 258 margin: .3em .4em 0 .4em;
256 259 overflow: hidden;
257 260 width: .6em; height: .6em;
258 261 }
259 262 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
260 263 .contextual input, .contextual select {font-size:0.9em;}
261 264 .message .contextual { margin-top: 0; }
262 265
263 266 .splitcontentleft{float:left; width:49%;}
264 267 .splitcontentright{float:right; width:49%;}
265 268 form {display: inline;}
266 269 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
267 270 fieldset {border: 1px solid #e4e4e4; margin:0;}
268 271 legend {color: #484848;}
269 272 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
270 273 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
271 274 blockquote blockquote { margin-left: 0;}
272 275 acronym { border-bottom: 1px dotted; cursor: help; }
273 276 textarea.wiki-edit { width: 99%; }
274 277 li p {margin-top: 0;}
275 278 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
276 279 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
277 280 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
278 281 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
279 282
280 283 div.issue div.subject div div { padding-left: 16px; }
281 284 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
282 285 div.issue div.subject>div>p { margin-top: 0.5em; }
283 286 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
284 287 div.issue span.private { position:relative; bottom: 2px; text-transform: uppercase; background: #d22; color: #fff; font-weight:bold; padding: 0px 2px 0px 2px; font-size: 60%; margin-right: 2px; border-radius: 2px; -moz-border-radius: 2px;}
285 288
286 289 #issue_tree table.issues, #relations table.issues { border: 0; }
287 290 #issue_tree td.checkbox, #relations td.checkbox {display:none;}
288 291 #relations td.buttons {padding:0;}
289 292
290 293 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
291 294 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
292 295 fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); }
293 296
294 297 fieldset#date-range p { margin: 2px 0 2px 0; }
295 298 fieldset#filters table { border-collapse: collapse; }
296 299 fieldset#filters table td { padding: 0; vertical-align: middle; }
297 300 fieldset#filters tr.filter { height: 2em; }
298 301 fieldset#filters td.field { width:200px; }
299 302 fieldset#filters td.operator { width:170px; }
300 303 fieldset#filters td.values { white-space:nowrap; }
301 304 fieldset#filters td.values img { vertical-align: bottom; }
302 305 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
303 306 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
304 307
305 308 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
306 309 div#issue-changesets div.changeset { padding: 4px;}
307 310 div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
308 311 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
309 312
310 313 div#activity dl, #search-results { margin-left: 2em; }
311 314 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
312 315 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
313 316 div#activity dt.me .time { border-bottom: 1px solid #999; }
314 317 div#activity dt .time { color: #777; font-size: 80%; }
315 318 div#activity dd .description, #search-results dd .description { font-style: italic; }
316 319 div#activity span.project:after, #search-results span.project:after { content: " -"; }
317 320 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
318 321
319 322 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
320 323
321 324 div#search-results-counts {float:right;}
322 325 div#search-results-counts ul { margin-top: 0.5em; }
323 326 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
324 327
325 328 dt.issue { background-image: url(../images/ticket.png); }
326 329 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
327 330 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
328 331 dt.issue-note { background-image: url(../images/ticket_note.png); }
329 332 dt.changeset { background-image: url(../images/changeset.png); }
330 333 dt.news { background-image: url(../images/news.png); }
331 334 dt.message { background-image: url(../images/message.png); }
332 335 dt.reply { background-image: url(../images/comments.png); }
333 336 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
334 337 dt.attachment { background-image: url(../images/attachment.png); }
335 338 dt.document { background-image: url(../images/document.png); }
336 339 dt.project { background-image: url(../images/projects.png); }
337 340 dt.time-entry { background-image: url(../images/time.png); }
338 341
339 342 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
340 343
341 344 div#roadmap .related-issues { margin-bottom: 1em; }
342 345 div#roadmap .related-issues td.checkbox { display: none; }
343 346 div#roadmap .wiki h1:first-child { display: none; }
344 347 div#roadmap .wiki h1 { font-size: 120%; }
345 348 div#roadmap .wiki h2 { font-size: 110%; }
346 349 body.controller-versions.action-show div#roadmap .related-issues {width:auto;}
347 350
348 351 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
349 352 div#version-summary fieldset { margin-bottom: 1em; }
350 353 div#version-summary .total-hours { text-align: right; }
351 354
352 355 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
353 356 table#time-report tbody tr { font-style: italic; color: #777; }
354 357 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
355 358 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
356 359 table#time-report .hours-dec { font-size: 0.9em; }
357 360
358 361 form .attributes { margin-bottom: 8px; }
359 362 form .attributes p { padding-top: 1px; padding-bottom: 2px; }
360 363 form .attributes select { width: 60%; }
361 364 input#issue_subject { width: 99%; }
362 365 select#issue_done_ratio { width: 95px; }
363 366
364 367 ul.projects { margin: 0; padding-left: 1em; }
365 368 ul.projects.root { margin: 0; padding: 0; }
366 369 ul.projects ul.projects { border-left: 3px solid #e0e0e0; }
367 370 ul.projects li.root { list-style-type:none; margin-bottom: 1em; }
368 371 ul.projects li.child { list-style-type:none; margin-top: 1em;}
369 372 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
370 373 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
371 374
372 375 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
373 376 #tracker_project_ids li { list-style-type:none; }
374 377
375 378 ul.properties {padding:0; font-size: 0.9em; color: #777;}
376 379 ul.properties li {list-style-type:none;}
377 380 ul.properties li span {font-style:italic;}
378 381
379 382 .total-hours { font-size: 110%; font-weight: bold; }
380 383 .total-hours span.hours-int { font-size: 120%; }
381 384
382 385 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
383 386 #user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select { width: 90%; }
384 387
385 388 #workflow_copy_form select { width: 200px; }
386 389
387 390 textarea#custom_field_possible_values {width: 99%}
388 391
389 392 .pagination {font-size: 90%}
390 393 p.pagination {margin-top:8px;}
391 394
392 395 /***** Tabular forms ******/
393 396 .tabular p{
394 397 margin: 0;
395 398 padding: 5px 0 8px 0;
396 399 padding-left: 180px; /*width of left column containing the label elements*/
397 400 height: 1%;
398 401 clear:left;
399 402 }
400 403
401 404 html>body .tabular p {overflow:hidden;}
402 405
403 406 .tabular label{
404 407 font-weight: bold;
405 408 float: left;
406 409 text-align: right;
407 410 margin-left: -180px; /*width of left column*/
408 411 width: 175px; /*width of labels. Should be smaller than left column to create some right
409 412 margin*/
410 413 }
411 414
412 415 .tabular label.floating{
413 416 font-weight: normal;
414 417 margin-left: 0px;
415 418 text-align: left;
416 419 width: 270px;
417 420 }
418 421
419 422 .tabular label.block{
420 423 font-weight: normal;
421 424 margin-left: 0px !important;
422 425 text-align: left;
423 426 float: none;
424 427 display: block;
425 428 width: auto;
426 429 }
427 430
428 431 .tabular label.inline{
429 432 float:none;
430 433 margin-left: 5px !important;
431 434 width: auto;
432 435 }
433 436
434 437 label.no-css {
435 438 font-weight: inherit;
436 439 float:none;
437 440 text-align:left;
438 441 margin-left:0px;
439 442 width:auto;
440 443 }
441 444 input#time_entry_comments { width: 90%;}
442 445
443 446 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
444 447
445 448 .tabular.settings p{ padding-left: 300px; }
446 449 .tabular.settings label{ margin-left: -300px; width: 295px; }
447 450 .tabular.settings textarea { width: 99%; }
448 451
449 452 .tabular.settings.enabled_scm table {width:100%}
450 453 .tabular.settings.enabled_scm td.scm_name{ font-weight: bold; }
451 454 .tabular.settings.enabled_scm p.scm_config{ padding-left: 8px; font-style:italic;}
452 455
453 456 fieldset.settings label { display: block; }
454 457 fieldset#notified_events .parent { padding-left: 20px; }
455 458
456 459 .required {color: #bb0000;}
457 460 .summary {font-style: italic;}
458 461
459 462 #attachments_fields input[type=text] {margin-left: 8px; }
460 463 #attachments_fields span {display:block; white-space:nowrap;}
461 464 #attachments_fields img {vertical-align: middle;}
462 465
463 466 div.attachments { margin-top: 12px; }
464 467 div.attachments p { margin:4px 0 2px 0; }
465 468 div.attachments img { vertical-align: middle; }
466 469 div.attachments span.author { font-size: 0.9em; color: #888; }
467 470
468 471 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
469 472 .other-formats span + span:before { content: "| "; }
470 473
471 474 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
472 475
473 476 /* Project members tab */
474 477 div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
475 478 div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
476 479 div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; }
477 480 div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; }
478 481 div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; }
479 482 div#tab-content-members fieldset div, div#tab-content-users fieldset div { max-height: 400px; overflow:auto; }
480 483
481 484 table.members td.group { padding-left: 20px; background: url(../images/group.png) no-repeat 0% 50%; }
482 485
483 486 input#principal_search, input#user_search {width:100%}
484 487
485 488 * html div#tab-content-members fieldset div { height: 450px; }
486 489
487 490 /***** Flash & error messages ****/
488 491 #errorExplanation, div.flash, .nodata, .warning {
489 492 padding: 4px 4px 4px 30px;
490 493 margin-bottom: 12px;
491 494 font-size: 1.1em;
492 495 border: 2px solid;
493 496 }
494 497
495 498 div.flash {margin-top: 8px;}
496 499
497 500 div.flash.error, #errorExplanation {
498 501 background: url(../images/exclamation.png) 8px 50% no-repeat;
499 502 background-color: #ffe3e3;
500 503 border-color: #dd0000;
501 504 color: #880000;
502 505 }
503 506
504 507 div.flash.notice {
505 508 background: url(../images/true.png) 8px 5px no-repeat;
506 509 background-color: #dfffdf;
507 510 border-color: #9fcf9f;
508 511 color: #005f00;
509 512 }
510 513
511 514 div.flash.warning {
512 515 background: url(../images/warning.png) 8px 5px no-repeat;
513 516 background-color: #FFEBC1;
514 517 border-color: #FDBF3B;
515 518 color: #A6750C;
516 519 text-align: left;
517 520 }
518 521
519 522 .nodata, .warning {
520 523 text-align: center;
521 524 background-color: #FFEBC1;
522 525 border-color: #FDBF3B;
523 526 color: #A6750C;
524 527 }
525 528
526 529 span.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
527 530
528 531 #errorExplanation ul { font-size: 0.9em;}
529 532 #errorExplanation h2, #errorExplanation p { display: none; }
530 533
531 534 /***** Ajax indicator ******/
532 535 #ajax-indicator {
533 536 position: absolute; /* fixed not supported by IE */
534 537 background-color:#eee;
535 538 border: 1px solid #bbb;
536 539 top:35%;
537 540 left:40%;
538 541 width:20%;
539 542 font-weight:bold;
540 543 text-align:center;
541 544 padding:0.6em;
542 545 z-index:100;
543 546 filter:alpha(opacity=50);
544 547 opacity: 0.5;
545 548 }
546 549
547 550 html>body #ajax-indicator { position: fixed; }
548 551
549 552 #ajax-indicator span {
550 553 background-position: 0% 40%;
551 554 background-repeat: no-repeat;
552 555 background-image: url(../images/loading.gif);
553 556 padding-left: 26px;
554 557 vertical-align: bottom;
555 558 }
556 559
557 560 /***** Calendar *****/
558 561 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
559 562 table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; }
560 563 table.cal thead th.week-number {width: auto;}
561 564 table.cal tbody tr {height: 100px;}
562 565 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
563 566 table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;}
564 567 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
565 568 table.cal td.odd p.day-num {color: #bbb;}
566 569 table.cal td.today {background:#ffffdd;}
567 570 table.cal td.today p.day-num {font-weight: bold;}
568 571 table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
569 572 table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
570 573 table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
571 574 p.cal.legend span {display:block;}
572 575
573 576 /***** Tooltips ******/
574 577 .tooltip{position:relative;z-index:24;}
575 578 .tooltip:hover{z-index:25;color:#000;}
576 579 .tooltip span.tip{display: none; text-align:left;}
577 580
578 581 div.tooltip:hover span.tip{
579 582 display:block;
580 583 position:absolute;
581 584 top:12px; left:24px; width:270px;
582 585 border:1px solid #555;
583 586 background-color:#fff;
584 587 padding: 4px;
585 588 font-size: 0.8em;
586 589 color:#505050;
587 590 }
588 591
589 592 /***** Progress bar *****/
590 593 table.progress {
591 594 border: 1px solid #D7D7D7;
592 595 border-collapse: collapse;
593 596 border-spacing: 0pt;
594 597 empty-cells: show;
595 598 text-align: center;
596 599 float:left;
597 600 margin: 1px 6px 1px 0px;
598 601 }
599 602
600 603 table.progress td { height: 0.9em; }
601 604 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
602 605 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
603 606 table.progress td.open { background: #FFF none repeat scroll 0%; }
604 607 p.pourcent {font-size: 80%;}
605 608 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
606 609
607 610 /***** Tabs *****/
608 611 #content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
609 612 #content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:1em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
610 613 #content .tabs ul li {
611 614 float:left;
612 615 list-style-type:none;
613 616 white-space:nowrap;
614 617 margin-right:8px;
615 618 background:#fff;
616 619 position:relative;
617 620 margin-bottom:-1px;
618 621 }
619 622 #content .tabs ul li a{
620 623 display:block;
621 624 font-size: 0.9em;
622 625 text-decoration:none;
623 626 line-height:1.3em;
624 627 padding:4px 6px 4px 6px;
625 628 border: 1px solid #ccc;
626 629 border-bottom: 1px solid #bbbbbb;
627 630 background-color: #eeeeee;
628 631 color:#777;
629 632 font-weight:bold;
630 633 }
631 634
632 635 #content .tabs ul li a:hover {
633 636 background-color: #ffffdd;
634 637 text-decoration:none;
635 638 }
636 639
637 640 #content .tabs ul li a.selected {
638 641 background-color: #fff;
639 642 border: 1px solid #bbbbbb;
640 643 border-bottom: 1px solid #fff;
641 644 }
642 645
643 646 #content .tabs ul li a.selected:hover {
644 647 background-color: #fff;
645 648 }
646 649
647 650 div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
648 651
649 652 button.tab-left, button.tab-right {
650 653 font-size: 0.9em;
651 654 cursor: pointer;
652 655 height:24px;
653 656 border: 1px solid #ccc;
654 657 border-bottom: 1px solid #bbbbbb;
655 658 position:absolute;
656 659 padding:4px;
657 660 width: 20px;
658 661 bottom: -1px;
659 662 }
660 663
661 664 button.tab-left {
662 665 right: 20px;
663 666 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
664 667 }
665 668
666 669 button.tab-right {
667 670 right: 0;
668 671 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;
669 672 }
670 673
671 674 /***** Auto-complete *****/
672 675 div.autocomplete {
673 676 position:absolute;
674 677 width:400px;
675 678 margin:0;
676 679 padding:0;
677 680 }
678 681 div.autocomplete ul {
679 682 list-style-type:none;
680 683 margin:0;
681 684 padding:0;
682 685 }
683 686 div.autocomplete ul li {
684 687 list-style-type:none;
685 688 display:block;
686 689 margin:-1px 0 0 0;
687 690 padding:2px;
688 691 cursor:pointer;
689 692 font-size: 90%;
690 693 border: 1px solid #ccc;
691 694 border-left: 1px solid #ccc;
692 695 border-right: 1px solid #ccc;
693 696 background-color:white;
694 697 }
695 698 div.autocomplete ul li.selected { background-color: #ffb;}
696 699 div.autocomplete ul li span.informal {
697 700 font-size: 80%;
698 701 color: #aaa;
699 702 }
700 703
701 704 #parent_issue_candidates ul li {width: 500px;}
702 705 #related_issue_candidates ul li {width: 500px;}
703 706
704 707 /***** Diff *****/
705 708 .diff_out { background: #fcc; }
706 709 .diff_out span { background: #faa; }
707 710 .diff_in { background: #cfc; }
708 711 .diff_in span { background: #afa; }
709 712
710 713 .text-diff {
711 714 padding: 1em;
712 715 background-color:#f6f6f6;
713 716 color:#505050;
714 717 border: 1px solid #e4e4e4;
715 718 }
716 719
717 720 /***** Wiki *****/
718 721 div.wiki table {
719 722 border: 1px solid #505050;
720 723 border-collapse: collapse;
721 724 margin-bottom: 1em;
722 725 }
723 726
724 727 div.wiki table, div.wiki td, div.wiki th {
725 728 border: 1px solid #bbb;
726 729 padding: 4px;
727 730 }
728 731
729 732 div.wiki .external {
730 733 background-position: 0% 60%;
731 734 background-repeat: no-repeat;
732 735 padding-left: 12px;
733 736 background-image: url(../images/external.png);
734 737 }
735 738
736 739 div.wiki a.new {
737 740 color: #b73535;
738 741 }
739 742
740 743 div.wiki pre {
741 744 margin: 1em 1em 1em 1.6em;
742 745 padding: 2px 2px 2px 0;
743 746 background-color: #fafafa;
744 747 border: 1px solid #dadada;
745 748 width:auto;
746 749 overflow-x: auto;
747 750 overflow-y: hidden;
748 751 }
749 752
750 753 div.wiki ul.toc {
751 754 background-color: #ffffdd;
752 755 border: 1px solid #e4e4e4;
753 756 padding: 4px;
754 757 line-height: 1.2em;
755 758 margin-bottom: 12px;
756 759 margin-right: 12px;
757 760 margin-left: 0;
758 761 display: table
759 762 }
760 763 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
761 764
762 765 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
763 766 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
764 767 div.wiki ul.toc ul { margin: 0; padding: 0; }
765 768 div.wiki ul.toc li { list-style-type:none; margin: 0;}
766 769 div.wiki ul.toc li li { margin-left: 1.5em; }
767 770 div.wiki ul.toc li li li { font-size: 0.8em; }
768 771
769 772 div.wiki ul.toc a {
770 773 font-size: 0.9em;
771 774 font-weight: normal;
772 775 text-decoration: none;
773 776 color: #606060;
774 777 }
775 778 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
776 779
777 780 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
778 781 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
779 782 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
780 783
781 784 div.wiki img { vertical-align: middle; }
782 785
783 786 /***** My page layout *****/
784 787 .block-receiver {
785 788 border:1px dashed #c0c0c0;
786 789 margin-bottom: 20px;
787 790 padding: 15px 0 15px 0;
788 791 }
789 792
790 793 .mypage-box {
791 794 margin:0 0 20px 0;
792 795 color:#505050;
793 796 line-height:1.5em;
794 797 }
795 798
796 799 .handle {
797 800 cursor: move;
798 801 }
799 802
800 803 a.close-icon {
801 804 display:block;
802 805 margin-top:3px;
803 806 overflow:hidden;
804 807 width:12px;
805 808 height:12px;
806 809 background-repeat: no-repeat;
807 810 cursor:pointer;
808 811 background-image:url('../images/close.png');
809 812 }
810 813
811 814 a.close-icon:hover {
812 815 background-image:url('../images/close_hl.png');
813 816 }
814 817
815 818 /***** Gantt chart *****/
816 819 .gantt_hdr {
817 820 position:absolute;
818 821 top:0;
819 822 height:16px;
820 823 border-top: 1px solid #c0c0c0;
821 824 border-bottom: 1px solid #c0c0c0;
822 825 border-right: 1px solid #c0c0c0;
823 826 text-align: center;
824 827 overflow: hidden;
825 828 }
826 829
827 830 .gantt_subjects { font-size: 0.8em; }
828 831 .gantt_subjects div { line-height:16px;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
829 832
830 833 .task {
831 834 position: absolute;
832 835 height:8px;
833 836 font-size:0.8em;
834 837 color:#888;
835 838 padding:0;
836 839 margin:0;
837 840 line-height:16px;
838 841 white-space:nowrap;
839 842 }
840 843
841 844 .task.label {width:100%;}
842 845 .task.label.project, .task.label.version { font-weight: bold; }
843 846
844 847 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
845 848 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }
846 849 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
847 850
848 851 .task_todo.parent { background: #888; border: 1px solid #888; height: 3px;}
849 852 .task_late.parent, .task_done.parent { height: 3px;}
850 853 .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;}
851 854 .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;}
852 855
853 856 .version.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
854 857 .version.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
855 858 .version.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
856 859 .version.marker { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
857 860
858 861 .project.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
859 862 .project.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
860 863 .project.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
861 864 .project.marker { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
862 865
863 866 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
864 867 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
865 868
866 869 /***** Icons *****/
867 870 .icon {
868 871 background-position: 0% 50%;
869 872 background-repeat: no-repeat;
870 873 padding-left: 20px;
871 874 padding-top: 2px;
872 875 padding-bottom: 3px;
873 876 }
874 877
875 878 .icon-add { background-image: url(../images/add.png); }
876 879 .icon-edit { background-image: url(../images/edit.png); }
877 880 .icon-copy { background-image: url(../images/copy.png); }
878 881 .icon-duplicate { background-image: url(../images/duplicate.png); }
879 882 .icon-del { background-image: url(../images/delete.png); }
880 883 .icon-move { background-image: url(../images/move.png); }
881 884 .icon-save { background-image: url(../images/save.png); }
882 885 .icon-cancel { background-image: url(../images/cancel.png); }
883 886 .icon-multiple { background-image: url(../images/table_multiple.png); }
884 887 .icon-folder { background-image: url(../images/folder.png); }
885 888 .open .icon-folder { background-image: url(../images/folder_open.png); }
886 889 .icon-package { background-image: url(../images/package.png); }
887 890 .icon-user { background-image: url(../images/user.png); }
888 891 .icon-projects { background-image: url(../images/projects.png); }
889 892 .icon-help { background-image: url(../images/help.png); }
890 893 .icon-attachment { background-image: url(../images/attachment.png); }
891 894 .icon-history { background-image: url(../images/history.png); }
892 895 .icon-time { background-image: url(../images/time.png); }
893 896 .icon-time-add { background-image: url(../images/time_add.png); }
894 897 .icon-stats { background-image: url(../images/stats.png); }
895 898 .icon-warning { background-image: url(../images/warning.png); }
896 899 .icon-fav { background-image: url(../images/fav.png); }
897 900 .icon-fav-off { background-image: url(../images/fav_off.png); }
898 901 .icon-reload { background-image: url(../images/reload.png); }
899 902 .icon-lock { background-image: url(../images/locked.png); }
900 903 .icon-unlock { background-image: url(../images/unlock.png); }
901 904 .icon-checked { background-image: url(../images/true.png); }
902 905 .icon-details { background-image: url(../images/zoom_in.png); }
903 906 .icon-report { background-image: url(../images/report.png); }
904 907 .icon-comment { background-image: url(../images/comment.png); }
905 908 .icon-summary { background-image: url(../images/lightning.png); }
906 909 .icon-server-authentication { background-image: url(../images/server_key.png); }
907 910 .icon-issue { background-image: url(../images/ticket.png); }
908 911 .icon-zoom-in { background-image: url(../images/zoom_in.png); }
909 912 .icon-zoom-out { background-image: url(../images/zoom_out.png); }
910 913 .icon-passwd { background-image: url(../images/textfield_key.png); }
911 914
912 915 .icon-file { background-image: url(../images/files/default.png); }
913 916 .icon-file.text-plain { background-image: url(../images/files/text.png); }
914 917 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
915 918 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
916 919 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
917 920 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
918 921 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
919 922 .icon-file.image-gif { background-image: url(../images/files/image.png); }
920 923 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
921 924 .icon-file.image-png { background-image: url(../images/files/image.png); }
922 925 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
923 926 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
924 927 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
925 928 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
926 929
927 930 img.gravatar {
928 931 padding: 2px;
929 932 border: solid 1px #d5d5d5;
930 933 background: #fff;
931 934 }
932 935
933 936 div.issue img.gravatar {
934 937 float: right;
935 938 margin: 0 0 0 1em;
936 939 padding: 5px;
937 940 }
938 941
939 942 div.issue table img.gravatar {
940 943 height: 14px;
941 944 width: 14px;
942 945 padding: 2px;
943 946 float: left;
944 947 margin: 0 0.5em 0 0;
945 948 }
946 949
947 950 h2 img.gravatar {
948 951 padding: 3px;
949 952 margin: -2px 4px -4px 0;
950 953 vertical-align: top;
951 954 }
952 955
953 956 h4 img.gravatar {
954 957 padding: 3px;
955 958 margin: -6px 0 -4px 0;
956 959 vertical-align: top;
957 960 }
958 961
959 962 td.username img.gravatar {
960 963 margin: 0 0.5em 0 0;
961 964 vertical-align: top;
962 965 }
963 966
964 967 #activity dt img.gravatar {
965 968 float: left;
966 969 margin: 0 1em 1em 0;
967 970 }
968 971
969 972 /* Used on 12px Gravatar img tags without the icon background */
970 973 .icon-gravatar {
971 974 float: left;
972 975 margin-right: 4px;
973 976 }
974 977
975 978 #activity dt,
976 979 .journal {
977 980 clear: left;
978 981 }
979 982
980 983 .journal-link {
981 984 float: right;
982 985 }
983 986
984 987 h2 img { vertical-align:middle; }
985 988
986 989 .hascontextmenu { cursor: context-menu; }
987 990
988 991 /***** Media print specific styles *****/
989 992 @media print {
990 993 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
991 994 #main { background: #fff; }
992 995 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
993 996 #wiki_add_attachment { display:none; }
994 997 .hide-when-print { display: none; }
995 998 .autoscroll {overflow-x: visible;}
996 999 table.list {margin-top:0.5em;}
997 1000 table.list th, table.list td {border: 1px solid #aaa;}
998 1001 }
999 1002
1000 1003 /* Accessibility specific styles */
1001 1004 .hidden-for-sighted {
1002 1005 position:absolute;
1003 1006 left:-10000px;
1004 1007 top:auto;
1005 1008 width:1px;
1006 1009 height:1px;
1007 1010 overflow:hidden;
1008 1011 }
General Comments 0
You need to be logged in to leave comments. Login now