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