##// END OF EJS Templates
code garden for changeset ranges and comments...
marcink -
r1787:d4a7b6c8 beta
parent child Browse files
Show More
@@ -0,0 +1,50 b''
1 ## -*- coding: utf-8 -*-
2 ##usage:
3 ## <%namespace name="diff_block" file="/changeset/diff_block.html"/>
4 ## ${diff_block.diff_block(changes)}
5 ##
6 <%def name="diff_block(changes)">
7
8 %for change,filenode,diff,cs1,cs2,stat in changes:
9 %if change !='removed':
10 <div id="${h.FID(filenode.changeset.raw_id,filenode.path)}" style="clear:both;height:90px;margin-top:-60px"></div>
11 <div class="diffblock margined comm">
12 <div class="code-header">
13 <div class="changeset_header">
14 <div class="changeset_file">
15 ${h.link_to_if(change!='removed',h.safe_unicode(filenode.path),h.url('files_home',repo_name=c.repo_name,
16 revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))}
17 </div>
18 <div class="diff-menu-wrapper">
19 <img class="diff-menu-activate" style="margin-bottom:-6px;cursor: pointer" alt="diff-menu" src="${h.url('/images/icons/script_gear.png')}" />
20 <div class="diff-menu" style="display:none">
21 <ul>
22 <li>${h.link_to(_('diff'),h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='diff'))}</li>
23 <li>${h.link_to(_('raw diff'),h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='raw'))}</li>
24 <li>${h.link_to(_('download diff'),h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='download'))}</li>
25 <li>${c.ignorews_url(h.FID(filenode.changeset.raw_id,filenode.path))}</li>
26 <li>${c.context_url(h.FID(filenode.changeset.raw_id,filenode.path))}</li>
27 </ul>
28 </div>
29 </div>
30 <span style="float:right;margin-top:-3px">
31 <label>
32 ${_('show inline comments')}
33 ${h.checkbox('',checked="checked",class_="show-inline-comments",id_for=h.FID(filenode.changeset.raw_id,filenode.path))}
34 </label>
35 </span>
36 </div>
37 </div>
38 <div class="code-body">
39 <div class="full_f_path" path="${h.safe_unicode(filenode.path)}"></div>
40 %if diff:
41 ${diff|n}
42 %else:
43 ${_('No changes in this file')}
44 %endif
45 </div>
46 </div>
47 %endif
48 %endfor
49
50 </%def> No newline at end of file
@@ -1,407 +1,413 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.controllers.changeset
3 rhodecode.controllers.changeset
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
5
6 changeset controller for pylons showoing changes beetween
6 changeset controller for pylons showoing changes beetween
7 revisions
7 revisions
8
8
9 :created_on: Apr 25, 2010
9 :created_on: Apr 25, 2010
10 :author: marcink
10 :author: marcink
11 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
12 :license: GPLv3, see COPYING for more details.
12 :license: GPLv3, see COPYING for more details.
13 """
13 """
14 # This program is free software: you can redistribute it and/or modify
14 # This program is free software: you can redistribute it and/or modify
15 # it under the terms of the GNU General Public License as published by
15 # it under the terms of the GNU General Public License as published by
16 # the Free Software Foundation, either version 3 of the License, or
16 # the Free Software Foundation, either version 3 of the License, or
17 # (at your option) any later version.
17 # (at your option) any later version.
18 #
18 #
19 # This program is distributed in the hope that it will be useful,
19 # This program is distributed in the hope that it will be useful,
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 # GNU General Public License for more details.
22 # GNU General Public License for more details.
23 #
23 #
24 # You should have received a copy of the GNU General Public License
24 # You should have received a copy of the GNU General Public License
25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
26 import logging
26 import logging
27 import traceback
27 import traceback
28 from collections import defaultdict
28 from collections import defaultdict
29 from webob.exc import HTTPForbidden
29 from webob.exc import HTTPForbidden
30
30
31 from pylons import tmpl_context as c, url, request, response
31 from pylons import tmpl_context as c, url, request, response
32 from pylons.i18n.translation import _
32 from pylons.i18n.translation import _
33 from pylons.controllers.util import redirect
33 from pylons.controllers.util import redirect
34 from pylons.decorators import jsonify
34 from pylons.decorators import jsonify
35
35
36 from vcs.exceptions import RepositoryError, ChangesetError, \
36 from vcs.exceptions import RepositoryError, ChangesetError, \
37 ChangesetDoesNotExistError
37 ChangesetDoesNotExistError
38 from vcs.nodes import FileNode
38 from vcs.nodes import FileNode
39
39
40 import rhodecode.lib.helpers as h
40 import rhodecode.lib.helpers as h
41 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
41 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
42 from rhodecode.lib.base import BaseRepoController, render
42 from rhodecode.lib.base import BaseRepoController, render
43 from rhodecode.lib.utils import EmptyChangeset
43 from rhodecode.lib.utils import EmptyChangeset
44 from rhodecode.lib.compat import OrderedDict
44 from rhodecode.lib.compat import OrderedDict
45 from rhodecode.lib import diffs
45 from rhodecode.lib import diffs
46 from rhodecode.model.db import ChangesetComment
46 from rhodecode.model.db import ChangesetComment
47 from rhodecode.model.comment import ChangesetCommentsModel
47 from rhodecode.model.comment import ChangesetCommentsModel
48 from rhodecode.model.meta import Session
48 from rhodecode.model.meta import Session
49
49
50 log = logging.getLogger(__name__)
50 log = logging.getLogger(__name__)
51
51
52
52
53 def anchor_url(revision,path):
53 def anchor_url(revision, path):
54 fid = h.FID(revision, path)
54 fid = h.FID(revision, path)
55 return h.url.current(anchor=fid,**request.GET)
55 return h.url.current(anchor=fid, **request.GET)
56
56
57
57 def get_ignore_ws(fid, GET):
58 def get_ignore_ws(fid, GET):
58 ig_ws_global = request.GET.get('ignorews')
59 ig_ws_global = request.GET.get('ignorews')
59 ig_ws = filter(lambda k:k.startswith('WS'),GET.getall(fid))
60 ig_ws = filter(lambda k: k.startswith('WS'), GET.getall(fid))
60 if ig_ws:
61 if ig_ws:
61 try:
62 try:
62 return int(ig_ws[0].split(':')[-1])
63 return int(ig_ws[0].split(':')[-1])
63 except:
64 except:
64 pass
65 pass
65 return ig_ws_global
66 return ig_ws_global
66
67
68
67 def _ignorews_url(fileid=None):
69 def _ignorews_url(fileid=None):
68
70
69 params = defaultdict(list)
71 params = defaultdict(list)
70 lbl = _('show white space')
72 lbl = _('show white space')
71 ig_ws = get_ignore_ws(fileid, request.GET)
73 ig_ws = get_ignore_ws(fileid, request.GET)
72 ln_ctx = get_line_ctx(fileid, request.GET)
74 ln_ctx = get_line_ctx(fileid, request.GET)
73 # global option
75 # global option
74 if fileid is None:
76 if fileid is None:
75 if ig_ws is None:
77 if ig_ws is None:
76 params['ignorews'] += [1]
78 params['ignorews'] += [1]
77 lbl = _('ignore white space')
79 lbl = _('ignore white space')
78 ctx_key = 'context'
80 ctx_key = 'context'
79 ctx_val = ln_ctx
81 ctx_val = ln_ctx
80 # per file options
82 # per file options
81 else:
83 else:
82 if ig_ws is None:
84 if ig_ws is None:
83 params[fileid] += ['WS:1']
85 params[fileid] += ['WS:1']
84 lbl = _('ignore white space')
86 lbl = _('ignore white space')
85
87
86 ctx_key = fileid
88 ctx_key = fileid
87 ctx_val = 'C:%s' % ln_ctx
89 ctx_val = 'C:%s' % ln_ctx
88 # if we have passed in ln_ctx pass it along to our params
90 # if we have passed in ln_ctx pass it along to our params
89 if ln_ctx:
91 if ln_ctx:
90 params[ctx_key] += [ctx_val]
92 params[ctx_key] += [ctx_val]
91
93
92 params['anchor'] = fileid
94 params['anchor'] = fileid
93 return h.link_to(lbl, h.url.current(**params))
95 return h.link_to(lbl, h.url.current(**params))
94
96
97
95 def get_line_ctx(fid, GET):
98 def get_line_ctx(fid, GET):
96 ln_ctx_global = request.GET.get('context')
99 ln_ctx_global = request.GET.get('context')
97 ln_ctx = filter(lambda k:k.startswith('C'),GET.getall(fid))
100 ln_ctx = filter(lambda k: k.startswith('C'), GET.getall(fid))
98
101
99 if ln_ctx:
102 if ln_ctx:
100 retval = ln_ctx[0].split(':')[-1]
103 retval = ln_ctx[0].split(':')[-1]
101 else:
104 else:
102 retval = ln_ctx_global
105 retval = ln_ctx_global
103
106
104 try:
107 try:
105 return int(retval)
108 return int(retval)
106 except:
109 except:
107 return
110 return
108
111
112
109 def _context_url(fileid=None):
113 def _context_url(fileid=None):
110 """
114 """
111 Generates url for context lines
115 Generates url for context lines
112
116
113 :param fileid:
117 :param fileid:
114 """
118 """
115 ig_ws = get_ignore_ws(fileid, request.GET)
119 ig_ws = get_ignore_ws(fileid, request.GET)
116 ln_ctx = (get_line_ctx(fileid, request.GET) or 3) * 2
120 ln_ctx = (get_line_ctx(fileid, request.GET) or 3) * 2
117
121
118 params = defaultdict(list)
122 params = defaultdict(list)
119
123
120 # global option
124 # global option
121 if fileid is None:
125 if fileid is None:
122 if ln_ctx > 0:
126 if ln_ctx > 0:
123 params['context'] += [ln_ctx]
127 params['context'] += [ln_ctx]
124
128
125 if ig_ws:
129 if ig_ws:
126 ig_ws_key = 'ignorews'
130 ig_ws_key = 'ignorews'
127 ig_ws_val = 1
131 ig_ws_val = 1
128
132
129 # per file option
133 # per file option
130 else:
134 else:
131 params[fileid] += ['C:%s' % ln_ctx]
135 params[fileid] += ['C:%s' % ln_ctx]
132 ig_ws_key = fileid
136 ig_ws_key = fileid
133 ig_ws_val = 'WS:%s' % 1
137 ig_ws_val = 'WS:%s' % 1
134
138
135 if ig_ws:
139 if ig_ws:
136 params[ig_ws_key] += [ig_ws_val]
140 params[ig_ws_key] += [ig_ws_val]
137
141
138 lbl = _('%s line context') % ln_ctx
142 lbl = _('%s line context') % ln_ctx
139
143
140 params['anchor'] = fileid
144 params['anchor'] = fileid
141 return h.link_to(lbl, h.url.current(**params))
145 return h.link_to(lbl, h.url.current(**params))
142
146
147
143 def wrap_to_table(str_):
148 def wrap_to_table(str_):
144 return '''<table class="code-difftable">
149 return '''<table class="code-difftable">
145 <tr class="line">
150 <tr class="line no-comment">
146 <td class="lineno new"></td>
151 <td class="lineno new"></td>
147 <td class="code"><pre>%s</pre></td>
152 <td class="code no-comment"><pre>%s</pre></td>
148 </tr>
153 </tr>
149 </table>''' % str_
154 </table>''' % str_
150
155
156
151 class ChangesetController(BaseRepoController):
157 class ChangesetController(BaseRepoController):
152
158
153 @LoginRequired()
159 @LoginRequired()
154 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
160 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
155 'repository.admin')
161 'repository.admin')
156 def __before__(self):
162 def __before__(self):
157 super(ChangesetController, self).__before__()
163 super(ChangesetController, self).__before__()
158 c.affected_files_cut_off = 60
164 c.affected_files_cut_off = 60
159
165
160 def index(self, revision):
166 def index(self, revision):
161
167
162 c.anchor_url = anchor_url
168 c.anchor_url = anchor_url
163 c.ignorews_url = _ignorews_url
169 c.ignorews_url = _ignorews_url
164 c.context_url = _context_url
170 c.context_url = _context_url
165
171
166 #get ranges of revisions if preset
172 #get ranges of revisions if preset
167 rev_range = revision.split('...')[:2]
173 rev_range = revision.split('...')[:2]
168
174 enable_comments = True
169 try:
175 try:
170 if len(rev_range) == 2:
176 if len(rev_range) == 2:
177 enable_comments = False
171 rev_start = rev_range[0]
178 rev_start = rev_range[0]
172 rev_end = rev_range[1]
179 rev_end = rev_range[1]
173 rev_ranges = c.rhodecode_repo.get_changesets(start=rev_start,
180 rev_ranges = c.rhodecode_repo.get_changesets(start=rev_start,
174 end=rev_end)
181 end=rev_end)
175 else:
182 else:
176 rev_ranges = [c.rhodecode_repo.get_changeset(revision)]
183 rev_ranges = [c.rhodecode_repo.get_changeset(revision)]
177
184
178 c.cs_ranges = list(rev_ranges)
185 c.cs_ranges = list(rev_ranges)
179 if not c.cs_ranges:
186 if not c.cs_ranges:
180 raise RepositoryError('Changeset range returned empty result')
187 raise RepositoryError('Changeset range returned empty result')
181
188
182 except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
189 except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
183 log.error(traceback.format_exc())
190 log.error(traceback.format_exc())
184 h.flash(str(e), category='warning')
191 h.flash(str(e), category='warning')
185 return redirect(url('home'))
192 return redirect(url('home'))
186
193
187 c.changes = OrderedDict()
194 c.changes = OrderedDict()
188 c.sum_added = 0
195 c.sum_added = 0
189 c.sum_removed = 0
196 c.sum_removed = 0
190 c.lines_added = 0
197 c.lines_added = 0
191 c.lines_deleted = 0
198 c.lines_deleted = 0
192 c.cut_off = False # defines if cut off limit is reached
199 c.cut_off = False # defines if cut off limit is reached
193
200
194 c.comments = []
201 c.comments = []
195 c.inline_comments = []
202 c.inline_comments = []
196 c.inline_cnt = 0
203 c.inline_cnt = 0
197 # Iterate over ranges (default changeset view is always one changeset)
204 # Iterate over ranges (default changeset view is always one changeset)
198 for changeset in c.cs_ranges:
205 for changeset in c.cs_ranges:
199 c.comments.extend(ChangesetCommentsModel()\
206 c.comments.extend(ChangesetCommentsModel()\
200 .get_comments(c.rhodecode_db_repo.repo_id,
207 .get_comments(c.rhodecode_db_repo.repo_id,
201 changeset.raw_id))
208 changeset.raw_id))
202 inlines = ChangesetCommentsModel()\
209 inlines = ChangesetCommentsModel()\
203 .get_inline_comments(c.rhodecode_db_repo.repo_id,
210 .get_inline_comments(c.rhodecode_db_repo.repo_id,
204 changeset.raw_id)
211 changeset.raw_id)
205 c.inline_comments.extend(inlines)
212 c.inline_comments.extend(inlines)
206 c.changes[changeset.raw_id] = []
213 c.changes[changeset.raw_id] = []
207 try:
214 try:
208 changeset_parent = changeset.parents[0]
215 changeset_parent = changeset.parents[0]
209 except IndexError:
216 except IndexError:
210 changeset_parent = None
217 changeset_parent = None
211
218
212 #==================================================================
219 #==================================================================
213 # ADDED FILES
220 # ADDED FILES
214 #==================================================================
221 #==================================================================
215 for node in changeset.added:
222 for node in changeset.added:
216
223
217 filenode_old = FileNode(node.path, '', EmptyChangeset())
224 filenode_old = FileNode(node.path, '', EmptyChangeset())
218 if filenode_old.is_binary or node.is_binary:
225 if filenode_old.is_binary or node.is_binary:
219 diff = wrap_to_table(_('binary file'))
226 diff = wrap_to_table(_('binary file'))
220 st = (0, 0)
227 st = (0, 0)
221 else:
228 else:
222 # in this case node.size is good parameter since those are
229 # in this case node.size is good parameter since those are
223 # added nodes and their size defines how many changes were
230 # added nodes and their size defines how many changes were
224 # made
231 # made
225 c.sum_added += node.size
232 c.sum_added += node.size
226 fid = h.FID(revision, node.path)
233 fid = h.FID(revision, node.path)
227 line_context_lcl = get_line_ctx(fid, request.GET)
234 line_context_lcl = get_line_ctx(fid, request.GET)
228 ignore_whitespace_lcl = get_ignore_ws(fid, request.GET)
235 ignore_whitespace_lcl = get_ignore_ws(fid, request.GET)
229 if c.sum_added < self.cut_off_limit:
236 if c.sum_added < self.cut_off_limit:
230 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
237 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
231 ignore_whitespace=ignore_whitespace_lcl,
238 ignore_whitespace=ignore_whitespace_lcl,
232 context=line_context_lcl)
239 context=line_context_lcl)
233 d = diffs.DiffProcessor(f_gitdiff, format='gitdiff')
240 d = diffs.DiffProcessor(f_gitdiff, format='gitdiff')
234
241
235 st = d.stat()
242 st = d.stat()
236 diff = d.as_html()
243 diff = d.as_html(enable_comments=enable_comments)
237
244
238 else:
245 else:
239 diff = wrap_to_table(_('Changeset is to big and '
246 diff = wrap_to_table(_('Changeset is to big and '
240 'was cut off, see raw '
247 'was cut off, see raw '
241 'changeset instead'))
248 'changeset instead'))
242 c.cut_off = True
249 c.cut_off = True
243 break
250 break
244
251
245 cs1 = None
252 cs1 = None
246 cs2 = node.last_changeset.raw_id
253 cs2 = node.last_changeset.raw_id
247 c.lines_added += st[0]
254 c.lines_added += st[0]
248 c.lines_deleted += st[1]
255 c.lines_deleted += st[1]
249 c.changes[changeset.raw_id].append(('added', node, diff,
256 c.changes[changeset.raw_id].append(('added', node, diff,
250 cs1, cs2, st))
257 cs1, cs2, st))
251
258
252 #==================================================================
259 #==================================================================
253 # CHANGED FILES
260 # CHANGED FILES
254 #==================================================================
261 #==================================================================
255 if not c.cut_off:
262 if not c.cut_off:
256 for node in changeset.changed:
263 for node in changeset.changed:
257 try:
264 try:
258 filenode_old = changeset_parent.get_node(node.path)
265 filenode_old = changeset_parent.get_node(node.path)
259 except ChangesetError:
266 except ChangesetError:
260 log.warning('Unable to fetch parent node for diff')
267 log.warning('Unable to fetch parent node for diff')
261 filenode_old = FileNode(node.path, '',
268 filenode_old = FileNode(node.path, '',
262 EmptyChangeset())
269 EmptyChangeset())
263
270
264 if filenode_old.is_binary or node.is_binary:
271 if filenode_old.is_binary or node.is_binary:
265 diff = wrap_to_table(_('binary file'))
272 diff = wrap_to_table(_('binary file'))
266 st = (0, 0)
273 st = (0, 0)
267 else:
274 else:
268
275
269 if c.sum_removed < self.cut_off_limit:
276 if c.sum_removed < self.cut_off_limit:
270 fid = h.FID(revision, node.path)
277 fid = h.FID(revision, node.path)
271 line_context_lcl = get_line_ctx(fid, request.GET)
278 line_context_lcl = get_line_ctx(fid, request.GET)
272 ignore_whitespace_lcl = get_ignore_ws(fid, request.GET,)
279 ignore_whitespace_lcl = get_ignore_ws(fid, request.GET,)
273 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
280 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
274 ignore_whitespace=ignore_whitespace_lcl,
281 ignore_whitespace=ignore_whitespace_lcl,
275 context=line_context_lcl)
282 context=line_context_lcl)
276 d = diffs.DiffProcessor(f_gitdiff,
283 d = diffs.DiffProcessor(f_gitdiff,
277 format='gitdiff')
284 format='gitdiff')
278 st = d.stat()
285 st = d.stat()
279 if (st[0] + st[1]) * 256 > self.cut_off_limit:
286 if (st[0] + st[1]) * 256 > self.cut_off_limit:
280 diff = wrap_to_table(_('Diff is to big '
287 diff = wrap_to_table(_('Diff is to big '
281 'and was cut off, see '
288 'and was cut off, see '
282 'raw diff instead'))
289 'raw diff instead'))
283 else:
290 else:
284 diff = d.as_html()
291 diff = d.as_html(enable_comments=enable_comments)
285
292
286 if diff:
293 if diff:
287 c.sum_removed += len(diff)
294 c.sum_removed += len(diff)
288 else:
295 else:
289 diff = wrap_to_table(_('Changeset is to big and '
296 diff = wrap_to_table(_('Changeset is to big and '
290 'was cut off, see raw '
297 'was cut off, see raw '
291 'changeset instead'))
298 'changeset instead'))
292 c.cut_off = True
299 c.cut_off = True
293 break
300 break
294
301
295 cs1 = filenode_old.last_changeset.raw_id
302 cs1 = filenode_old.last_changeset.raw_id
296 cs2 = node.last_changeset.raw_id
303 cs2 = node.last_changeset.raw_id
297 c.lines_added += st[0]
304 c.lines_added += st[0]
298 c.lines_deleted += st[1]
305 c.lines_deleted += st[1]
299 c.changes[changeset.raw_id].append(('changed', node, diff,
306 c.changes[changeset.raw_id].append(('changed', node, diff,
300 cs1, cs2, st))
307 cs1, cs2, st))
301
308
302 #==================================================================
309 #==================================================================
303 # REMOVED FILES
310 # REMOVED FILES
304 #==================================================================
311 #==================================================================
305 if not c.cut_off:
312 if not c.cut_off:
306 for node in changeset.removed:
313 for node in changeset.removed:
307 c.changes[changeset.raw_id].append(('removed', node, None,
314 c.changes[changeset.raw_id].append(('removed', node, None,
308 None, None, (0, 0)))
315 None, None, (0, 0)))
309
316
310 # count inline comments
317 # count inline comments
311 for path, lines in c.inline_comments:
318 for path, lines in c.inline_comments:
312 for comments in lines.values():
319 for comments in lines.values():
313 c.inline_cnt += len(comments)
320 c.inline_cnt += len(comments)
314
321
315 if len(c.cs_ranges) == 1:
322 if len(c.cs_ranges) == 1:
316 c.changeset = c.cs_ranges[0]
323 c.changeset = c.cs_ranges[0]
317 c.changes = c.changes[c.changeset.raw_id]
324 c.changes = c.changes[c.changeset.raw_id]
318
325
319 return render('changeset/changeset.html')
326 return render('changeset/changeset.html')
320 else:
327 else:
321 return render('changeset/changeset_range.html')
328 return render('changeset/changeset_range.html')
322
329
323 def raw_changeset(self, revision):
330 def raw_changeset(self, revision):
324
331
325 method = request.GET.get('diff', 'show')
332 method = request.GET.get('diff', 'show')
326 ignore_whitespace = request.GET.get('ignorews') == '1'
333 ignore_whitespace = request.GET.get('ignorews') == '1'
327 line_context = request.GET.get('context', 3)
334 line_context = request.GET.get('context', 3)
328 try:
335 try:
329 c.scm_type = c.rhodecode_repo.alias
336 c.scm_type = c.rhodecode_repo.alias
330 c.changeset = c.rhodecode_repo.get_changeset(revision)
337 c.changeset = c.rhodecode_repo.get_changeset(revision)
331 except RepositoryError:
338 except RepositoryError:
332 log.error(traceback.format_exc())
339 log.error(traceback.format_exc())
333 return redirect(url('home'))
340 return redirect(url('home'))
334 else:
341 else:
335 try:
342 try:
336 c.changeset_parent = c.changeset.parents[0]
343 c.changeset_parent = c.changeset.parents[0]
337 except IndexError:
344 except IndexError:
338 c.changeset_parent = None
345 c.changeset_parent = None
339 c.changes = []
346 c.changes = []
340
347
341 for node in c.changeset.added:
348 for node in c.changeset.added:
342 filenode_old = FileNode(node.path, '')
349 filenode_old = FileNode(node.path, '')
343 if filenode_old.is_binary or node.is_binary:
350 if filenode_old.is_binary or node.is_binary:
344 diff = _('binary file') + '\n'
351 diff = _('binary file') + '\n'
345 else:
352 else:
346 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
353 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
347 ignore_whitespace=ignore_whitespace,
354 ignore_whitespace=ignore_whitespace,
348 context=line_context)
355 context=line_context)
349 diff = diffs.DiffProcessor(f_gitdiff,
356 diff = diffs.DiffProcessor(f_gitdiff,
350 format='gitdiff').raw_diff()
357 format='gitdiff').raw_diff()
351
358
352 cs1 = None
359 cs1 = None
353 cs2 = node.last_changeset.raw_id
360 cs2 = node.last_changeset.raw_id
354 c.changes.append(('added', node, diff, cs1, cs2))
361 c.changes.append(('added', node, diff, cs1, cs2))
355
362
356 for node in c.changeset.changed:
363 for node in c.changeset.changed:
357 filenode_old = c.changeset_parent.get_node(node.path)
364 filenode_old = c.changeset_parent.get_node(node.path)
358 if filenode_old.is_binary or node.is_binary:
365 if filenode_old.is_binary or node.is_binary:
359 diff = _('binary file')
366 diff = _('binary file')
360 else:
367 else:
361 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
368 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
362 ignore_whitespace=ignore_whitespace,
369 ignore_whitespace=ignore_whitespace,
363 context=line_context)
370 context=line_context)
364 diff = diffs.DiffProcessor(f_gitdiff,
371 diff = diffs.DiffProcessor(f_gitdiff,
365 format='gitdiff').raw_diff()
372 format='gitdiff').raw_diff()
366
373
367 cs1 = filenode_old.last_changeset.raw_id
374 cs1 = filenode_old.last_changeset.raw_id
368 cs2 = node.last_changeset.raw_id
375 cs2 = node.last_changeset.raw_id
369 c.changes.append(('changed', node, diff, cs1, cs2))
376 c.changes.append(('changed', node, diff, cs1, cs2))
370
377
371 response.content_type = 'text/plain'
378 response.content_type = 'text/plain'
372
379
373 if method == 'download':
380 if method == 'download':
374 response.content_disposition = 'attachment; filename=%s.patch' \
381 response.content_disposition = 'attachment; filename=%s.patch' \
375 % revision
382 % revision
376
383
377 c.parent_tmpl = ''.join(['# Parent %s\n' % x.raw_id for x in
384 c.parent_tmpl = ''.join(['# Parent %s\n' % x.raw_id for x in
378 c.changeset.parents])
385 c.changeset.parents])
379
386
380 c.diffs = ''
387 c.diffs = ''
381 for x in c.changes:
388 for x in c.changes:
382 c.diffs += x[2]
389 c.diffs += x[2]
383
390
384 return render('changeset/raw_changeset.html')
391 return render('changeset/raw_changeset.html')
385
392
386 def comment(self, repo_name, revision):
393 def comment(self, repo_name, revision):
387 ChangesetCommentsModel().create(text=request.POST.get('text'),
394 ChangesetCommentsModel().create(text=request.POST.get('text'),
388 repo_id=c.rhodecode_db_repo.repo_id,
395 repo_id=c.rhodecode_db_repo.repo_id,
389 user_id=c.rhodecode_user.user_id,
396 user_id=c.rhodecode_user.user_id,
390 revision=revision,
397 revision=revision,
391 f_path=request.POST.get('f_path'),
398 f_path=request.POST.get('f_path'),
392 line_no=request.POST.get('line'))
399 line_no=request.POST.get('line'))
393 Session.commit()
400 Session.commit()
394 return redirect(h.url('changeset_home', repo_name=repo_name,
401 return redirect(h.url('changeset_home', repo_name=repo_name,
395 revision=revision))
402 revision=revision))
396
403
397 @jsonify
404 @jsonify
398 def delete_comment(self, repo_name, comment_id):
405 def delete_comment(self, repo_name, comment_id):
399 co = ChangesetComment.get(comment_id)
406 co = ChangesetComment.get(comment_id)
400 owner = lambda : co.author.user_id == c.rhodecode_user.user_id
407 owner = lambda: co.author.user_id == c.rhodecode_user.user_id
401 if h.HasPermissionAny('hg.admin', 'repository.admin')() or owner:
408 if h.HasPermissionAny('hg.admin', 'repository.admin')() or owner:
402 ChangesetCommentsModel().delete(comment=co)
409 ChangesetCommentsModel().delete(comment=co)
403 Session.commit()
410 Session.commit()
404 return True
411 return True
405 else:
412 else:
406 raise HTTPForbidden()
413 raise HTTPForbidden()
407
@@ -1,447 +1,451 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.lib.diffs
3 rhodecode.lib.diffs
4 ~~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~~
5
5
6 Set of diffing helpers, previously part of vcs
6 Set of diffing helpers, previously part of vcs
7
7
8
8
9 :created_on: Dec 4, 2011
9 :created_on: Dec 4, 2011
10 :author: marcink
10 :author: marcink
11 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
12 :original copyright: 2007-2008 by Armin Ronacher
12 :original copyright: 2007-2008 by Armin Ronacher
13 :license: GPLv3, see COPYING for more details.
13 :license: GPLv3, see COPYING for more details.
14 """
14 """
15 # This program is free software: you can redistribute it and/or modify
15 # This program is free software: you can redistribute it and/or modify
16 # it under the terms of the GNU General Public License as published by
16 # it under the terms of the GNU General Public License as published by
17 # the Free Software Foundation, either version 3 of the License, or
17 # the Free Software Foundation, either version 3 of the License, or
18 # (at your option) any later version.
18 # (at your option) any later version.
19 #
19 #
20 # This program is distributed in the hope that it will be useful,
20 # This program is distributed in the hope that it will be useful,
21 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # but WITHOUT ANY WARRANTY; without even the implied warranty of
22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 # GNU General Public License for more details.
23 # GNU General Public License for more details.
24 #
24 #
25 # You should have received a copy of the GNU General Public License
25 # You should have received a copy of the GNU General Public License
26 # along with this program. If not, see <http://www.gnu.org/licenses/>.
26 # along with this program. If not, see <http://www.gnu.org/licenses/>.
27
27
28 import re
28 import re
29 import difflib
29 import difflib
30
30
31 from itertools import tee, imap
31 from itertools import tee, imap
32
32
33 from vcs.exceptions import VCSError
33 from vcs.exceptions import VCSError
34 from vcs.nodes import FileNode
34 from vcs.nodes import FileNode
35 import markupsafe
35 import markupsafe
36
36
37
37
38 def get_gitdiff(filenode_old, filenode_new, ignore_whitespace=True, context=3):
38 def get_gitdiff(filenode_old, filenode_new, ignore_whitespace=True, context=3):
39 """
39 """
40 Returns git style diff between given ``filenode_old`` and ``filenode_new``.
40 Returns git style diff between given ``filenode_old`` and ``filenode_new``.
41
41
42 :param ignore_whitespace: ignore whitespaces in diff
42 :param ignore_whitespace: ignore whitespaces in diff
43 """
43 """
44
44
45 for filenode in (filenode_old, filenode_new):
45 for filenode in (filenode_old, filenode_new):
46 if not isinstance(filenode, FileNode):
46 if not isinstance(filenode, FileNode):
47 raise VCSError("Given object should be FileNode object, not %s"
47 raise VCSError("Given object should be FileNode object, not %s"
48 % filenode.__class__)
48 % filenode.__class__)
49
49
50 old_raw_id = getattr(filenode_old.changeset, 'raw_id', '0' * 40)
50 old_raw_id = getattr(filenode_old.changeset, 'raw_id', '0' * 40)
51 new_raw_id = getattr(filenode_new.changeset, 'raw_id', '0' * 40)
51 new_raw_id = getattr(filenode_new.changeset, 'raw_id', '0' * 40)
52
52
53 repo = filenode_new.changeset.repository
53 repo = filenode_new.changeset.repository
54 vcs_gitdiff = repo._get_diff(old_raw_id, new_raw_id, filenode_new.path,
54 vcs_gitdiff = repo._get_diff(old_raw_id, new_raw_id, filenode_new.path,
55 ignore_whitespace, context)
55 ignore_whitespace, context)
56
56
57 return vcs_gitdiff
57 return vcs_gitdiff
58
58
59
59
60 class DiffProcessor(object):
60 class DiffProcessor(object):
61 """
61 """
62 Give it a unified diff and it returns a list of the files that were
62 Give it a unified diff and it returns a list of the files that were
63 mentioned in the diff together with a dict of meta information that
63 mentioned in the diff together with a dict of meta information that
64 can be used to render it in a HTML template.
64 can be used to render it in a HTML template.
65 """
65 """
66 _chunk_re = re.compile(r'@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)')
66 _chunk_re = re.compile(r'@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)')
67
67
68 def __init__(self, diff, differ='diff', format='udiff'):
68 def __init__(self, diff, differ='diff', format='udiff'):
69 """
69 """
70 :param diff: a text in diff format or generator
70 :param diff: a text in diff format or generator
71 :param format: format of diff passed, `udiff` or `gitdiff`
71 :param format: format of diff passed, `udiff` or `gitdiff`
72 """
72 """
73 if isinstance(diff, basestring):
73 if isinstance(diff, basestring):
74 diff = [diff]
74 diff = [diff]
75
75
76 self.__udiff = diff
76 self.__udiff = diff
77 self.__format = format
77 self.__format = format
78 self.adds = 0
78 self.adds = 0
79 self.removes = 0
79 self.removes = 0
80
80
81 if isinstance(self.__udiff, basestring):
81 if isinstance(self.__udiff, basestring):
82 self.lines = iter(self.__udiff.splitlines(1))
82 self.lines = iter(self.__udiff.splitlines(1))
83
83
84 elif self.__format == 'gitdiff':
84 elif self.__format == 'gitdiff':
85 udiff_copy = self.copy_iterator()
85 udiff_copy = self.copy_iterator()
86 self.lines = imap(self.escaper, self._parse_gitdiff(udiff_copy))
86 self.lines = imap(self.escaper, self._parse_gitdiff(udiff_copy))
87 else:
87 else:
88 udiff_copy = self.copy_iterator()
88 udiff_copy = self.copy_iterator()
89 self.lines = imap(self.escaper, udiff_copy)
89 self.lines = imap(self.escaper, udiff_copy)
90
90
91 # Select a differ.
91 # Select a differ.
92 if differ == 'difflib':
92 if differ == 'difflib':
93 self.differ = self._highlight_line_difflib
93 self.differ = self._highlight_line_difflib
94 else:
94 else:
95 self.differ = self._highlight_line_udiff
95 self.differ = self._highlight_line_udiff
96
96
97 def escaper(self, string):
97 def escaper(self, string):
98 return markupsafe.escape(string)
98 return markupsafe.escape(string)
99
99
100 def copy_iterator(self):
100 def copy_iterator(self):
101 """
101 """
102 make a fresh copy of generator, we should not iterate thru
102 make a fresh copy of generator, we should not iterate thru
103 an original as it's needed for repeating operations on
103 an original as it's needed for repeating operations on
104 this instance of DiffProcessor
104 this instance of DiffProcessor
105 """
105 """
106 self.__udiff, iterator_copy = tee(self.__udiff)
106 self.__udiff, iterator_copy = tee(self.__udiff)
107 return iterator_copy
107 return iterator_copy
108
108
109 def _extract_rev(self, line1, line2):
109 def _extract_rev(self, line1, line2):
110 """
110 """
111 Extract the filename and revision hint from a line.
111 Extract the filename and revision hint from a line.
112 """
112 """
113
113
114 try:
114 try:
115 if line1.startswith('--- ') and line2.startswith('+++ '):
115 if line1.startswith('--- ') and line2.startswith('+++ '):
116 l1 = line1[4:].split(None, 1)
116 l1 = line1[4:].split(None, 1)
117 old_filename = l1[0].lstrip('a/') if len(l1) >= 1 else None
117 old_filename = (l1[0].replace('a/', '', 1)
118 if len(l1) >= 1 else None)
118 old_rev = l1[1] if len(l1) == 2 else 'old'
119 old_rev = l1[1] if len(l1) == 2 else 'old'
119
120
120 l2 = line2[4:].split(None, 1)
121 l2 = line2[4:].split(None, 1)
121 new_filename = l2[0].lstrip('b/') if len(l1) >= 1 else None
122 new_filename = (l2[0].replace('b/', '', 1)
123 if len(l1) >= 1 else None)
122 new_rev = l2[1] if len(l2) == 2 else 'new'
124 new_rev = l2[1] if len(l2) == 2 else 'new'
123
125
124 filename = old_filename if (old_filename !=
126 filename = (old_filename
125 'dev/null') else new_filename
127 if old_filename != '/dev/null' else new_filename)
126
128
127 return filename, new_rev, old_rev
129 return filename, new_rev, old_rev
128 except (ValueError, IndexError):
130 except (ValueError, IndexError):
129 pass
131 pass
130
132
131 return None, None, None
133 return None, None, None
132
134
133 def _parse_gitdiff(self, diffiterator):
135 def _parse_gitdiff(self, diffiterator):
134 def line_decoder(l):
136 def line_decoder(l):
135 if l.startswith('+') and not l.startswith('+++'):
137 if l.startswith('+') and not l.startswith('+++'):
136 self.adds += 1
138 self.adds += 1
137 elif l.startswith('-') and not l.startswith('---'):
139 elif l.startswith('-') and not l.startswith('---'):
138 self.removes += 1
140 self.removes += 1
139 return l.decode('utf8', 'replace')
141 return l.decode('utf8', 'replace')
140
142
141 output = list(diffiterator)
143 output = list(diffiterator)
142 size = len(output)
144 size = len(output)
143
145
144 if size == 2:
146 if size == 2:
145 l = []
147 l = []
146 l.extend([output[0]])
148 l.extend([output[0]])
147 l.extend(output[1].splitlines(1))
149 l.extend(output[1].splitlines(1))
148 return map(line_decoder, l)
150 return map(line_decoder, l)
149 elif size == 1:
151 elif size == 1:
150 return map(line_decoder, output[0].splitlines(1))
152 return map(line_decoder, output[0].splitlines(1))
151 elif size == 0:
153 elif size == 0:
152 return []
154 return []
153
155
154 raise Exception('wrong size of diff %s' % size)
156 raise Exception('wrong size of diff %s' % size)
155
157
156 def _highlight_line_difflib(self, line, next_):
158 def _highlight_line_difflib(self, line, next_):
157 """
159 """
158 Highlight inline changes in both lines.
160 Highlight inline changes in both lines.
159 """
161 """
160
162
161 if line['action'] == 'del':
163 if line['action'] == 'del':
162 old, new = line, next_
164 old, new = line, next_
163 else:
165 else:
164 old, new = next_, line
166 old, new = next_, line
165
167
166 oldwords = re.split(r'(\W)', old['line'])
168 oldwords = re.split(r'(\W)', old['line'])
167 newwords = re.split(r'(\W)', new['line'])
169 newwords = re.split(r'(\W)', new['line'])
168
170
169 sequence = difflib.SequenceMatcher(None, oldwords, newwords)
171 sequence = difflib.SequenceMatcher(None, oldwords, newwords)
170
172
171 oldfragments, newfragments = [], []
173 oldfragments, newfragments = [], []
172 for tag, i1, i2, j1, j2 in sequence.get_opcodes():
174 for tag, i1, i2, j1, j2 in sequence.get_opcodes():
173 oldfrag = ''.join(oldwords[i1:i2])
175 oldfrag = ''.join(oldwords[i1:i2])
174 newfrag = ''.join(newwords[j1:j2])
176 newfrag = ''.join(newwords[j1:j2])
175 if tag != 'equal':
177 if tag != 'equal':
176 if oldfrag:
178 if oldfrag:
177 oldfrag = '<del>%s</del>' % oldfrag
179 oldfrag = '<del>%s</del>' % oldfrag
178 if newfrag:
180 if newfrag:
179 newfrag = '<ins>%s</ins>' % newfrag
181 newfrag = '<ins>%s</ins>' % newfrag
180 oldfragments.append(oldfrag)
182 oldfragments.append(oldfrag)
181 newfragments.append(newfrag)
183 newfragments.append(newfrag)
182
184
183 old['line'] = "".join(oldfragments)
185 old['line'] = "".join(oldfragments)
184 new['line'] = "".join(newfragments)
186 new['line'] = "".join(newfragments)
185
187
186 def _highlight_line_udiff(self, line, next_):
188 def _highlight_line_udiff(self, line, next_):
187 """
189 """
188 Highlight inline changes in both lines.
190 Highlight inline changes in both lines.
189 """
191 """
190 start = 0
192 start = 0
191 limit = min(len(line['line']), len(next_['line']))
193 limit = min(len(line['line']), len(next_['line']))
192 while start < limit and line['line'][start] == next_['line'][start]:
194 while start < limit and line['line'][start] == next_['line'][start]:
193 start += 1
195 start += 1
194 end = -1
196 end = -1
195 limit -= start
197 limit -= start
196 while -end <= limit and line['line'][end] == next_['line'][end]:
198 while -end <= limit and line['line'][end] == next_['line'][end]:
197 end -= 1
199 end -= 1
198 end += 1
200 end += 1
199 if start or end:
201 if start or end:
200 def do(l):
202 def do(l):
201 last = end + len(l['line'])
203 last = end + len(l['line'])
202 if l['action'] == 'add':
204 if l['action'] == 'add':
203 tag = 'ins'
205 tag = 'ins'
204 else:
206 else:
205 tag = 'del'
207 tag = 'del'
206 l['line'] = '%s<%s>%s</%s>%s' % (
208 l['line'] = '%s<%s>%s</%s>%s' % (
207 l['line'][:start],
209 l['line'][:start],
208 tag,
210 tag,
209 l['line'][start:last],
211 l['line'][start:last],
210 tag,
212 tag,
211 l['line'][last:]
213 l['line'][last:]
212 )
214 )
213 do(line)
215 do(line)
214 do(next_)
216 do(next_)
215
217
216 def _parse_udiff(self):
218 def _parse_udiff(self):
217 """
219 """
218 Parse the diff an return data for the template.
220 Parse the diff an return data for the template.
219 """
221 """
220 lineiter = self.lines
222 lineiter = self.lines
221 files = []
223 files = []
222 try:
224 try:
223 line = lineiter.next()
225 line = lineiter.next()
224 # skip first context
226 # skip first context
225 skipfirst = True
227 skipfirst = True
226 while 1:
228 while 1:
227 # continue until we found the old file
229 # continue until we found the old file
228 if not line.startswith('--- '):
230 if not line.startswith('--- '):
229 line = lineiter.next()
231 line = lineiter.next()
230 continue
232 continue
231
233
232 chunks = []
234 chunks = []
233 filename, old_rev, new_rev = \
235 filename, old_rev, new_rev = \
234 self._extract_rev(line, lineiter.next())
236 self._extract_rev(line, lineiter.next())
235 files.append({
237 files.append({
236 'filename': filename,
238 'filename': filename,
237 'old_revision': old_rev,
239 'old_revision': old_rev,
238 'new_revision': new_rev,
240 'new_revision': new_rev,
239 'chunks': chunks
241 'chunks': chunks
240 })
242 })
241
243
242 line = lineiter.next()
244 line = lineiter.next()
243 while line:
245 while line:
244 match = self._chunk_re.match(line)
246 match = self._chunk_re.match(line)
245 if not match:
247 if not match:
246 break
248 break
247
249
248 lines = []
250 lines = []
249 chunks.append(lines)
251 chunks.append(lines)
250
252
251 old_line, old_end, new_line, new_end = \
253 old_line, old_end, new_line, new_end = \
252 [int(x or 1) for x in match.groups()[:-1]]
254 [int(x or 1) for x in match.groups()[:-1]]
253 old_line -= 1
255 old_line -= 1
254 new_line -= 1
256 new_line -= 1
255 context = len(match.groups()) == 5
257 context = len(match.groups()) == 5
256 old_end += old_line
258 old_end += old_line
257 new_end += new_line
259 new_end += new_line
258
260
259 if context:
261 if context:
260 if not skipfirst:
262 if not skipfirst:
261 lines.append({
263 lines.append({
262 'old_lineno': '...',
264 'old_lineno': '...',
263 'new_lineno': '...',
265 'new_lineno': '...',
264 'action': 'context',
266 'action': 'context',
265 'line': line,
267 'line': line,
266 })
268 })
267 else:
269 else:
268 skipfirst = False
270 skipfirst = False
269
271
270 line = lineiter.next()
272 line = lineiter.next()
271 while old_line < old_end or new_line < new_end:
273 while old_line < old_end or new_line < new_end:
272 if line:
274 if line:
273 command, line = line[0], line[1:]
275 command, line = line[0], line[1:]
274 else:
276 else:
275 command = ' '
277 command = ' '
276 affects_old = affects_new = False
278 affects_old = affects_new = False
277
279
278 # ignore those if we don't expect them
280 # ignore those if we don't expect them
279 if command in '#@':
281 if command in '#@':
280 continue
282 continue
281 elif command == '+':
283 elif command == '+':
282 affects_new = True
284 affects_new = True
283 action = 'add'
285 action = 'add'
284 elif command == '-':
286 elif command == '-':
285 affects_old = True
287 affects_old = True
286 action = 'del'
288 action = 'del'
287 else:
289 else:
288 affects_old = affects_new = True
290 affects_old = affects_new = True
289 action = 'unmod'
291 action = 'unmod'
290
292
291 old_line += affects_old
293 old_line += affects_old
292 new_line += affects_new
294 new_line += affects_new
293 lines.append({
295 lines.append({
294 'old_lineno': affects_old and old_line or '',
296 'old_lineno': affects_old and old_line or '',
295 'new_lineno': affects_new and new_line or '',
297 'new_lineno': affects_new and new_line or '',
296 'action': action,
298 'action': action,
297 'line': line
299 'line': line
298 })
300 })
299 line = lineiter.next()
301 line = lineiter.next()
300
302
301 except StopIteration:
303 except StopIteration:
302 pass
304 pass
303
305
304 # highlight inline changes
306 # highlight inline changes
305 for _ in files:
307 for _ in files:
306 for chunk in chunks:
308 for chunk in chunks:
307 lineiter = iter(chunk)
309 lineiter = iter(chunk)
308 #first = True
310 #first = True
309 try:
311 try:
310 while 1:
312 while 1:
311 line = lineiter.next()
313 line = lineiter.next()
312 if line['action'] != 'unmod':
314 if line['action'] != 'unmod':
313 nextline = lineiter.next()
315 nextline = lineiter.next()
314 if nextline['action'] == 'unmod' or \
316 if nextline['action'] == 'unmod' or \
315 nextline['action'] == line['action']:
317 nextline['action'] == line['action']:
316 continue
318 continue
317 self.differ(line, nextline)
319 self.differ(line, nextline)
318 except StopIteration:
320 except StopIteration:
319 pass
321 pass
320
322
321 return files
323 return files
322
324
323 def prepare(self):
325 def prepare(self):
324 """
326 """
325 Prepare the passed udiff for HTML rendering. It'l return a list
327 Prepare the passed udiff for HTML rendering. It'l return a list
326 of dicts
328 of dicts
327 """
329 """
328 return self._parse_udiff()
330 return self._parse_udiff()
329
331
330 def _safe_id(self, idstring):
332 def _safe_id(self, idstring):
331 """Make a string safe for including in an id attribute.
333 """Make a string safe for including in an id attribute.
332
334
333 The HTML spec says that id attributes 'must begin with
335 The HTML spec says that id attributes 'must begin with
334 a letter ([A-Za-z]) and may be followed by any number
336 a letter ([A-Za-z]) and may be followed by any number
335 of letters, digits ([0-9]), hyphens ("-"), underscores
337 of letters, digits ([0-9]), hyphens ("-"), underscores
336 ("_"), colons (":"), and periods (".")'. These regexps
338 ("_"), colons (":"), and periods (".")'. These regexps
337 are slightly over-zealous, in that they remove colons
339 are slightly over-zealous, in that they remove colons
338 and periods unnecessarily.
340 and periods unnecessarily.
339
341
340 Whitespace is transformed into underscores, and then
342 Whitespace is transformed into underscores, and then
341 anything which is not a hyphen or a character that
343 anything which is not a hyphen or a character that
342 matches \w (alphanumerics and underscore) is removed.
344 matches \w (alphanumerics and underscore) is removed.
343
345
344 """
346 """
345 # Transform all whitespace to underscore
347 # Transform all whitespace to underscore
346 idstring = re.sub(r'\s', "_", '%s' % idstring)
348 idstring = re.sub(r'\s', "_", '%s' % idstring)
347 # Remove everything that is not a hyphen or a member of \w
349 # Remove everything that is not a hyphen or a member of \w
348 idstring = re.sub(r'(?!-)\W', "", idstring).lower()
350 idstring = re.sub(r'(?!-)\W', "", idstring).lower()
349 return idstring
351 return idstring
350
352
351 def raw_diff(self):
353 def raw_diff(self):
352 """
354 """
353 Returns raw string as udiff
355 Returns raw string as udiff
354 """
356 """
355 udiff_copy = self.copy_iterator()
357 udiff_copy = self.copy_iterator()
356 if self.__format == 'gitdiff':
358 if self.__format == 'gitdiff':
357 udiff_copy = self._parse_gitdiff(udiff_copy)
359 udiff_copy = self._parse_gitdiff(udiff_copy)
358 return u''.join(udiff_copy)
360 return u''.join(udiff_copy)
359
361
360 def as_html(self, table_class='code-difftable', line_class='line',
362 def as_html(self, table_class='code-difftable', line_class='line',
361 new_lineno_class='lineno old', old_lineno_class='lineno new',
363 new_lineno_class='lineno old', old_lineno_class='lineno new',
362 code_class='code'):
364 code_class='code', enable_comments=False):
363 """
365 """
364 Return udiff as html table with customized css classes
366 Return udiff as html table with customized css classes
365 """
367 """
366 def _link_to_if(condition, label, url):
368 def _link_to_if(condition, label, url):
367 """
369 """
368 Generates a link if condition is meet or just the label if not.
370 Generates a link if condition is meet or just the label if not.
369 """
371 """
370
372
371 if condition:
373 if condition:
372 return '''<a href="%(url)s">%(label)s</a>''' % {'url': url,
374 return '''<a href="%(url)s">%(label)s</a>''' % {'url': url,
373 'label': label}
375 'label': label}
374 else:
376 else:
375 return label
377 return label
376 diff_lines = self.prepare()
378 diff_lines = self.prepare()
377 _html_empty = True
379 _html_empty = True
378 _html = []
380 _html = []
379 _html.append('''<table class="%(table_class)s">\n''' \
381 _html.append('''<table class="%(table_class)s">\n''' \
380 % {'table_class': table_class})
382 % {'table_class': table_class})
381 for diff in diff_lines:
383 for diff in diff_lines:
382 for line in diff['chunks']:
384 for line in diff['chunks']:
383 _html_empty = False
385 _html_empty = False
384 for change in line:
386 for change in line:
385 _html.append('''<tr class="%(line_class)s %(action)s">\n''' \
387 _html.append('''<tr class="%(line_class)s %(action)s">\n''' \
386 % {'line_class': line_class,
388 % {'line_class': line_class,
387 'action': change['action']})
389 'action': change['action']})
388 anchor_old_id = ''
390 anchor_old_id = ''
389 anchor_new_id = ''
391 anchor_new_id = ''
390 anchor_old = "%(filename)s_o%(oldline_no)s" % \
392 anchor_old = "%(filename)s_o%(oldline_no)s" % \
391 {'filename': self._safe_id(diff['filename']),
393 {'filename': self._safe_id(diff['filename']),
392 'oldline_no': change['old_lineno']}
394 'oldline_no': change['old_lineno']}
393 anchor_new = "%(filename)s_n%(oldline_no)s" % \
395 anchor_new = "%(filename)s_n%(oldline_no)s" % \
394 {'filename': self._safe_id(diff['filename']),
396 {'filename': self._safe_id(diff['filename']),
395 'oldline_no': change['new_lineno']}
397 'oldline_no': change['new_lineno']}
396 cond_old = change['old_lineno'] != '...' and \
398 cond_old = change['old_lineno'] != '...' and \
397 change['old_lineno']
399 change['old_lineno']
398 cond_new = change['new_lineno'] != '...' and \
400 cond_new = change['new_lineno'] != '...' and \
399 change['new_lineno']
401 change['new_lineno']
400 if cond_old:
402 if cond_old:
401 anchor_old_id = 'id="%s"' % anchor_old
403 anchor_old_id = 'id="%s"' % anchor_old
402 if cond_new:
404 if cond_new:
403 anchor_new_id = 'id="%s"' % anchor_new
405 anchor_new_id = 'id="%s"' % anchor_new
404 ###########################################################
406 ###########################################################
405 # OLD LINE NUMBER
407 # OLD LINE NUMBER
406 ###########################################################
408 ###########################################################
407 _html.append('''\t<td %(a_id)s class="%(old_lineno_cls)s">''' \
409 _html.append('''\t<td %(a_id)s class="%(old_lineno_cls)s">''' \
408 % {'a_id': anchor_old_id,
410 % {'a_id': anchor_old_id,
409 'old_lineno_cls': old_lineno_class})
411 'old_lineno_cls': old_lineno_class})
410
412
411 _html.append('''%(link)s''' \
413 _html.append('''%(link)s''' \
412 % {'link':
414 % {'link':
413 _link_to_if(cond_old, change['old_lineno'], '#%s' \
415 _link_to_if(cond_old, change['old_lineno'], '#%s' \
414 % anchor_old)})
416 % anchor_old)})
415 _html.append('''</td>\n''')
417 _html.append('''</td>\n''')
416 ###########################################################
418 ###########################################################
417 # NEW LINE NUMBER
419 # NEW LINE NUMBER
418 ###########################################################
420 ###########################################################
419
421
420 _html.append('''\t<td %(a_id)s class="%(new_lineno_cls)s">''' \
422 _html.append('''\t<td %(a_id)s class="%(new_lineno_cls)s">''' \
421 % {'a_id': anchor_new_id,
423 % {'a_id': anchor_new_id,
422 'new_lineno_cls': new_lineno_class})
424 'new_lineno_cls': new_lineno_class})
423
425
424 _html.append('''%(link)s''' \
426 _html.append('''%(link)s''' \
425 % {'link':
427 % {'link':
426 _link_to_if(cond_new, change['new_lineno'], '#%s' \
428 _link_to_if(cond_new, change['new_lineno'], '#%s' \
427 % anchor_new)})
429 % anchor_new)})
428 _html.append('''</td>\n''')
430 _html.append('''</td>\n''')
429 ###########################################################
431 ###########################################################
430 # CODE
432 # CODE
431 ###########################################################
433 ###########################################################
432 _html.append('''\t<td class="%(code_class)s">''' \
434 comments = '' if enable_comments else 'no-comment'
433 % {'code_class': code_class})
435 _html.append('''\t<td class="%(code_class)s %(in-comments)s">''' \
436 % {'code_class': code_class,
437 'in-comments': comments})
434 _html.append('''\n\t\t<pre>%(code)s</pre>\n''' \
438 _html.append('''\n\t\t<pre>%(code)s</pre>\n''' \
435 % {'code': change['line']})
439 % {'code': change['line']})
436 _html.append('''\t</td>''')
440 _html.append('''\t</td>''')
437 _html.append('''\n</tr>\n''')
441 _html.append('''\n</tr>\n''')
438 _html.append('''</table>''')
442 _html.append('''</table>''')
439 if _html_empty:
443 if _html_empty:
440 return None
444 return None
441 return ''.join(_html)
445 return ''.join(_html)
442
446
443 def stat(self):
447 def stat(self):
444 """
448 """
445 Returns tuple of added, and removed lines for this instance
449 Returns tuple of added, and removed lines for this instance
446 """
450 """
447 return self.adds, self.removes
451 return self.adds, self.removes
@@ -1,4072 +1,4080 b''
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td
2 {
2 {
3 border: 0;
3 border: 0;
4 outline: 0;
4 outline: 0;
5 font-size: 100%;
5 font-size: 100%;
6 vertical-align: baseline;
6 vertical-align: baseline;
7 background: transparent;
7 background: transparent;
8 margin: 0;
8 margin: 0;
9 padding: 0;
9 padding: 0;
10 }
10 }
11
11
12 body {
12 body {
13 line-height: 1;
13 line-height: 1;
14 height: 100%;
14 height: 100%;
15 background: url("../images/background.png") repeat scroll 0 0 #B0B0B0;
15 background: url("../images/background.png") repeat scroll 0 0 #B0B0B0;
16 font-family: Lucida Grande, Verdana, Lucida Sans Regular,
16 font-family: Lucida Grande, Verdana, Lucida Sans Regular,
17 Lucida Sans Unicode, Arial, sans-serif; font-size : 12px;
17 Lucida Sans Unicode, Arial, sans-serif; font-size : 12px;
18 color: #000;
18 color: #000;
19 margin: 0;
19 margin: 0;
20 padding: 0;
20 padding: 0;
21 font-size: 12px;
21 font-size: 12px;
22 }
22 }
23
23
24 ol,ul {
24 ol,ul {
25 list-style: none;
25 list-style: none;
26 }
26 }
27
27
28 blockquote,q {
28 blockquote,q {
29 quotes: none;
29 quotes: none;
30 }
30 }
31
31
32 blockquote:before,blockquote:after,q:before,q:after {
32 blockquote:before,blockquote:after,q:before,q:after {
33 content: none;
33 content: none;
34 }
34 }
35
35
36 :focus {
36 :focus {
37 outline: 0;
37 outline: 0;
38 }
38 }
39
39
40 del {
40 del {
41 text-decoration: line-through;
41 text-decoration: line-through;
42 }
42 }
43
43
44 table {
44 table {
45 border-collapse: collapse;
45 border-collapse: collapse;
46 border-spacing: 0;
46 border-spacing: 0;
47 }
47 }
48
48
49 html {
49 html {
50 height: 100%;
50 height: 100%;
51 }
51 }
52
52
53 a {
53 a {
54 color: #003367;
54 color: #003367;
55 text-decoration: none;
55 text-decoration: none;
56 cursor: pointer;
56 cursor: pointer;
57 }
57 }
58
58
59 a:hover {
59 a:hover {
60 color: #316293;
60 color: #316293;
61 text-decoration: underline;
61 text-decoration: underline;
62 }
62 }
63
63
64 h1,h2,h3,h4,h5,h6 {
64 h1,h2,h3,h4,h5,h6 {
65 color: #292929;
65 color: #292929;
66 font-weight: 700;
66 font-weight: 700;
67 }
67 }
68
68
69 h1 {
69 h1 {
70 font-size: 22px;
70 font-size: 22px;
71 }
71 }
72
72
73 h2 {
73 h2 {
74 font-size: 20px;
74 font-size: 20px;
75 }
75 }
76
76
77 h3 {
77 h3 {
78 font-size: 18px;
78 font-size: 18px;
79 }
79 }
80
80
81 h4 {
81 h4 {
82 font-size: 16px;
82 font-size: 16px;
83 }
83 }
84
84
85 h5 {
85 h5 {
86 font-size: 14px;
86 font-size: 14px;
87 }
87 }
88
88
89 h6 {
89 h6 {
90 font-size: 11px;
90 font-size: 11px;
91 }
91 }
92
92
93 ul.circle {
93 ul.circle {
94 list-style-type: circle;
94 list-style-type: circle;
95 }
95 }
96
96
97 ul.disc {
97 ul.disc {
98 list-style-type: disc;
98 list-style-type: disc;
99 }
99 }
100
100
101 ul.square {
101 ul.square {
102 list-style-type: square;
102 list-style-type: square;
103 }
103 }
104
104
105 ol.lower-roman {
105 ol.lower-roman {
106 list-style-type: lower-roman;
106 list-style-type: lower-roman;
107 }
107 }
108
108
109 ol.upper-roman {
109 ol.upper-roman {
110 list-style-type: upper-roman;
110 list-style-type: upper-roman;
111 }
111 }
112
112
113 ol.lower-alpha {
113 ol.lower-alpha {
114 list-style-type: lower-alpha;
114 list-style-type: lower-alpha;
115 }
115 }
116
116
117 ol.upper-alpha {
117 ol.upper-alpha {
118 list-style-type: upper-alpha;
118 list-style-type: upper-alpha;
119 }
119 }
120
120
121 ol.decimal {
121 ol.decimal {
122 list-style-type: decimal;
122 list-style-type: decimal;
123 }
123 }
124
124
125 div.color {
125 div.color {
126 clear: both;
126 clear: both;
127 overflow: hidden;
127 overflow: hidden;
128 position: absolute;
128 position: absolute;
129 background: #FFF;
129 background: #FFF;
130 margin: 7px 0 0 60px;
130 margin: 7px 0 0 60px;
131 padding: 1px 1px 1px 0;
131 padding: 1px 1px 1px 0;
132 }
132 }
133
133
134 div.color a {
134 div.color a {
135 width: 15px;
135 width: 15px;
136 height: 15px;
136 height: 15px;
137 display: block;
137 display: block;
138 float: left;
138 float: left;
139 margin: 0 0 0 1px;
139 margin: 0 0 0 1px;
140 padding: 0;
140 padding: 0;
141 }
141 }
142
142
143 div.options {
143 div.options {
144 clear: both;
144 clear: both;
145 overflow: hidden;
145 overflow: hidden;
146 position: absolute;
146 position: absolute;
147 background: #FFF;
147 background: #FFF;
148 margin: 7px 0 0 162px;
148 margin: 7px 0 0 162px;
149 padding: 0;
149 padding: 0;
150 }
150 }
151
151
152 div.options a {
152 div.options a {
153 height: 1%;
153 height: 1%;
154 display: block;
154 display: block;
155 text-decoration: none;
155 text-decoration: none;
156 margin: 0;
156 margin: 0;
157 padding: 3px 8px;
157 padding: 3px 8px;
158 }
158 }
159
159
160 .top-left-rounded-corner {
160 .top-left-rounded-corner {
161 -webkit-border-top-left-radius: 8px;
161 -webkit-border-top-left-radius: 8px;
162 -khtml-border-radius-topleft: 8px;
162 -khtml-border-radius-topleft: 8px;
163 -moz-border-radius-topleft: 8px;
163 -moz-border-radius-topleft: 8px;
164 border-top-left-radius: 8px;
164 border-top-left-radius: 8px;
165 }
165 }
166
166
167 .top-right-rounded-corner {
167 .top-right-rounded-corner {
168 -webkit-border-top-right-radius: 8px;
168 -webkit-border-top-right-radius: 8px;
169 -khtml-border-radius-topright: 8px;
169 -khtml-border-radius-topright: 8px;
170 -moz-border-radius-topright: 8px;
170 -moz-border-radius-topright: 8px;
171 border-top-right-radius: 8px;
171 border-top-right-radius: 8px;
172 }
172 }
173
173
174 .bottom-left-rounded-corner {
174 .bottom-left-rounded-corner {
175 -webkit-border-bottom-left-radius: 8px;
175 -webkit-border-bottom-left-radius: 8px;
176 -khtml-border-radius-bottomleft: 8px;
176 -khtml-border-radius-bottomleft: 8px;
177 -moz-border-radius-bottomleft: 8px;
177 -moz-border-radius-bottomleft: 8px;
178 border-bottom-left-radius: 8px;
178 border-bottom-left-radius: 8px;
179 }
179 }
180
180
181 .bottom-right-rounded-corner {
181 .bottom-right-rounded-corner {
182 -webkit-border-bottom-right-radius: 8px;
182 -webkit-border-bottom-right-radius: 8px;
183 -khtml-border-radius-bottomright: 8px;
183 -khtml-border-radius-bottomright: 8px;
184 -moz-border-radius-bottomright: 8px;
184 -moz-border-radius-bottomright: 8px;
185 border-bottom-right-radius: 8px;
185 border-bottom-right-radius: 8px;
186 }
186 }
187
187
188 #header {
188 #header {
189 margin: 0;
189 margin: 0;
190 padding: 0 10px;
190 padding: 0 10px;
191 }
191 }
192
192
193 #header ul#logged-user {
193 #header ul#logged-user {
194 margin-bottom: 5px !important;
194 margin-bottom: 5px !important;
195 -webkit-border-radius: 0px 0px 8px 8px;
195 -webkit-border-radius: 0px 0px 8px 8px;
196 -khtml-border-radius: 0px 0px 8px 8px;
196 -khtml-border-radius: 0px 0px 8px 8px;
197 -moz-border-radius: 0px 0px 8px 8px;
197 -moz-border-radius: 0px 0px 8px 8px;
198 border-radius: 0px 0px 8px 8px;
198 border-radius: 0px 0px 8px 8px;
199 height: 37px;
199 height: 37px;
200 background-color: #eedc94;
200 background-color: #eedc94;
201 background-repeat: repeat-x;
201 background-repeat: repeat-x;
202 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
202 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
203 to(#eedc94) );
203 to(#eedc94) );
204 background-image: -moz-linear-gradient(top, #003b76, #00376e);
204 background-image: -moz-linear-gradient(top, #003b76, #00376e);
205 background-image: -ms-linear-gradient(top, #003b76, #00376e);
205 background-image: -ms-linear-gradient(top, #003b76, #00376e);
206 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
206 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
207 color-stop(100%, #00376e) );
207 color-stop(100%, #00376e) );
208 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
208 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
209 background-image: -o-linear-gradient(top, #003b76, #00376e) );
209 background-image: -o-linear-gradient(top, #003b76, #00376e) );
210 background-image: linear-gradient(top, #003b76, #00376e);
210 background-image: linear-gradient(top, #003b76, #00376e);
211 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
211 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
212 endColorstr='#00376e', GradientType=0 );
212 endColorstr='#00376e', GradientType=0 );
213 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
213 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
214 }
214 }
215
215
216 #header ul#logged-user li {
216 #header ul#logged-user li {
217 list-style: none;
217 list-style: none;
218 float: left;
218 float: left;
219 margin: 8px 0 0;
219 margin: 8px 0 0;
220 padding: 4px 12px;
220 padding: 4px 12px;
221 border-left: 1px solid #316293;
221 border-left: 1px solid #316293;
222 }
222 }
223
223
224 #header ul#logged-user li.first {
224 #header ul#logged-user li.first {
225 border-left: none;
225 border-left: none;
226 margin: 4px;
226 margin: 4px;
227 }
227 }
228
228
229 #header ul#logged-user li.first div.gravatar {
229 #header ul#logged-user li.first div.gravatar {
230 margin-top: -2px;
230 margin-top: -2px;
231 }
231 }
232
232
233 #header ul#logged-user li.first div.account {
233 #header ul#logged-user li.first div.account {
234 padding-top: 4px;
234 padding-top: 4px;
235 float: left;
235 float: left;
236 }
236 }
237
237
238 #header ul#logged-user li.last {
238 #header ul#logged-user li.last {
239 border-right: none;
239 border-right: none;
240 }
240 }
241
241
242 #header ul#logged-user li a {
242 #header ul#logged-user li a {
243 color: #fff;
243 color: #fff;
244 font-weight: 700;
244 font-weight: 700;
245 text-decoration: none;
245 text-decoration: none;
246 }
246 }
247
247
248 #header ul#logged-user li a:hover {
248 #header ul#logged-user li a:hover {
249 text-decoration: underline;
249 text-decoration: underline;
250 }
250 }
251
251
252 #header ul#logged-user li.highlight a {
252 #header ul#logged-user li.highlight a {
253 color: #fff;
253 color: #fff;
254 }
254 }
255
255
256 #header ul#logged-user li.highlight a:hover {
256 #header ul#logged-user li.highlight a:hover {
257 color: #FFF;
257 color: #FFF;
258 }
258 }
259
259
260 #header #header-inner {
260 #header #header-inner {
261 min-height: 40px;
261 min-height: 40px;
262 clear: both;
262 clear: both;
263 position: relative;
263 position: relative;
264 background-color: #eedc94;
264 background-color: #eedc94;
265 background-repeat: repeat-x;
265 background-repeat: repeat-x;
266 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
266 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
267 to(#eedc94) );
267 to(#eedc94) );
268 background-image: -moz-linear-gradient(top, #003b76, #00376e);
268 background-image: -moz-linear-gradient(top, #003b76, #00376e);
269 background-image: -ms-linear-gradient(top, #003b76, #00376e);
269 background-image: -ms-linear-gradient(top, #003b76, #00376e);
270 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
270 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
271 color-stop(100%, #00376e) );
271 color-stop(100%, #00376e) );
272 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
272 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
273 background-image: -o-linear-gradient(top, #003b76, #00376e) );
273 background-image: -o-linear-gradient(top, #003b76, #00376e) );
274 background-image: linear-gradient(top, #003b76, #00376e);
274 background-image: linear-gradient(top, #003b76, #00376e);
275 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
275 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
276 endColorstr='#00376e', GradientType=0 );
276 endColorstr='#00376e', GradientType=0 );
277 margin: 0;
277 margin: 0;
278 padding: 0;
278 padding: 0;
279 display: block;
279 display: block;
280 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
280 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
281 -webkit-border-radius: 4px 4px 4px 4px;
281 -webkit-border-radius: 4px 4px 4px 4px;
282 -khtml-border-radius: 4px 4px 4px 4px;
282 -khtml-border-radius: 4px 4px 4px 4px;
283 -moz-border-radius: 4px 4px 4px 4px;
283 -moz-border-radius: 4px 4px 4px 4px;
284 border-radius: 4px 4px 4px 4px;
284 border-radius: 4px 4px 4px 4px;
285 }
285 }
286 #header #header-inner.hover{
286 #header #header-inner.hover{
287 position: fixed !important;
287 position: fixed !important;
288 width: 100% !important;
288 width: 100% !important;
289 margin-left: -10px !important;
289 margin-left: -10px !important;
290 z-index: 10000;
290 z-index: 10000;
291 border-radius: 0px 0px 4px 4px;
291 border-radius: 0px 0px 4px 4px;
292 }
292 }
293 #header #header-inner #home a {
293 #header #header-inner #home a {
294 height: 40px;
294 height: 40px;
295 width: 46px;
295 width: 46px;
296 display: block;
296 display: block;
297 background: url("../images/button_home.png");
297 background: url("../images/button_home.png");
298 background-position: 0 0;
298 background-position: 0 0;
299 margin: 0;
299 margin: 0;
300 padding: 0;
300 padding: 0;
301 }
301 }
302
302
303 #header #header-inner #home a:hover {
303 #header #header-inner #home a:hover {
304 background-position: 0 -40px;
304 background-position: 0 -40px;
305 }
305 }
306
306
307 #header #header-inner #logo {
307 #header #header-inner #logo {
308 float: left;
308 float: left;
309 position: absolute;
309 position: absolute;
310 }
310 }
311
311
312 #header #header-inner #logo h1 {
312 #header #header-inner #logo h1 {
313 color: #FFF;
313 color: #FFF;
314 font-size: 18px;
314 font-size: 18px;
315 margin: 10px 0 0 13px;
315 margin: 10px 0 0 13px;
316 padding: 0;
316 padding: 0;
317 }
317 }
318
318
319 #header #header-inner #logo a {
319 #header #header-inner #logo a {
320 color: #fff;
320 color: #fff;
321 text-decoration: none;
321 text-decoration: none;
322 }
322 }
323
323
324 #header #header-inner #logo a:hover {
324 #header #header-inner #logo a:hover {
325 color: #bfe3ff;
325 color: #bfe3ff;
326 }
326 }
327
327
328 #header #header-inner #quick,#header #header-inner #quick ul {
328 #header #header-inner #quick,#header #header-inner #quick ul {
329 position: relative;
329 position: relative;
330 float: right;
330 float: right;
331 list-style-type: none;
331 list-style-type: none;
332 list-style-position: outside;
332 list-style-position: outside;
333 margin: 6px 5px 0 0;
333 margin: 6px 5px 0 0;
334 padding: 0;
334 padding: 0;
335 }
335 }
336
336
337 #header #header-inner #quick li {
337 #header #header-inner #quick li {
338 position: relative;
338 position: relative;
339 float: left;
339 float: left;
340 margin: 0 5px 0 0;
340 margin: 0 5px 0 0;
341 padding: 0;
341 padding: 0;
342 }
342 }
343
343
344 #header #header-inner #quick li a {
344 #header #header-inner #quick li a {
345 top: 0;
345 top: 0;
346 left: 0;
346 left: 0;
347 height: 1%;
347 height: 1%;
348 display: block;
348 display: block;
349 clear: both;
349 clear: both;
350 overflow: hidden;
350 overflow: hidden;
351 color: #FFF;
351 color: #FFF;
352 font-weight: 700;
352 font-weight: 700;
353 text-decoration: none;
353 text-decoration: none;
354 background: #369;
354 background: #369;
355 padding: 0;
355 padding: 0;
356 -webkit-border-radius: 4px 4px 4px 4px;
356 -webkit-border-radius: 4px 4px 4px 4px;
357 -khtml-border-radius: 4px 4px 4px 4px;
357 -khtml-border-radius: 4px 4px 4px 4px;
358 -moz-border-radius: 4px 4px 4px 4px;
358 -moz-border-radius: 4px 4px 4px 4px;
359 border-radius: 4px 4px 4px 4px;
359 border-radius: 4px 4px 4px 4px;
360 }
360 }
361
361
362 #header #header-inner #quick li span.short {
362 #header #header-inner #quick li span.short {
363 padding: 9px 6px 8px 6px;
363 padding: 9px 6px 8px 6px;
364 }
364 }
365
365
366 #header #header-inner #quick li span {
366 #header #header-inner #quick li span {
367 top: 0;
367 top: 0;
368 right: 0;
368 right: 0;
369 height: 1%;
369 height: 1%;
370 display: block;
370 display: block;
371 float: left;
371 float: left;
372 border-left: 1px solid #3f6f9f;
372 border-left: 1px solid #3f6f9f;
373 margin: 0;
373 margin: 0;
374 padding: 10px 12px 8px 10px;
374 padding: 10px 12px 8px 10px;
375 }
375 }
376
376
377 #header #header-inner #quick li span.normal {
377 #header #header-inner #quick li span.normal {
378 border: none;
378 border: none;
379 padding: 10px 12px 8px;
379 padding: 10px 12px 8px;
380 }
380 }
381
381
382 #header #header-inner #quick li span.icon {
382 #header #header-inner #quick li span.icon {
383 top: 0;
383 top: 0;
384 left: 0;
384 left: 0;
385 border-left: none;
385 border-left: none;
386 border-right: 1px solid #2e5c89;
386 border-right: 1px solid #2e5c89;
387 padding: 8px 6px 4px;
387 padding: 8px 6px 4px;
388 }
388 }
389
389
390 #header #header-inner #quick li span.icon_short {
390 #header #header-inner #quick li span.icon_short {
391 top: 0;
391 top: 0;
392 left: 0;
392 left: 0;
393 border-left: none;
393 border-left: none;
394 border-right: 1px solid #2e5c89;
394 border-right: 1px solid #2e5c89;
395 padding: 8px 6px 4px;
395 padding: 8px 6px 4px;
396 }
396 }
397
397
398 #header #header-inner #quick li span.icon img,#header #header-inner #quick li span.icon_short img
398 #header #header-inner #quick li span.icon img,#header #header-inner #quick li span.icon_short img
399 {
399 {
400 margin: 0px -2px 0px 0px;
400 margin: 0px -2px 0px 0px;
401 }
401 }
402
402
403 #header #header-inner #quick li a:hover {
403 #header #header-inner #quick li a:hover {
404 background: #4e4e4e no-repeat top left;
404 background: #4e4e4e no-repeat top left;
405 }
405 }
406
406
407 #header #header-inner #quick li a:hover span {
407 #header #header-inner #quick li a:hover span {
408 border-left: 1px solid #545454;
408 border-left: 1px solid #545454;
409 }
409 }
410
410
411 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short
411 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short
412 {
412 {
413 border-left: none;
413 border-left: none;
414 border-right: 1px solid #464646;
414 border-right: 1px solid #464646;
415 }
415 }
416
416
417 #header #header-inner #quick ul {
417 #header #header-inner #quick ul {
418 top: 29px;
418 top: 29px;
419 right: 0;
419 right: 0;
420 min-width: 200px;
420 min-width: 200px;
421 display: none;
421 display: none;
422 position: absolute;
422 position: absolute;
423 background: #FFF;
423 background: #FFF;
424 border: 1px solid #666;
424 border: 1px solid #666;
425 border-top: 1px solid #003367;
425 border-top: 1px solid #003367;
426 z-index: 100;
426 z-index: 100;
427 margin: 0;
427 margin: 0;
428 padding: 0;
428 padding: 0;
429 }
429 }
430
430
431 #header #header-inner #quick ul.repo_switcher {
431 #header #header-inner #quick ul.repo_switcher {
432 max-height: 275px;
432 max-height: 275px;
433 overflow-x: hidden;
433 overflow-x: hidden;
434 overflow-y: auto;
434 overflow-y: auto;
435 }
435 }
436
436
437 #header #header-inner #quick ul.repo_switcher li.qfilter_rs {
437 #header #header-inner #quick ul.repo_switcher li.qfilter_rs {
438 float: none;
438 float: none;
439 margin: 0;
439 margin: 0;
440 border-bottom: 2px solid #003367;
440 border-bottom: 2px solid #003367;
441 }
441 }
442
442
443 #header #header-inner #quick .repo_switcher_type {
443 #header #header-inner #quick .repo_switcher_type {
444 position: absolute;
444 position: absolute;
445 left: 0;
445 left: 0;
446 top: 9px;
446 top: 9px;
447 }
447 }
448
448
449 #header #header-inner #quick li ul li {
449 #header #header-inner #quick li ul li {
450 border-bottom: 1px solid #ddd;
450 border-bottom: 1px solid #ddd;
451 }
451 }
452
452
453 #header #header-inner #quick li ul li a {
453 #header #header-inner #quick li ul li a {
454 width: 182px;
454 width: 182px;
455 height: auto;
455 height: auto;
456 display: block;
456 display: block;
457 float: left;
457 float: left;
458 background: #FFF;
458 background: #FFF;
459 color: #003367;
459 color: #003367;
460 font-weight: 400;
460 font-weight: 400;
461 margin: 0;
461 margin: 0;
462 padding: 7px 9px;
462 padding: 7px 9px;
463 }
463 }
464
464
465 #header #header-inner #quick li ul li a:hover {
465 #header #header-inner #quick li ul li a:hover {
466 color: #000;
466 color: #000;
467 background: #FFF;
467 background: #FFF;
468 }
468 }
469
469
470 #header #header-inner #quick ul ul {
470 #header #header-inner #quick ul ul {
471 top: auto;
471 top: auto;
472 }
472 }
473
473
474 #header #header-inner #quick li ul ul {
474 #header #header-inner #quick li ul ul {
475 right: 200px;
475 right: 200px;
476 max-height: 275px;
476 max-height: 275px;
477 overflow: auto;
477 overflow: auto;
478 overflow-x: hidden;
478 overflow-x: hidden;
479 white-space: normal;
479 white-space: normal;
480 }
480 }
481
481
482 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover
482 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover
483 {
483 {
484 background: url("../images/icons/book.png") no-repeat scroll 4px 9px
484 background: url("../images/icons/book.png") no-repeat scroll 4px 9px
485 #FFF;
485 #FFF;
486 width: 167px;
486 width: 167px;
487 margin: 0;
487 margin: 0;
488 padding: 12px 9px 7px 24px;
488 padding: 12px 9px 7px 24px;
489 }
489 }
490
490
491 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover
491 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover
492 {
492 {
493 background: url("../images/icons/lock.png") no-repeat scroll 4px 9px
493 background: url("../images/icons/lock.png") no-repeat scroll 4px 9px
494 #FFF;
494 #FFF;
495 min-width: 167px;
495 min-width: 167px;
496 margin: 0;
496 margin: 0;
497 padding: 12px 9px 7px 24px;
497 padding: 12px 9px 7px 24px;
498 }
498 }
499
499
500 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover
500 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover
501 {
501 {
502 background: url("../images/icons/lock_open.png") no-repeat scroll 4px
502 background: url("../images/icons/lock_open.png") no-repeat scroll 4px
503 9px #FFF;
503 9px #FFF;
504 min-width: 167px;
504 min-width: 167px;
505 margin: 0;
505 margin: 0;
506 padding: 12px 9px 7px 24px;
506 padding: 12px 9px 7px 24px;
507 }
507 }
508
508
509 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover
509 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover
510 {
510 {
511 background: url("../images/icons/hgicon.png") no-repeat scroll 4px 9px
511 background: url("../images/icons/hgicon.png") no-repeat scroll 4px 9px
512 #FFF;
512 #FFF;
513 min-width: 167px;
513 min-width: 167px;
514 margin: 0 0 0 14px;
514 margin: 0 0 0 14px;
515 padding: 12px 9px 7px 24px;
515 padding: 12px 9px 7px 24px;
516 }
516 }
517
517
518 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover
518 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover
519 {
519 {
520 background: url("../images/icons/giticon.png") no-repeat scroll 4px 9px
520 background: url("../images/icons/giticon.png") no-repeat scroll 4px 9px
521 #FFF;
521 #FFF;
522 min-width: 167px;
522 min-width: 167px;
523 margin: 0 0 0 14px;
523 margin: 0 0 0 14px;
524 padding: 12px 9px 7px 24px;
524 padding: 12px 9px 7px 24px;
525 }
525 }
526
526
527 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover
527 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover
528 {
528 {
529 background: url("../images/icons/database_edit.png") no-repeat scroll
529 background: url("../images/icons/database_edit.png") no-repeat scroll
530 4px 9px #FFF;
530 4px 9px #FFF;
531 width: 167px;
531 width: 167px;
532 margin: 0;
532 margin: 0;
533 padding: 12px 9px 7px 24px;
533 padding: 12px 9px 7px 24px;
534 }
534 }
535
535
536 #header #header-inner #quick li ul li a.repos_groups,#header #header-inner #quick li ul li a.repos_groups:hover
536 #header #header-inner #quick li ul li a.repos_groups,#header #header-inner #quick li ul li a.repos_groups:hover
537 {
537 {
538 background: url("../images/icons/database_link.png") no-repeat scroll
538 background: url("../images/icons/database_link.png") no-repeat scroll
539 4px 9px #FFF;
539 4px 9px #FFF;
540 width: 167px;
540 width: 167px;
541 margin: 0;
541 margin: 0;
542 padding: 12px 9px 7px 24px;
542 padding: 12px 9px 7px 24px;
543 }
543 }
544
544
545 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover
545 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover
546 {
546 {
547 background: #FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
547 background: #FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
548 width: 167px;
548 width: 167px;
549 margin: 0;
549 margin: 0;
550 padding: 12px 9px 7px 24px;
550 padding: 12px 9px 7px 24px;
551 }
551 }
552
552
553 #header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover
553 #header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover
554 {
554 {
555 background: #FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
555 background: #FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
556 width: 167px;
556 width: 167px;
557 margin: 0;
557 margin: 0;
558 padding: 12px 9px 7px 24px;
558 padding: 12px 9px 7px 24px;
559 }
559 }
560
560
561 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover
561 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover
562 {
562 {
563 background: #FFF url("../images/icons/cog.png") no-repeat 4px 9px;
563 background: #FFF url("../images/icons/cog.png") no-repeat 4px 9px;
564 width: 167px;
564 width: 167px;
565 margin: 0;
565 margin: 0;
566 padding: 12px 9px 7px 24px;
566 padding: 12px 9px 7px 24px;
567 }
567 }
568
568
569 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover
569 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover
570 {
570 {
571 background: #FFF url("../images/icons/key.png") no-repeat 4px 9px;
571 background: #FFF url("../images/icons/key.png") no-repeat 4px 9px;
572 width: 167px;
572 width: 167px;
573 margin: 0;
573 margin: 0;
574 padding: 12px 9px 7px 24px;
574 padding: 12px 9px 7px 24px;
575 }
575 }
576
576
577 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover
577 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover
578 {
578 {
579 background: #FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
579 background: #FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
580 width: 167px;
580 width: 167px;
581 margin: 0;
581 margin: 0;
582 padding: 12px 9px 7px 24px;
582 padding: 12px 9px 7px 24px;
583 }
583 }
584
584
585 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover
585 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover
586 {
586 {
587 background: #FFF url("../images/icons/arrow_divide.png") no-repeat 4px
587 background: #FFF url("../images/icons/arrow_divide.png") no-repeat 4px
588 9px;
588 9px;
589 width: 167px;
589 width: 167px;
590 margin: 0;
590 margin: 0;
591 padding: 12px 9px 7px 24px;
591 padding: 12px 9px 7px 24px;
592 }
592 }
593
593
594 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover
594 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover
595 {
595 {
596 background: #FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
596 background: #FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
597 width: 167px;
597 width: 167px;
598 margin: 0;
598 margin: 0;
599 padding: 12px 9px 7px 24px;
599 padding: 12px 9px 7px 24px;
600 }
600 }
601
601
602 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover
602 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover
603 {
603 {
604 background: #FFF url("../images/icons/delete.png") no-repeat 4px 9px;
604 background: #FFF url("../images/icons/delete.png") no-repeat 4px 9px;
605 width: 167px;
605 width: 167px;
606 margin: 0;
606 margin: 0;
607 padding: 12px 9px 7px 24px;
607 padding: 12px 9px 7px 24px;
608 }
608 }
609
609
610 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover
610 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover
611 {
611 {
612 background: #FFF url("../images/icons/arrow_branch.png") no-repeat 4px
612 background: #FFF url("../images/icons/arrow_branch.png") no-repeat 4px
613 9px;
613 9px;
614 width: 167px;
614 width: 167px;
615 margin: 0;
615 margin: 0;
616 padding: 12px 9px 7px 24px;
616 padding: 12px 9px 7px 24px;
617 }
617 }
618
618
619 #header #header-inner #quick li ul li a.tags,
619 #header #header-inner #quick li ul li a.tags,
620 #header #header-inner #quick li ul li a.tags:hover{
620 #header #header-inner #quick li ul li a.tags:hover{
621 background: #FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
621 background: #FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
622 width: 167px;
622 width: 167px;
623 margin: 0;
623 margin: 0;
624 padding: 12px 9px 7px 24px;
624 padding: 12px 9px 7px 24px;
625 }
625 }
626
626
627 #header #header-inner #quick li ul li a.bookmarks,
627 #header #header-inner #quick li ul li a.bookmarks,
628 #header #header-inner #quick li ul li a.bookmarks:hover{
628 #header #header-inner #quick li ul li a.bookmarks:hover{
629 background: #FFF url("../images/icons/tag_green.png") no-repeat 4px 9px;
629 background: #FFF url("../images/icons/tag_green.png") no-repeat 4px 9px;
630 width: 167px;
630 width: 167px;
631 margin: 0;
631 margin: 0;
632 padding: 12px 9px 7px 24px;
632 padding: 12px 9px 7px 24px;
633 }
633 }
634
634
635 #header #header-inner #quick li ul li a.admin,
635 #header #header-inner #quick li ul li a.admin,
636 #header #header-inner #quick li ul li a.admin:hover{
636 #header #header-inner #quick li ul li a.admin:hover{
637 background: #FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
637 background: #FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
638 width: 167px;
638 width: 167px;
639 margin: 0;
639 margin: 0;
640 padding: 12px 9px 7px 24px;
640 padding: 12px 9px 7px 24px;
641 }
641 }
642
642
643 .groups_breadcrumbs a {
643 .groups_breadcrumbs a {
644 color: #fff;
644 color: #fff;
645 }
645 }
646
646
647 .groups_breadcrumbs a:hover {
647 .groups_breadcrumbs a:hover {
648 color: #bfe3ff;
648 color: #bfe3ff;
649 text-decoration: none;
649 text-decoration: none;
650 }
650 }
651
651
652 td.quick_repo_menu {
652 td.quick_repo_menu {
653 background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important;
653 background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important;
654 cursor: pointer;
654 cursor: pointer;
655 width: 8px;
655 width: 8px;
656 border: 1px solid transparent;
656 border: 1px solid transparent;
657 }
657 }
658
658
659 td.quick_repo_menu.active {
659 td.quick_repo_menu.active {
660 background: url("../images/dt-arrow-dn.png") no-repeat scroll 5px 50% #FFFFFF !important;
660 background: url("../images/dt-arrow-dn.png") no-repeat scroll 5px 50% #FFFFFF !important;
661 border: 1px solid #003367;
661 border: 1px solid #003367;
662 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
662 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
663 cursor: pointer;
663 cursor: pointer;
664 }
664 }
665
665
666 td.quick_repo_menu .menu_items {
666 td.quick_repo_menu .menu_items {
667 margin-top: 10px;
667 margin-top: 10px;
668 margin-left:-6px;
668 margin-left:-6px;
669 width: 150px;
669 width: 150px;
670 position: absolute;
670 position: absolute;
671 background-color: #FFF;
671 background-color: #FFF;
672 background: none repeat scroll 0 0 #FFFFFF;
672 background: none repeat scroll 0 0 #FFFFFF;
673 border-color: #003367 #666666 #666666;
673 border-color: #003367 #666666 #666666;
674 border-right: 1px solid #666666;
674 border-right: 1px solid #666666;
675 border-style: solid;
675 border-style: solid;
676 border-width: 1px;
676 border-width: 1px;
677 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
677 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
678 border-top-style: none;
678 border-top-style: none;
679 }
679 }
680
680
681 td.quick_repo_menu .menu_items li {
681 td.quick_repo_menu .menu_items li {
682 padding: 0 !important;
682 padding: 0 !important;
683 }
683 }
684
684
685 td.quick_repo_menu .menu_items a {
685 td.quick_repo_menu .menu_items a {
686 display: block;
686 display: block;
687 padding: 4px 12px 4px 8px;
687 padding: 4px 12px 4px 8px;
688 }
688 }
689
689
690 td.quick_repo_menu .menu_items a:hover {
690 td.quick_repo_menu .menu_items a:hover {
691 background-color: #EEE;
691 background-color: #EEE;
692 text-decoration: none;
692 text-decoration: none;
693 }
693 }
694
694
695 td.quick_repo_menu .menu_items .icon img {
695 td.quick_repo_menu .menu_items .icon img {
696 margin-bottom: -2px;
696 margin-bottom: -2px;
697 }
697 }
698
698
699 td.quick_repo_menu .menu_items.hidden {
699 td.quick_repo_menu .menu_items.hidden {
700 display: none;
700 display: none;
701 }
701 }
702
702
703 .yui-dt-first th {
703 .yui-dt-first th {
704 text-align: left;
704 text-align: left;
705 }
705 }
706
706
707 /*
707 /*
708 Copyright (c) 2011, Yahoo! Inc. All rights reserved.
708 Copyright (c) 2011, Yahoo! Inc. All rights reserved.
709 Code licensed under the BSD License:
709 Code licensed under the BSD License:
710 http://developer.yahoo.com/yui/license.html
710 http://developer.yahoo.com/yui/license.html
711 version: 2.9.0
711 version: 2.9.0
712 */
712 */
713 .yui-skin-sam .yui-dt-mask {
713 .yui-skin-sam .yui-dt-mask {
714 position: absolute;
714 position: absolute;
715 z-index: 9500;
715 z-index: 9500;
716 }
716 }
717 .yui-dt-tmp {
717 .yui-dt-tmp {
718 position: absolute;
718 position: absolute;
719 left: -9000px;
719 left: -9000px;
720 }
720 }
721 .yui-dt-scrollable .yui-dt-bd { overflow: auto }
721 .yui-dt-scrollable .yui-dt-bd { overflow: auto }
722 .yui-dt-scrollable .yui-dt-hd {
722 .yui-dt-scrollable .yui-dt-hd {
723 overflow: hidden;
723 overflow: hidden;
724 position: relative;
724 position: relative;
725 }
725 }
726 .yui-dt-scrollable .yui-dt-bd thead tr,
726 .yui-dt-scrollable .yui-dt-bd thead tr,
727 .yui-dt-scrollable .yui-dt-bd thead th {
727 .yui-dt-scrollable .yui-dt-bd thead th {
728 position: absolute;
728 position: absolute;
729 left: -1500px;
729 left: -1500px;
730 }
730 }
731 .yui-dt-scrollable tbody { -moz-outline: 0 }
731 .yui-dt-scrollable tbody { -moz-outline: 0 }
732 .yui-skin-sam thead .yui-dt-sortable { cursor: pointer }
732 .yui-skin-sam thead .yui-dt-sortable { cursor: pointer }
733 .yui-skin-sam thead .yui-dt-draggable { cursor: move }
733 .yui-skin-sam thead .yui-dt-draggable { cursor: move }
734 .yui-dt-coltarget {
734 .yui-dt-coltarget {
735 position: absolute;
735 position: absolute;
736 z-index: 999;
736 z-index: 999;
737 }
737 }
738 .yui-dt-hd { zoom: 1 }
738 .yui-dt-hd { zoom: 1 }
739 th.yui-dt-resizeable .yui-dt-resizerliner { position: relative }
739 th.yui-dt-resizeable .yui-dt-resizerliner { position: relative }
740 .yui-dt-resizer {
740 .yui-dt-resizer {
741 position: absolute;
741 position: absolute;
742 right: 0;
742 right: 0;
743 bottom: 0;
743 bottom: 0;
744 height: 100%;
744 height: 100%;
745 cursor: e-resize;
745 cursor: e-resize;
746 cursor: col-resize;
746 cursor: col-resize;
747 background-color: #CCC;
747 background-color: #CCC;
748 opacity: 0;
748 opacity: 0;
749 filter: alpha(opacity=0);
749 filter: alpha(opacity=0);
750 }
750 }
751 .yui-dt-resizerproxy {
751 .yui-dt-resizerproxy {
752 visibility: hidden;
752 visibility: hidden;
753 position: absolute;
753 position: absolute;
754 z-index: 9000;
754 z-index: 9000;
755 background-color: #CCC;
755 background-color: #CCC;
756 opacity: 0;
756 opacity: 0;
757 filter: alpha(opacity=0);
757 filter: alpha(opacity=0);
758 }
758 }
759 th.yui-dt-hidden .yui-dt-liner,
759 th.yui-dt-hidden .yui-dt-liner,
760 td.yui-dt-hidden .yui-dt-liner,
760 td.yui-dt-hidden .yui-dt-liner,
761 th.yui-dt-hidden .yui-dt-resizer { display: none }
761 th.yui-dt-hidden .yui-dt-resizer { display: none }
762 .yui-dt-editor,
762 .yui-dt-editor,
763 .yui-dt-editor-shim {
763 .yui-dt-editor-shim {
764 position: absolute;
764 position: absolute;
765 z-index: 9000;
765 z-index: 9000;
766 }
766 }
767 .yui-skin-sam .yui-dt table {
767 .yui-skin-sam .yui-dt table {
768 margin: 0;
768 margin: 0;
769 padding: 0;
769 padding: 0;
770 font-family: arial;
770 font-family: arial;
771 font-size: inherit;
771 font-size: inherit;
772 border-collapse: separate;
772 border-collapse: separate;
773 *border-collapse: collapse;
773 *border-collapse: collapse;
774 border-spacing: 0;
774 border-spacing: 0;
775 border: 1px solid #7f7f7f;
775 border: 1px solid #7f7f7f;
776 }
776 }
777 .yui-skin-sam .yui-dt thead { border-spacing: 0 }
777 .yui-skin-sam .yui-dt thead { border-spacing: 0 }
778 .yui-skin-sam .yui-dt caption {
778 .yui-skin-sam .yui-dt caption {
779 color: #000;
779 color: #000;
780 font-size: 85%;
780 font-size: 85%;
781 font-weight: normal;
781 font-weight: normal;
782 font-style: italic;
782 font-style: italic;
783 line-height: 1;
783 line-height: 1;
784 padding: 1em 0;
784 padding: 1em 0;
785 text-align: center;
785 text-align: center;
786 }
786 }
787 .yui-skin-sam .yui-dt th { background: #d8d8da url(../images/sprite.png) repeat-x 0 0 }
787 .yui-skin-sam .yui-dt th { background: #d8d8da url(../images/sprite.png) repeat-x 0 0 }
788 .yui-skin-sam .yui-dt th,
788 .yui-skin-sam .yui-dt th,
789 .yui-skin-sam .yui-dt th a {
789 .yui-skin-sam .yui-dt th a {
790 font-weight: normal;
790 font-weight: normal;
791 text-decoration: none;
791 text-decoration: none;
792 color: #000;
792 color: #000;
793 vertical-align: bottom;
793 vertical-align: bottom;
794 }
794 }
795 .yui-skin-sam .yui-dt th {
795 .yui-skin-sam .yui-dt th {
796 margin: 0;
796 margin: 0;
797 padding: 0;
797 padding: 0;
798 border: 0;
798 border: 0;
799 border-right: 1px solid #cbcbcb;
799 border-right: 1px solid #cbcbcb;
800 }
800 }
801 .yui-skin-sam .yui-dt tr.yui-dt-first td { border-top: 1px solid #7f7f7f }
801 .yui-skin-sam .yui-dt tr.yui-dt-first td { border-top: 1px solid #7f7f7f }
802 .yui-skin-sam .yui-dt th .yui-dt-liner { white-space: nowrap }
802 .yui-skin-sam .yui-dt th .yui-dt-liner { white-space: nowrap }
803 .yui-skin-sam .yui-dt-liner {
803 .yui-skin-sam .yui-dt-liner {
804 margin: 0;
804 margin: 0;
805 padding: 0;
805 padding: 0;
806 }
806 }
807 .yui-skin-sam .yui-dt-coltarget {
807 .yui-skin-sam .yui-dt-coltarget {
808 width: 5px;
808 width: 5px;
809 background-color: red;
809 background-color: red;
810 }
810 }
811 .yui-skin-sam .yui-dt td {
811 .yui-skin-sam .yui-dt td {
812 margin: 0;
812 margin: 0;
813 padding: 0;
813 padding: 0;
814 border: 0;
814 border: 0;
815 border-right: 1px solid #cbcbcb;
815 border-right: 1px solid #cbcbcb;
816 text-align: left;
816 text-align: left;
817 }
817 }
818 .yui-skin-sam .yui-dt-list td { border-right: 0 }
818 .yui-skin-sam .yui-dt-list td { border-right: 0 }
819 .yui-skin-sam .yui-dt-resizer { width: 6px }
819 .yui-skin-sam .yui-dt-resizer { width: 6px }
820 .yui-skin-sam .yui-dt-mask {
820 .yui-skin-sam .yui-dt-mask {
821 background-color: #000;
821 background-color: #000;
822 opacity: .25;
822 opacity: .25;
823 filter: alpha(opacity=25);
823 filter: alpha(opacity=25);
824 }
824 }
825 .yui-skin-sam .yui-dt-message { background-color: #FFF }
825 .yui-skin-sam .yui-dt-message { background-color: #FFF }
826 .yui-skin-sam .yui-dt-scrollable table { border: 0 }
826 .yui-skin-sam .yui-dt-scrollable table { border: 0 }
827 .yui-skin-sam .yui-dt-scrollable .yui-dt-hd {
827 .yui-skin-sam .yui-dt-scrollable .yui-dt-hd {
828 border-left: 1px solid #7f7f7f;
828 border-left: 1px solid #7f7f7f;
829 border-top: 1px solid #7f7f7f;
829 border-top: 1px solid #7f7f7f;
830 border-right: 1px solid #7f7f7f;
830 border-right: 1px solid #7f7f7f;
831 }
831 }
832 .yui-skin-sam .yui-dt-scrollable .yui-dt-bd {
832 .yui-skin-sam .yui-dt-scrollable .yui-dt-bd {
833 border-left: 1px solid #7f7f7f;
833 border-left: 1px solid #7f7f7f;
834 border-bottom: 1px solid #7f7f7f;
834 border-bottom: 1px solid #7f7f7f;
835 border-right: 1px solid #7f7f7f;
835 border-right: 1px solid #7f7f7f;
836 background-color: #FFF;
836 background-color: #FFF;
837 }
837 }
838 .yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td { border-bottom: 1px solid #7f7f7f }
838 .yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td { border-bottom: 1px solid #7f7f7f }
839 .yui-skin-sam th.yui-dt-asc,
839 .yui-skin-sam th.yui-dt-asc,
840 .yui-skin-sam th.yui-dt-desc { background: url(../images/sprite.png) repeat-x 0 -100px }
840 .yui-skin-sam th.yui-dt-desc { background: url(../images/sprite.png) repeat-x 0 -100px }
841 .yui-skin-sam th.yui-dt-sortable .yui-dt-label { margin-right: 10px }
841 .yui-skin-sam th.yui-dt-sortable .yui-dt-label { margin-right: 10px }
842 .yui-skin-sam th.yui-dt-asc .yui-dt-liner { background: url(../images/dt-arrow-up.png) no-repeat right }
842 .yui-skin-sam th.yui-dt-asc .yui-dt-liner { background: url(../images/dt-arrow-up.png) no-repeat right }
843 .yui-skin-sam th.yui-dt-desc .yui-dt-liner { background: url(../images/dt-arrow-dn.png) no-repeat right }
843 .yui-skin-sam th.yui-dt-desc .yui-dt-liner { background: url(../images/dt-arrow-dn.png) no-repeat right }
844 tbody .yui-dt-editable { cursor: pointer }
844 tbody .yui-dt-editable { cursor: pointer }
845 .yui-dt-editor {
845 .yui-dt-editor {
846 text-align: left;
846 text-align: left;
847 background-color: #f2f2f2;
847 background-color: #f2f2f2;
848 border: 1px solid #808080;
848 border: 1px solid #808080;
849 padding: 6px;
849 padding: 6px;
850 }
850 }
851 .yui-dt-editor label {
851 .yui-dt-editor label {
852 padding-left: 4px;
852 padding-left: 4px;
853 padding-right: 6px;
853 padding-right: 6px;
854 }
854 }
855 .yui-dt-editor .yui-dt-button {
855 .yui-dt-editor .yui-dt-button {
856 padding-top: 6px;
856 padding-top: 6px;
857 text-align: right;
857 text-align: right;
858 }
858 }
859 .yui-dt-editor .yui-dt-button button {
859 .yui-dt-editor .yui-dt-button button {
860 background: url(../images/sprite.png) repeat-x 0 0;
860 background: url(../images/sprite.png) repeat-x 0 0;
861 border: 1px solid #999;
861 border: 1px solid #999;
862 width: 4em;
862 width: 4em;
863 height: 1.8em;
863 height: 1.8em;
864 margin-left: 6px;
864 margin-left: 6px;
865 }
865 }
866 .yui-dt-editor .yui-dt-button button.yui-dt-default {
866 .yui-dt-editor .yui-dt-button button.yui-dt-default {
867 background: url(../images/sprite.png) repeat-x 0 -1400px;
867 background: url(../images/sprite.png) repeat-x 0 -1400px;
868 background-color: #5584e0;
868 background-color: #5584e0;
869 border: 1px solid #304369;
869 border: 1px solid #304369;
870 color: #FFF;
870 color: #FFF;
871 }
871 }
872 .yui-dt-editor .yui-dt-button button:hover {
872 .yui-dt-editor .yui-dt-button button:hover {
873 background: url(../images/sprite.png) repeat-x 0 -1300px;
873 background: url(../images/sprite.png) repeat-x 0 -1300px;
874 color: #000;
874 color: #000;
875 }
875 }
876 .yui-dt-editor .yui-dt-button button:active {
876 .yui-dt-editor .yui-dt-button button:active {
877 background: url(../images/sprite.png) repeat-x 0 -1700px;
877 background: url(../images/sprite.png) repeat-x 0 -1700px;
878 color: #000;
878 color: #000;
879 }
879 }
880 .yui-skin-sam tr.yui-dt-even { background-color: #FFF }
880 .yui-skin-sam tr.yui-dt-even { background-color: #FFF }
881 .yui-skin-sam tr.yui-dt-odd { background-color: #edf5ff }
881 .yui-skin-sam tr.yui-dt-odd { background-color: #edf5ff }
882 .yui-skin-sam tr.yui-dt-even td.yui-dt-asc,
882 .yui-skin-sam tr.yui-dt-even td.yui-dt-asc,
883 .yui-skin-sam tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
883 .yui-skin-sam tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
884 .yui-skin-sam tr.yui-dt-odd td.yui-dt-asc,
884 .yui-skin-sam tr.yui-dt-odd td.yui-dt-asc,
885 .yui-skin-sam tr.yui-dt-odd td.yui-dt-desc { background-color: #dbeaff }
885 .yui-skin-sam tr.yui-dt-odd td.yui-dt-desc { background-color: #dbeaff }
886 .yui-skin-sam .yui-dt-list tr.yui-dt-even { background-color: #FFF }
886 .yui-skin-sam .yui-dt-list tr.yui-dt-even { background-color: #FFF }
887 .yui-skin-sam .yui-dt-list tr.yui-dt-odd { background-color: #FFF }
887 .yui-skin-sam .yui-dt-list tr.yui-dt-odd { background-color: #FFF }
888 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,
888 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,
889 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
889 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
890 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,
890 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,
891 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc { background-color: #edf5ff }
891 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc { background-color: #edf5ff }
892 .yui-skin-sam th.yui-dt-highlighted,
892 .yui-skin-sam th.yui-dt-highlighted,
893 .yui-skin-sam th.yui-dt-highlighted a { background-color: #b2d2ff }
893 .yui-skin-sam th.yui-dt-highlighted a { background-color: #b2d2ff }
894 .yui-skin-sam tr.yui-dt-highlighted,
894 .yui-skin-sam tr.yui-dt-highlighted,
895 .yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,
895 .yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,
896 .yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,
896 .yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,
897 .yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,
897 .yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,
898 .yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted {
898 .yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted {
899 cursor: pointer;
899 cursor: pointer;
900 background-color: #b2d2ff;
900 background-color: #b2d2ff;
901 }
901 }
902 .yui-skin-sam .yui-dt-list th.yui-dt-highlighted,
902 .yui-skin-sam .yui-dt-list th.yui-dt-highlighted,
903 .yui-skin-sam .yui-dt-list th.yui-dt-highlighted a { background-color: #b2d2ff }
903 .yui-skin-sam .yui-dt-list th.yui-dt-highlighted a { background-color: #b2d2ff }
904 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,
904 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,
905 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,
905 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,
906 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,
906 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,
907 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,
907 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,
908 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted {
908 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted {
909 cursor: pointer;
909 cursor: pointer;
910 background-color: #b2d2ff;
910 background-color: #b2d2ff;
911 }
911 }
912 .yui-skin-sam th.yui-dt-selected,
912 .yui-skin-sam th.yui-dt-selected,
913 .yui-skin-sam th.yui-dt-selected a { background-color: #446cd7 }
913 .yui-skin-sam th.yui-dt-selected a { background-color: #446cd7 }
914 .yui-skin-sam tr.yui-dt-selected td,
914 .yui-skin-sam tr.yui-dt-selected td,
915 .yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,
915 .yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,
916 .yui-skin-sam tr.yui-dt-selected td.yui-dt-desc {
916 .yui-skin-sam tr.yui-dt-selected td.yui-dt-desc {
917 background-color: #426fd9;
917 background-color: #426fd9;
918 color: #FFF;
918 color: #FFF;
919 }
919 }
920 .yui-skin-sam tr.yui-dt-even td.yui-dt-selected,
920 .yui-skin-sam tr.yui-dt-even td.yui-dt-selected,
921 .yui-skin-sam tr.yui-dt-odd td.yui-dt-selected {
921 .yui-skin-sam tr.yui-dt-odd td.yui-dt-selected {
922 background-color: #446cd7;
922 background-color: #446cd7;
923 color: #FFF;
923 color: #FFF;
924 }
924 }
925 .yui-skin-sam .yui-dt-list th.yui-dt-selected,
925 .yui-skin-sam .yui-dt-list th.yui-dt-selected,
926 .yui-skin-sam .yui-dt-list th.yui-dt-selected a { background-color: #446cd7 }
926 .yui-skin-sam .yui-dt-list th.yui-dt-selected a { background-color: #446cd7 }
927 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td,
927 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td,
928 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,
928 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,
929 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc {
929 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc {
930 background-color: #426fd9;
930 background-color: #426fd9;
931 color: #FFF;
931 color: #FFF;
932 }
932 }
933 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,
933 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,
934 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected {
934 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected {
935 background-color: #446cd7;
935 background-color: #446cd7;
936 color: #FFF;
936 color: #FFF;
937 }
937 }
938 .yui-skin-sam .yui-dt-paginator {
938 .yui-skin-sam .yui-dt-paginator {
939 display: block;
939 display: block;
940 margin: 6px 0;
940 margin: 6px 0;
941 white-space: nowrap;
941 white-space: nowrap;
942 }
942 }
943 .yui-skin-sam .yui-dt-paginator .yui-dt-first,
943 .yui-skin-sam .yui-dt-paginator .yui-dt-first,
944 .yui-skin-sam .yui-dt-paginator .yui-dt-last,
944 .yui-skin-sam .yui-dt-paginator .yui-dt-last,
945 .yui-skin-sam .yui-dt-paginator .yui-dt-selected { padding: 2px 6px }
945 .yui-skin-sam .yui-dt-paginator .yui-dt-selected { padding: 2px 6px }
946 .yui-skin-sam .yui-dt-paginator a.yui-dt-first,
946 .yui-skin-sam .yui-dt-paginator a.yui-dt-first,
947 .yui-skin-sam .yui-dt-paginator a.yui-dt-last { text-decoration: none }
947 .yui-skin-sam .yui-dt-paginator a.yui-dt-last { text-decoration: none }
948 .yui-skin-sam .yui-dt-paginator .yui-dt-previous,
948 .yui-skin-sam .yui-dt-paginator .yui-dt-previous,
949 .yui-skin-sam .yui-dt-paginator .yui-dt-next { display: none }
949 .yui-skin-sam .yui-dt-paginator .yui-dt-next { display: none }
950 .yui-skin-sam a.yui-dt-page {
950 .yui-skin-sam a.yui-dt-page {
951 border: 1px solid #cbcbcb;
951 border: 1px solid #cbcbcb;
952 padding: 2px 6px;
952 padding: 2px 6px;
953 text-decoration: none;
953 text-decoration: none;
954 background-color: #fff;
954 background-color: #fff;
955 }
955 }
956 .yui-skin-sam .yui-dt-selected {
956 .yui-skin-sam .yui-dt-selected {
957 border: 1px solid #fff;
957 border: 1px solid #fff;
958 background-color: #fff;
958 background-color: #fff;
959 }
959 }
960
960
961 #content #left {
961 #content #left {
962 left: 0;
962 left: 0;
963 width: 280px;
963 width: 280px;
964 position: absolute;
964 position: absolute;
965 }
965 }
966
966
967 #content #right {
967 #content #right {
968 margin: 0 60px 10px 290px;
968 margin: 0 60px 10px 290px;
969 }
969 }
970
970
971 #content div.box {
971 #content div.box {
972 clear: both;
972 clear: both;
973 overflow: hidden;
973 overflow: hidden;
974 background: #fff;
974 background: #fff;
975 margin: 0 0 10px;
975 margin: 0 0 10px;
976 padding: 0 0 10px;
976 padding: 0 0 10px;
977 -webkit-border-radius: 4px 4px 4px 4px;
977 -webkit-border-radius: 4px 4px 4px 4px;
978 -khtml-border-radius: 4px 4px 4px 4px;
978 -khtml-border-radius: 4px 4px 4px 4px;
979 -moz-border-radius: 4px 4px 4px 4px;
979 -moz-border-radius: 4px 4px 4px 4px;
980 border-radius: 4px 4px 4px 4px;
980 border-radius: 4px 4px 4px 4px;
981 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
981 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
982 }
982 }
983
983
984 #content div.box-left {
984 #content div.box-left {
985 width: 49%;
985 width: 49%;
986 clear: none;
986 clear: none;
987 float: left;
987 float: left;
988 margin: 0 0 10px;
988 margin: 0 0 10px;
989 }
989 }
990
990
991 #content div.box-right {
991 #content div.box-right {
992 width: 49%;
992 width: 49%;
993 clear: none;
993 clear: none;
994 float: right;
994 float: right;
995 margin: 0 0 10px;
995 margin: 0 0 10px;
996 }
996 }
997
997
998 #content div.box div.title {
998 #content div.box div.title {
999 clear: both;
999 clear: both;
1000 overflow: hidden;
1000 overflow: hidden;
1001 background-color: #eedc94;
1001 background-color: #eedc94;
1002 background-repeat: repeat-x;
1002 background-repeat: repeat-x;
1003 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1003 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1004 to(#eedc94) );
1004 to(#eedc94) );
1005 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1005 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1006 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1006 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1007 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1007 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1008 color-stop(100%, #00376e) );
1008 color-stop(100%, #00376e) );
1009 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1009 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1010 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1010 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1011 background-image: linear-gradient(top, #003b76, #00376e);
1011 background-image: linear-gradient(top, #003b76, #00376e);
1012 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1012 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1013 endColorstr='#00376e', GradientType=0 );
1013 endColorstr='#00376e', GradientType=0 );
1014 margin: 0 0 20px;
1014 margin: 0 0 20px;
1015 padding: 0;
1015 padding: 0;
1016 }
1016 }
1017
1017
1018 #content div.box div.title h5 {
1018 #content div.box div.title h5 {
1019 float: left;
1019 float: left;
1020 border: none;
1020 border: none;
1021 color: #fff;
1021 color: #fff;
1022 text-transform: uppercase;
1022 text-transform: uppercase;
1023 margin: 0;
1023 margin: 0;
1024 padding: 11px 0 11px 10px;
1024 padding: 11px 0 11px 10px;
1025 }
1025 }
1026
1026
1027 #content div.box div.title .link-white{
1027 #content div.box div.title .link-white{
1028 color: #FFFFFF;
1028 color: #FFFFFF;
1029 }
1029 }
1030
1030
1031 #content div.box div.title ul.links li {
1031 #content div.box div.title ul.links li {
1032 list-style: none;
1032 list-style: none;
1033 float: left;
1033 float: left;
1034 margin: 0;
1034 margin: 0;
1035 padding: 0;
1035 padding: 0;
1036 }
1036 }
1037
1037
1038 #content div.box div.title ul.links li a {
1038 #content div.box div.title ul.links li a {
1039 border-left: 1px solid #316293;
1039 border-left: 1px solid #316293;
1040 color: #FFFFFF;
1040 color: #FFFFFF;
1041 display: block;
1041 display: block;
1042 float: left;
1042 float: left;
1043 font-size: 13px;
1043 font-size: 13px;
1044 font-weight: 700;
1044 font-weight: 700;
1045 height: 1%;
1045 height: 1%;
1046 margin: 0;
1046 margin: 0;
1047 padding: 11px 22px 12px;
1047 padding: 11px 22px 12px;
1048 text-decoration: none;
1048 text-decoration: none;
1049 }
1049 }
1050
1050
1051 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6
1051 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6
1052 {
1052 {
1053 clear: both;
1053 clear: both;
1054 overflow: hidden;
1054 overflow: hidden;
1055 border-bottom: 1px solid #DDD;
1055 border-bottom: 1px solid #DDD;
1056 margin: 10px 20px;
1056 margin: 10px 20px;
1057 padding: 0 0 15px;
1057 padding: 0 0 15px;
1058 }
1058 }
1059
1059
1060 #content div.box p {
1060 #content div.box p {
1061 color: #5f5f5f;
1061 color: #5f5f5f;
1062 font-size: 12px;
1062 font-size: 12px;
1063 line-height: 150%;
1063 line-height: 150%;
1064 margin: 0 24px 10px;
1064 margin: 0 24px 10px;
1065 padding: 0;
1065 padding: 0;
1066 }
1066 }
1067
1067
1068 #content div.box blockquote {
1068 #content div.box blockquote {
1069 border-left: 4px solid #DDD;
1069 border-left: 4px solid #DDD;
1070 color: #5f5f5f;
1070 color: #5f5f5f;
1071 font-size: 11px;
1071 font-size: 11px;
1072 line-height: 150%;
1072 line-height: 150%;
1073 margin: 0 34px;
1073 margin: 0 34px;
1074 padding: 0 0 0 14px;
1074 padding: 0 0 0 14px;
1075 }
1075 }
1076
1076
1077 #content div.box blockquote p {
1077 #content div.box blockquote p {
1078 margin: 10px 0;
1078 margin: 10px 0;
1079 padding: 0;
1079 padding: 0;
1080 }
1080 }
1081
1081
1082 #content div.box dl {
1082 #content div.box dl {
1083 margin: 10px 0px;
1083 margin: 10px 0px;
1084 }
1084 }
1085
1085
1086 #content div.box dt {
1086 #content div.box dt {
1087 font-size: 12px;
1087 font-size: 12px;
1088 margin: 0;
1088 margin: 0;
1089 }
1089 }
1090
1090
1091 #content div.box dd {
1091 #content div.box dd {
1092 font-size: 12px;
1092 font-size: 12px;
1093 margin: 0;
1093 margin: 0;
1094 padding: 8px 0 8px 15px;
1094 padding: 8px 0 8px 15px;
1095 }
1095 }
1096
1096
1097 #content div.box li {
1097 #content div.box li {
1098 font-size: 12px;
1098 font-size: 12px;
1099 padding: 4px 0;
1099 padding: 4px 0;
1100 }
1100 }
1101
1101
1102 #content div.box ul.disc,#content div.box ul.circle {
1102 #content div.box ul.disc,#content div.box ul.circle {
1103 margin: 10px 24px 10px 38px;
1103 margin: 10px 24px 10px 38px;
1104 }
1104 }
1105
1105
1106 #content div.box ul.square {
1106 #content div.box ul.square {
1107 margin: 10px 24px 10px 40px;
1107 margin: 10px 24px 10px 40px;
1108 }
1108 }
1109
1109
1110 #content div.box img.left {
1110 #content div.box img.left {
1111 border: none;
1111 border: none;
1112 float: left;
1112 float: left;
1113 margin: 10px 10px 10px 0;
1113 margin: 10px 10px 10px 0;
1114 }
1114 }
1115
1115
1116 #content div.box img.right {
1116 #content div.box img.right {
1117 border: none;
1117 border: none;
1118 float: right;
1118 float: right;
1119 margin: 10px 0 10px 10px;
1119 margin: 10px 0 10px 10px;
1120 }
1120 }
1121
1121
1122 #content div.box div.messages {
1122 #content div.box div.messages {
1123 clear: both;
1123 clear: both;
1124 overflow: hidden;
1124 overflow: hidden;
1125 margin: 0 20px;
1125 margin: 0 20px;
1126 padding: 0;
1126 padding: 0;
1127 }
1127 }
1128
1128
1129 #content div.box div.message {
1129 #content div.box div.message {
1130 clear: both;
1130 clear: both;
1131 overflow: hidden;
1131 overflow: hidden;
1132 margin: 0;
1132 margin: 0;
1133 padding: 10px 0;
1133 padding: 10px 0;
1134 }
1134 }
1135
1135
1136 #content div.box div.message a {
1136 #content div.box div.message a {
1137 font-weight: 400 !important;
1137 font-weight: 400 !important;
1138 }
1138 }
1139
1139
1140 #content div.box div.message div.image {
1140 #content div.box div.message div.image {
1141 float: left;
1141 float: left;
1142 margin: 9px 0 0 5px;
1142 margin: 9px 0 0 5px;
1143 padding: 6px;
1143 padding: 6px;
1144 }
1144 }
1145
1145
1146 #content div.box div.message div.image img {
1146 #content div.box div.message div.image img {
1147 vertical-align: middle;
1147 vertical-align: middle;
1148 margin: 0;
1148 margin: 0;
1149 }
1149 }
1150
1150
1151 #content div.box div.message div.text {
1151 #content div.box div.message div.text {
1152 float: left;
1152 float: left;
1153 margin: 0;
1153 margin: 0;
1154 padding: 9px 6px;
1154 padding: 9px 6px;
1155 }
1155 }
1156
1156
1157 #content div.box div.message div.dismiss a {
1157 #content div.box div.message div.dismiss a {
1158 height: 16px;
1158 height: 16px;
1159 width: 16px;
1159 width: 16px;
1160 display: block;
1160 display: block;
1161 background: url("../images/icons/cross.png") no-repeat;
1161 background: url("../images/icons/cross.png") no-repeat;
1162 margin: 15px 14px 0 0;
1162 margin: 15px 14px 0 0;
1163 padding: 0;
1163 padding: 0;
1164 }
1164 }
1165
1165
1166 #content div.box div.message div.text h1,#content div.box div.message div.text h2,#content div.box div.message div.text h3,#content div.box div.message div.text h4,#content div.box div.message div.text h5,#content div.box div.message div.text h6
1166 #content div.box div.message div.text h1,#content div.box div.message div.text h2,#content div.box div.message div.text h3,#content div.box div.message div.text h4,#content div.box div.message div.text h5,#content div.box div.message div.text h6
1167 {
1167 {
1168 border: none;
1168 border: none;
1169 margin: 0;
1169 margin: 0;
1170 padding: 0;
1170 padding: 0;
1171 }
1171 }
1172
1172
1173 #content div.box div.message div.text span {
1173 #content div.box div.message div.text span {
1174 height: 1%;
1174 height: 1%;
1175 display: block;
1175 display: block;
1176 margin: 0;
1176 margin: 0;
1177 padding: 5px 0 0;
1177 padding: 5px 0 0;
1178 }
1178 }
1179
1179
1180 #content div.box div.message-error {
1180 #content div.box div.message-error {
1181 height: 1%;
1181 height: 1%;
1182 clear: both;
1182 clear: both;
1183 overflow: hidden;
1183 overflow: hidden;
1184 background: #FBE3E4;
1184 background: #FBE3E4;
1185 border: 1px solid #FBC2C4;
1185 border: 1px solid #FBC2C4;
1186 color: #860006;
1186 color: #860006;
1187 }
1187 }
1188
1188
1189 #content div.box div.message-error h6 {
1189 #content div.box div.message-error h6 {
1190 color: #860006;
1190 color: #860006;
1191 }
1191 }
1192
1192
1193 #content div.box div.message-warning {
1193 #content div.box div.message-warning {
1194 height: 1%;
1194 height: 1%;
1195 clear: both;
1195 clear: both;
1196 overflow: hidden;
1196 overflow: hidden;
1197 background: #FFF6BF;
1197 background: #FFF6BF;
1198 border: 1px solid #FFD324;
1198 border: 1px solid #FFD324;
1199 color: #5f5200;
1199 color: #5f5200;
1200 }
1200 }
1201
1201
1202 #content div.box div.message-warning h6 {
1202 #content div.box div.message-warning h6 {
1203 color: #5f5200;
1203 color: #5f5200;
1204 }
1204 }
1205
1205
1206 #content div.box div.message-notice {
1206 #content div.box div.message-notice {
1207 height: 1%;
1207 height: 1%;
1208 clear: both;
1208 clear: both;
1209 overflow: hidden;
1209 overflow: hidden;
1210 background: #8FBDE0;
1210 background: #8FBDE0;
1211 border: 1px solid #6BACDE;
1211 border: 1px solid #6BACDE;
1212 color: #003863;
1212 color: #003863;
1213 }
1213 }
1214
1214
1215 #content div.box div.message-notice h6 {
1215 #content div.box div.message-notice h6 {
1216 color: #003863;
1216 color: #003863;
1217 }
1217 }
1218
1218
1219 #content div.box div.message-success {
1219 #content div.box div.message-success {
1220 height: 1%;
1220 height: 1%;
1221 clear: both;
1221 clear: both;
1222 overflow: hidden;
1222 overflow: hidden;
1223 background: #E6EFC2;
1223 background: #E6EFC2;
1224 border: 1px solid #C6D880;
1224 border: 1px solid #C6D880;
1225 color: #4e6100;
1225 color: #4e6100;
1226 }
1226 }
1227
1227
1228 #content div.box div.message-success h6 {
1228 #content div.box div.message-success h6 {
1229 color: #4e6100;
1229 color: #4e6100;
1230 }
1230 }
1231
1231
1232 #content div.box div.form div.fields div.field {
1232 #content div.box div.form div.fields div.field {
1233 height: 1%;
1233 height: 1%;
1234 border-bottom: 1px solid #DDD;
1234 border-bottom: 1px solid #DDD;
1235 clear: both;
1235 clear: both;
1236 margin: 0;
1236 margin: 0;
1237 padding: 10px 0;
1237 padding: 10px 0;
1238 }
1238 }
1239
1239
1240 #content div.box div.form div.fields div.field-first {
1240 #content div.box div.form div.fields div.field-first {
1241 padding: 0 0 10px;
1241 padding: 0 0 10px;
1242 }
1242 }
1243
1243
1244 #content div.box div.form div.fields div.field-noborder {
1244 #content div.box div.form div.fields div.field-noborder {
1245 border-bottom: 0 !important;
1245 border-bottom: 0 !important;
1246 }
1246 }
1247
1247
1248 #content div.box div.form div.fields div.field span.error-message {
1248 #content div.box div.form div.fields div.field span.error-message {
1249 height: 1%;
1249 height: 1%;
1250 display: inline-block;
1250 display: inline-block;
1251 color: red;
1251 color: red;
1252 margin: 8px 0 0 4px;
1252 margin: 8px 0 0 4px;
1253 padding: 0;
1253 padding: 0;
1254 }
1254 }
1255
1255
1256 #content div.box div.form div.fields div.field span.success {
1256 #content div.box div.form div.fields div.field span.success {
1257 height: 1%;
1257 height: 1%;
1258 display: block;
1258 display: block;
1259 color: #316309;
1259 color: #316309;
1260 margin: 8px 0 0;
1260 margin: 8px 0 0;
1261 padding: 0;
1261 padding: 0;
1262 }
1262 }
1263
1263
1264 #content div.box div.form div.fields div.field div.label {
1264 #content div.box div.form div.fields div.field div.label {
1265 left: 70px;
1265 left: 70px;
1266 width: 155px;
1266 width: 155px;
1267 position: absolute;
1267 position: absolute;
1268 margin: 0;
1268 margin: 0;
1269 padding: 5px 0 0 0px;
1269 padding: 5px 0 0 0px;
1270 }
1270 }
1271
1271
1272 #content div.box div.form div.fields div.field div.label-summary {
1272 #content div.box div.form div.fields div.field div.label-summary {
1273 left: 30px;
1273 left: 30px;
1274 width: 155px;
1274 width: 155px;
1275 position: absolute;
1275 position: absolute;
1276 margin: 0;
1276 margin: 0;
1277 padding: 0px 0 0 0px;
1277 padding: 0px 0 0 0px;
1278 }
1278 }
1279
1279
1280 #content div.box-left div.form div.fields div.field div.label,
1280 #content div.box-left div.form div.fields div.field div.label,
1281 #content div.box-right div.form div.fields div.field div.label,
1281 #content div.box-right div.form div.fields div.field div.label,
1282 #content div.box-left div.form div.fields div.field div.label,
1282 #content div.box-left div.form div.fields div.field div.label,
1283 #content div.box-left div.form div.fields div.field div.label-summary,
1283 #content div.box-left div.form div.fields div.field div.label-summary,
1284 #content div.box-right div.form div.fields div.field div.label-summary,
1284 #content div.box-right div.form div.fields div.field div.label-summary,
1285 #content div.box-left div.form div.fields div.field div.label-summary
1285 #content div.box-left div.form div.fields div.field div.label-summary
1286 {
1286 {
1287 clear: both;
1287 clear: both;
1288 overflow: hidden;
1288 overflow: hidden;
1289 left: 0;
1289 left: 0;
1290 width: auto;
1290 width: auto;
1291 position: relative;
1291 position: relative;
1292 margin: 0;
1292 margin: 0;
1293 padding: 0 0 8px;
1293 padding: 0 0 8px;
1294 }
1294 }
1295
1295
1296 #content div.box div.form div.fields div.field div.label-select {
1296 #content div.box div.form div.fields div.field div.label-select {
1297 padding: 5px 0 0 5px;
1297 padding: 5px 0 0 5px;
1298 }
1298 }
1299
1299
1300 #content div.box-left div.form div.fields div.field div.label-select,
1300 #content div.box-left div.form div.fields div.field div.label-select,
1301 #content div.box-right div.form div.fields div.field div.label-select
1301 #content div.box-right div.form div.fields div.field div.label-select
1302 {
1302 {
1303 padding: 0 0 8px;
1303 padding: 0 0 8px;
1304 }
1304 }
1305
1305
1306 #content div.box-left div.form div.fields div.field div.label-textarea,
1306 #content div.box-left div.form div.fields div.field div.label-textarea,
1307 #content div.box-right div.form div.fields div.field div.label-textarea
1307 #content div.box-right div.form div.fields div.field div.label-textarea
1308 {
1308 {
1309 padding: 0 0 8px !important;
1309 padding: 0 0 8px !important;
1310 }
1310 }
1311
1311
1312 #content div.box div.form div.fields div.field div.label label,div.label label
1312 #content div.box div.form div.fields div.field div.label label,div.label label
1313 {
1313 {
1314 color: #393939;
1314 color: #393939;
1315 font-weight: 700;
1315 font-weight: 700;
1316 }
1316 }
1317 #content div.box div.form div.fields div.field div.label label,div.label-summary label
1317 #content div.box div.form div.fields div.field div.label label,div.label-summary label
1318 {
1318 {
1319 color: #393939;
1319 color: #393939;
1320 font-weight: 700;
1320 font-weight: 700;
1321 }
1321 }
1322 #content div.box div.form div.fields div.field div.input {
1322 #content div.box div.form div.fields div.field div.input {
1323 margin: 0 0 0 200px;
1323 margin: 0 0 0 200px;
1324 }
1324 }
1325
1325
1326 #content div.box div.form div.fields div.field div.input.summary {
1326 #content div.box div.form div.fields div.field div.input.summary {
1327 margin: 0 0 0 110px;
1327 margin: 0 0 0 110px;
1328 }
1328 }
1329 #content div.box div.form div.fields div.field div.input.summary-short {
1329 #content div.box div.form div.fields div.field div.input.summary-short {
1330 margin: 0 0 0 110px;
1330 margin: 0 0 0 110px;
1331 }
1331 }
1332 #content div.box div.form div.fields div.field div.file {
1332 #content div.box div.form div.fields div.field div.file {
1333 margin: 0 0 0 200px;
1333 margin: 0 0 0 200px;
1334 }
1334 }
1335
1335
1336 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input
1336 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input
1337 {
1337 {
1338 margin: 0 0 0 0px;
1338 margin: 0 0 0 0px;
1339 }
1339 }
1340
1340
1341 #content div.box div.form div.fields div.field div.input input {
1341 #content div.box div.form div.fields div.field div.input input {
1342 background: #FFF;
1342 background: #FFF;
1343 border-top: 1px solid #b3b3b3;
1343 border-top: 1px solid #b3b3b3;
1344 border-left: 1px solid #b3b3b3;
1344 border-left: 1px solid #b3b3b3;
1345 border-right: 1px solid #eaeaea;
1345 border-right: 1px solid #eaeaea;
1346 border-bottom: 1px solid #eaeaea;
1346 border-bottom: 1px solid #eaeaea;
1347 color: #000;
1347 color: #000;
1348 font-size: 11px;
1348 font-size: 11px;
1349 margin: 0;
1349 margin: 0;
1350 padding: 7px 7px 6px;
1350 padding: 7px 7px 6px;
1351 }
1351 }
1352
1352
1353 #content div.box div.form div.fields div.field div.input input#clone_url{
1353 #content div.box div.form div.fields div.field div.input input#clone_url{
1354 font-size: 16px;
1354 font-size: 16px;
1355 padding: 2px 7px 2px;
1355 padding: 2px 7px 2px;
1356 }
1356 }
1357
1357
1358 #content div.box div.form div.fields div.field div.file input {
1358 #content div.box div.form div.fields div.field div.file input {
1359 background: none repeat scroll 0 0 #FFFFFF;
1359 background: none repeat scroll 0 0 #FFFFFF;
1360 border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
1360 border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
1361 border-style: solid;
1361 border-style: solid;
1362 border-width: 1px;
1362 border-width: 1px;
1363 color: #000000;
1363 color: #000000;
1364 font-size: 11px;
1364 font-size: 11px;
1365 margin: 0;
1365 margin: 0;
1366 padding: 7px 7px 6px;
1366 padding: 7px 7px 6px;
1367 }
1367 }
1368
1368
1369 #content div.box div.form div.fields div.field div.input input.small {
1369 #content div.box div.form div.fields div.field div.input input.small {
1370 width: 30%;
1370 width: 30%;
1371 }
1371 }
1372
1372
1373 #content div.box div.form div.fields div.field div.input input.medium {
1373 #content div.box div.form div.fields div.field div.input input.medium {
1374 width: 55%;
1374 width: 55%;
1375 }
1375 }
1376
1376
1377 #content div.box div.form div.fields div.field div.input input.large {
1377 #content div.box div.form div.fields div.field div.input input.large {
1378 width: 85%;
1378 width: 85%;
1379 }
1379 }
1380
1380
1381 #content div.box div.form div.fields div.field div.input input.date {
1381 #content div.box div.form div.fields div.field div.input input.date {
1382 width: 177px;
1382 width: 177px;
1383 }
1383 }
1384
1384
1385 #content div.box div.form div.fields div.field div.input input.button {
1385 #content div.box div.form div.fields div.field div.input input.button {
1386 background: #D4D0C8;
1386 background: #D4D0C8;
1387 border-top: 1px solid #FFF;
1387 border-top: 1px solid #FFF;
1388 border-left: 1px solid #FFF;
1388 border-left: 1px solid #FFF;
1389 border-right: 1px solid #404040;
1389 border-right: 1px solid #404040;
1390 border-bottom: 1px solid #404040;
1390 border-bottom: 1px solid #404040;
1391 color: #000;
1391 color: #000;
1392 margin: 0;
1392 margin: 0;
1393 padding: 4px 8px;
1393 padding: 4px 8px;
1394 }
1394 }
1395
1395
1396 #content div.box div.form div.fields div.field div.textarea {
1396 #content div.box div.form div.fields div.field div.textarea {
1397 border-top: 1px solid #b3b3b3;
1397 border-top: 1px solid #b3b3b3;
1398 border-left: 1px solid #b3b3b3;
1398 border-left: 1px solid #b3b3b3;
1399 border-right: 1px solid #eaeaea;
1399 border-right: 1px solid #eaeaea;
1400 border-bottom: 1px solid #eaeaea;
1400 border-bottom: 1px solid #eaeaea;
1401 margin: 0 0 0 200px;
1401 margin: 0 0 0 200px;
1402 padding: 10px;
1402 padding: 10px;
1403 }
1403 }
1404
1404
1405 #content div.box div.form div.fields div.field div.textarea-editor {
1405 #content div.box div.form div.fields div.field div.textarea-editor {
1406 border: 1px solid #ddd;
1406 border: 1px solid #ddd;
1407 padding: 0;
1407 padding: 0;
1408 }
1408 }
1409
1409
1410 #content div.box div.form div.fields div.field div.textarea textarea {
1410 #content div.box div.form div.fields div.field div.textarea textarea {
1411 width: 100%;
1411 width: 100%;
1412 height: 220px;
1412 height: 220px;
1413 overflow: hidden;
1413 overflow: hidden;
1414 background: #FFF;
1414 background: #FFF;
1415 color: #000;
1415 color: #000;
1416 font-size: 11px;
1416 font-size: 11px;
1417 outline: none;
1417 outline: none;
1418 border-width: 0;
1418 border-width: 0;
1419 margin: 0;
1419 margin: 0;
1420 padding: 0;
1420 padding: 0;
1421 }
1421 }
1422
1422
1423 #content div.box-left div.form div.fields div.field div.textarea textarea,#content div.box-right div.form div.fields div.field div.textarea textarea
1423 #content div.box-left div.form div.fields div.field div.textarea textarea,#content div.box-right div.form div.fields div.field div.textarea textarea
1424 {
1424 {
1425 width: 100%;
1425 width: 100%;
1426 height: 100px;
1426 height: 100px;
1427 }
1427 }
1428
1428
1429 #content div.box div.form div.fields div.field div.textarea table {
1429 #content div.box div.form div.fields div.field div.textarea table {
1430 width: 100%;
1430 width: 100%;
1431 border: none;
1431 border: none;
1432 margin: 0;
1432 margin: 0;
1433 padding: 0;
1433 padding: 0;
1434 }
1434 }
1435
1435
1436 #content div.box div.form div.fields div.field div.textarea table td {
1436 #content div.box div.form div.fields div.field div.textarea table td {
1437 background: #DDD;
1437 background: #DDD;
1438 border: none;
1438 border: none;
1439 padding: 0;
1439 padding: 0;
1440 }
1440 }
1441
1441
1442 #content div.box div.form div.fields div.field div.textarea table td table
1442 #content div.box div.form div.fields div.field div.textarea table td table
1443 {
1443 {
1444 width: auto;
1444 width: auto;
1445 border: none;
1445 border: none;
1446 margin: 0;
1446 margin: 0;
1447 padding: 0;
1447 padding: 0;
1448 }
1448 }
1449
1449
1450 #content div.box div.form div.fields div.field div.textarea table td table td
1450 #content div.box div.form div.fields div.field div.textarea table td table td
1451 {
1451 {
1452 font-size: 11px;
1452 font-size: 11px;
1453 padding: 5px 5px 5px 0;
1453 padding: 5px 5px 5px 0;
1454 }
1454 }
1455
1455
1456 #content div.box div.form div.fields div.field input[type=text]:focus,#content div.box div.form div.fields div.field input[type=password]:focus,#content div.box div.form div.fields div.field input[type=file]:focus,#content div.box div.form div.fields div.field textarea:focus,#content div.box div.form div.fields div.field select:focus
1456 #content div.box div.form div.fields div.field input[type=text]:focus,#content div.box div.form div.fields div.field input[type=password]:focus,#content div.box div.form div.fields div.field input[type=file]:focus,#content div.box div.form div.fields div.field textarea:focus,#content div.box div.form div.fields div.field select:focus
1457 {
1457 {
1458 background: #f6f6f6;
1458 background: #f6f6f6;
1459 border-color: #666;
1459 border-color: #666;
1460 }
1460 }
1461
1461
1462 div.form div.fields div.field div.button {
1462 div.form div.fields div.field div.button {
1463 margin: 0;
1463 margin: 0;
1464 padding: 0 0 0 8px;
1464 padding: 0 0 0 8px;
1465 }
1465 }
1466 #content div.box table.noborder {
1466 #content div.box table.noborder {
1467 border: 1px solid transparent;
1467 border: 1px solid transparent;
1468 }
1468 }
1469
1469
1470 #content div.box table {
1470 #content div.box table {
1471 width: 100%;
1471 width: 100%;
1472 border-collapse: separate;
1472 border-collapse: separate;
1473 margin: 0;
1473 margin: 0;
1474 padding: 0;
1474 padding: 0;
1475 border: 1px solid #eee;
1475 border: 1px solid #eee;
1476 -webkit-border-radius: 4px;
1476 -webkit-border-radius: 4px;
1477 -moz-border-radius: 4px;
1477 -moz-border-radius: 4px;
1478 border-radius: 4px;
1478 border-radius: 4px;
1479 }
1479 }
1480
1480
1481 #content div.box table th {
1481 #content div.box table th {
1482 background: #eee;
1482 background: #eee;
1483 border-bottom: 1px solid #ddd;
1483 border-bottom: 1px solid #ddd;
1484 padding: 5px 0px 5px 5px;
1484 padding: 5px 0px 5px 5px;
1485 }
1485 }
1486
1486
1487 #content div.box table th.left {
1487 #content div.box table th.left {
1488 text-align: left;
1488 text-align: left;
1489 }
1489 }
1490
1490
1491 #content div.box table th.right {
1491 #content div.box table th.right {
1492 text-align: right;
1492 text-align: right;
1493 }
1493 }
1494
1494
1495 #content div.box table th.center {
1495 #content div.box table th.center {
1496 text-align: center;
1496 text-align: center;
1497 }
1497 }
1498
1498
1499 #content div.box table th.selected {
1499 #content div.box table th.selected {
1500 vertical-align: middle;
1500 vertical-align: middle;
1501 padding: 0;
1501 padding: 0;
1502 }
1502 }
1503
1503
1504 #content div.box table td {
1504 #content div.box table td {
1505 background: #fff;
1505 background: #fff;
1506 border-bottom: 1px solid #cdcdcd;
1506 border-bottom: 1px solid #cdcdcd;
1507 vertical-align: middle;
1507 vertical-align: middle;
1508 padding: 5px;
1508 padding: 5px;
1509 }
1509 }
1510
1510
1511 #content div.box table tr.selected td {
1511 #content div.box table tr.selected td {
1512 background: #FFC;
1512 background: #FFC;
1513 }
1513 }
1514
1514
1515 #content div.box table td.selected {
1515 #content div.box table td.selected {
1516 width: 3%;
1516 width: 3%;
1517 text-align: center;
1517 text-align: center;
1518 vertical-align: middle;
1518 vertical-align: middle;
1519 padding: 0;
1519 padding: 0;
1520 }
1520 }
1521
1521
1522 #content div.box table td.action {
1522 #content div.box table td.action {
1523 width: 45%;
1523 width: 45%;
1524 text-align: left;
1524 text-align: left;
1525 }
1525 }
1526
1526
1527 #content div.box table td.date {
1527 #content div.box table td.date {
1528 width: 33%;
1528 width: 33%;
1529 text-align: center;
1529 text-align: center;
1530 }
1530 }
1531
1531
1532 #content div.box div.action {
1532 #content div.box div.action {
1533 float: right;
1533 float: right;
1534 background: #FFF;
1534 background: #FFF;
1535 text-align: right;
1535 text-align: right;
1536 margin: 10px 0 0;
1536 margin: 10px 0 0;
1537 padding: 0;
1537 padding: 0;
1538 }
1538 }
1539
1539
1540 #content div.box div.action select {
1540 #content div.box div.action select {
1541 font-size: 11px;
1541 font-size: 11px;
1542 margin: 0;
1542 margin: 0;
1543 }
1543 }
1544
1544
1545 #content div.box div.action .ui-selectmenu {
1545 #content div.box div.action .ui-selectmenu {
1546 margin: 0;
1546 margin: 0;
1547 padding: 0;
1547 padding: 0;
1548 }
1548 }
1549
1549
1550 #content div.box div.pagination {
1550 #content div.box div.pagination {
1551 height: 1%;
1551 height: 1%;
1552 clear: both;
1552 clear: both;
1553 overflow: hidden;
1553 overflow: hidden;
1554 margin: 10px 0 0;
1554 margin: 10px 0 0;
1555 padding: 0;
1555 padding: 0;
1556 }
1556 }
1557
1557
1558 #content div.box div.pagination ul.pager {
1558 #content div.box div.pagination ul.pager {
1559 float: right;
1559 float: right;
1560 text-align: right;
1560 text-align: right;
1561 margin: 0;
1561 margin: 0;
1562 padding: 0;
1562 padding: 0;
1563 }
1563 }
1564
1564
1565 #content div.box div.pagination ul.pager li {
1565 #content div.box div.pagination ul.pager li {
1566 height: 1%;
1566 height: 1%;
1567 float: left;
1567 float: left;
1568 list-style: none;
1568 list-style: none;
1569 background: #ebebeb url("../images/pager.png") repeat-x;
1569 background: #ebebeb url("../images/pager.png") repeat-x;
1570 border-top: 1px solid #dedede;
1570 border-top: 1px solid #dedede;
1571 border-left: 1px solid #cfcfcf;
1571 border-left: 1px solid #cfcfcf;
1572 border-right: 1px solid #c4c4c4;
1572 border-right: 1px solid #c4c4c4;
1573 border-bottom: 1px solid #c4c4c4;
1573 border-bottom: 1px solid #c4c4c4;
1574 color: #4A4A4A;
1574 color: #4A4A4A;
1575 font-weight: 700;
1575 font-weight: 700;
1576 margin: 0 0 0 4px;
1576 margin: 0 0 0 4px;
1577 padding: 0;
1577 padding: 0;
1578 }
1578 }
1579
1579
1580 #content div.box div.pagination ul.pager li.separator {
1580 #content div.box div.pagination ul.pager li.separator {
1581 padding: 6px;
1581 padding: 6px;
1582 }
1582 }
1583
1583
1584 #content div.box div.pagination ul.pager li.current {
1584 #content div.box div.pagination ul.pager li.current {
1585 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1585 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1586 border-top: 1px solid #ccc;
1586 border-top: 1px solid #ccc;
1587 border-left: 1px solid #bebebe;
1587 border-left: 1px solid #bebebe;
1588 border-right: 1px solid #b1b1b1;
1588 border-right: 1px solid #b1b1b1;
1589 border-bottom: 1px solid #afafaf;
1589 border-bottom: 1px solid #afafaf;
1590 color: #515151;
1590 color: #515151;
1591 padding: 6px;
1591 padding: 6px;
1592 }
1592 }
1593
1593
1594 #content div.box div.pagination ul.pager li a {
1594 #content div.box div.pagination ul.pager li a {
1595 height: 1%;
1595 height: 1%;
1596 display: block;
1596 display: block;
1597 float: left;
1597 float: left;
1598 color: #515151;
1598 color: #515151;
1599 text-decoration: none;
1599 text-decoration: none;
1600 margin: 0;
1600 margin: 0;
1601 padding: 6px;
1601 padding: 6px;
1602 }
1602 }
1603
1603
1604 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active
1604 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active
1605 {
1605 {
1606 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1606 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1607 border-top: 1px solid #ccc;
1607 border-top: 1px solid #ccc;
1608 border-left: 1px solid #bebebe;
1608 border-left: 1px solid #bebebe;
1609 border-right: 1px solid #b1b1b1;
1609 border-right: 1px solid #b1b1b1;
1610 border-bottom: 1px solid #afafaf;
1610 border-bottom: 1px solid #afafaf;
1611 margin: -1px;
1611 margin: -1px;
1612 }
1612 }
1613
1613
1614 #content div.box div.pagination-wh {
1614 #content div.box div.pagination-wh {
1615 height: 1%;
1615 height: 1%;
1616 clear: both;
1616 clear: both;
1617 overflow: hidden;
1617 overflow: hidden;
1618 text-align: right;
1618 text-align: right;
1619 margin: 10px 0 0;
1619 margin: 10px 0 0;
1620 padding: 0;
1620 padding: 0;
1621 }
1621 }
1622
1622
1623 #content div.box div.pagination-right {
1623 #content div.box div.pagination-right {
1624 float: right;
1624 float: right;
1625 }
1625 }
1626
1626
1627 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot
1627 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot
1628 {
1628 {
1629 height: 1%;
1629 height: 1%;
1630 float: left;
1630 float: left;
1631 background: #ebebeb url("../images/pager.png") repeat-x;
1631 background: #ebebeb url("../images/pager.png") repeat-x;
1632 border-top: 1px solid #dedede;
1632 border-top: 1px solid #dedede;
1633 border-left: 1px solid #cfcfcf;
1633 border-left: 1px solid #cfcfcf;
1634 border-right: 1px solid #c4c4c4;
1634 border-right: 1px solid #c4c4c4;
1635 border-bottom: 1px solid #c4c4c4;
1635 border-bottom: 1px solid #c4c4c4;
1636 color: #4A4A4A;
1636 color: #4A4A4A;
1637 font-weight: 700;
1637 font-weight: 700;
1638 margin: 0 0 0 4px;
1638 margin: 0 0 0 4px;
1639 padding: 6px;
1639 padding: 6px;
1640 }
1640 }
1641
1641
1642 #content div.box div.pagination-wh span.pager_curpage {
1642 #content div.box div.pagination-wh span.pager_curpage {
1643 height: 1%;
1643 height: 1%;
1644 float: left;
1644 float: left;
1645 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1645 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1646 border-top: 1px solid #ccc;
1646 border-top: 1px solid #ccc;
1647 border-left: 1px solid #bebebe;
1647 border-left: 1px solid #bebebe;
1648 border-right: 1px solid #b1b1b1;
1648 border-right: 1px solid #b1b1b1;
1649 border-bottom: 1px solid #afafaf;
1649 border-bottom: 1px solid #afafaf;
1650 color: #515151;
1650 color: #515151;
1651 font-weight: 700;
1651 font-weight: 700;
1652 margin: 0 0 0 4px;
1652 margin: 0 0 0 4px;
1653 padding: 6px;
1653 padding: 6px;
1654 }
1654 }
1655
1655
1656 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active
1656 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active
1657 {
1657 {
1658 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1658 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1659 border-top: 1px solid #ccc;
1659 border-top: 1px solid #ccc;
1660 border-left: 1px solid #bebebe;
1660 border-left: 1px solid #bebebe;
1661 border-right: 1px solid #b1b1b1;
1661 border-right: 1px solid #b1b1b1;
1662 border-bottom: 1px solid #afafaf;
1662 border-bottom: 1px solid #afafaf;
1663 text-decoration: none;
1663 text-decoration: none;
1664 }
1664 }
1665
1665
1666 #content div.box div.traffic div.legend {
1666 #content div.box div.traffic div.legend {
1667 clear: both;
1667 clear: both;
1668 overflow: hidden;
1668 overflow: hidden;
1669 border-bottom: 1px solid #ddd;
1669 border-bottom: 1px solid #ddd;
1670 margin: 0 0 10px;
1670 margin: 0 0 10px;
1671 padding: 0 0 10px;
1671 padding: 0 0 10px;
1672 }
1672 }
1673
1673
1674 #content div.box div.traffic div.legend h6 {
1674 #content div.box div.traffic div.legend h6 {
1675 float: left;
1675 float: left;
1676 border: none;
1676 border: none;
1677 margin: 0;
1677 margin: 0;
1678 padding: 0;
1678 padding: 0;
1679 }
1679 }
1680
1680
1681 #content div.box div.traffic div.legend li {
1681 #content div.box div.traffic div.legend li {
1682 list-style: none;
1682 list-style: none;
1683 float: left;
1683 float: left;
1684 font-size: 11px;
1684 font-size: 11px;
1685 margin: 0;
1685 margin: 0;
1686 padding: 0 8px 0 4px;
1686 padding: 0 8px 0 4px;
1687 }
1687 }
1688
1688
1689 #content div.box div.traffic div.legend li.visits {
1689 #content div.box div.traffic div.legend li.visits {
1690 border-left: 12px solid #edc240;
1690 border-left: 12px solid #edc240;
1691 }
1691 }
1692
1692
1693 #content div.box div.traffic div.legend li.pageviews {
1693 #content div.box div.traffic div.legend li.pageviews {
1694 border-left: 12px solid #afd8f8;
1694 border-left: 12px solid #afd8f8;
1695 }
1695 }
1696
1696
1697 #content div.box div.traffic table {
1697 #content div.box div.traffic table {
1698 width: auto;
1698 width: auto;
1699 }
1699 }
1700
1700
1701 #content div.box div.traffic table td {
1701 #content div.box div.traffic table td {
1702 background: transparent;
1702 background: transparent;
1703 border: none;
1703 border: none;
1704 padding: 2px 3px 3px;
1704 padding: 2px 3px 3px;
1705 }
1705 }
1706
1706
1707 #content div.box div.traffic table td.legendLabel {
1707 #content div.box div.traffic table td.legendLabel {
1708 padding: 0 3px 2px;
1708 padding: 0 3px 2px;
1709 }
1709 }
1710
1710
1711 #summary {
1711 #summary {
1712
1712
1713 }
1713 }
1714
1714
1715 #summary .desc {
1715 #summary .desc {
1716 white-space: pre;
1716 white-space: pre;
1717 width: 100%;
1717 width: 100%;
1718 }
1718 }
1719
1719
1720 #summary .repo_name {
1720 #summary .repo_name {
1721 font-size: 1.6em;
1721 font-size: 1.6em;
1722 font-weight: bold;
1722 font-weight: bold;
1723 vertical-align: baseline;
1723 vertical-align: baseline;
1724 clear: right
1724 clear: right
1725 }
1725 }
1726
1726
1727 #footer {
1727 #footer {
1728 clear: both;
1728 clear: both;
1729 overflow: hidden;
1729 overflow: hidden;
1730 text-align: right;
1730 text-align: right;
1731 margin: 0;
1731 margin: 0;
1732 padding: 0 10px 4px;
1732 padding: 0 10px 4px;
1733 margin: -10px 0 0;
1733 margin: -10px 0 0;
1734 }
1734 }
1735
1735
1736 #footer div#footer-inner {
1736 #footer div#footer-inner {
1737 background-color: #eedc94; background-repeat : repeat-x;
1737 background-color: #eedc94; background-repeat : repeat-x;
1738 background-image : -khtml-gradient( linear, left top, left bottom,
1738 background-image : -khtml-gradient( linear, left top, left bottom,
1739 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1739 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1740 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1740 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1741 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1741 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1742 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1742 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1743 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1743 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1744 background-image : -o-linear-gradient( top, #003b76, #00376e));
1744 background-image : -o-linear-gradient( top, #003b76, #00376e));
1745 background-image : linear-gradient( top, #003b76, #00376e); filter :
1745 background-image : linear-gradient( top, #003b76, #00376e); filter :
1746 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1746 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1747 '#003b76', endColorstr = '#00376e', GradientType = 0);
1747 '#003b76', endColorstr = '#00376e', GradientType = 0);
1748 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1748 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1749 -webkit-border-radius: 4px 4px 4px 4px;
1749 -webkit-border-radius: 4px 4px 4px 4px;
1750 -khtml-border-radius: 4px 4px 4px 4px;
1750 -khtml-border-radius: 4px 4px 4px 4px;
1751 -moz-border-radius: 4px 4px 4px 4px;
1751 -moz-border-radius: 4px 4px 4px 4px;
1752 border-radius: 4px 4px 4px 4px;
1752 border-radius: 4px 4px 4px 4px;
1753 background-repeat: repeat-x;
1753 background-repeat: repeat-x;
1754 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1754 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1755 to(#eedc94) );
1755 to(#eedc94) );
1756 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1756 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1757 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1757 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1758 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1758 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1759 color-stop(100%, #00376e) );
1759 color-stop(100%, #00376e) );
1760 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1760 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1761 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1761 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1762 background-image: linear-gradient(top, #003b76, #00376e);
1762 background-image: linear-gradient(top, #003b76, #00376e);
1763 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1763 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1764 endColorstr='#00376e', GradientType=0 );
1764 endColorstr='#00376e', GradientType=0 );
1765 }
1765 }
1766
1766
1767 #footer div#footer-inner p {
1767 #footer div#footer-inner p {
1768 padding: 15px 25px 15px 0;
1768 padding: 15px 25px 15px 0;
1769 color: #FFF;
1769 color: #FFF;
1770 font-weight: 700;
1770 font-weight: 700;
1771 }
1771 }
1772
1772
1773 #footer div#footer-inner .footer-link {
1773 #footer div#footer-inner .footer-link {
1774 float: left;
1774 float: left;
1775 padding-left: 10px;
1775 padding-left: 10px;
1776 }
1776 }
1777
1777
1778 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a
1778 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a
1779 {
1779 {
1780 color: #FFF;
1780 color: #FFF;
1781 }
1781 }
1782
1782
1783 #login div.title {
1783 #login div.title {
1784 width: 420px;
1784 width: 420px;
1785 clear: both;
1785 clear: both;
1786 overflow: hidden;
1786 overflow: hidden;
1787 position: relative;
1787 position: relative;
1788 background-color: #eedc94; background-repeat : repeat-x;
1788 background-color: #eedc94; background-repeat : repeat-x;
1789 background-image : -khtml-gradient( linear, left top, left bottom,
1789 background-image : -khtml-gradient( linear, left top, left bottom,
1790 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1790 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1791 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1791 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1792 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1792 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1793 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1793 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1794 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1794 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1795 background-image : -o-linear-gradient( top, #003b76, #00376e));
1795 background-image : -o-linear-gradient( top, #003b76, #00376e));
1796 background-image : linear-gradient( top, #003b76, #00376e); filter :
1796 background-image : linear-gradient( top, #003b76, #00376e); filter :
1797 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1797 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1798 '#003b76', endColorstr = '#00376e', GradientType = 0);
1798 '#003b76', endColorstr = '#00376e', GradientType = 0);
1799 margin: 0 auto;
1799 margin: 0 auto;
1800 padding: 0;
1800 padding: 0;
1801 background-repeat: repeat-x;
1801 background-repeat: repeat-x;
1802 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1802 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1803 to(#eedc94) );
1803 to(#eedc94) );
1804 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1804 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1805 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1805 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1806 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1806 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1807 color-stop(100%, #00376e) );
1807 color-stop(100%, #00376e) );
1808 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1808 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1809 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1809 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1810 background-image: linear-gradient(top, #003b76, #00376e);
1810 background-image: linear-gradient(top, #003b76, #00376e);
1811 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1811 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1812 endColorstr='#00376e', GradientType=0 );
1812 endColorstr='#00376e', GradientType=0 );
1813 }
1813 }
1814
1814
1815 #login div.inner {
1815 #login div.inner {
1816 width: 380px;
1816 width: 380px;
1817 background: #FFF url("../images/login.png") no-repeat top left;
1817 background: #FFF url("../images/login.png") no-repeat top left;
1818 border-top: none;
1818 border-top: none;
1819 border-bottom: none;
1819 border-bottom: none;
1820 margin: 0 auto;
1820 margin: 0 auto;
1821 padding: 20px;
1821 padding: 20px;
1822 }
1822 }
1823
1823
1824 #login div.form div.fields div.field div.label {
1824 #login div.form div.fields div.field div.label {
1825 width: 173px;
1825 width: 173px;
1826 float: left;
1826 float: left;
1827 text-align: right;
1827 text-align: right;
1828 margin: 2px 10px 0 0;
1828 margin: 2px 10px 0 0;
1829 padding: 5px 0 0 5px;
1829 padding: 5px 0 0 5px;
1830 }
1830 }
1831
1831
1832 #login div.form div.fields div.field div.input input {
1832 #login div.form div.fields div.field div.input input {
1833 width: 176px;
1833 width: 176px;
1834 background: #FFF;
1834 background: #FFF;
1835 border-top: 1px solid #b3b3b3;
1835 border-top: 1px solid #b3b3b3;
1836 border-left: 1px solid #b3b3b3;
1836 border-left: 1px solid #b3b3b3;
1837 border-right: 1px solid #eaeaea;
1837 border-right: 1px solid #eaeaea;
1838 border-bottom: 1px solid #eaeaea;
1838 border-bottom: 1px solid #eaeaea;
1839 color: #000;
1839 color: #000;
1840 font-size: 11px;
1840 font-size: 11px;
1841 margin: 0;
1841 margin: 0;
1842 padding: 7px 7px 6px;
1842 padding: 7px 7px 6px;
1843 }
1843 }
1844
1844
1845 #login div.form div.fields div.buttons {
1845 #login div.form div.fields div.buttons {
1846 clear: both;
1846 clear: both;
1847 overflow: hidden;
1847 overflow: hidden;
1848 border-top: 1px solid #DDD;
1848 border-top: 1px solid #DDD;
1849 text-align: right;
1849 text-align: right;
1850 margin: 0;
1850 margin: 0;
1851 padding: 10px 0 0;
1851 padding: 10px 0 0;
1852 }
1852 }
1853
1853
1854 #login div.form div.links {
1854 #login div.form div.links {
1855 clear: both;
1855 clear: both;
1856 overflow: hidden;
1856 overflow: hidden;
1857 margin: 10px 0 0;
1857 margin: 10px 0 0;
1858 padding: 0 0 2px;
1858 padding: 0 0 2px;
1859 }
1859 }
1860
1860
1861 #quick_login {
1861 #quick_login {
1862 top: 31px;
1862 top: 31px;
1863 background-color: rgb(0, 51, 103);
1863 background-color: rgb(0, 51, 103);
1864 z-index: 999;
1864 z-index: 999;
1865 height: 150px;
1865 height: 150px;
1866 position: absolute;
1866 position: absolute;
1867 margin-left: -16px;
1867 margin-left: -16px;
1868 width: 281px;
1868 width: 281px;
1869 -webkit-border-radius: 0px 0px 4px 4px;
1869 -webkit-border-radius: 0px 0px 4px 4px;
1870 -khtml-border-radius: 0px 0px 4px 4px;
1870 -khtml-border-radius: 0px 0px 4px 4px;
1871 -moz-border-radius: 0px 0px 4px 4px;
1871 -moz-border-radius: 0px 0px 4px 4px;
1872 border-radius: 0px 0px 4px 4px;
1872 border-radius: 0px 0px 4px 4px;
1873 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1873 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1874 }
1874 }
1875
1875
1876 #quick_login .password_forgoten {
1876 #quick_login .password_forgoten {
1877 padding-right: 10px;
1877 padding-right: 10px;
1878 padding-top: 0px;
1878 padding-top: 0px;
1879 float: left;
1879 float: left;
1880 }
1880 }
1881
1881
1882 #quick_login .password_forgoten a {
1882 #quick_login .password_forgoten a {
1883 font-size: 10px
1883 font-size: 10px
1884 }
1884 }
1885
1885
1886 #quick_login .register {
1886 #quick_login .register {
1887 padding-right: 10px;
1887 padding-right: 10px;
1888 padding-top: 5px;
1888 padding-top: 5px;
1889 float: left;
1889 float: left;
1890 }
1890 }
1891
1891
1892 #quick_login .register a {
1892 #quick_login .register a {
1893 font-size: 10px
1893 font-size: 10px
1894 }
1894 }
1895
1895
1896 #quick_login div.form div.fields {
1896 #quick_login div.form div.fields {
1897 padding-top: 2px;
1897 padding-top: 2px;
1898 padding-left: 10px;
1898 padding-left: 10px;
1899 }
1899 }
1900
1900
1901 #quick_login div.form div.fields div.field {
1901 #quick_login div.form div.fields div.field {
1902 padding: 5px;
1902 padding: 5px;
1903 }
1903 }
1904
1904
1905 #quick_login div.form div.fields div.field div.label label {
1905 #quick_login div.form div.fields div.field div.label label {
1906 color: #fff;
1906 color: #fff;
1907 padding-bottom: 3px;
1907 padding-bottom: 3px;
1908 }
1908 }
1909
1909
1910 #quick_login div.form div.fields div.field div.input input {
1910 #quick_login div.form div.fields div.field div.input input {
1911 width: 236px;
1911 width: 236px;
1912 background: #FFF;
1912 background: #FFF;
1913 border-top: 1px solid #b3b3b3;
1913 border-top: 1px solid #b3b3b3;
1914 border-left: 1px solid #b3b3b3;
1914 border-left: 1px solid #b3b3b3;
1915 border-right: 1px solid #eaeaea;
1915 border-right: 1px solid #eaeaea;
1916 border-bottom: 1px solid #eaeaea;
1916 border-bottom: 1px solid #eaeaea;
1917 color: #000;
1917 color: #000;
1918 font-size: 11px;
1918 font-size: 11px;
1919 margin: 0;
1919 margin: 0;
1920 padding: 5px 7px 4px;
1920 padding: 5px 7px 4px;
1921 }
1921 }
1922
1922
1923 #quick_login div.form div.fields div.buttons {
1923 #quick_login div.form div.fields div.buttons {
1924 clear: both;
1924 clear: both;
1925 overflow: hidden;
1925 overflow: hidden;
1926 text-align: right;
1926 text-align: right;
1927 margin: 0;
1927 margin: 0;
1928 padding: 10px 14px 0px 5px;
1928 padding: 10px 14px 0px 5px;
1929 }
1929 }
1930
1930
1931 #quick_login div.form div.links {
1931 #quick_login div.form div.links {
1932 clear: both;
1932 clear: both;
1933 overflow: hidden;
1933 overflow: hidden;
1934 margin: 10px 0 0;
1934 margin: 10px 0 0;
1935 padding: 0 0 2px;
1935 padding: 0 0 2px;
1936 }
1936 }
1937
1937
1938 #register div.title {
1938 #register div.title {
1939 clear: both;
1939 clear: both;
1940 overflow: hidden;
1940 overflow: hidden;
1941 position: relative;
1941 position: relative;
1942 background-color: #eedc94;
1942 background-color: #eedc94;
1943 background-repeat: repeat-x;
1943 background-repeat: repeat-x;
1944 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1944 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1945 to(#eedc94) );
1945 to(#eedc94) );
1946 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1946 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1947 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1947 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1948 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1948 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1949 color-stop(100%, #00376e) );
1949 color-stop(100%, #00376e) );
1950 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1950 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1951 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1951 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1952 background-image: linear-gradient(top, #003b76, #00376e);
1952 background-image: linear-gradient(top, #003b76, #00376e);
1953 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1953 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1954 endColorstr='#00376e', GradientType=0 );
1954 endColorstr='#00376e', GradientType=0 );
1955 margin: 0 auto;
1955 margin: 0 auto;
1956 padding: 0;
1956 padding: 0;
1957 }
1957 }
1958
1958
1959 #register div.inner {
1959 #register div.inner {
1960 background: #FFF;
1960 background: #FFF;
1961 border-top: none;
1961 border-top: none;
1962 border-bottom: none;
1962 border-bottom: none;
1963 margin: 0 auto;
1963 margin: 0 auto;
1964 padding: 20px;
1964 padding: 20px;
1965 }
1965 }
1966
1966
1967 #register div.form div.fields div.field div.label {
1967 #register div.form div.fields div.field div.label {
1968 width: 135px;
1968 width: 135px;
1969 float: left;
1969 float: left;
1970 text-align: right;
1970 text-align: right;
1971 margin: 2px 10px 0 0;
1971 margin: 2px 10px 0 0;
1972 padding: 5px 0 0 5px;
1972 padding: 5px 0 0 5px;
1973 }
1973 }
1974
1974
1975 #register div.form div.fields div.field div.input input {
1975 #register div.form div.fields div.field div.input input {
1976 width: 300px;
1976 width: 300px;
1977 background: #FFF;
1977 background: #FFF;
1978 border-top: 1px solid #b3b3b3;
1978 border-top: 1px solid #b3b3b3;
1979 border-left: 1px solid #b3b3b3;
1979 border-left: 1px solid #b3b3b3;
1980 border-right: 1px solid #eaeaea;
1980 border-right: 1px solid #eaeaea;
1981 border-bottom: 1px solid #eaeaea;
1981 border-bottom: 1px solid #eaeaea;
1982 color: #000;
1982 color: #000;
1983 font-size: 11px;
1983 font-size: 11px;
1984 margin: 0;
1984 margin: 0;
1985 padding: 7px 7px 6px;
1985 padding: 7px 7px 6px;
1986 }
1986 }
1987
1987
1988 #register div.form div.fields div.buttons {
1988 #register div.form div.fields div.buttons {
1989 clear: both;
1989 clear: both;
1990 overflow: hidden;
1990 overflow: hidden;
1991 border-top: 1px solid #DDD;
1991 border-top: 1px solid #DDD;
1992 text-align: left;
1992 text-align: left;
1993 margin: 0;
1993 margin: 0;
1994 padding: 10px 0 0 150px;
1994 padding: 10px 0 0 150px;
1995 }
1995 }
1996
1996
1997 #register div.form div.activation_msg {
1997 #register div.form div.activation_msg {
1998 padding-top: 4px;
1998 padding-top: 4px;
1999 padding-bottom: 4px;
1999 padding-bottom: 4px;
2000 }
2000 }
2001
2001
2002 #journal .journal_day {
2002 #journal .journal_day {
2003 font-size: 20px;
2003 font-size: 20px;
2004 padding: 10px 0px;
2004 padding: 10px 0px;
2005 border-bottom: 2px solid #DDD;
2005 border-bottom: 2px solid #DDD;
2006 margin-left: 10px;
2006 margin-left: 10px;
2007 margin-right: 10px;
2007 margin-right: 10px;
2008 }
2008 }
2009
2009
2010 #journal .journal_container {
2010 #journal .journal_container {
2011 padding: 5px;
2011 padding: 5px;
2012 clear: both;
2012 clear: both;
2013 margin: 0px 5px 0px 10px;
2013 margin: 0px 5px 0px 10px;
2014 }
2014 }
2015
2015
2016 #journal .journal_action_container {
2016 #journal .journal_action_container {
2017 padding-left: 38px;
2017 padding-left: 38px;
2018 }
2018 }
2019
2019
2020 #journal .journal_user {
2020 #journal .journal_user {
2021 color: #747474;
2021 color: #747474;
2022 font-size: 14px;
2022 font-size: 14px;
2023 font-weight: bold;
2023 font-weight: bold;
2024 height: 30px;
2024 height: 30px;
2025 }
2025 }
2026
2026
2027 #journal .journal_icon {
2027 #journal .journal_icon {
2028 clear: both;
2028 clear: both;
2029 float: left;
2029 float: left;
2030 padding-right: 4px;
2030 padding-right: 4px;
2031 padding-top: 3px;
2031 padding-top: 3px;
2032 }
2032 }
2033
2033
2034 #journal .journal_action {
2034 #journal .journal_action {
2035 padding-top: 4px;
2035 padding-top: 4px;
2036 min-height: 2px;
2036 min-height: 2px;
2037 float: left
2037 float: left
2038 }
2038 }
2039
2039
2040 #journal .journal_action_params {
2040 #journal .journal_action_params {
2041 clear: left;
2041 clear: left;
2042 padding-left: 22px;
2042 padding-left: 22px;
2043 }
2043 }
2044
2044
2045 #journal .journal_repo {
2045 #journal .journal_repo {
2046 float: left;
2046 float: left;
2047 margin-left: 6px;
2047 margin-left: 6px;
2048 padding-top: 3px;
2048 padding-top: 3px;
2049 }
2049 }
2050
2050
2051 #journal .date {
2051 #journal .date {
2052 clear: both;
2052 clear: both;
2053 color: #777777;
2053 color: #777777;
2054 font-size: 11px;
2054 font-size: 11px;
2055 padding-left: 22px;
2055 padding-left: 22px;
2056 }
2056 }
2057
2057
2058 #journal .journal_repo .journal_repo_name {
2058 #journal .journal_repo .journal_repo_name {
2059 font-weight: bold;
2059 font-weight: bold;
2060 font-size: 1.1em;
2060 font-size: 1.1em;
2061 }
2061 }
2062
2062
2063 #journal .compare_view {
2063 #journal .compare_view {
2064 padding: 5px 0px 5px 0px;
2064 padding: 5px 0px 5px 0px;
2065 width: 95px;
2065 width: 95px;
2066 }
2066 }
2067
2067
2068 .journal_highlight {
2068 .journal_highlight {
2069 font-weight: bold;
2069 font-weight: bold;
2070 padding: 0 2px;
2070 padding: 0 2px;
2071 vertical-align: bottom;
2071 vertical-align: bottom;
2072 }
2072 }
2073
2073
2074 .trending_language_tbl,.trending_language_tbl td {
2074 .trending_language_tbl,.trending_language_tbl td {
2075 border: 0 !important;
2075 border: 0 !important;
2076 margin: 0 !important;
2076 margin: 0 !important;
2077 padding: 0 !important;
2077 padding: 0 !important;
2078 }
2078 }
2079
2079
2080 .trending_language_tbl,.trending_language_tbl tr {
2080 .trending_language_tbl,.trending_language_tbl tr {
2081 border-spacing: 1px;
2081 border-spacing: 1px;
2082 }
2082 }
2083
2083
2084 .trending_language {
2084 .trending_language {
2085 background-color: #003367;
2085 background-color: #003367;
2086 color: #FFF;
2086 color: #FFF;
2087 display: block;
2087 display: block;
2088 min-width: 20px;
2088 min-width: 20px;
2089 text-decoration: none;
2089 text-decoration: none;
2090 height: 12px;
2090 height: 12px;
2091 margin-bottom: 0px;
2091 margin-bottom: 0px;
2092 margin-left: 5px;
2092 margin-left: 5px;
2093 white-space: pre;
2093 white-space: pre;
2094 padding: 3px;
2094 padding: 3px;
2095 }
2095 }
2096
2096
2097 h3.files_location {
2097 h3.files_location {
2098 font-size: 1.8em;
2098 font-size: 1.8em;
2099 font-weight: 700;
2099 font-weight: 700;
2100 border-bottom: none !important;
2100 border-bottom: none !important;
2101 margin: 10px 0 !important;
2101 margin: 10px 0 !important;
2102 }
2102 }
2103
2103
2104 #files_data dl dt {
2104 #files_data dl dt {
2105 float: left;
2105 float: left;
2106 width: 60px;
2106 width: 60px;
2107 margin: 0 !important;
2107 margin: 0 !important;
2108 padding: 5px;
2108 padding: 5px;
2109 }
2109 }
2110
2110
2111 #files_data dl dd {
2111 #files_data dl dd {
2112 margin: 0 !important;
2112 margin: 0 !important;
2113 padding: 5px !important;
2113 padding: 5px !important;
2114 }
2114 }
2115
2115
2116 #changeset_content {
2116 #changeset_content {
2117 border: 1px solid #CCC;
2117 border: 1px solid #CCC;
2118 padding: 5px;
2118 padding: 5px;
2119 }
2119 }
2120
2120
2121 #changeset_compare_view_content {
2121 #changeset_compare_view_content {
2122 border: 1px solid #CCC;
2122 border: 1px solid #CCC;
2123 padding: 5px;
2123 padding: 5px;
2124 }
2124 }
2125
2125
2126 #changeset_content .container {
2126 #changeset_content .container {
2127 min-height: 120px;
2127 min-height: 120px;
2128 font-size: 1.2em;
2128 font-size: 1.2em;
2129 overflow: hidden;
2129 overflow: hidden;
2130 }
2130 }
2131
2131
2132 #changeset_compare_view_content .compare_view_commits {
2132 #changeset_compare_view_content .compare_view_commits {
2133 width: auto !important;
2133 width: auto !important;
2134 }
2134 }
2135
2135
2136 #changeset_compare_view_content .compare_view_commits td {
2136 #changeset_compare_view_content .compare_view_commits td {
2137 padding: 0px 0px 0px 12px !important;
2137 padding: 0px 0px 0px 12px !important;
2138 }
2138 }
2139
2139
2140 #changeset_content .container .right {
2140 #changeset_content .container .right {
2141 float: right;
2141 float: right;
2142 width: 25%;
2142 width: 25%;
2143 text-align: right;
2143 text-align: right;
2144 }
2144 }
2145
2145
2146 #changeset_content .container .left .message {
2146 #changeset_content .container .left .message {
2147 font-style: italic;
2147 font-style: italic;
2148 color: #556CB5;
2148 color: #556CB5;
2149 white-space: pre-wrap;
2149 white-space: pre-wrap;
2150 }
2150 }
2151 #changeset_content .container .left .message a:hover {
2151 #changeset_content .container .left .message a:hover {
2152 text-decoration: none;
2152 text-decoration: none;
2153 }
2153 }
2154 .cs_files .cur_cs {
2154 .cs_files .cur_cs {
2155 margin: 10px 2px;
2155 margin: 10px 2px;
2156 font-weight: bold;
2156 font-weight: bold;
2157 }
2157 }
2158
2158
2159 .cs_files .node {
2159 .cs_files .node {
2160 float: left;
2160 float: left;
2161 }
2161 }
2162
2162
2163 .cs_files .changes {
2163 .cs_files .changes {
2164 float: right;
2164 float: right;
2165 color:#003367;
2165 color:#003367;
2166
2166
2167 }
2167 }
2168
2168
2169 .cs_files .changes .added {
2169 .cs_files .changes .added {
2170 background-color: #BBFFBB;
2170 background-color: #BBFFBB;
2171 float: left;
2171 float: left;
2172 text-align: center;
2172 text-align: center;
2173 font-size: 9px;
2173 font-size: 9px;
2174 padding: 2px 0px 2px 0px;
2174 padding: 2px 0px 2px 0px;
2175 }
2175 }
2176
2176
2177 .cs_files .changes .deleted {
2177 .cs_files .changes .deleted {
2178 background-color: #FF8888;
2178 background-color: #FF8888;
2179 float: left;
2179 float: left;
2180 text-align: center;
2180 text-align: center;
2181 font-size: 9px;
2181 font-size: 9px;
2182 padding: 2px 0px 2px 0px;
2182 padding: 2px 0px 2px 0px;
2183 }
2183 }
2184
2184
2185 .cs_files .cs_added {
2185 .cs_files .cs_added {
2186 background: url("../images/icons/page_white_add.png") no-repeat scroll
2186 background: url("../images/icons/page_white_add.png") no-repeat scroll
2187 3px;
2187 3px;
2188 height: 16px;
2188 height: 16px;
2189 padding-left: 20px;
2189 padding-left: 20px;
2190 margin-top: 7px;
2190 margin-top: 7px;
2191 text-align: left;
2191 text-align: left;
2192 }
2192 }
2193
2193
2194 .cs_files .cs_changed {
2194 .cs_files .cs_changed {
2195 background: url("../images/icons/page_white_edit.png") no-repeat scroll
2195 background: url("../images/icons/page_white_edit.png") no-repeat scroll
2196 3px;
2196 3px;
2197 height: 16px;
2197 height: 16px;
2198 padding-left: 20px;
2198 padding-left: 20px;
2199 margin-top: 7px;
2199 margin-top: 7px;
2200 text-align: left;
2200 text-align: left;
2201 }
2201 }
2202
2202
2203 .cs_files .cs_removed {
2203 .cs_files .cs_removed {
2204 background: url("../images/icons/page_white_delete.png") no-repeat
2204 background: url("../images/icons/page_white_delete.png") no-repeat
2205 scroll 3px;
2205 scroll 3px;
2206 height: 16px;
2206 height: 16px;
2207 padding-left: 20px;
2207 padding-left: 20px;
2208 margin-top: 7px;
2208 margin-top: 7px;
2209 text-align: left;
2209 text-align: left;
2210 }
2210 }
2211
2211
2212 #graph {
2212 #graph {
2213 overflow: hidden;
2213 overflow: hidden;
2214 }
2214 }
2215
2215
2216 #graph_nodes {
2216 #graph_nodes {
2217 float: left;
2217 float: left;
2218 margin-right: -6px;
2218 margin-right: -6px;
2219 margin-top: 0px;
2219 margin-top: 0px;
2220 }
2220 }
2221
2221
2222 #graph_content {
2222 #graph_content {
2223 width: 800px;
2223 width: 800px;
2224 float: left;
2224 float: left;
2225 }
2225 }
2226
2226
2227 #graph_content .container_header {
2227 #graph_content .container_header {
2228 border: 1px solid #CCC;
2228 border: 1px solid #CCC;
2229 padding: 10px;
2229 padding: 10px;
2230 height: 45px;
2230 height: 45px;
2231 -webkit-border-radius: 6px 6px 0px 0px;
2231 -webkit-border-radius: 6px 6px 0px 0px;
2232 -moz-border-radius: 6px 6px 0px 0px;
2232 -moz-border-radius: 6px 6px 0px 0px;
2233 border-radius: 6px 6px 0px 0px;
2233 border-radius: 6px 6px 0px 0px;
2234 }
2234 }
2235
2235
2236 #graph_content #rev_range_container {
2236 #graph_content #rev_range_container {
2237 padding: 10px 0px;
2237 padding: 10px 0px;
2238 clear: both;
2238 clear: both;
2239 }
2239 }
2240
2240
2241 #graph_content .container {
2241 #graph_content .container {
2242 border-bottom: 1px solid #CCC;
2242 border-bottom: 1px solid #CCC;
2243 border-left: 1px solid #CCC;
2243 border-left: 1px solid #CCC;
2244 border-right: 1px solid #CCC;
2244 border-right: 1px solid #CCC;
2245 min-height: 70px;
2245 min-height: 70px;
2246 overflow: hidden;
2246 overflow: hidden;
2247 font-size: 1.2em;
2247 font-size: 1.2em;
2248 }
2248 }
2249
2249
2250 #graph_content .container .right {
2250 #graph_content .container .right {
2251 float: right;
2251 float: right;
2252 width: 28%;
2252 width: 28%;
2253 text-align: right;
2253 text-align: right;
2254 padding-bottom: 5px;
2254 padding-bottom: 5px;
2255 }
2255 }
2256
2256
2257 #graph_content .container .left .date {
2257 #graph_content .container .left .date {
2258 font-weight: 700;
2258 font-weight: 700;
2259 padding-bottom: 5px;
2259 padding-bottom: 5px;
2260 }
2260 }
2261
2261
2262 #graph_content .container .left .date span {
2262 #graph_content .container .left .date span {
2263 vertical-align: text-top;
2263 vertical-align: text-top;
2264 }
2264 }
2265
2265
2266 #graph_content .container .left .author {
2266 #graph_content .container .left .author {
2267 height: 22px;
2267 height: 22px;
2268 }
2268 }
2269
2269
2270 #graph_content .container .left .author .user {
2270 #graph_content .container .left .author .user {
2271 color: #444444;
2271 color: #444444;
2272 float: left;
2272 float: left;
2273 font-size: 12px;
2273 font-size: 12px;
2274 margin-left: -4px;
2274 margin-left: -4px;
2275 margin-top: 4px;
2275 margin-top: 4px;
2276 }
2276 }
2277
2277
2278 #graph_content .container .left .message {
2278 #graph_content .container .left .message {
2279 font-size: 100%;
2279 font-size: 100%;
2280 padding-top: 3px;
2280 padding-top: 3px;
2281 white-space: pre-wrap;
2281 white-space: pre-wrap;
2282 }
2282 }
2283
2283
2284 #graph_content .container .left .message a:hover{
2284 #graph_content .container .left .message a:hover{
2285 text-decoration: none;
2285 text-decoration: none;
2286 }
2286 }
2287
2287
2288 .right div {
2288 .right div {
2289 clear: both;
2289 clear: both;
2290 }
2290 }
2291
2291
2292 .right .changes .changed_total {
2292 .right .changes .changed_total {
2293 border: 0px solid #DDD;
2293 border: 0px solid #DDD;
2294 display: block;
2294 display: block;
2295 float: right;
2295 float: right;
2296 text-align: center;
2296 text-align: center;
2297 min-width: 45px;
2297 min-width: 45px;
2298 cursor: pointer;
2298 cursor: pointer;
2299 background: #FD8;
2299 background: #FD8;
2300 font-weight: bold;
2300 font-weight: bold;
2301 -webkit-border-radius: 0px 0px 0px 6px;
2301 -webkit-border-radius: 0px 0px 0px 6px;
2302 -moz-border-radius: 0px 0px 0px 6px;
2302 -moz-border-radius: 0px 0px 0px 6px;
2303 border-radius: 0px 0px 0px 6px;
2303 border-radius: 0px 0px 0px 6px;
2304 padding: 2px;
2304 padding: 2px;
2305 }
2305 }
2306
2306
2307 .right .changes .added,.changed,.removed {
2307 .right .changes .added,.changed,.removed {
2308 border: 1px solid #DDD;
2308 border: 1px solid #DDD;
2309 display: block;
2309 display: block;
2310 float: right;
2310 float: right;
2311 text-align: center;
2311 text-align: center;
2312 min-width: 15px;
2312 min-width: 15px;
2313 cursor: help;
2313 cursor: help;
2314 }
2314 }
2315
2315
2316 .right .changes .large {
2316 .right .changes .large {
2317 border: 1px solid #DDD;
2317 border: 1px solid #DDD;
2318 display: block;
2318 display: block;
2319 float: right;
2319 float: right;
2320 text-align: center;
2320 text-align: center;
2321 min-width: 45px;
2321 min-width: 45px;
2322 cursor: help;
2322 cursor: help;
2323 background: #54A9F7;
2323 background: #54A9F7;
2324 }
2324 }
2325
2325
2326 .right .changes .added {
2326 .right .changes .added {
2327 background: #BFB;
2327 background: #BFB;
2328 }
2328 }
2329
2329
2330 .right .changes .changed {
2330 .right .changes .changed {
2331 background: #FD8;
2331 background: #FD8;
2332 }
2332 }
2333
2333
2334 .right .changes .removed {
2334 .right .changes .removed {
2335 background: #F88;
2335 background: #F88;
2336 }
2336 }
2337
2337
2338 .right .merge {
2338 .right .merge {
2339 vertical-align: top;
2339 vertical-align: top;
2340 font-size: 0.75em;
2340 font-size: 0.75em;
2341 font-weight: 700;
2341 font-weight: 700;
2342 }
2342 }
2343
2343
2344 .right .parent {
2344 .right .parent {
2345 font-size: 90%;
2345 font-size: 90%;
2346 font-family: monospace;
2346 font-family: monospace;
2347 padding: 2px 2px 2px 2px;
2347 padding: 2px 2px 2px 2px;
2348 }
2348 }
2349 .right .logtags{
2349 .right .logtags{
2350 padding: 2px 2px 2px 2px;
2350 padding: 2px 2px 2px 2px;
2351 }
2351 }
2352 .right .logtags .branchtag,.logtags .branchtag {
2352 .right .logtags .branchtag,.logtags .branchtag {
2353 padding: 1px 3px 2px;
2353 padding: 1px 3px 2px;
2354 background-color: #bfbfbf;
2354 background-color: #bfbfbf;
2355 font-size: 9.75px;
2355 font-size: 9.75px;
2356 font-weight: bold;
2356 font-weight: bold;
2357 color: #ffffff;
2357 color: #ffffff;
2358 text-transform: uppercase;
2358 text-transform: uppercase;
2359 white-space: nowrap;
2359 white-space: nowrap;
2360 -webkit-border-radius: 3px;
2360 -webkit-border-radius: 3px;
2361 -moz-border-radius: 3px;
2361 -moz-border-radius: 3px;
2362 border-radius: 3px;
2362 border-radius: 3px;
2363 padding-left:4px;
2363 padding-left:4px;
2364 }
2364 }
2365 .right .logtags .branchtag a:hover,.logtags .branchtag a{
2365 .right .logtags .branchtag a:hover,.logtags .branchtag a{
2366 color: #ffffff;
2366 color: #ffffff;
2367 }
2367 }
2368 .right .logtags .branchtag a:hover,.logtags .branchtag a:hover{
2368 .right .logtags .branchtag a:hover,.logtags .branchtag a:hover{
2369 text-decoration: none;
2369 text-decoration: none;
2370 color: #ffffff;
2370 color: #ffffff;
2371 }
2371 }
2372 .right .logtags .tagtag,.logtags .tagtag {
2372 .right .logtags .tagtag,.logtags .tagtag {
2373 padding: 1px 3px 2px;
2373 padding: 1px 3px 2px;
2374 background-color: #62cffc;
2374 background-color: #62cffc;
2375 font-size: 9.75px;
2375 font-size: 9.75px;
2376 font-weight: bold;
2376 font-weight: bold;
2377 color: #ffffff;
2377 color: #ffffff;
2378 text-transform: uppercase;
2378 text-transform: uppercase;
2379 white-space: nowrap;
2379 white-space: nowrap;
2380 -webkit-border-radius: 3px;
2380 -webkit-border-radius: 3px;
2381 -moz-border-radius: 3px;
2381 -moz-border-radius: 3px;
2382 border-radius: 3px;
2382 border-radius: 3px;
2383 }
2383 }
2384 .right .logtags .tagtag a:hover,.logtags .tagtag a{
2384 .right .logtags .tagtag a:hover,.logtags .tagtag a{
2385 color: #ffffff;
2385 color: #ffffff;
2386 }
2386 }
2387 .right .logtags .tagtag a:hover,.logtags .tagtag a:hover{
2387 .right .logtags .tagtag a:hover,.logtags .tagtag a:hover{
2388 text-decoration: none;
2388 text-decoration: none;
2389 color: #ffffff;
2389 color: #ffffff;
2390 }
2390 }
2391 .right .logbooks .bookbook,.logbooks .bookbook {
2391 .right .logbooks .bookbook,.logbooks .bookbook {
2392 padding: 1px 3px 2px;
2392 padding: 1px 3px 2px;
2393 background-color: #46A546;
2393 background-color: #46A546;
2394 font-size: 9.75px;
2394 font-size: 9.75px;
2395 font-weight: bold;
2395 font-weight: bold;
2396 color: #ffffff;
2396 color: #ffffff;
2397 text-transform: uppercase;
2397 text-transform: uppercase;
2398 white-space: nowrap;
2398 white-space: nowrap;
2399 -webkit-border-radius: 3px;
2399 -webkit-border-radius: 3px;
2400 -moz-border-radius: 3px;
2400 -moz-border-radius: 3px;
2401 border-radius: 3px;
2401 border-radius: 3px;
2402 }
2402 }
2403 .right .logbooks .bookbook,.logbooks .bookbook a{
2403 .right .logbooks .bookbook,.logbooks .bookbook a{
2404 color: #ffffff;
2404 color: #ffffff;
2405 }
2405 }
2406 .right .logbooks .bookbook,.logbooks .bookbook a:hover{
2406 .right .logbooks .bookbook,.logbooks .bookbook a:hover{
2407 text-decoration: none;
2407 text-decoration: none;
2408 color: #ffffff;
2408 color: #ffffff;
2409 }
2409 }
2410 div.browserblock {
2410 div.browserblock {
2411 overflow: hidden;
2411 overflow: hidden;
2412 border: 1px solid #ccc;
2412 border: 1px solid #ccc;
2413 background: #f8f8f8;
2413 background: #f8f8f8;
2414 font-size: 100%;
2414 font-size: 100%;
2415 line-height: 125%;
2415 line-height: 125%;
2416 padding: 0;
2416 padding: 0;
2417 -webkit-border-radius: 6px 6px 0px 0px;
2417 -webkit-border-radius: 6px 6px 0px 0px;
2418 -moz-border-radius: 6px 6px 0px 0px;
2418 -moz-border-radius: 6px 6px 0px 0px;
2419 border-radius: 6px 6px 0px 0px;
2419 border-radius: 6px 6px 0px 0px;
2420 }
2420 }
2421
2421
2422 div.browserblock .browser-header {
2422 div.browserblock .browser-header {
2423 background: #FFF;
2423 background: #FFF;
2424 padding: 10px 0px 15px 0px;
2424 padding: 10px 0px 15px 0px;
2425 width: 100%;
2425 width: 100%;
2426 }
2426 }
2427
2427
2428 div.browserblock .browser-nav {
2428 div.browserblock .browser-nav {
2429 float: left
2429 float: left
2430 }
2430 }
2431
2431
2432 div.browserblock .browser-branch {
2432 div.browserblock .browser-branch {
2433 float: left;
2433 float: left;
2434 }
2434 }
2435
2435
2436 div.browserblock .browser-branch label {
2436 div.browserblock .browser-branch label {
2437 color: #4A4A4A;
2437 color: #4A4A4A;
2438 vertical-align: text-top;
2438 vertical-align: text-top;
2439 }
2439 }
2440
2440
2441 div.browserblock .browser-header span {
2441 div.browserblock .browser-header span {
2442 margin-left: 5px;
2442 margin-left: 5px;
2443 font-weight: 700;
2443 font-weight: 700;
2444 }
2444 }
2445
2445
2446 div.browserblock .browser-search {
2446 div.browserblock .browser-search {
2447 clear: both;
2447 clear: both;
2448 padding: 8px 8px 0px 5px;
2448 padding: 8px 8px 0px 5px;
2449 height: 20px;
2449 height: 20px;
2450 }
2450 }
2451
2451
2452 div.browserblock #node_filter_box {
2452 div.browserblock #node_filter_box {
2453
2453
2454 }
2454 }
2455
2455
2456 div.browserblock .search_activate {
2456 div.browserblock .search_activate {
2457 float: left
2457 float: left
2458 }
2458 }
2459
2459
2460 div.browserblock .add_node {
2460 div.browserblock .add_node {
2461 float: left;
2461 float: left;
2462 padding-left: 5px;
2462 padding-left: 5px;
2463 }
2463 }
2464
2464
2465 div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover
2465 div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover
2466 {
2466 {
2467 text-decoration: none !important;
2467 text-decoration: none !important;
2468 }
2468 }
2469
2469
2470 div.browserblock .browser-body {
2470 div.browserblock .browser-body {
2471 background: #EEE;
2471 background: #EEE;
2472 border-top: 1px solid #CCC;
2472 border-top: 1px solid #CCC;
2473 }
2473 }
2474
2474
2475 table.code-browser {
2475 table.code-browser {
2476 border-collapse: collapse;
2476 border-collapse: collapse;
2477 width: 100%;
2477 width: 100%;
2478 }
2478 }
2479
2479
2480 table.code-browser tr {
2480 table.code-browser tr {
2481 margin: 3px;
2481 margin: 3px;
2482 }
2482 }
2483
2483
2484 table.code-browser thead th {
2484 table.code-browser thead th {
2485 background-color: #EEE;
2485 background-color: #EEE;
2486 height: 20px;
2486 height: 20px;
2487 font-size: 1.1em;
2487 font-size: 1.1em;
2488 font-weight: 700;
2488 font-weight: 700;
2489 text-align: left;
2489 text-align: left;
2490 padding-left: 10px;
2490 padding-left: 10px;
2491 }
2491 }
2492
2492
2493 table.code-browser tbody td {
2493 table.code-browser tbody td {
2494 padding-left: 10px;
2494 padding-left: 10px;
2495 height: 20px;
2495 height: 20px;
2496 }
2496 }
2497
2497
2498 table.code-browser .browser-file {
2498 table.code-browser .browser-file {
2499 background: url("../images/icons/document_16.png") no-repeat scroll 3px;
2499 background: url("../images/icons/document_16.png") no-repeat scroll 3px;
2500 height: 16px;
2500 height: 16px;
2501 padding-left: 20px;
2501 padding-left: 20px;
2502 text-align: left;
2502 text-align: left;
2503 }
2503 }
2504 .diffblock .changeset_header {
2504 .diffblock .changeset_header {
2505 height: 16px;
2505 height: 16px;
2506 }
2506 }
2507 .diffblock .changeset_file {
2507 .diffblock .changeset_file {
2508 background: url("../images/icons/file.png") no-repeat scroll 3px;
2508 background: url("../images/icons/file.png") no-repeat scroll 3px;
2509 text-align: left;
2509 text-align: left;
2510 float: left;
2510 float: left;
2511 padding: 2px 0px 2px 22px;
2511 padding: 2px 0px 2px 22px;
2512 }
2512 }
2513 .diffblock .diff-menu-wrapper{
2513 .diffblock .diff-menu-wrapper{
2514 float: left;
2514 float: left;
2515 }
2515 }
2516
2516
2517 .diffblock .diff-menu{
2517 .diffblock .diff-menu{
2518 position: absolute;
2518 position: absolute;
2519 background: none repeat scroll 0 0 #FFFFFF;
2519 background: none repeat scroll 0 0 #FFFFFF;
2520 border-color: #003367 #666666 #666666;
2520 border-color: #003367 #666666 #666666;
2521 border-right: 1px solid #666666;
2521 border-right: 1px solid #666666;
2522 border-style: solid solid solid;
2522 border-style: solid solid solid;
2523 border-width: 1px;
2523 border-width: 1px;
2524 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
2524 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
2525 margin-top:5px;
2525 margin-top:5px;
2526 margin-left:1px;
2526 margin-left:1px;
2527
2527
2528 }
2528 }
2529
2529
2530 .diffblock .diff-menu ul li {
2530 .diffblock .diff-menu ul li {
2531 padding: 0px 0px 0px 0px !important;
2531 padding: 0px 0px 0px 0px !important;
2532 }
2532 }
2533 .diffblock .diff-menu ul li a{
2533 .diffblock .diff-menu ul li a{
2534 display: block;
2534 display: block;
2535 padding: 3px 8px 3px 8px !important;
2535 padding: 3px 8px 3px 8px !important;
2536 }
2536 }
2537 .diffblock .diff-menu ul li a:hover{
2537 .diffblock .diff-menu ul li a:hover{
2538 text-decoration: none;
2538 text-decoration: none;
2539 background-color: #EEEEEE;
2539 background-color: #EEEEEE;
2540 }
2540 }
2541 table.code-browser .browser-dir {
2541 table.code-browser .browser-dir {
2542 background: url("../images/icons/folder_16.png") no-repeat scroll 3px;
2542 background: url("../images/icons/folder_16.png") no-repeat scroll 3px;
2543 height: 16px;
2543 height: 16px;
2544 padding-left: 20px;
2544 padding-left: 20px;
2545 text-align: left;
2545 text-align: left;
2546 }
2546 }
2547
2547
2548 .box .search {
2548 .box .search {
2549 clear: both;
2549 clear: both;
2550 overflow: hidden;
2550 overflow: hidden;
2551 margin: 0;
2551 margin: 0;
2552 padding: 0 20px 10px;
2552 padding: 0 20px 10px;
2553 }
2553 }
2554
2554
2555 .box .search div.search_path {
2555 .box .search div.search_path {
2556 background: none repeat scroll 0 0 #EEE;
2556 background: none repeat scroll 0 0 #EEE;
2557 border: 1px solid #CCC;
2557 border: 1px solid #CCC;
2558 color: blue;
2558 color: blue;
2559 margin-bottom: 10px;
2559 margin-bottom: 10px;
2560 padding: 10px 0;
2560 padding: 10px 0;
2561 }
2561 }
2562
2562
2563 .box .search div.search_path div.link {
2563 .box .search div.search_path div.link {
2564 font-weight: 700;
2564 font-weight: 700;
2565 margin-left: 25px;
2565 margin-left: 25px;
2566 }
2566 }
2567
2567
2568 .box .search div.search_path div.link a {
2568 .box .search div.search_path div.link a {
2569 color: #003367;
2569 color: #003367;
2570 cursor: pointer;
2570 cursor: pointer;
2571 text-decoration: none;
2571 text-decoration: none;
2572 }
2572 }
2573
2573
2574 #path_unlock {
2574 #path_unlock {
2575 color: red;
2575 color: red;
2576 font-size: 1.2em;
2576 font-size: 1.2em;
2577 padding-left: 4px;
2577 padding-left: 4px;
2578 }
2578 }
2579
2579
2580 .info_box span {
2580 .info_box span {
2581 margin-left: 3px;
2581 margin-left: 3px;
2582 margin-right: 3px;
2582 margin-right: 3px;
2583 }
2583 }
2584
2584
2585 .info_box .rev {
2585 .info_box .rev {
2586 color: #003367;
2586 color: #003367;
2587 font-size: 1.6em;
2587 font-size: 1.6em;
2588 font-weight: bold;
2588 font-weight: bold;
2589 vertical-align: sub;
2589 vertical-align: sub;
2590 }
2590 }
2591
2591
2592 .info_box input#at_rev,.info_box input#size {
2592 .info_box input#at_rev,.info_box input#size {
2593 background: #FFF;
2593 background: #FFF;
2594 border-top: 1px solid #b3b3b3;
2594 border-top: 1px solid #b3b3b3;
2595 border-left: 1px solid #b3b3b3;
2595 border-left: 1px solid #b3b3b3;
2596 border-right: 1px solid #eaeaea;
2596 border-right: 1px solid #eaeaea;
2597 border-bottom: 1px solid #eaeaea;
2597 border-bottom: 1px solid #eaeaea;
2598 color: #000;
2598 color: #000;
2599 font-size: 12px;
2599 font-size: 12px;
2600 margin: 0;
2600 margin: 0;
2601 padding: 1px 5px 1px;
2601 padding: 1px 5px 1px;
2602 }
2602 }
2603
2603
2604 .info_box input#view {
2604 .info_box input#view {
2605 text-align: center;
2605 text-align: center;
2606 padding: 4px 3px 2px 2px;
2606 padding: 4px 3px 2px 2px;
2607 }
2607 }
2608
2608
2609 .yui-overlay,.yui-panel-container {
2609 .yui-overlay,.yui-panel-container {
2610 visibility: hidden;
2610 visibility: hidden;
2611 position: absolute;
2611 position: absolute;
2612 z-index: 2;
2612 z-index: 2;
2613 }
2613 }
2614
2614
2615 .yui-tt {
2615 .yui-tt {
2616 visibility: hidden;
2616 visibility: hidden;
2617 position: absolute;
2617 position: absolute;
2618 color: #666;
2618 color: #666;
2619 background-color: #FFF;
2619 background-color: #FFF;
2620 border: 2px solid #003367;
2620 border: 2px solid #003367;
2621 font: 100% sans-serif;
2621 font: 100% sans-serif;
2622 width: auto;
2622 width: auto;
2623 opacity: 1px;
2623 opacity: 1px;
2624 padding: 8px;
2624 padding: 8px;
2625 white-space: pre-wrap;
2625 white-space: pre-wrap;
2626 -webkit-border-radius: 8px 8px 8px 8px;
2626 -webkit-border-radius: 8px 8px 8px 8px;
2627 -khtml-border-radius: 8px 8px 8px 8px;
2627 -khtml-border-radius: 8px 8px 8px 8px;
2628 -moz-border-radius: 8px 8px 8px 8px;
2628 -moz-border-radius: 8px 8px 8px 8px;
2629 border-radius: 8px 8px 8px 8px;
2629 border-radius: 8px 8px 8px 8px;
2630 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
2630 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
2631 }
2631 }
2632
2632
2633 .ac {
2633 .ac {
2634 vertical-align: top;
2634 vertical-align: top;
2635 }
2635 }
2636
2636
2637 .ac .yui-ac {
2637 .ac .yui-ac {
2638 position: relative;
2638 position: relative;
2639 font-size: 100%;
2639 font-size: 100%;
2640 }
2640 }
2641
2641
2642 .ac .perm_ac {
2642 .ac .perm_ac {
2643 width: 15em;
2643 width: 15em;
2644 }
2644 }
2645
2645
2646 .ac .yui-ac-input {
2646 .ac .yui-ac-input {
2647 width: 100%;
2647 width: 100%;
2648 }
2648 }
2649
2649
2650 .ac .yui-ac-container {
2650 .ac .yui-ac-container {
2651 position: absolute;
2651 position: absolute;
2652 top: 1.6em;
2652 top: 1.6em;
2653 width: 100%;
2653 width: 100%;
2654 }
2654 }
2655
2655
2656 .ac .yui-ac-content {
2656 .ac .yui-ac-content {
2657 position: absolute;
2657 position: absolute;
2658 width: 100%;
2658 width: 100%;
2659 border: 1px solid gray;
2659 border: 1px solid gray;
2660 background: #fff;
2660 background: #fff;
2661 overflow: hidden;
2661 overflow: hidden;
2662 z-index: 9050;
2662 z-index: 9050;
2663 }
2663 }
2664
2664
2665 .ac .yui-ac-shadow {
2665 .ac .yui-ac-shadow {
2666 position: absolute;
2666 position: absolute;
2667 width: 100%;
2667 width: 100%;
2668 background: #000;
2668 background: #000;
2669 -moz-opacity: 0.1px;
2669 -moz-opacity: 0.1px;
2670 opacity: .10;
2670 opacity: .10;
2671 filter: alpha(opacity = 10);
2671 filter: alpha(opacity = 10);
2672 z-index: 9049;
2672 z-index: 9049;
2673 margin: .3em;
2673 margin: .3em;
2674 }
2674 }
2675
2675
2676 .ac .yui-ac-content ul {
2676 .ac .yui-ac-content ul {
2677 width: 100%;
2677 width: 100%;
2678 margin: 0;
2678 margin: 0;
2679 padding: 0;
2679 padding: 0;
2680 }
2680 }
2681
2681
2682 .ac .yui-ac-content li {
2682 .ac .yui-ac-content li {
2683 cursor: default;
2683 cursor: default;
2684 white-space: nowrap;
2684 white-space: nowrap;
2685 margin: 0;
2685 margin: 0;
2686 padding: 2px 5px;
2686 padding: 2px 5px;
2687 }
2687 }
2688
2688
2689 .ac .yui-ac-content li.yui-ac-prehighlight {
2689 .ac .yui-ac-content li.yui-ac-prehighlight {
2690 background: #B3D4FF;
2690 background: #B3D4FF;
2691 }
2691 }
2692
2692
2693 .ac .yui-ac-content li.yui-ac-highlight {
2693 .ac .yui-ac-content li.yui-ac-highlight {
2694 background: #556CB5;
2694 background: #556CB5;
2695 color: #FFF;
2695 color: #FFF;
2696 }
2696 }
2697
2697
2698 .follow {
2698 .follow {
2699 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2699 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2700 height: 16px;
2700 height: 16px;
2701 width: 20px;
2701 width: 20px;
2702 cursor: pointer;
2702 cursor: pointer;
2703 display: block;
2703 display: block;
2704 float: right;
2704 float: right;
2705 margin-top: 2px;
2705 margin-top: 2px;
2706 }
2706 }
2707
2707
2708 .following {
2708 .following {
2709 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2709 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2710 height: 16px;
2710 height: 16px;
2711 width: 20px;
2711 width: 20px;
2712 cursor: pointer;
2712 cursor: pointer;
2713 display: block;
2713 display: block;
2714 float: right;
2714 float: right;
2715 margin-top: 2px;
2715 margin-top: 2px;
2716 }
2716 }
2717
2717
2718 .currently_following {
2718 .currently_following {
2719 padding-left: 10px;
2719 padding-left: 10px;
2720 padding-bottom: 5px;
2720 padding-bottom: 5px;
2721 }
2721 }
2722
2722
2723 .add_icon {
2723 .add_icon {
2724 background: url("../images/icons/add.png") no-repeat scroll 3px;
2724 background: url("../images/icons/add.png") no-repeat scroll 3px;
2725 padding-left: 20px;
2725 padding-left: 20px;
2726 padding-top: 0px;
2726 padding-top: 0px;
2727 text-align: left;
2727 text-align: left;
2728 }
2728 }
2729
2729
2730 .edit_icon {
2730 .edit_icon {
2731 background: url("../images/icons/folder_edit.png") no-repeat scroll 3px;
2731 background: url("../images/icons/folder_edit.png") no-repeat scroll 3px;
2732 padding-left: 20px;
2732 padding-left: 20px;
2733 padding-top: 0px;
2733 padding-top: 0px;
2734 text-align: left;
2734 text-align: left;
2735 }
2735 }
2736
2736
2737 .delete_icon {
2737 .delete_icon {
2738 background: url("../images/icons/delete.png") no-repeat scroll 3px;
2738 background: url("../images/icons/delete.png") no-repeat scroll 3px;
2739 padding-left: 20px;
2739 padding-left: 20px;
2740 padding-top: 0px;
2740 padding-top: 0px;
2741 text-align: left;
2741 text-align: left;
2742 }
2742 }
2743
2743
2744 .refresh_icon {
2744 .refresh_icon {
2745 background: url("../images/icons/arrow_refresh.png") no-repeat scroll
2745 background: url("../images/icons/arrow_refresh.png") no-repeat scroll
2746 3px;
2746 3px;
2747 padding-left: 20px;
2747 padding-left: 20px;
2748 padding-top: 0px;
2748 padding-top: 0px;
2749 text-align: left;
2749 text-align: left;
2750 }
2750 }
2751
2751
2752 .pull_icon {
2752 .pull_icon {
2753 background: url("../images/icons/connect.png") no-repeat scroll 3px;
2753 background: url("../images/icons/connect.png") no-repeat scroll 3px;
2754 padding-left: 20px;
2754 padding-left: 20px;
2755 padding-top: 0px;
2755 padding-top: 0px;
2756 text-align: left;
2756 text-align: left;
2757 }
2757 }
2758
2758
2759 .rss_icon {
2759 .rss_icon {
2760 background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
2760 background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
2761 padding-left: 20px;
2761 padding-left: 20px;
2762 padding-top: 4px;
2762 padding-top: 4px;
2763 text-align: left;
2763 text-align: left;
2764 font-size: 8px
2764 font-size: 8px
2765 }
2765 }
2766
2766
2767 .atom_icon {
2767 .atom_icon {
2768 background: url("../images/icons/atom.png") no-repeat scroll 3px;
2768 background: url("../images/icons/atom.png") no-repeat scroll 3px;
2769 padding-left: 20px;
2769 padding-left: 20px;
2770 padding-top: 4px;
2770 padding-top: 4px;
2771 text-align: left;
2771 text-align: left;
2772 font-size: 8px
2772 font-size: 8px
2773 }
2773 }
2774
2774
2775 .archive_icon {
2775 .archive_icon {
2776 background: url("../images/icons/compress.png") no-repeat scroll 3px;
2776 background: url("../images/icons/compress.png") no-repeat scroll 3px;
2777 padding-left: 20px;
2777 padding-left: 20px;
2778 text-align: left;
2778 text-align: left;
2779 padding-top: 1px;
2779 padding-top: 1px;
2780 }
2780 }
2781
2781
2782 .start_following_icon {
2782 .start_following_icon {
2783 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2783 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2784 padding-left: 20px;
2784 padding-left: 20px;
2785 text-align: left;
2785 text-align: left;
2786 padding-top: 0px;
2786 padding-top: 0px;
2787 }
2787 }
2788
2788
2789 .stop_following_icon {
2789 .stop_following_icon {
2790 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2790 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2791 padding-left: 20px;
2791 padding-left: 20px;
2792 text-align: left;
2792 text-align: left;
2793 padding-top: 0px;
2793 padding-top: 0px;
2794 }
2794 }
2795
2795
2796 .action_button {
2796 .action_button {
2797 border: 0;
2797 border: 0;
2798 display: inline;
2798 display: inline;
2799 }
2799 }
2800
2800
2801 .action_button:hover {
2801 .action_button:hover {
2802 border: 0;
2802 border: 0;
2803 text-decoration: underline;
2803 text-decoration: underline;
2804 cursor: pointer;
2804 cursor: pointer;
2805 }
2805 }
2806
2806
2807 #switch_repos {
2807 #switch_repos {
2808 position: absolute;
2808 position: absolute;
2809 height: 25px;
2809 height: 25px;
2810 z-index: 1;
2810 z-index: 1;
2811 }
2811 }
2812
2812
2813 #switch_repos select {
2813 #switch_repos select {
2814 min-width: 150px;
2814 min-width: 150px;
2815 max-height: 250px;
2815 max-height: 250px;
2816 z-index: 1;
2816 z-index: 1;
2817 }
2817 }
2818
2818
2819 .breadcrumbs {
2819 .breadcrumbs {
2820 border: medium none;
2820 border: medium none;
2821 color: #FFF;
2821 color: #FFF;
2822 float: left;
2822 float: left;
2823 text-transform: uppercase;
2823 text-transform: uppercase;
2824 font-weight: 700;
2824 font-weight: 700;
2825 font-size: 14px;
2825 font-size: 14px;
2826 margin: 0;
2826 margin: 0;
2827 padding: 11px 0 11px 10px;
2827 padding: 11px 0 11px 10px;
2828 }
2828 }
2829
2829
2830 .breadcrumbs a {
2830 .breadcrumbs a {
2831 color: #FFF;
2831 color: #FFF;
2832 }
2832 }
2833
2833
2834 .flash_msg {
2834 .flash_msg {
2835
2835
2836 }
2836 }
2837
2837
2838 .flash_msg ul {
2838 .flash_msg ul {
2839
2839
2840 }
2840 }
2841
2841
2842 .error_msg {
2842 .error_msg {
2843 background-color: #c43c35;
2843 background-color: #c43c35;
2844 background-repeat: repeat-x;
2844 background-repeat: repeat-x;
2845 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b),
2845 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b),
2846 to(#c43c35) );
2846 to(#c43c35) );
2847 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
2847 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
2848 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
2848 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
2849 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b),
2849 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b),
2850 color-stop(100%, #c43c35) );
2850 color-stop(100%, #c43c35) );
2851 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
2851 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
2852 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
2852 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
2853 background-image: linear-gradient(top, #ee5f5b, #c43c35);
2853 background-image: linear-gradient(top, #ee5f5b, #c43c35);
2854 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',
2854 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',
2855 endColorstr='#c43c35', GradientType=0 );
2855 endColorstr='#c43c35', GradientType=0 );
2856 border-color: #c43c35 #c43c35 #882a25;
2856 border-color: #c43c35 #c43c35 #882a25;
2857 }
2857 }
2858
2858
2859 .warning_msg {
2859 .warning_msg {
2860 color: #404040 !important;
2860 color: #404040 !important;
2861 background-color: #eedc94;
2861 background-color: #eedc94;
2862 background-repeat: repeat-x;
2862 background-repeat: repeat-x;
2863 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
2863 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
2864 to(#eedc94) );
2864 to(#eedc94) );
2865 background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
2865 background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
2866 background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
2866 background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
2867 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1),
2867 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1),
2868 color-stop(100%, #eedc94) );
2868 color-stop(100%, #eedc94) );
2869 background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
2869 background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
2870 background-image: -o-linear-gradient(top, #fceec1, #eedc94);
2870 background-image: -o-linear-gradient(top, #fceec1, #eedc94);
2871 background-image: linear-gradient(top, #fceec1, #eedc94);
2871 background-image: linear-gradient(top, #fceec1, #eedc94);
2872 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1',
2872 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1',
2873 endColorstr='#eedc94', GradientType=0 );
2873 endColorstr='#eedc94', GradientType=0 );
2874 border-color: #eedc94 #eedc94 #e4c652;
2874 border-color: #eedc94 #eedc94 #e4c652;
2875 }
2875 }
2876
2876
2877 .success_msg {
2877 .success_msg {
2878 background-color: #57a957;
2878 background-color: #57a957;
2879 background-repeat: repeat-x !important;
2879 background-repeat: repeat-x !important;
2880 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462),
2880 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462),
2881 to(#57a957) );
2881 to(#57a957) );
2882 background-image: -moz-linear-gradient(top, #62c462, #57a957);
2882 background-image: -moz-linear-gradient(top, #62c462, #57a957);
2883 background-image: -ms-linear-gradient(top, #62c462, #57a957);
2883 background-image: -ms-linear-gradient(top, #62c462, #57a957);
2884 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462),
2884 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462),
2885 color-stop(100%, #57a957) );
2885 color-stop(100%, #57a957) );
2886 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
2886 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
2887 background-image: -o-linear-gradient(top, #62c462, #57a957);
2887 background-image: -o-linear-gradient(top, #62c462, #57a957);
2888 background-image: linear-gradient(top, #62c462, #57a957);
2888 background-image: linear-gradient(top, #62c462, #57a957);
2889 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462',
2889 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462',
2890 endColorstr='#57a957', GradientType=0 );
2890 endColorstr='#57a957', GradientType=0 );
2891 border-color: #57a957 #57a957 #3d773d;
2891 border-color: #57a957 #57a957 #3d773d;
2892 }
2892 }
2893
2893
2894 .notice_msg {
2894 .notice_msg {
2895 background-color: #339bb9;
2895 background-color: #339bb9;
2896 background-repeat: repeat-x;
2896 background-repeat: repeat-x;
2897 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de),
2897 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de),
2898 to(#339bb9) );
2898 to(#339bb9) );
2899 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
2899 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
2900 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
2900 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
2901 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de),
2901 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de),
2902 color-stop(100%, #339bb9) );
2902 color-stop(100%, #339bb9) );
2903 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
2903 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
2904 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
2904 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
2905 background-image: linear-gradient(top, #5bc0de, #339bb9);
2905 background-image: linear-gradient(top, #5bc0de, #339bb9);
2906 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de',
2906 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de',
2907 endColorstr='#339bb9', GradientType=0 );
2907 endColorstr='#339bb9', GradientType=0 );
2908 border-color: #339bb9 #339bb9 #22697d;
2908 border-color: #339bb9 #339bb9 #22697d;
2909 }
2909 }
2910
2910
2911 .success_msg,.error_msg,.notice_msg,.warning_msg {
2911 .success_msg,.error_msg,.notice_msg,.warning_msg {
2912 font-size: 12px;
2912 font-size: 12px;
2913 font-weight: 700;
2913 font-weight: 700;
2914 min-height: 14px;
2914 min-height: 14px;
2915 line-height: 14px;
2915 line-height: 14px;
2916 margin-bottom: 10px;
2916 margin-bottom: 10px;
2917 margin-top: 0;
2917 margin-top: 0;
2918 display: block;
2918 display: block;
2919 overflow: auto;
2919 overflow: auto;
2920 padding: 6px 10px 6px 10px;
2920 padding: 6px 10px 6px 10px;
2921 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2921 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2922 position: relative;
2922 position: relative;
2923 color: #FFF;
2923 color: #FFF;
2924 border-width: 1px;
2924 border-width: 1px;
2925 border-style: solid;
2925 border-style: solid;
2926 -webkit-border-radius: 4px;
2926 -webkit-border-radius: 4px;
2927 -moz-border-radius: 4px;
2927 -moz-border-radius: 4px;
2928 border-radius: 4px;
2928 border-radius: 4px;
2929 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2929 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2930 -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2930 -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2931 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2931 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2932 }
2932 }
2933
2933
2934 #msg_close {
2934 #msg_close {
2935 background: transparent url("../icons/cross_grey_small.png") no-repeat
2935 background: transparent url("../icons/cross_grey_small.png") no-repeat
2936 scroll 0 0;
2936 scroll 0 0;
2937 cursor: pointer;
2937 cursor: pointer;
2938 height: 16px;
2938 height: 16px;
2939 position: absolute;
2939 position: absolute;
2940 right: 5px;
2940 right: 5px;
2941 top: 5px;
2941 top: 5px;
2942 width: 16px;
2942 width: 16px;
2943 }
2943 }
2944
2944
2945 div#legend_container table,div#legend_choices table {
2945 div#legend_container table,div#legend_choices table {
2946 width: auto !important;
2946 width: auto !important;
2947 }
2947 }
2948
2948
2949 table#permissions_manage {
2949 table#permissions_manage {
2950 width: 0 !important;
2950 width: 0 !important;
2951 }
2951 }
2952
2952
2953 table#permissions_manage span.private_repo_msg {
2953 table#permissions_manage span.private_repo_msg {
2954 font-size: 0.8em;
2954 font-size: 0.8em;
2955 opacity: 0.6px;
2955 opacity: 0.6px;
2956 }
2956 }
2957
2957
2958 table#permissions_manage td.private_repo_msg {
2958 table#permissions_manage td.private_repo_msg {
2959 font-size: 0.8em;
2959 font-size: 0.8em;
2960 }
2960 }
2961
2961
2962 table#permissions_manage tr#add_perm_input td {
2962 table#permissions_manage tr#add_perm_input td {
2963 vertical-align: middle;
2963 vertical-align: middle;
2964 }
2964 }
2965
2965
2966 div.gravatar {
2966 div.gravatar {
2967 background-color: #FFF;
2967 background-color: #FFF;
2968 border: 0px solid #D0D0D0;
2968 border: 0px solid #D0D0D0;
2969 float: left;
2969 float: left;
2970 margin-right: 0.7em;
2970 margin-right: 0.7em;
2971 padding: 2px 2px 2px 2px;
2971 padding: 2px 2px 2px 2px;
2972 line-height:0;
2972 line-height:0;
2973 -webkit-border-radius: 6px;
2973 -webkit-border-radius: 6px;
2974 -khtml-border-radius: 6px;
2974 -khtml-border-radius: 6px;
2975 -moz-border-radius: 6px;
2975 -moz-border-radius: 6px;
2976 border-radius: 6px;
2976 border-radius: 6px;
2977 }
2977 }
2978
2978
2979 div.gravatar img {
2979 div.gravatar img {
2980 -webkit-border-radius: 4px;
2980 -webkit-border-radius: 4px;
2981 -khtml-border-radius: 4px;
2981 -khtml-border-radius: 4px;
2982 -moz-border-radius: 4px;
2982 -moz-border-radius: 4px;
2983 border-radius: 4px;
2983 border-radius: 4px;
2984 }
2984 }
2985
2985
2986 #header,#content,#footer {
2986 #header,#content,#footer {
2987 min-width: 978px;
2987 min-width: 978px;
2988 }
2988 }
2989
2989
2990 #content {
2990 #content {
2991 clear: both;
2991 clear: both;
2992 overflow: hidden;
2992 overflow: hidden;
2993 padding: 14px 10px;
2993 padding: 14px 10px;
2994 }
2994 }
2995
2995
2996 #content div.box div.title div.search {
2996 #content div.box div.title div.search {
2997
2997
2998 border-left: 1px solid #316293;
2998 border-left: 1px solid #316293;
2999 }
2999 }
3000
3000
3001 #content div.box div.title div.search div.input input {
3001 #content div.box div.title div.search div.input input {
3002 border: 1px solid #316293;
3002 border: 1px solid #316293;
3003 }
3003 }
3004
3004
3005 .ui-btn{
3005 .ui-btn{
3006 color: #515151;
3006 color: #515151;
3007 background-color: #DADADA;
3007 background-color: #DADADA;
3008 background-repeat: repeat-x;
3008 background-repeat: repeat-x;
3009 background-image: -khtml-gradient(linear, left top, left bottom, from(#F4F4F4),to(#DADADA) );
3009 background-image: -khtml-gradient(linear, left top, left bottom, from(#F4F4F4),to(#DADADA) );
3010 background-image: -moz-linear-gradient(top, #F4F4F4, #DADADA);
3010 background-image: -moz-linear-gradient(top, #F4F4F4, #DADADA);
3011 background-image: -ms-linear-gradient(top, #F4F4F4, #DADADA);
3011 background-image: -ms-linear-gradient(top, #F4F4F4, #DADADA);
3012 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F4F4F4),color-stop(100%, #DADADA) );
3012 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F4F4F4),color-stop(100%, #DADADA) );
3013 background-image: -webkit-linear-gradient(top, #F4F4F4, #DADADA) );
3013 background-image: -webkit-linear-gradient(top, #F4F4F4, #DADADA) );
3014 background-image: -o-linear-gradient(top, #F4F4F4, #DADADA) );
3014 background-image: -o-linear-gradient(top, #F4F4F4, #DADADA) );
3015 background-image: linear-gradient(top, #F4F4F4, #DADADA);
3015 background-image: linear-gradient(top, #F4F4F4, #DADADA);
3016 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F4F4F4', endColorstr='#DADADA', GradientType=0);
3016 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F4F4F4', endColorstr='#DADADA', GradientType=0);
3017
3017
3018 border-top: 1px solid #DDD;
3018 border-top: 1px solid #DDD;
3019 border-left: 1px solid #c6c6c6;
3019 border-left: 1px solid #c6c6c6;
3020 border-right: 1px solid #DDD;
3020 border-right: 1px solid #DDD;
3021 border-bottom: 1px solid #c6c6c6;
3021 border-bottom: 1px solid #c6c6c6;
3022 color: #515151;
3022 color: #515151;
3023 outline: none;
3023 outline: none;
3024 margin: 0px 3px 3px 0px;
3024 margin: 0px 3px 3px 0px;
3025 -webkit-border-radius: 4px 4px 4px 4px !important;
3025 -webkit-border-radius: 4px 4px 4px 4px !important;
3026 -khtml-border-radius: 4px 4px 4px 4px !important;
3026 -khtml-border-radius: 4px 4px 4px 4px !important;
3027 -moz-border-radius: 4px 4px 4px 4px !important;
3027 -moz-border-radius: 4px 4px 4px 4px !important;
3028 border-radius: 4px 4px 4px 4px !important;
3028 border-radius: 4px 4px 4px 4px !important;
3029 cursor: pointer !important;
3029 cursor: pointer !important;
3030 padding: 3px 3px 3px 3px;
3030 padding: 3px 3px 3px 3px;
3031 background-position: 0 -15px;
3031 background-position: 0 -15px;
3032
3032
3033 }
3033 }
3034 .ui-btn.xsmall{
3034 .ui-btn.xsmall{
3035 padding: 1px 2px 1px 1px;
3035 padding: 1px 2px 1px 1px;
3036 }
3036 }
3037
3037
3038 .ui-btn:focus {
3038 .ui-btn:focus {
3039 outline: none;
3039 outline: none;
3040 }
3040 }
3041 .ui-btn:hover{
3041 .ui-btn:hover{
3042 background-position: 0 0px;
3042 background-position: 0 0px;
3043 text-decoration: none;
3043 text-decoration: none;
3044 color: #515151;
3044 color: #515151;
3045 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 3px #FFFFFF !important;
3045 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 3px #FFFFFF !important;
3046 }
3046 }
3047
3047
3048 .ui-btn.red{
3048 .ui-btn.red{
3049 color:#fff;
3049 color:#fff;
3050 background-color: #c43c35;
3050 background-color: #c43c35;
3051 background-repeat: repeat-x;
3051 background-repeat: repeat-x;
3052 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
3052 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
3053 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
3053 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
3054 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
3054 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
3055 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
3055 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
3056 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
3056 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
3057 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
3057 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
3058 background-image: linear-gradient(top, #ee5f5b, #c43c35);
3058 background-image: linear-gradient(top, #ee5f5b, #c43c35);
3059 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
3059 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
3060 border-color: #c43c35 #c43c35 #882a25;
3060 border-color: #c43c35 #c43c35 #882a25;
3061 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
3061 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
3062 }
3062 }
3063
3063
3064
3064
3065 .ui-btn.blue{
3065 .ui-btn.blue{
3066 background-color: #339bb9;
3066 background-color: #339bb9;
3067 background-repeat: repeat-x;
3067 background-repeat: repeat-x;
3068 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));
3068 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));
3069 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
3069 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
3070 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
3070 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
3071 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));
3071 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));
3072 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
3072 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
3073 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
3073 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
3074 background-image: linear-gradient(top, #5bc0de, #339bb9);
3074 background-image: linear-gradient(top, #5bc0de, #339bb9);
3075 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
3075 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
3076 border-color: #339bb9 #339bb9 #22697d;
3076 border-color: #339bb9 #339bb9 #22697d;
3077 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
3077 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
3078 }
3078 }
3079
3079
3080 .ui-btn.green{
3080 .ui-btn.green{
3081 background-color: #57a957;
3081 background-color: #57a957;
3082 background-repeat: repeat-x;
3082 background-repeat: repeat-x;
3083 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));
3083 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));
3084 background-image: -moz-linear-gradient(top, #62c462, #57a957);
3084 background-image: -moz-linear-gradient(top, #62c462, #57a957);
3085 background-image: -ms-linear-gradient(top, #62c462, #57a957);
3085 background-image: -ms-linear-gradient(top, #62c462, #57a957);
3086 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));
3086 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));
3087 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
3087 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
3088 background-image: -o-linear-gradient(top, #62c462, #57a957);
3088 background-image: -o-linear-gradient(top, #62c462, #57a957);
3089 background-image: linear-gradient(top, #62c462, #57a957);
3089 background-image: linear-gradient(top, #62c462, #57a957);
3090 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
3090 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
3091 border-color: #57a957 #57a957 #3d773d;
3091 border-color: #57a957 #57a957 #3d773d;
3092 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
3092 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
3093 }
3093 }
3094
3094
3095 ins,div.options a:hover {
3095 ins,div.options a:hover {
3096 text-decoration: none;
3096 text-decoration: none;
3097 }
3097 }
3098
3098
3099 img,
3099 img,
3100 #header #header-inner #quick li a:hover span.normal,
3100 #header #header-inner #quick li a:hover span.normal,
3101 #header #header-inner #quick li ul li.last,
3101 #header #header-inner #quick li ul li.last,
3102 #content div.box div.form div.fields div.field div.textarea table td table td a,
3102 #content div.box div.form div.fields div.field div.textarea table td table td a,
3103 #clone_url
3103 #clone_url
3104 {
3104 {
3105 border: none;
3105 border: none;
3106 }
3106 }
3107
3107
3108 img.icon,.right .merge img {
3108 img.icon,.right .merge img {
3109 vertical-align: bottom;
3109 vertical-align: bottom;
3110 }
3110 }
3111
3111
3112 #header ul#logged-user,#content div.box div.title ul.links,
3112 #header ul#logged-user,#content div.box div.title ul.links,
3113 #content div.box div.message div.dismiss,
3113 #content div.box div.message div.dismiss,
3114 #content div.box div.traffic div.legend ul
3114 #content div.box div.traffic div.legend ul
3115 {
3115 {
3116 float: right;
3116 float: right;
3117 margin: 0;
3117 margin: 0;
3118 padding: 0;
3118 padding: 0;
3119 }
3119 }
3120
3120
3121 #header #header-inner #home,#header #header-inner #logo,
3121 #header #header-inner #home,#header #header-inner #logo,
3122 #content div.box ul.left,#content div.box ol.left,
3122 #content div.box ul.left,#content div.box ol.left,
3123 #content div.box div.pagination-left,div#commit_history,
3123 #content div.box div.pagination-left,div#commit_history,
3124 div#legend_data,div#legend_container,div#legend_choices
3124 div#legend_data,div#legend_container,div#legend_choices
3125 {
3125 {
3126 float: left;
3126 float: left;
3127 }
3127 }
3128
3128
3129 #header #header-inner #quick li:hover ul ul,
3129 #header #header-inner #quick li:hover ul ul,
3130 #header #header-inner #quick li:hover ul ul ul,
3130 #header #header-inner #quick li:hover ul ul ul,
3131 #header #header-inner #quick li:hover ul ul ul ul,
3131 #header #header-inner #quick li:hover ul ul ul ul,
3132 #content #left #menu ul.closed,#content #left #menu li ul.collapsed,.yui-tt-shadow
3132 #content #left #menu ul.closed,#content #left #menu li ul.collapsed,.yui-tt-shadow
3133 {
3133 {
3134 display: none;
3134 display: none;
3135 }
3135 }
3136
3136
3137 #header #header-inner #quick li:hover ul,#header #header-inner #quick li li:hover ul,#header #header-inner #quick li li li:hover ul,#header #header-inner #quick li li li li:hover ul,#content #left #menu ul.opened,#content #left #menu li ul.expanded
3137 #header #header-inner #quick li:hover ul,#header #header-inner #quick li li:hover ul,#header #header-inner #quick li li li:hover ul,#header #header-inner #quick li li li li:hover ul,#content #left #menu ul.opened,#content #left #menu li ul.expanded
3138 {
3138 {
3139 display: block;
3139 display: block;
3140 }
3140 }
3141
3141
3142 #content div.graph {
3142 #content div.graph {
3143 padding: 0 10px 10px;
3143 padding: 0 10px 10px;
3144 }
3144 }
3145
3145
3146 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a
3146 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a
3147 {
3147 {
3148 color: #bfe3ff;
3148 color: #bfe3ff;
3149 }
3149 }
3150
3150
3151 #content div.box ol.lower-roman,#content div.box ol.upper-roman,#content div.box ol.lower-alpha,#content div.box ol.upper-alpha,#content div.box ol.decimal
3151 #content div.box ol.lower-roman,#content div.box ol.upper-roman,#content div.box ol.lower-alpha,#content div.box ol.upper-alpha,#content div.box ol.decimal
3152 {
3152 {
3153 margin: 10px 24px 10px 44px;
3153 margin: 10px 24px 10px 44px;
3154 }
3154 }
3155
3155
3156 #content div.box div.form,#content div.box div.table,#content div.box div.traffic
3156 #content div.box div.form,#content div.box div.table,#content div.box div.traffic
3157 {
3157 {
3158 clear: both;
3158 clear: both;
3159 overflow: hidden;
3159 overflow: hidden;
3160 margin: 0;
3160 margin: 0;
3161 padding: 0 20px 10px;
3161 padding: 0 20px 10px;
3162 }
3162 }
3163
3163
3164 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields
3164 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields
3165 {
3165 {
3166 clear: both;
3166 clear: both;
3167 overflow: hidden;
3167 overflow: hidden;
3168 margin: 0;
3168 margin: 0;
3169 padding: 0;
3169 padding: 0;
3170 }
3170 }
3171
3171
3172 #content div.box div.form div.fields div.field div.label span,#login div.form div.fields div.field div.label span,#register div.form div.fields div.field div.label span
3172 #content div.box div.form div.fields div.field div.label span,#login div.form div.fields div.field div.label span,#register div.form div.fields div.field div.label span
3173 {
3173 {
3174 height: 1%;
3174 height: 1%;
3175 display: block;
3175 display: block;
3176 color: #363636;
3176 color: #363636;
3177 margin: 0;
3177 margin: 0;
3178 padding: 2px 0 0;
3178 padding: 2px 0 0;
3179 }
3179 }
3180
3180
3181 #content div.box div.form div.fields div.field div.input input.error,#login div.form div.fields div.field div.input input.error,#register div.form div.fields div.field div.input input.error
3181 #content div.box div.form div.fields div.field div.input input.error,#login div.form div.fields div.field div.input input.error,#register div.form div.fields div.field div.input input.error
3182 {
3182 {
3183 background: #FBE3E4;
3183 background: #FBE3E4;
3184 border-top: 1px solid #e1b2b3;
3184 border-top: 1px solid #e1b2b3;
3185 border-left: 1px solid #e1b2b3;
3185 border-left: 1px solid #e1b2b3;
3186 border-right: 1px solid #FBC2C4;
3186 border-right: 1px solid #FBC2C4;
3187 border-bottom: 1px solid #FBC2C4;
3187 border-bottom: 1px solid #FBC2C4;
3188 }
3188 }
3189
3189
3190 #content div.box div.form div.fields div.field div.input input.success,#login div.form div.fields div.field div.input input.success,#register div.form div.fields div.field div.input input.success
3190 #content div.box div.form div.fields div.field div.input input.success,#login div.form div.fields div.field div.input input.success,#register div.form div.fields div.field div.input input.success
3191 {
3191 {
3192 background: #E6EFC2;
3192 background: #E6EFC2;
3193 border-top: 1px solid #cebb98;
3193 border-top: 1px solid #cebb98;
3194 border-left: 1px solid #cebb98;
3194 border-left: 1px solid #cebb98;
3195 border-right: 1px solid #c6d880;
3195 border-right: 1px solid #c6d880;
3196 border-bottom: 1px solid #c6d880;
3196 border-bottom: 1px solid #c6d880;
3197 }
3197 }
3198
3198
3199 #content div.box-left div.form div.fields div.field div.textarea,#content div.box-right div.form div.fields div.field div.textarea,#content div.box div.form div.fields div.field div.select select,#content div.box table th.selected input,#content div.box table td.selected input
3199 #content div.box-left div.form div.fields div.field div.textarea,#content div.box-right div.form div.fields div.field div.textarea,#content div.box div.form div.fields div.field div.select select,#content div.box table th.selected input,#content div.box table td.selected input
3200 {
3200 {
3201 margin: 0;
3201 margin: 0;
3202 }
3202 }
3203
3203
3204 #content div.box-left div.form div.fields div.field div.select,#content div.box-left div.form div.fields div.field div.checkboxes,#content div.box-left div.form div.fields div.field div.radios,#content div.box-right div.form div.fields div.field div.select,#content div.box-right div.form div.fields div.field div.checkboxes,#content div.box-right div.form div.fields div.field div.radios
3204 #content div.box-left div.form div.fields div.field div.select,#content div.box-left div.form div.fields div.field div.checkboxes,#content div.box-left div.form div.fields div.field div.radios,#content div.box-right div.form div.fields div.field div.select,#content div.box-right div.form div.fields div.field div.checkboxes,#content div.box-right div.form div.fields div.field div.radios
3205 {
3205 {
3206 margin: 0 0 0 0px !important;
3206 margin: 0 0 0 0px !important;
3207 padding: 0;
3207 padding: 0;
3208 }
3208 }
3209
3209
3210 #content div.box div.form div.fields div.field div.select,#content div.box div.form div.fields div.field div.checkboxes,#content div.box div.form div.fields div.field div.radios
3210 #content div.box div.form div.fields div.field div.select,#content div.box div.form div.fields div.field div.checkboxes,#content div.box div.form div.fields div.field div.radios
3211 {
3211 {
3212 margin: 0 0 0 200px;
3212 margin: 0 0 0 200px;
3213 padding: 0;
3213 padding: 0;
3214 }
3214 }
3215
3215
3216 #content div.box div.form div.fields div.field div.select a:hover,#content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover,#content div.box div.action a:hover
3216 #content div.box div.form div.fields div.field div.select a:hover,#content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover,#content div.box div.action a:hover
3217 {
3217 {
3218 color: #000;
3218 color: #000;
3219 text-decoration: none;
3219 text-decoration: none;
3220 }
3220 }
3221
3221
3222 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus
3222 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus
3223 {
3223 {
3224 border: 1px solid #666;
3224 border: 1px solid #666;
3225 }
3225 }
3226
3226
3227 #content div.box div.form div.fields div.field div.checkboxes div.checkbox,#content div.box div.form div.fields div.field div.radios div.radio
3227 #content div.box div.form div.fields div.field div.checkboxes div.checkbox,#content div.box div.form div.fields div.field div.radios div.radio
3228 {
3228 {
3229 clear: both;
3229 clear: both;
3230 overflow: hidden;
3230 overflow: hidden;
3231 margin: 0;
3231 margin: 0;
3232 padding: 8px 0 2px;
3232 padding: 8px 0 2px;
3233 }
3233 }
3234
3234
3235 #content div.box div.form div.fields div.field div.checkboxes div.checkbox input,#content div.box div.form div.fields div.field div.radios div.radio input
3235 #content div.box div.form div.fields div.field div.checkboxes div.checkbox input,#content div.box div.form div.fields div.field div.radios div.radio input
3236 {
3236 {
3237 float: left;
3237 float: left;
3238 margin: 0;
3238 margin: 0;
3239 }
3239 }
3240
3240
3241 #content div.box div.form div.fields div.field div.checkboxes div.checkbox label,#content div.box div.form div.fields div.field div.radios div.radio label
3241 #content div.box div.form div.fields div.field div.checkboxes div.checkbox label,#content div.box div.form div.fields div.field div.radios div.radio label
3242 {
3242 {
3243 height: 1%;
3243 height: 1%;
3244 display: block;
3244 display: block;
3245 float: left;
3245 float: left;
3246 margin: 2px 0 0 4px;
3246 margin: 2px 0 0 4px;
3247 }
3247 }
3248
3248
3249 div.form div.fields div.field div.button input,#content div.box div.form div.fields div.buttons input,div.form div.fields div.buttons input,#content div.box div.action div.button input
3249 div.form div.fields div.field div.button input,#content div.box div.form div.fields div.buttons input,div.form div.fields div.buttons input,#content div.box div.action div.button input
3250 {
3250 {
3251 color: #000;
3251 color: #000;
3252 font-size: 11px;
3252 font-size: 11px;
3253 font-weight: 700;
3253 font-weight: 700;
3254 margin: 0;
3254 margin: 0;
3255 }
3255 }
3256
3256
3257 input.ui-button {
3257 input.ui-button {
3258 background: #e5e3e3 url("../images/button.png") repeat-x;
3258 background: #e5e3e3 url("../images/button.png") repeat-x;
3259 border-top: 1px solid #DDD;
3259 border-top: 1px solid #DDD;
3260 border-left: 1px solid #c6c6c6;
3260 border-left: 1px solid #c6c6c6;
3261 border-right: 1px solid #DDD;
3261 border-right: 1px solid #DDD;
3262 border-bottom: 1px solid #c6c6c6;
3262 border-bottom: 1px solid #c6c6c6;
3263 color: #515151 !important;
3263 color: #515151 !important;
3264 outline: none;
3264 outline: none;
3265 margin: 0;
3265 margin: 0;
3266 padding: 6px 12px;
3266 padding: 6px 12px;
3267 -webkit-border-radius: 4px 4px 4px 4px;
3267 -webkit-border-radius: 4px 4px 4px 4px;
3268 -khtml-border-radius: 4px 4px 4px 4px;
3268 -khtml-border-radius: 4px 4px 4px 4px;
3269 -moz-border-radius: 4px 4px 4px 4px;
3269 -moz-border-radius: 4px 4px 4px 4px;
3270 border-radius: 4px 4px 4px 4px;
3270 border-radius: 4px 4px 4px 4px;
3271 box-shadow: 0 1px 0 #ececec;
3271 box-shadow: 0 1px 0 #ececec;
3272 cursor: pointer;
3272 cursor: pointer;
3273 }
3273 }
3274
3274
3275 input.ui-button:hover {
3275 input.ui-button:hover {
3276 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
3276 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
3277 border-top: 1px solid #ccc;
3277 border-top: 1px solid #ccc;
3278 border-left: 1px solid #bebebe;
3278 border-left: 1px solid #bebebe;
3279 border-right: 1px solid #b1b1b1;
3279 border-right: 1px solid #b1b1b1;
3280 border-bottom: 1px solid #afafaf;
3280 border-bottom: 1px solid #afafaf;
3281 }
3281 }
3282
3282
3283 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight
3283 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight
3284 {
3284 {
3285 display: inline;
3285 display: inline;
3286 }
3286 }
3287
3287
3288 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons
3288 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons
3289 {
3289 {
3290 margin: 10px 0 0 200px;
3290 margin: 10px 0 0 200px;
3291 padding: 0;
3291 padding: 0;
3292 }
3292 }
3293
3293
3294 #content div.box-left div.form div.fields div.buttons,#content div.box-right div.form div.fields div.buttons,div.box-left div.form div.fields div.buttons,div.box-right div.form div.fields div.buttons
3294 #content div.box-left div.form div.fields div.buttons,#content div.box-right div.form div.fields div.buttons,div.box-left div.form div.fields div.buttons,div.box-right div.form div.fields div.buttons
3295 {
3295 {
3296 margin: 10px 0 0;
3296 margin: 10px 0 0;
3297 }
3297 }
3298
3298
3299 #content div.box table td.user,#content div.box table td.address {
3299 #content div.box table td.user,#content div.box table td.address {
3300 width: 10%;
3300 width: 10%;
3301 text-align: center;
3301 text-align: center;
3302 }
3302 }
3303
3303
3304 #content div.box div.action div.button,#login div.form div.fields div.field div.input div.link,#register div.form div.fields div.field div.input div.link
3304 #content div.box div.action div.button,#login div.form div.fields div.field div.input div.link,#register div.form div.fields div.field div.input div.link
3305 {
3305 {
3306 text-align: right;
3306 text-align: right;
3307 margin: 6px 0 0;
3307 margin: 6px 0 0;
3308 padding: 0;
3308 padding: 0;
3309 }
3309 }
3310
3310
3311 #content div.box div.action div.button input.ui-state-hover,#login div.form div.fields div.buttons input.ui-state-hover,#register div.form div.fields div.buttons input.ui-state-hover
3311 #content div.box div.action div.button input.ui-state-hover,#login div.form div.fields div.buttons input.ui-state-hover,#register div.form div.fields div.buttons input.ui-state-hover
3312 {
3312 {
3313 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
3313 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
3314 border-top: 1px solid #ccc;
3314 border-top: 1px solid #ccc;
3315 border-left: 1px solid #bebebe;
3315 border-left: 1px solid #bebebe;
3316 border-right: 1px solid #b1b1b1;
3316 border-right: 1px solid #b1b1b1;
3317 border-bottom: 1px solid #afafaf;
3317 border-bottom: 1px solid #afafaf;
3318 color: #515151;
3318 color: #515151;
3319 margin: 0;
3319 margin: 0;
3320 padding: 6px 12px;
3320 padding: 6px 12px;
3321 }
3321 }
3322
3322
3323 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results
3323 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results
3324 {
3324 {
3325 text-align: left;
3325 text-align: left;
3326 float: left;
3326 float: left;
3327 margin: 0;
3327 margin: 0;
3328 padding: 0;
3328 padding: 0;
3329 }
3329 }
3330
3330
3331 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span
3331 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span
3332 {
3332 {
3333 height: 1%;
3333 height: 1%;
3334 display: block;
3334 display: block;
3335 float: left;
3335 float: left;
3336 background: #ebebeb url("../images/pager.png") repeat-x;
3336 background: #ebebeb url("../images/pager.png") repeat-x;
3337 border-top: 1px solid #dedede;
3337 border-top: 1px solid #dedede;
3338 border-left: 1px solid #cfcfcf;
3338 border-left: 1px solid #cfcfcf;
3339 border-right: 1px solid #c4c4c4;
3339 border-right: 1px solid #c4c4c4;
3340 border-bottom: 1px solid #c4c4c4;
3340 border-bottom: 1px solid #c4c4c4;
3341 color: #4A4A4A;
3341 color: #4A4A4A;
3342 font-weight: 700;
3342 font-weight: 700;
3343 margin: 0;
3343 margin: 0;
3344 padding: 6px 8px;
3344 padding: 6px 8px;
3345 }
3345 }
3346
3346
3347 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled
3347 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled
3348 {
3348 {
3349 color: #B4B4B4;
3349 color: #B4B4B4;
3350 padding: 6px;
3350 padding: 6px;
3351 }
3351 }
3352
3352
3353 #login,#register {
3353 #login,#register {
3354 width: 520px;
3354 width: 520px;
3355 margin: 10% auto 0;
3355 margin: 10% auto 0;
3356 padding: 0;
3356 padding: 0;
3357 }
3357 }
3358
3358
3359 #login div.color,#register div.color {
3359 #login div.color,#register div.color {
3360 clear: both;
3360 clear: both;
3361 overflow: hidden;
3361 overflow: hidden;
3362 background: #FFF;
3362 background: #FFF;
3363 margin: 10px auto 0;
3363 margin: 10px auto 0;
3364 padding: 3px 3px 3px 0;
3364 padding: 3px 3px 3px 0;
3365 }
3365 }
3366
3366
3367 #login div.color a,#register div.color a {
3367 #login div.color a,#register div.color a {
3368 width: 20px;
3368 width: 20px;
3369 height: 20px;
3369 height: 20px;
3370 display: block;
3370 display: block;
3371 float: left;
3371 float: left;
3372 margin: 0 0 0 3px;
3372 margin: 0 0 0 3px;
3373 padding: 0;
3373 padding: 0;
3374 }
3374 }
3375
3375
3376 #login div.title h5,#register div.title h5 {
3376 #login div.title h5,#register div.title h5 {
3377 color: #fff;
3377 color: #fff;
3378 margin: 10px;
3378 margin: 10px;
3379 padding: 0;
3379 padding: 0;
3380 }
3380 }
3381
3381
3382 #login div.form div.fields div.field,#register div.form div.fields div.field
3382 #login div.form div.fields div.field,#register div.form div.fields div.field
3383 {
3383 {
3384 clear: both;
3384 clear: both;
3385 overflow: hidden;
3385 overflow: hidden;
3386 margin: 0;
3386 margin: 0;
3387 padding: 0 0 10px;
3387 padding: 0 0 10px;
3388 }
3388 }
3389
3389
3390 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message
3390 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message
3391 {
3391 {
3392 height: 1%;
3392 height: 1%;
3393 display: block;
3393 display: block;
3394 color: red;
3394 color: red;
3395 margin: 8px 0 0;
3395 margin: 8px 0 0;
3396 padding: 0;
3396 padding: 0;
3397 max-width: 320px;
3397 max-width: 320px;
3398 }
3398 }
3399
3399
3400 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label
3400 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label
3401 {
3401 {
3402 color: #000;
3402 color: #000;
3403 font-weight: 700;
3403 font-weight: 700;
3404 }
3404 }
3405
3405
3406 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input
3406 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input
3407 {
3407 {
3408 float: left;
3408 float: left;
3409 margin: 0;
3409 margin: 0;
3410 padding: 0;
3410 padding: 0;
3411 }
3411 }
3412
3412
3413 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox
3413 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox
3414 {
3414 {
3415 margin: 0 0 0 184px;
3415 margin: 0 0 0 184px;
3416 padding: 0;
3416 padding: 0;
3417 }
3417 }
3418
3418
3419 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label
3419 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label
3420 {
3420 {
3421 color: #565656;
3421 color: #565656;
3422 font-weight: 700;
3422 font-weight: 700;
3423 }
3423 }
3424
3424
3425 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input
3425 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input
3426 {
3426 {
3427 color: #000;
3427 color: #000;
3428 font-size: 1em;
3428 font-size: 1em;
3429 font-weight: 700;
3429 font-weight: 700;
3430 margin: 0;
3430 margin: 0;
3431 }
3431 }
3432
3432
3433 #changeset_content .container .wrapper,#graph_content .container .wrapper
3433 #changeset_content .container .wrapper,#graph_content .container .wrapper
3434 {
3434 {
3435 width: 600px;
3435 width: 600px;
3436 }
3436 }
3437
3437
3438 #changeset_content .container .left,#graph_content .container .left {
3438 #changeset_content .container .left,#graph_content .container .left {
3439 float: left;
3439 float: left;
3440 width: 70%;
3440 width: 70%;
3441 padding-left: 5px;
3441 padding-left: 5px;
3442 }
3442 }
3443
3443
3444 #changeset_content .container .left .date,.ac .match {
3444 #changeset_content .container .left .date,.ac .match {
3445 font-weight: 700;
3445 font-weight: 700;
3446 padding-top: 5px;
3446 padding-top: 5px;
3447 padding-bottom: 5px;
3447 padding-bottom: 5px;
3448 }
3448 }
3449
3449
3450 div#legend_container table td,div#legend_choices table td {
3450 div#legend_container table td,div#legend_choices table td {
3451 border: none !important;
3451 border: none !important;
3452 height: 20px !important;
3452 height: 20px !important;
3453 padding: 0 !important;
3453 padding: 0 !important;
3454 }
3454 }
3455
3455
3456 .q_filter_box {
3456 .q_filter_box {
3457 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3457 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3458 -webkit-border-radius: 4px;
3458 -webkit-border-radius: 4px;
3459 -moz-border-radius: 4px;
3459 -moz-border-radius: 4px;
3460 border-radius: 4px;
3460 border-radius: 4px;
3461 border: 0 none;
3461 border: 0 none;
3462 color: #AAAAAA;
3462 color: #AAAAAA;
3463 margin-bottom: -4px;
3463 margin-bottom: -4px;
3464 margin-top: -4px;
3464 margin-top: -4px;
3465 padding-left: 3px;
3465 padding-left: 3px;
3466 }
3466 }
3467
3467
3468 #node_filter {
3468 #node_filter {
3469 border: 0px solid #545454;
3469 border: 0px solid #545454;
3470 color: #AAAAAA;
3470 color: #AAAAAA;
3471 padding-left: 3px;
3471 padding-left: 3px;
3472 }
3472 }
3473
3473
3474 /*README STYLE*/
3474 /*README STYLE*/
3475
3475
3476 div.readme {
3476 div.readme {
3477 padding:0px;
3477 padding:0px;
3478 }
3478 }
3479
3479
3480 div.readme h2 {
3480 div.readme h2 {
3481 font-weight: normal;
3481 font-weight: normal;
3482 }
3482 }
3483
3483
3484 div.readme .readme_box {
3484 div.readme .readme_box {
3485 background-color: #fafafa;
3485 background-color: #fafafa;
3486 }
3486 }
3487
3487
3488 div.readme .readme_box {
3488 div.readme .readme_box {
3489 clear:both;
3489 clear:both;
3490 overflow:hidden;
3490 overflow:hidden;
3491 margin:0;
3491 margin:0;
3492 padding:0 20px 10px;
3492 padding:0 20px 10px;
3493 }
3493 }
3494
3494
3495 div.readme .readme_box h1, div.readme .readme_box h2, div.readme .readme_box h3, div.readme .readme_box h4, div.readme .readme_box h5, div.readme .readme_box h6 {
3495 div.readme .readme_box h1, div.readme .readme_box h2, div.readme .readme_box h3, div.readme .readme_box h4, div.readme .readme_box h5, div.readme .readme_box h6 {
3496 border-bottom: 0 !important;
3496 border-bottom: 0 !important;
3497 margin: 0 !important;
3497 margin: 0 !important;
3498 padding: 0 !important;
3498 padding: 0 !important;
3499 line-height: 1.5em !important;
3499 line-height: 1.5em !important;
3500 }
3500 }
3501
3501
3502
3502
3503 div.readme .readme_box h1:first-child {
3503 div.readme .readme_box h1:first-child {
3504 padding-top: .25em !important;
3504 padding-top: .25em !important;
3505 }
3505 }
3506
3506
3507 div.readme .readme_box h2, div.readme .readme_box h3 {
3507 div.readme .readme_box h2, div.readme .readme_box h3 {
3508 margin: 1em 0 !important;
3508 margin: 1em 0 !important;
3509 }
3509 }
3510
3510
3511 div.readme .readme_box h2 {
3511 div.readme .readme_box h2 {
3512 margin-top: 1.5em !important;
3512 margin-top: 1.5em !important;
3513 border-top: 4px solid #e0e0e0 !important;
3513 border-top: 4px solid #e0e0e0 !important;
3514 padding-top: .5em !important;
3514 padding-top: .5em !important;
3515 }
3515 }
3516
3516
3517 div.readme .readme_box p {
3517 div.readme .readme_box p {
3518 color: black !important;
3518 color: black !important;
3519 margin: 1em 0 !important;
3519 margin: 1em 0 !important;
3520 line-height: 1.5em !important;
3520 line-height: 1.5em !important;
3521 }
3521 }
3522
3522
3523 div.readme .readme_box ul {
3523 div.readme .readme_box ul {
3524 list-style: disc !important;
3524 list-style: disc !important;
3525 margin: 1em 0 1em 2em !important;
3525 margin: 1em 0 1em 2em !important;
3526 }
3526 }
3527
3527
3528 div.readme .readme_box ol {
3528 div.readme .readme_box ol {
3529 list-style: decimal;
3529 list-style: decimal;
3530 margin: 1em 0 1em 2em !important;
3530 margin: 1em 0 1em 2em !important;
3531 }
3531 }
3532
3532
3533 div.readme .readme_box pre, code {
3533 div.readme .readme_box pre, code {
3534 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
3534 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
3535 }
3535 }
3536
3536
3537 div.readme .readme_box code {
3537 div.readme .readme_box code {
3538 font-size: 12px !important;
3538 font-size: 12px !important;
3539 background-color: ghostWhite !important;
3539 background-color: ghostWhite !important;
3540 color: #444 !important;
3540 color: #444 !important;
3541 padding: 0 .2em !important;
3541 padding: 0 .2em !important;
3542 border: 1px solid #dedede !important;
3542 border: 1px solid #dedede !important;
3543 }
3543 }
3544
3544
3545 div.readme .readme_box pre code {
3545 div.readme .readme_box pre code {
3546 padding: 0 !important;
3546 padding: 0 !important;
3547 font-size: 12px !important;
3547 font-size: 12px !important;
3548 background-color: #eee !important;
3548 background-color: #eee !important;
3549 border: none !important;
3549 border: none !important;
3550 }
3550 }
3551
3551
3552 div.readme .readme_box pre {
3552 div.readme .readme_box pre {
3553 margin: 1em 0;
3553 margin: 1em 0;
3554 font-size: 12px;
3554 font-size: 12px;
3555 background-color: #eee;
3555 background-color: #eee;
3556 border: 1px solid #ddd;
3556 border: 1px solid #ddd;
3557 padding: 5px;
3557 padding: 5px;
3558 color: #444;
3558 color: #444;
3559 overflow: auto;
3559 overflow: auto;
3560 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3560 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3561 -webkit-border-radius: 3px;
3561 -webkit-border-radius: 3px;
3562 -moz-border-radius: 3px;
3562 -moz-border-radius: 3px;
3563 border-radius: 3px;
3563 border-radius: 3px;
3564 }
3564 }
3565
3565
3566
3566
3567 /** RST STYLE **/
3567 /** RST STYLE **/
3568
3568
3569
3569
3570 div.rst-block {
3570 div.rst-block {
3571 padding:0px;
3571 padding:0px;
3572 }
3572 }
3573
3573
3574 div.rst-block h2 {
3574 div.rst-block h2 {
3575 font-weight: normal;
3575 font-weight: normal;
3576 }
3576 }
3577
3577
3578 div.rst-block {
3578 div.rst-block {
3579 background-color: #fafafa;
3579 background-color: #fafafa;
3580 }
3580 }
3581
3581
3582 div.rst-block {
3582 div.rst-block {
3583 clear:both;
3583 clear:both;
3584 overflow:hidden;
3584 overflow:hidden;
3585 margin:0;
3585 margin:0;
3586 padding:0 20px 10px;
3586 padding:0 20px 10px;
3587 }
3587 }
3588
3588
3589 div.rst-block h1, div.rst-block h2, div.rst-block h3, div.rst-block h4, div.rst-block h5, div.rst-block h6 {
3589 div.rst-block h1, div.rst-block h2, div.rst-block h3, div.rst-block h4, div.rst-block h5, div.rst-block h6 {
3590 border-bottom: 0 !important;
3590 border-bottom: 0 !important;
3591 margin: 0 !important;
3591 margin: 0 !important;
3592 padding: 0 !important;
3592 padding: 0 !important;
3593 line-height: 1.5em !important;
3593 line-height: 1.5em !important;
3594 }
3594 }
3595
3595
3596
3596
3597 div.rst-block h1:first-child {
3597 div.rst-block h1:first-child {
3598 padding-top: .25em !important;
3598 padding-top: .25em !important;
3599 }
3599 }
3600
3600
3601 div.rst-block h2, div.rst-block h3 {
3601 div.rst-block h2, div.rst-block h3 {
3602 margin: 1em 0 !important;
3602 margin: 1em 0 !important;
3603 }
3603 }
3604
3604
3605 div.rst-block h2 {
3605 div.rst-block h2 {
3606 margin-top: 1.5em !important;
3606 margin-top: 1.5em !important;
3607 border-top: 4px solid #e0e0e0 !important;
3607 border-top: 4px solid #e0e0e0 !important;
3608 padding-top: .5em !important;
3608 padding-top: .5em !important;
3609 }
3609 }
3610
3610
3611 div.rst-block p {
3611 div.rst-block p {
3612 color: black !important;
3612 color: black !important;
3613 margin: 1em 0 !important;
3613 margin: 1em 0 !important;
3614 line-height: 1.5em !important;
3614 line-height: 1.5em !important;
3615 }
3615 }
3616
3616
3617 div.rst-block ul {
3617 div.rst-block ul {
3618 list-style: disc !important;
3618 list-style: disc !important;
3619 margin: 1em 0 1em 2em !important;
3619 margin: 1em 0 1em 2em !important;
3620 }
3620 }
3621
3621
3622 div.rst-block ol {
3622 div.rst-block ol {
3623 list-style: decimal;
3623 list-style: decimal;
3624 margin: 1em 0 1em 2em !important;
3624 margin: 1em 0 1em 2em !important;
3625 }
3625 }
3626
3626
3627 div.rst-block pre, code {
3627 div.rst-block pre, code {
3628 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
3628 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
3629 }
3629 }
3630
3630
3631 div.rst-block code {
3631 div.rst-block code {
3632 font-size: 12px !important;
3632 font-size: 12px !important;
3633 background-color: ghostWhite !important;
3633 background-color: ghostWhite !important;
3634 color: #444 !important;
3634 color: #444 !important;
3635 padding: 0 .2em !important;
3635 padding: 0 .2em !important;
3636 border: 1px solid #dedede !important;
3636 border: 1px solid #dedede !important;
3637 }
3637 }
3638
3638
3639 div.rst-block pre code {
3639 div.rst-block pre code {
3640 padding: 0 !important;
3640 padding: 0 !important;
3641 font-size: 12px !important;
3641 font-size: 12px !important;
3642 background-color: #eee !important;
3642 background-color: #eee !important;
3643 border: none !important;
3643 border: none !important;
3644 }
3644 }
3645
3645
3646 div.rst-block pre {
3646 div.rst-block pre {
3647 margin: 1em 0;
3647 margin: 1em 0;
3648 font-size: 12px;
3648 font-size: 12px;
3649 background-color: #eee;
3649 background-color: #eee;
3650 border: 1px solid #ddd;
3650 border: 1px solid #ddd;
3651 padding: 5px;
3651 padding: 5px;
3652 color: #444;
3652 color: #444;
3653 overflow: auto;
3653 overflow: auto;
3654 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3654 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3655 -webkit-border-radius: 3px;
3655 -webkit-border-radius: 3px;
3656 -moz-border-radius: 3px;
3656 -moz-border-radius: 3px;
3657 border-radius: 3px;
3657 border-radius: 3px;
3658 }
3658 }
3659
3659
3660
3660
3661 /** comment main **/
3661 /** comment main **/
3662 .comments {
3662 .comments {
3663 padding:10px 20px;
3663 padding:10px 20px;
3664 }
3664 }
3665
3665
3666 .comments .comment {
3666 .comments .comment {
3667 border: 1px solid #ddd;
3667 border: 1px solid #ddd;
3668 margin-top: 10px;
3668 margin-top: 10px;
3669 -webkit-border-radius: 4px;
3669 -webkit-border-radius: 4px;
3670 -moz-border-radius: 4px;
3670 -moz-border-radius: 4px;
3671 border-radius: 4px;
3671 border-radius: 4px;
3672 }
3672 }
3673
3673
3674 .comments .comment .meta {
3674 .comments .comment .meta {
3675 background: #f8f8f8;
3675 background: #f8f8f8;
3676 padding: 6px;
3676 padding: 6px;
3677 border-bottom: 1px solid #ddd;
3677 border-bottom: 1px solid #ddd;
3678 }
3678 }
3679
3679
3680 .comments .comment .meta img {
3680 .comments .comment .meta img {
3681 vertical-align: middle;
3681 vertical-align: middle;
3682 }
3682 }
3683
3683
3684 .comments .comment .meta .user {
3684 .comments .comment .meta .user {
3685 font-weight: bold;
3685 font-weight: bold;
3686 }
3686 }
3687
3687
3688 .comments .comment .meta .date {
3688 .comments .comment .meta .date {
3689 float: right;
3689 float: right;
3690 }
3690 }
3691
3691
3692 .comments .comment .text {
3692 .comments .comment .text {
3693 padding: 8px 6px 6px 14px;
3693 padding: 8px 6px 6px 14px;
3694 background-color: #FAFAFA;
3694 background-color: #FAFAFA;
3695 }
3695 }
3696
3696
3697 .comments .comments-number{
3697 .comments .comments-number{
3698 padding:0px 0px 10px 0px;
3698 padding:0px 0px 10px 0px;
3699 font-weight: bold;
3699 font-weight: bold;
3700 color: #666;
3700 color: #666;
3701 font-size: 16px;
3701 font-size: 16px;
3702 }
3702 }
3703
3703
3704 /** comment form **/
3704 /** comment form **/
3705
3705
3706 .comment-form .clearfix{
3706 .comment-form .clearfix{
3707 background: #EEE;
3707 background: #EEE;
3708 -webkit-border-radius: 4px;
3708 -webkit-border-radius: 4px;
3709 -moz-border-radius: 4px;
3709 -moz-border-radius: 4px;
3710 border-radius: 4px;
3710 border-radius: 4px;
3711 padding: 10px;
3711 padding: 10px;
3712 }
3712 }
3713
3713
3714 div.comment-form {
3714 div.comment-form {
3715 margin-top: 20px;
3715 margin-top: 20px;
3716 }
3716 }
3717
3717
3718 .comment-form strong {
3718 .comment-form strong {
3719 display: block;
3719 display: block;
3720 margin-bottom: 15px;
3720 margin-bottom: 15px;
3721 }
3721 }
3722
3722
3723 .comment-form textarea {
3723 .comment-form textarea {
3724 width: 100%;
3724 width: 100%;
3725 height: 100px;
3725 height: 100px;
3726 font-family: 'Monaco', 'Courier', 'Courier New', monospace;
3726 font-family: 'Monaco', 'Courier', 'Courier New', monospace;
3727 }
3727 }
3728
3728
3729 form.comment-form {
3729 form.comment-form {
3730 margin-top: 10px;
3730 margin-top: 10px;
3731 margin-left: 10px;
3731 margin-left: 10px;
3732 }
3732 }
3733
3733
3734 .comment-form-submit {
3734 .comment-form-submit {
3735 margin-top: 5px;
3735 margin-top: 5px;
3736 margin-left: 525px;
3736 margin-left: 525px;
3737 }
3737 }
3738
3738
3739 .file-comments {
3739 .file-comments {
3740 display: none;
3740 display: none;
3741 }
3741 }
3742
3742
3743 .comment-form .comment {
3743 .comment-form .comment {
3744 margin-left: 10px;
3744 margin-left: 10px;
3745 }
3745 }
3746
3746
3747 .comment-form .comment-help{
3747 .comment-form .comment-help{
3748 padding: 0px 0px 5px 0px;
3748 padding: 0px 0px 5px 0px;
3749 color: #666;
3749 color: #666;
3750 }
3750 }
3751
3751
3752 .comment-form .comment-button{
3752 .comment-form .comment-button{
3753 padding-top:5px;
3753 padding-top:5px;
3754 }
3754 }
3755
3755
3756 .add-another-button {
3756 .add-another-button {
3757 margin-left: 10px;
3757 margin-left: 10px;
3758 margin-top: 10px;
3758 margin-top: 10px;
3759 margin-bottom: 10px;
3759 margin-bottom: 10px;
3760 }
3760 }
3761
3761
3762 .comment .buttons {
3762 .comment .buttons {
3763 position: absolute;
3763 position: absolute;
3764 right:40px;
3764 right:40px;
3765 }
3765 }
3766
3766
3767
3767
3768 .show-inline-comments{
3768 .show-inline-comments{
3769 position: relative;
3769 position: relative;
3770 top:1px
3770 top:1px
3771 }
3771 }
3772
3772
3773 /** comment inline form **/
3773 /** comment inline form **/
3774
3774
3775 .comment-inline-form .clearfix{
3775 .comment-inline-form .clearfix{
3776 background: #EEE;
3776 background: #EEE;
3777 -webkit-border-radius: 4px;
3777 -webkit-border-radius: 4px;
3778 -moz-border-radius: 4px;
3778 -moz-border-radius: 4px;
3779 border-radius: 4px;
3779 border-radius: 4px;
3780 padding: 5px;
3780 padding: 5px;
3781 }
3781 }
3782
3782
3783 div.comment-inline-form {
3783 div.comment-inline-form {
3784 margin-top: 5px;
3784 margin-top: 5px;
3785 padding:2px 6px 8px 6px;
3785 padding:2px 6px 8px 6px;
3786 }
3786 }
3787
3787
3788 .comment-inline-form strong {
3788 .comment-inline-form strong {
3789 display: block;
3789 display: block;
3790 margin-bottom: 15px;
3790 margin-bottom: 15px;
3791 }
3791 }
3792
3792
3793 .comment-inline-form textarea {
3793 .comment-inline-form textarea {
3794 width: 100%;
3794 width: 100%;
3795 height: 100px;
3795 height: 100px;
3796 font-family: 'Monaco', 'Courier', 'Courier New', monospace;
3796 font-family: 'Monaco', 'Courier', 'Courier New', monospace;
3797 }
3797 }
3798
3798
3799 form.comment-inline-form {
3799 form.comment-inline-form {
3800 margin-top: 10px;
3800 margin-top: 10px;
3801 margin-left: 10px;
3801 margin-left: 10px;
3802 }
3802 }
3803
3803
3804 .comment-inline-form-submit {
3804 .comment-inline-form-submit {
3805 margin-top: 5px;
3805 margin-top: 5px;
3806 margin-left: 525px;
3806 margin-left: 525px;
3807 }
3807 }
3808
3808
3809 .file-comments {
3809 .file-comments {
3810 display: none;
3810 display: none;
3811 }
3811 }
3812
3812
3813 .comment-inline-form .comment {
3813 .comment-inline-form .comment {
3814 margin-left: 10px;
3814 margin-left: 10px;
3815 }
3815 }
3816
3816
3817 .comment-inline-form .comment-help{
3817 .comment-inline-form .comment-help{
3818 padding: 0px 0px 2px 0px;
3818 padding: 0px 0px 2px 0px;
3819 color: #666666;
3819 color: #666666;
3820 font-size: 10px;
3820 font-size: 10px;
3821 }
3821 }
3822
3822
3823 .comment-inline-form .comment-button{
3823 .comment-inline-form .comment-button{
3824 padding-top:5px;
3824 padding-top:5px;
3825 }
3825 }
3826
3826
3827 /** comment inline **/
3827 /** comment inline **/
3828 .inline-comments {
3828 .inline-comments {
3829 padding:10px 20px;
3829 padding:10px 20px;
3830 }
3830 }
3831
3831
3832 .inline-comments div.rst-block {
3832 .inline-comments div.rst-block {
3833 clear:both;
3833 clear:both;
3834 overflow:hidden;
3834 overflow:hidden;
3835 margin:0;
3835 margin:0;
3836 padding:0 20px 0px;
3836 padding:0 20px 0px;
3837 }
3837 }
3838 .inline-comments .comment {
3838 .inline-comments .comment {
3839 border: 1px solid #ddd;
3839 border: 1px solid #ddd;
3840 -webkit-border-radius: 4px;
3840 -webkit-border-radius: 4px;
3841 -moz-border-radius: 4px;
3841 -moz-border-radius: 4px;
3842 border-radius: 4px;
3842 border-radius: 4px;
3843 margin: 3px 3px 5px 5px;
3843 margin: 3px 3px 5px 5px;
3844 background-color: #FAFAFA;
3844 background-color: #FAFAFA;
3845 }
3845 }
3846 .inline-comments .comment-wrapp{
3846 .inline-comments .comment-wrapp{
3847 padding:1px;
3847 padding:1px;
3848 }
3848 }
3849 .inline-comments .comment .meta {
3849 .inline-comments .comment .meta {
3850 background: #f8f8f8;
3850 background: #f8f8f8;
3851 padding: 6px;
3851 padding: 6px;
3852 border-bottom: 1px solid #ddd;
3852 border-bottom: 1px solid #ddd;
3853 }
3853 }
3854
3854
3855 .inline-comments .comment .meta img {
3855 .inline-comments .comment .meta img {
3856 vertical-align: middle;
3856 vertical-align: middle;
3857 }
3857 }
3858
3858
3859 .inline-comments .comment .meta .user {
3859 .inline-comments .comment .meta .user {
3860 font-weight: bold;
3860 font-weight: bold;
3861 }
3861 }
3862
3862
3863 .inline-comments .comment .meta .date {
3863 .inline-comments .comment .meta .date {
3864 float: right;
3864 float: right;
3865 }
3865 }
3866
3866
3867 .inline-comments .comment .text {
3867 .inline-comments .comment .text {
3868 padding: 8px 6px 6px 14px;
3868 padding: 8px 6px 6px 14px;
3869 background-color: #FAFAFA;
3869 background-color: #FAFAFA;
3870 }
3870 }
3871
3871
3872 .inline-comments .comments-number{
3872 .inline-comments .comments-number{
3873 padding:0px 0px 10px 0px;
3873 padding:0px 0px 10px 0px;
3874 font-weight: bold;
3874 font-weight: bold;
3875 color: #666;
3875 color: #666;
3876 font-size: 16px;
3876 font-size: 16px;
3877 }
3877 }
3878 .inline-comments-button .add-comment{
3878 .inline-comments-button .add-comment{
3879 margin:10px 5px !important;
3879 margin:10px 5px !important;
3880 }
3880 }
3881 .notifications{
3881 .notifications{
3882 width:22px;
3882 width:22px;
3883 padding:2px;
3883 padding:2px;
3884 float:right;
3884 float:right;
3885 -webkit-border-radius: 4px;
3885 -webkit-border-radius: 4px;
3886 -moz-border-radius: 4px;
3886 -moz-border-radius: 4px;
3887 border-radius: 4px;
3887 border-radius: 4px;
3888 text-align: center;
3888 text-align: center;
3889 margin: 0px -10px 0px 5px;
3889 margin: 0px -10px 0px 5px;
3890 background-color: #DEDEDE;
3890 background-color: #DEDEDE;
3891 }
3891 }
3892 .notifications a{
3892 .notifications a{
3893 color:#888 !important;
3893 color:#888 !important;
3894 display: block;
3894 display: block;
3895 font-size: 10px
3895 font-size: 10px
3896 }
3896 }
3897 .notifications a:hover{
3897 .notifications a:hover{
3898 text-decoration: none !important;
3898 text-decoration: none !important;
3899 }
3899 }
3900 .notification-header{
3900 .notification-header{
3901
3901 padding-top:6px;
3902 }
3902 }
3903 .notification-header .desc{
3903 .notification-header .desc{
3904 font-size: 16px;
3904 font-size: 16px;
3905 height: 24px;
3905 height: 24px;
3906 padding-top: 6px;
3907 float: left
3906 float: left
3908 }
3907 }
3909 .notification-list .container.unread{
3908 .notification-list .container.unread{
3910
3909
3911 }
3910 }
3911 .notification-header .gravatar{
3912
3913 }
3912 .notification-header .desc.unread{
3914 .notification-header .desc.unread{
3913 font-weight: bold;
3915 font-weight: bold;
3914 font-size: 17px;
3916 font-size: 17px;
3915 }
3917 }
3916
3918
3917 .notification-header .delete-notifications{
3919 .notification-header .delete-notifications{
3918 float: right;
3920 float: right;
3919 padding-top: 8px;
3921 padding-top: 8px;
3920 cursor: pointer;
3922 cursor: pointer;
3921 }
3923 }
3922 .notification-subject{
3924 .notification-subject{
3923 clear:both;
3925 clear:both;
3924 border-bottom: 1px solid #eee;
3926 border-bottom: 1px solid #eee;
3925 padding:5px 0px 5px 38px;
3927 padding:5px 0px 5px 38px;
3926 }
3928 }
3927
3929
3928
3930
3929 /*****************************************************************************
3931 /*****************************************************************************
3930 DIFFS CSS
3932 DIFFS CSS
3931 ******************************************************************************/
3933 ******************************************************************************/
3932
3934
3933 div.diffblock {
3935 div.diffblock {
3934 overflow: auto;
3936 overflow: auto;
3935 padding: 0px;
3937 padding: 0px;
3936 border: 1px solid #ccc;
3938 border: 1px solid #ccc;
3937 background: #f8f8f8;
3939 background: #f8f8f8;
3938 font-size: 100%;
3940 font-size: 100%;
3939 line-height: 100%;
3941 line-height: 100%;
3940 /* new */
3942 /* new */
3941 line-height: 125%;
3943 line-height: 125%;
3942 -webkit-border-radius: 6px 6px 0px 0px;
3944 -webkit-border-radius: 6px 6px 0px 0px;
3943 -moz-border-radius: 6px 6px 0px 0px;
3945 -moz-border-radius: 6px 6px 0px 0px;
3944 border-radius: 6px 6px 0px 0px;
3946 border-radius: 6px 6px 0px 0px;
3945 }
3947 }
3946 div.diffblock.margined{
3948 div.diffblock.margined{
3947 margin: 0px 20px 0px 20px;
3949 margin: 0px 20px 0px 20px;
3948 }
3950 }
3949 div.diffblock .code-header{
3951 div.diffblock .code-header{
3950 border-bottom: 1px solid #CCCCCC;
3952 border-bottom: 1px solid #CCCCCC;
3951 background: #EEEEEE;
3953 background: #EEEEEE;
3952 padding:10px 0 10px 0;
3954 padding:10px 0 10px 0;
3953 height: 14px;
3955 height: 14px;
3954 }
3956 }
3955 div.diffblock .code-header.cv{
3957 div.diffblock .code-header.cv{
3956 height: 34px;
3958 height: 34px;
3957 }
3959 }
3958 div.diffblock .code-header-title{
3960 div.diffblock .code-header-title{
3959 padding: 0px 0px 10px 5px !important;
3961 padding: 0px 0px 10px 5px !important;
3960 margin: 0 !important;
3962 margin: 0 !important;
3961 }
3963 }
3962
3964
3963 div.diffblock .code-header .date{
3965 div.diffblock .code-header .date{
3964 float:left;
3966 float:left;
3965 text-transform: uppercase;
3967 text-transform: uppercase;
3966 }
3968 }
3967 div.diffblock .code-header div{
3969 div.diffblock .code-header div{
3968 margin-left:4px;
3970 margin-left:4px;
3969 font-weight: bold;
3971 font-weight: bold;
3970 font-size: 14px;
3972 font-size: 14px;
3971 }
3973 }
3972 div.diffblock .code-body{
3974 div.diffblock .code-body{
3973 background: #FFFFFF;
3975 background: #FFFFFF;
3974 }
3976 }
3975 div.diffblock pre.raw{
3977 div.diffblock pre.raw{
3976 background: #FFFFFF;
3978 background: #FFFFFF;
3977 color:#000000;
3979 color:#000000;
3978 }
3980 }
3979 table.code-difftable{
3981 table.code-difftable{
3980 border-collapse: collapse;
3982 border-collapse: collapse;
3981 width: 99%;
3983 width: 99%;
3982 }
3984 }
3983 table.code-difftable td {
3985 table.code-difftable td {
3984 padding: 0 !important;
3986 padding: 0 !important;
3985 background: none !important;
3987 background: none !important;
3986 border:0 !important;
3988 border:0 !important;
3987 vertical-align: none !important;
3989 vertical-align: none !important;
3988 }
3990 }
3989 table.code-difftable .context{
3991 table.code-difftable .context{
3990 background:none repeat scroll 0 0 #DDE7EF;
3992 background:none repeat scroll 0 0 #DDE7EF;
3991 }
3993 }
3992 table.code-difftable .add{
3994 table.code-difftable .add{
3993 background:none repeat scroll 0 0 #DDFFDD;
3995 background:none repeat scroll 0 0 #DDFFDD;
3994 }
3996 }
3995 table.code-difftable .add ins{
3997 table.code-difftable .add ins{
3996 background:none repeat scroll 0 0 #AAFFAA;
3998 background:none repeat scroll 0 0 #AAFFAA;
3997 text-decoration:none;
3999 text-decoration:none;
3998 }
4000 }
3999 table.code-difftable .del{
4001 table.code-difftable .del{
4000 background:none repeat scroll 0 0 #FFDDDD;
4002 background:none repeat scroll 0 0 #FFDDDD;
4001 }
4003 }
4002 table.code-difftable .del del{
4004 table.code-difftable .del del{
4003 background:none repeat scroll 0 0 #FFAAAA;
4005 background:none repeat scroll 0 0 #FFAAAA;
4004 text-decoration:none;
4006 text-decoration:none;
4005 }
4007 }
4006
4008
4007 /** LINE NUMBERS **/
4009 /** LINE NUMBERS **/
4008 table.code-difftable .lineno{
4010 table.code-difftable .lineno{
4009 background:none repeat scroll 0 0 #EEEEEE !important;
4011 background:none repeat scroll 0 0 #EEEEEE !important;
4010 padding-left:2px;
4012 padding-left:2px;
4011 padding-right:2px;
4013 padding-right:2px;
4012 text-align:right;
4014 text-align:right;
4013 width:32px;
4015 width:32px;
4014 -moz-user-select:none;
4016 -moz-user-select:none;
4015 -webkit-user-select: none;
4017 -webkit-user-select: none;
4016 border-right: 1px solid #CCC !important;
4018 border-right: 1px solid #CCC !important;
4017 border-left: 0px solid #CCC !important;
4019 border-left: 0px solid #CCC !important;
4018 border-top: 0px solid #CCC !important;
4020 border-top: 0px solid #CCC !important;
4019 border-bottom: none !important;
4021 border-bottom: none !important;
4020 vertical-align: middle !important;
4022 vertical-align: middle !important;
4021
4023
4022 }
4024 }
4023 table.code-difftable .lineno.new {
4025 table.code-difftable .lineno.new {
4024 }
4026 }
4025 table.code-difftable .lineno.old {
4027 table.code-difftable .lineno.old {
4026 }
4028 }
4027 table.code-difftable .lineno a{
4029 table.code-difftable .lineno a{
4028 color:#747474 !important;
4030 color:#747474 !important;
4029 font:11px "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace !important;
4031 font:11px "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace !important;
4030 letter-spacing:-1px;
4032 letter-spacing:-1px;
4031 text-align:right;
4033 text-align:right;
4032 padding-right: 2px;
4034 padding-right: 2px;
4033 cursor: pointer;
4035 cursor: pointer;
4034 display: block;
4036 display: block;
4035 width: 32px;
4037 width: 32px;
4036 }
4038 }
4037
4039
4038 table.code-difftable .lineno-inline{
4040 table.code-difftable .lineno-inline{
4039 background:none repeat scroll 0 0 #FFF !important;
4041 background:none repeat scroll 0 0 #FFF !important;
4040 padding-left:2px;
4042 padding-left:2px;
4041 padding-right:2px;
4043 padding-right:2px;
4042 text-align:right;
4044 text-align:right;
4043 width:30px;
4045 width:30px;
4044 -moz-user-select:none;
4046 -moz-user-select:none;
4045 -webkit-user-select: none;
4047 -webkit-user-select: none;
4046 }
4048 }
4047
4049
4048 /** CODE **/
4050 /** CODE **/
4049 table.code-difftable .code {
4051 table.code-difftable .code {
4050 display: block;
4052 display: block;
4051 width: 100%;
4053 width: 100%;
4052 }
4054 }
4053 table.code-difftable .code td{
4055 table.code-difftable .code td{
4054 margin:0;
4056 margin:0;
4055 padding:0;
4057 padding:0;
4056 }
4058 }
4057 table.code-difftable .code pre{
4059 table.code-difftable .code pre{
4058 margin:0;
4060 margin:0;
4059 padding:0;
4061 padding:0;
4060 height: 17px;
4062 height: 17px;
4061 line-height: 17px;
4063 line-height: 17px;
4062 }
4064 }
4063
4065
4064
4066
4065 .diffblock.margined.comm .line .code:hover{
4067 .diffblock.margined.comm .line .code:hover{
4066 background-color:#FFFFCC !important;
4068 background-color:#FFFFCC !important;
4067 cursor: pointer !important;
4069 cursor: pointer !important;
4068 background-image:url("../images/icons/comment_add.png") !important;
4070 background-image:url("../images/icons/comment_add.png") !important;
4069 background-repeat:no-repeat !important;
4071 background-repeat:no-repeat !important;
4070 background-position: right !important;
4072 background-position: right !important;
4071 background-position: 0% 50% !important;
4073 background-position: 0% 50% !important;
4074 }
4075 .diffblock.margined.comm .line .code.no-comment:hover{
4076 background-image: none !important;
4077 cursor: auto !important;
4078 background-color: inherit !important;
4079
4072 } No newline at end of file
4080 }
@@ -1,713 +1,713 b''
1 /**
1 /**
2 RhodeCode JS Files
2 RhodeCode JS Files
3 **/
3 **/
4
4
5 if (typeof console == "undefined" || typeof console.log == "undefined"){
5 if (typeof console == "undefined" || typeof console.log == "undefined"){
6 console = { log: function() {} }
6 console = { log: function() {} }
7 }
7 }
8
8
9
9
10 var str_repeat = function(i, m) {
10 var str_repeat = function(i, m) {
11 for (var o = []; m > 0; o[--m] = i);
11 for (var o = []; m > 0; o[--m] = i);
12 return o.join('');
12 return o.join('');
13 };
13 };
14
14
15 /**
15 /**
16 * INJECT .format function into String
16 * INJECT .format function into String
17 * Usage: "My name is {0} {1}".format("Johny","Bravo")
17 * Usage: "My name is {0} {1}".format("Johny","Bravo")
18 * Return "My name is Johny Bravo"
18 * Return "My name is Johny Bravo"
19 * Inspired by https://gist.github.com/1049426
19 * Inspired by https://gist.github.com/1049426
20 */
20 */
21 String.prototype.format = function() {
21 String.prototype.format = function() {
22
22
23 function format() {
23 function format() {
24 var str = this;
24 var str = this;
25 var len = arguments.length+1;
25 var len = arguments.length+1;
26 var safe = undefined;
26 var safe = undefined;
27 var arg = undefined;
27 var arg = undefined;
28
28
29 // For each {0} {1} {n...} replace with the argument in that position. If
29 // For each {0} {1} {n...} replace with the argument in that position. If
30 // the argument is an object or an array it will be stringified to JSON.
30 // the argument is an object or an array it will be stringified to JSON.
31 for (var i=0; i < len; arg = arguments[i++]) {
31 for (var i=0; i < len; arg = arguments[i++]) {
32 safe = typeof arg === 'object' ? JSON.stringify(arg) : arg;
32 safe = typeof arg === 'object' ? JSON.stringify(arg) : arg;
33 str = str.replace(RegExp('\\{'+(i-1)+'\\}', 'g'), safe);
33 str = str.replace(RegExp('\\{'+(i-1)+'\\}', 'g'), safe);
34 }
34 }
35 return str;
35 return str;
36 }
36 }
37
37
38 // Save a reference of what may already exist under the property native.
38 // Save a reference of what may already exist under the property native.
39 // Allows for doing something like: if("".format.native) { /* use native */ }
39 // Allows for doing something like: if("".format.native) { /* use native */ }
40 format.native = String.prototype.format;
40 format.native = String.prototype.format;
41
41
42 // Replace the prototype property
42 // Replace the prototype property
43 return format;
43 return format;
44
44
45 }();
45 }();
46
46
47
47
48 /**
48 /**
49 * SmartColorGenerator
49 * SmartColorGenerator
50 *
50 *
51 *usage::
51 *usage::
52 * var CG = new ColorGenerator();
52 * var CG = new ColorGenerator();
53 * var col = CG.getColor(key); //returns array of RGB
53 * var col = CG.getColor(key); //returns array of RGB
54 * 'rgb({0})'.format(col.join(',')
54 * 'rgb({0})'.format(col.join(',')
55 *
55 *
56 * @returns {ColorGenerator}
56 * @returns {ColorGenerator}
57 */
57 */
58 var ColorGenerator = function(){
58 var ColorGenerator = function(){
59 this.GOLDEN_RATIO = 0.618033988749895;
59 this.GOLDEN_RATIO = 0.618033988749895;
60 this.CURRENT_RATIO = 0.22717784590367374 // this can be random
60 this.CURRENT_RATIO = 0.22717784590367374 // this can be random
61 this.HSV_1 = 0.75;//saturation
61 this.HSV_1 = 0.75;//saturation
62 this.HSV_2 = 0.95;
62 this.HSV_2 = 0.95;
63 this.color;
63 this.color;
64 this.cacheColorMap = {};
64 this.cacheColorMap = {};
65 };
65 };
66
66
67 ColorGenerator.prototype = {
67 ColorGenerator.prototype = {
68 getColor:function(key){
68 getColor:function(key){
69 if(this.cacheColorMap[key] !== undefined){
69 if(this.cacheColorMap[key] !== undefined){
70 return this.cacheColorMap[key];
70 return this.cacheColorMap[key];
71 }
71 }
72 else{
72 else{
73 this.cacheColorMap[key] = this.generateColor();
73 this.cacheColorMap[key] = this.generateColor();
74 return this.cacheColorMap[key];
74 return this.cacheColorMap[key];
75 }
75 }
76 },
76 },
77 _hsvToRgb:function(h,s,v){
77 _hsvToRgb:function(h,s,v){
78 if (s == 0.0)
78 if (s == 0.0)
79 return [v, v, v];
79 return [v, v, v];
80 i = parseInt(h * 6.0)
80 i = parseInt(h * 6.0)
81 f = (h * 6.0) - i
81 f = (h * 6.0) - i
82 p = v * (1.0 - s)
82 p = v * (1.0 - s)
83 q = v * (1.0 - s * f)
83 q = v * (1.0 - s * f)
84 t = v * (1.0 - s * (1.0 - f))
84 t = v * (1.0 - s * (1.0 - f))
85 i = i % 6
85 i = i % 6
86 if (i == 0)
86 if (i == 0)
87 return [v, t, p]
87 return [v, t, p]
88 if (i == 1)
88 if (i == 1)
89 return [q, v, p]
89 return [q, v, p]
90 if (i == 2)
90 if (i == 2)
91 return [p, v, t]
91 return [p, v, t]
92 if (i == 3)
92 if (i == 3)
93 return [p, q, v]
93 return [p, q, v]
94 if (i == 4)
94 if (i == 4)
95 return [t, p, v]
95 return [t, p, v]
96 if (i == 5)
96 if (i == 5)
97 return [v, p, q]
97 return [v, p, q]
98 },
98 },
99 generateColor:function(){
99 generateColor:function(){
100 this.CURRENT_RATIO = this.CURRENT_RATIO+this.GOLDEN_RATIO;
100 this.CURRENT_RATIO = this.CURRENT_RATIO+this.GOLDEN_RATIO;
101 this.CURRENT_RATIO = this.CURRENT_RATIO %= 1;
101 this.CURRENT_RATIO = this.CURRENT_RATIO %= 1;
102 HSV_tuple = [this.CURRENT_RATIO, this.HSV_1, this.HSV_2]
102 HSV_tuple = [this.CURRENT_RATIO, this.HSV_1, this.HSV_2]
103 RGB_tuple = this._hsvToRgb(HSV_tuple[0],HSV_tuple[1],HSV_tuple[2]);
103 RGB_tuple = this._hsvToRgb(HSV_tuple[0],HSV_tuple[1],HSV_tuple[2]);
104 function toRgb(v){
104 function toRgb(v){
105 return ""+parseInt(v*256)
105 return ""+parseInt(v*256)
106 }
106 }
107 return [toRgb(RGB_tuple[0]),toRgb(RGB_tuple[1]),toRgb(RGB_tuple[2])];
107 return [toRgb(RGB_tuple[0]),toRgb(RGB_tuple[1]),toRgb(RGB_tuple[2])];
108
108
109 }
109 }
110 }
110 }
111
111
112
112
113
113
114
114
115
115
116 /**
116 /**
117 * GLOBAL YUI Shortcuts
117 * GLOBAL YUI Shortcuts
118 */
118 */
119 var YUC = YAHOO.util.Connect;
119 var YUC = YAHOO.util.Connect;
120 var YUD = YAHOO.util.Dom;
120 var YUD = YAHOO.util.Dom;
121 var YUE = YAHOO.util.Event;
121 var YUE = YAHOO.util.Event;
122 var YUQ = YAHOO.util.Selector.query;
122 var YUQ = YAHOO.util.Selector.query;
123
123
124 // defines if push state is enabled for this browser ?
124 // defines if push state is enabled for this browser ?
125 var push_state_enabled = Boolean(
125 var push_state_enabled = Boolean(
126 window.history && window.history.pushState && window.history.replaceState
126 window.history && window.history.pushState && window.history.replaceState
127 && !( /* disable for versions of iOS before version 4.3 (8F190) */
127 && !( /* disable for versions of iOS before version 4.3 (8F190) */
128 (/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i).test(navigator.userAgent)
128 (/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i).test(navigator.userAgent)
129 /* disable for the mercury iOS browser, or at least older versions of the webkit engine */
129 /* disable for the mercury iOS browser, or at least older versions of the webkit engine */
130 || (/AppleWebKit\/5([0-2]|3[0-2])/i).test(navigator.userAgent)
130 || (/AppleWebKit\/5([0-2]|3[0-2])/i).test(navigator.userAgent)
131 )
131 )
132 );
132 );
133
133
134 var _run_callbacks = function(callbacks){
134 var _run_callbacks = function(callbacks){
135 if (callbacks !== undefined){
135 if (callbacks !== undefined){
136 var _l = callbacks.length;
136 var _l = callbacks.length;
137 for (var i=0;i<_l;i++){
137 for (var i=0;i<_l;i++){
138 var func = callbacks[i];
138 var func = callbacks[i];
139 if(typeof(func)=='function'){
139 if(typeof(func)=='function'){
140 try{
140 try{
141 func();
141 func();
142 }catch (err){};
142 }catch (err){};
143 }
143 }
144 }
144 }
145 }
145 }
146 }
146 }
147
147
148 /**
148 /**
149 * Partial Ajax Implementation
149 * Partial Ajax Implementation
150 *
150 *
151 * @param url: defines url to make partial request
151 * @param url: defines url to make partial request
152 * @param container: defines id of container to input partial result
152 * @param container: defines id of container to input partial result
153 * @param s_call: success callback function that takes o as arg
153 * @param s_call: success callback function that takes o as arg
154 * o.tId
154 * o.tId
155 * o.status
155 * o.status
156 * o.statusText
156 * o.statusText
157 * o.getResponseHeader[ ]
157 * o.getResponseHeader[ ]
158 * o.getAllResponseHeaders
158 * o.getAllResponseHeaders
159 * o.responseText
159 * o.responseText
160 * o.responseXML
160 * o.responseXML
161 * o.argument
161 * o.argument
162 * @param f_call: failure callback
162 * @param f_call: failure callback
163 * @param args arguments
163 * @param args arguments
164 */
164 */
165 function ypjax(url,container,s_call,f_call,args){
165 function ypjax(url,container,s_call,f_call,args){
166 var method='GET';
166 var method='GET';
167 if(args===undefined){
167 if(args===undefined){
168 args=null;
168 args=null;
169 }
169 }
170
170
171 // Set special header for partial ajax == HTTP_X_PARTIAL_XHR
171 // Set special header for partial ajax == HTTP_X_PARTIAL_XHR
172 YUC.initHeader('X-PARTIAL-XHR',true);
172 YUC.initHeader('X-PARTIAL-XHR',true);
173
173
174 // wrapper of passed callback
174 // wrapper of passed callback
175 var s_wrapper = (function(o){
175 var s_wrapper = (function(o){
176 return function(o){
176 return function(o){
177 YUD.get(container).innerHTML=o.responseText;
177 YUD.get(container).innerHTML=o.responseText;
178 YUD.setStyle(container,'opacity','1.0');
178 YUD.setStyle(container,'opacity','1.0');
179 //execute the given original callback
179 //execute the given original callback
180 if (s_call !== undefined){
180 if (s_call !== undefined){
181 s_call(o);
181 s_call(o);
182 }
182 }
183 }
183 }
184 })()
184 })()
185 YUD.setStyle(container,'opacity','0.3');
185 YUD.setStyle(container,'opacity','0.3');
186 YUC.asyncRequest(method,url,{
186 YUC.asyncRequest(method,url,{
187 success:s_wrapper,
187 success:s_wrapper,
188 failure:function(o){
188 failure:function(o){
189 console.log(o);
189 console.log(o);
190 YUD.get(container).innerHTML='ERROR';
190 YUD.get(container).innerHTML='ERROR';
191 YUD.setStyle(container,'opacity','1.0');
191 YUD.setStyle(container,'opacity','1.0');
192 YUD.setStyle(container,'color','red');
192 YUD.setStyle(container,'color','red');
193 }
193 }
194 },args);
194 },args);
195
195
196 };
196 };
197
197
198 /**
198 /**
199 * tooltip activate
199 * tooltip activate
200 */
200 */
201 var tooltip_activate = function(){
201 var tooltip_activate = function(){
202 function toolTipsId(){
202 function toolTipsId(){
203 var ids = [];
203 var ids = [];
204 var tts = YUQ('.tooltip');
204 var tts = YUQ('.tooltip');
205 for (var i = 0; i < tts.length; i++) {
205 for (var i = 0; i < tts.length; i++) {
206 // if element doesn't not have and id
206 // if element doesn't not have and id
207 // autogenerate one for tooltip
207 // autogenerate one for tooltip
208 if (!tts[i].id){
208 if (!tts[i].id){
209 tts[i].id='tt'+((i*100)+tts.length);
209 tts[i].id='tt'+((i*100)+tts.length);
210 }
210 }
211 ids.push(tts[i].id);
211 ids.push(tts[i].id);
212 }
212 }
213 return ids
213 return ids
214 };
214 };
215 var myToolTips = new YAHOO.widget.Tooltip("tooltip", {
215 var myToolTips = new YAHOO.widget.Tooltip("tooltip", {
216 context: [[toolTipsId()],"tl","bl",null,[0,5]],
216 context: [[toolTipsId()],"tl","bl",null,[0,5]],
217 monitorresize:false,
217 monitorresize:false,
218 xyoffset :[0,0],
218 xyoffset :[0,0],
219 autodismissdelay:300000,
219 autodismissdelay:300000,
220 hidedelay:5,
220 hidedelay:5,
221 showdelay:20,
221 showdelay:20,
222 });
222 });
223 };
223 };
224
224
225 /**
225 /**
226 * show more
226 * show more
227 */
227 */
228 var show_more_event = function(){
228 var show_more_event = function(){
229 YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){
229 YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){
230 var el = e.target;
230 var el = e.target;
231 YUD.setStyle(YUD.get(el.id.substring(1)),'display','');
231 YUD.setStyle(YUD.get(el.id.substring(1)),'display','');
232 YUD.setStyle(el.parentNode,'display','none');
232 YUD.setStyle(el.parentNode,'display','none');
233 });
233 });
234 };
234 };
235
235
236
236
237 /**
237 /**
238 * Quick filter widget
238 * Quick filter widget
239 *
239 *
240 * @param target: filter input target
240 * @param target: filter input target
241 * @param nodes: list of nodes in html we want to filter.
241 * @param nodes: list of nodes in html we want to filter.
242 * @param display_element function that takes current node from nodes and
242 * @param display_element function that takes current node from nodes and
243 * does hide or show based on the node
243 * does hide or show based on the node
244 *
244 *
245 */
245 */
246 var q_filter = function(target,nodes,display_element){
246 var q_filter = function(target,nodes,display_element){
247
247
248 var nodes = nodes;
248 var nodes = nodes;
249 var q_filter_field = YUD.get(target);
249 var q_filter_field = YUD.get(target);
250 var F = YAHOO.namespace(target);
250 var F = YAHOO.namespace(target);
251
251
252 YUE.on(q_filter_field,'click',function(){
252 YUE.on(q_filter_field,'click',function(){
253 q_filter_field.value = '';
253 q_filter_field.value = '';
254 });
254 });
255
255
256 YUE.on(q_filter_field,'keyup',function(e){
256 YUE.on(q_filter_field,'keyup',function(e){
257 clearTimeout(F.filterTimeout);
257 clearTimeout(F.filterTimeout);
258 F.filterTimeout = setTimeout(F.updateFilter,600);
258 F.filterTimeout = setTimeout(F.updateFilter,600);
259 });
259 });
260
260
261 F.filterTimeout = null;
261 F.filterTimeout = null;
262
262
263 var show_node = function(node){
263 var show_node = function(node){
264 YUD.setStyle(node,'display','')
264 YUD.setStyle(node,'display','')
265 }
265 }
266 var hide_node = function(node){
266 var hide_node = function(node){
267 YUD.setStyle(node,'display','none');
267 YUD.setStyle(node,'display','none');
268 }
268 }
269
269
270 F.updateFilter = function() {
270 F.updateFilter = function() {
271 // Reset timeout
271 // Reset timeout
272 F.filterTimeout = null;
272 F.filterTimeout = null;
273
273
274 var obsolete = [];
274 var obsolete = [];
275
275
276 var req = q_filter_field.value.toLowerCase();
276 var req = q_filter_field.value.toLowerCase();
277
277
278 var l = nodes.length;
278 var l = nodes.length;
279 var i;
279 var i;
280 var showing = 0;
280 var showing = 0;
281
281
282 for (i=0;i<l;i++ ){
282 for (i=0;i<l;i++ ){
283 var n = nodes[i];
283 var n = nodes[i];
284 var target_element = display_element(n)
284 var target_element = display_element(n)
285 if(req && n.innerHTML.toLowerCase().indexOf(req) == -1){
285 if(req && n.innerHTML.toLowerCase().indexOf(req) == -1){
286 hide_node(target_element);
286 hide_node(target_element);
287 }
287 }
288 else{
288 else{
289 show_node(target_element);
289 show_node(target_element);
290 showing+=1;
290 showing+=1;
291 }
291 }
292 }
292 }
293
293
294 // if repo_count is set update the number
294 // if repo_count is set update the number
295 var cnt = YUD.get('repo_count');
295 var cnt = YUD.get('repo_count');
296 if(cnt){
296 if(cnt){
297 YUD.get('repo_count').innerHTML = showing;
297 YUD.get('repo_count').innerHTML = showing;
298 }
298 }
299
299
300 }
300 }
301 };
301 };
302
302
303 var ajaxPOST = function(url,postData,success) {
303 var ajaxPOST = function(url,postData,success) {
304 var sUrl = url;
304 var sUrl = url;
305 var callback = {
305 var callback = {
306 success: success,
306 success: success,
307 failure: function (o) {
307 failure: function (o) {
308 alert("error");
308 alert("error");
309 },
309 },
310 };
310 };
311 var postData = postData;
311 var postData = postData;
312 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
312 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
313 };
313 };
314
314
315
315
316 /** comments **/
316 /** comments **/
317 var removeInlineForm = function(form) {
317 var removeInlineForm = function(form) {
318 form.parentNode.removeChild(form);
318 form.parentNode.removeChild(form);
319 };
319 };
320
320
321 var tableTr = function(cls,body){
321 var tableTr = function(cls,body){
322 var form = document.createElement('tr');
322 var form = document.createElement('tr');
323 YUD.addClass(form, cls);
323 YUD.addClass(form, cls);
324 form.innerHTML = '<td class="lineno-inline new-inline"></td>'+
324 form.innerHTML = '<td class="lineno-inline new-inline"></td>'+
325 '<td class="lineno-inline old-inline"></td>'+
325 '<td class="lineno-inline old-inline"></td>'+
326 '<td>{0}</td>'.format(body);
326 '<td>{0}</td>'.format(body);
327 return form;
327 return form;
328 };
328 };
329
329
330 var createInlineForm = function(parent_tr, f_path, line) {
330 var createInlineForm = function(parent_tr, f_path, line) {
331 var tmpl = YUD.get('comment-inline-form-template').innerHTML;
331 var tmpl = YUD.get('comment-inline-form-template').innerHTML;
332 tmpl = tmpl.format(f_path, line);
332 tmpl = tmpl.format(f_path, line);
333 var form = tableTr('comment-form-inline',tmpl)
333 var form = tableTr('comment-form-inline',tmpl)
334
334
335 // create event for hide button
335 // create event for hide button
336 form = new YAHOO.util.Element(form);
336 form = new YAHOO.util.Element(form);
337 var form_hide_button = new YAHOO.util.Element(form.getElementsByClassName('hide-inline-form')[0]);
337 var form_hide_button = new YAHOO.util.Element(form.getElementsByClassName('hide-inline-form')[0]);
338 form_hide_button.on('click', function(e) {
338 form_hide_button.on('click', function(e) {
339 var newtr = e.currentTarget.parentNode.parentNode.parentNode.parentNode.parentNode;
339 var newtr = e.currentTarget.parentNode.parentNode.parentNode.parentNode.parentNode;
340 removeInlineForm(newtr);
340 removeInlineForm(newtr);
341 YUD.removeClass(parent_tr, 'form-open');
341 YUD.removeClass(parent_tr, 'form-open');
342 });
342 });
343 return form
343 return form
344 };
344 };
345 var injectInlineForm = function(tr){
345 var injectInlineForm = function(tr){
346 if(YUD.hasClass(tr,'form-open') || YUD.hasClass(tr,'context')){
346 if(YUD.hasClass(tr,'form-open') || YUD.hasClass(tr,'context') || YUD.hasClass(tr,'no-comment')){
347 return
347 return
348 }
348 }
349 YUD.addClass(tr,'form-open');
349 YUD.addClass(tr,'form-open');
350 var node = tr.parentNode.parentNode.parentNode.getElementsByClassName('full_f_path')[0];
350 var node = tr.parentNode.parentNode.parentNode.getElementsByClassName('full_f_path')[0];
351 var f_path = YUD.getAttribute(node,'path');
351 var f_path = YUD.getAttribute(node,'path');
352 var lineno = getLineNo(tr);
352 var lineno = getLineNo(tr);
353 var form = createInlineForm(tr, f_path, lineno);
353 var form = createInlineForm(tr, f_path, lineno);
354 var target_tr = tr;
354 var target_tr = tr;
355 if(YUD.hasClass(YUD.getNextSibling(tr),'inline-comments')){
355 if(YUD.hasClass(YUD.getNextSibling(tr),'inline-comments')){
356 target_tr = YUD.getNextSibling(tr);
356 target_tr = YUD.getNextSibling(tr);
357 }
357 }
358 YUD.insertAfter(form,target_tr);
358 YUD.insertAfter(form,target_tr);
359 YUD.get('text_'+lineno).focus();
359 YUD.get('text_'+lineno).focus();
360 tooltip_activate();
360 tooltip_activate();
361 };
361 };
362
362
363 var createInlineAddButton = function(tr,label){
363 var createInlineAddButton = function(tr,label){
364 var html = '<div class="add-comment"><span class="ui-btn">{0}</span></div>'.format(label);
364 var html = '<div class="add-comment"><span class="ui-btn">{0}</span></div>'.format(label);
365
365
366 var add = new YAHOO.util.Element(tableTr('inline-comments-button',html));
366 var add = new YAHOO.util.Element(tableTr('inline-comments-button',html));
367 add.on('click', function(e) {
367 add.on('click', function(e) {
368 injectInlineForm(tr);
368 injectInlineForm(tr);
369 });
369 });
370 return add;
370 return add;
371 };
371 };
372
372
373 var getLineNo = function(tr) {
373 var getLineNo = function(tr) {
374 var line;
374 var line;
375 var o = tr.children[0].id.split('_');
375 var o = tr.children[0].id.split('_');
376 var n = tr.children[1].id.split('_');
376 var n = tr.children[1].id.split('_');
377
377
378 if (n.length >= 2) {
378 if (n.length >= 2) {
379 line = n[n.length-1];
379 line = n[n.length-1];
380 } else if (o.length >= 2) {
380 } else if (o.length >= 2) {
381 line = o[o.length-1];
381 line = o[o.length-1];
382 }
382 }
383
383
384 return line
384 return line
385 };
385 };
386
386
387
387
388 var fileBrowserListeners = function(current_url, node_list_url, url_base,
388 var fileBrowserListeners = function(current_url, node_list_url, url_base,
389 truncated_lbl, nomatch_lbl){
389 truncated_lbl, nomatch_lbl){
390 var current_url_branch = +"?branch=__BRANCH__";
390 var current_url_branch = +"?branch=__BRANCH__";
391 var url = url_base;
391 var url = url_base;
392 var node_url = node_list_url;
392 var node_url = node_list_url;
393
393
394 YUE.on('stay_at_branch','click',function(e){
394 YUE.on('stay_at_branch','click',function(e){
395 if(e.target.checked){
395 if(e.target.checked){
396 var uri = current_url_branch;
396 var uri = current_url_branch;
397 uri = uri.replace('__BRANCH__',e.target.value);
397 uri = uri.replace('__BRANCH__',e.target.value);
398 window.location = uri;
398 window.location = uri;
399 }
399 }
400 else{
400 else{
401 window.location = current_url;
401 window.location = current_url;
402 }
402 }
403 })
403 })
404
404
405 var n_filter = YUD.get('node_filter');
405 var n_filter = YUD.get('node_filter');
406 var F = YAHOO.namespace('node_filter');
406 var F = YAHOO.namespace('node_filter');
407
407
408 F.filterTimeout = null;
408 F.filterTimeout = null;
409 var nodes = null;
409 var nodes = null;
410
410
411 F.initFilter = function(){
411 F.initFilter = function(){
412 YUD.setStyle('node_filter_box_loading','display','');
412 YUD.setStyle('node_filter_box_loading','display','');
413 YUD.setStyle('search_activate_id','display','none');
413 YUD.setStyle('search_activate_id','display','none');
414 YUD.setStyle('add_node_id','display','none');
414 YUD.setStyle('add_node_id','display','none');
415 YUC.initHeader('X-PARTIAL-XHR',true);
415 YUC.initHeader('X-PARTIAL-XHR',true);
416 YUC.asyncRequest('GET',url,{
416 YUC.asyncRequest('GET',url,{
417 success:function(o){
417 success:function(o){
418 nodes = JSON.parse(o.responseText);
418 nodes = JSON.parse(o.responseText);
419 YUD.setStyle('node_filter_box_loading','display','none');
419 YUD.setStyle('node_filter_box_loading','display','none');
420 YUD.setStyle('node_filter_box','display','');
420 YUD.setStyle('node_filter_box','display','');
421 },
421 },
422 failure:function(o){
422 failure:function(o){
423 console.log('failed to load');
423 console.log('failed to load');
424 }
424 }
425 },null);
425 },null);
426 }
426 }
427
427
428 F.updateFilter = function(e) {
428 F.updateFilter = function(e) {
429
429
430 return function(){
430 return function(){
431 // Reset timeout
431 // Reset timeout
432 F.filterTimeout = null;
432 F.filterTimeout = null;
433 var query = e.target.value;
433 var query = e.target.value;
434 var match = [];
434 var match = [];
435 var matches = 0;
435 var matches = 0;
436 var matches_max = 20;
436 var matches_max = 20;
437 if (query != ""){
437 if (query != ""){
438 for(var i=0;i<nodes.length;i++){
438 for(var i=0;i<nodes.length;i++){
439 var pos = nodes[i].toLowerCase().indexOf(query)
439 var pos = nodes[i].toLowerCase().indexOf(query)
440 if(query && pos != -1){
440 if(query && pos != -1){
441
441
442 matches++
442 matches++
443 //show only certain amount to not kill browser
443 //show only certain amount to not kill browser
444 if (matches > matches_max){
444 if (matches > matches_max){
445 break;
445 break;
446 }
446 }
447
447
448 var n = nodes[i];
448 var n = nodes[i];
449 var n_hl = n.substring(0,pos)
449 var n_hl = n.substring(0,pos)
450 +"<b>{0}</b>".format(n.substring(pos,pos+query.length))
450 +"<b>{0}</b>".format(n.substring(pos,pos+query.length))
451 +n.substring(pos+query.length)
451 +n.substring(pos+query.length)
452 match.push('<tr><td><a class="browser-file" href="{0}">{1}</a></td><td colspan="5"></td></tr>'.format(node_url.replace('__FPATH__',n),n_hl));
452 match.push('<tr><td><a class="browser-file" href="{0}">{1}</a></td><td colspan="5"></td></tr>'.format(node_url.replace('__FPATH__',n),n_hl));
453 }
453 }
454 if(match.length >= matches_max){
454 if(match.length >= matches_max){
455 match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(truncated_lbl));
455 match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(truncated_lbl));
456 }
456 }
457
457
458 }
458 }
459 }
459 }
460 if(query != ""){
460 if(query != ""){
461 YUD.setStyle('tbody','display','none');
461 YUD.setStyle('tbody','display','none');
462 YUD.setStyle('tbody_filtered','display','');
462 YUD.setStyle('tbody_filtered','display','');
463
463
464 if (match.length==0){
464 if (match.length==0){
465 match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(nomatch_lbl));
465 match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(nomatch_lbl));
466 }
466 }
467
467
468 YUD.get('tbody_filtered').innerHTML = match.join("");
468 YUD.get('tbody_filtered').innerHTML = match.join("");
469 }
469 }
470 else{
470 else{
471 YUD.setStyle('tbody','display','');
471 YUD.setStyle('tbody','display','');
472 YUD.setStyle('tbody_filtered','display','none');
472 YUD.setStyle('tbody_filtered','display','none');
473 }
473 }
474
474
475 }
475 }
476 };
476 };
477
477
478 YUE.on(YUD.get('filter_activate'),'click',function(){
478 YUE.on(YUD.get('filter_activate'),'click',function(){
479 F.initFilter();
479 F.initFilter();
480 })
480 })
481 YUE.on(n_filter,'click',function(){
481 YUE.on(n_filter,'click',function(){
482 n_filter.value = '';
482 n_filter.value = '';
483 });
483 });
484 YUE.on(n_filter,'keyup',function(e){
484 YUE.on(n_filter,'keyup',function(e){
485 clearTimeout(F.filterTimeout);
485 clearTimeout(F.filterTimeout);
486 F.filterTimeout = setTimeout(F.updateFilter(e),600);
486 F.filterTimeout = setTimeout(F.updateFilter(e),600);
487 });
487 });
488 };
488 };
489
489
490
490
491 var initCodeMirror = function(textAreadId,resetUrl){
491 var initCodeMirror = function(textAreadId,resetUrl){
492 var myCodeMirror = CodeMirror.fromTextArea(YUD.get(textAreadId),{
492 var myCodeMirror = CodeMirror.fromTextArea(YUD.get(textAreadId),{
493 mode: "null",
493 mode: "null",
494 lineNumbers:true
494 lineNumbers:true
495 });
495 });
496 YUE.on('reset','click',function(e){
496 YUE.on('reset','click',function(e){
497 window.location=resetUrl
497 window.location=resetUrl
498 });
498 });
499
499
500 YUE.on('file_enable','click',function(){
500 YUE.on('file_enable','click',function(){
501 YUD.setStyle('editor_container','display','');
501 YUD.setStyle('editor_container','display','');
502 YUD.setStyle('upload_file_container','display','none');
502 YUD.setStyle('upload_file_container','display','none');
503 YUD.setStyle('filename_container','display','');
503 YUD.setStyle('filename_container','display','');
504 });
504 });
505
505
506 YUE.on('upload_file_enable','click',function(){
506 YUE.on('upload_file_enable','click',function(){
507 YUD.setStyle('editor_container','display','none');
507 YUD.setStyle('editor_container','display','none');
508 YUD.setStyle('upload_file_container','display','');
508 YUD.setStyle('upload_file_container','display','');
509 YUD.setStyle('filename_container','display','none');
509 YUD.setStyle('filename_container','display','none');
510 });
510 });
511 };
511 };
512
512
513
513
514
514
515 var getIdentNode = function(n){
515 var getIdentNode = function(n){
516 //iterate thru nodes untill matched interesting node !
516 //iterate thru nodes untill matched interesting node !
517
517
518 if (typeof n == 'undefined'){
518 if (typeof n == 'undefined'){
519 return -1
519 return -1
520 }
520 }
521
521
522 if(typeof n.id != "undefined" && n.id.match('L[0-9]+')){
522 if(typeof n.id != "undefined" && n.id.match('L[0-9]+')){
523 return n
523 return n
524 }
524 }
525 else{
525 else{
526 return getIdentNode(n.parentNode);
526 return getIdentNode(n.parentNode);
527 }
527 }
528 };
528 };
529
529
530 var getSelectionLink = function(selection_link_label) {
530 var getSelectionLink = function(selection_link_label) {
531 return function(){
531 return function(){
532 //get selection from start/to nodes
532 //get selection from start/to nodes
533 if (typeof window.getSelection != "undefined") {
533 if (typeof window.getSelection != "undefined") {
534 s = window.getSelection();
534 s = window.getSelection();
535
535
536 from = getIdentNode(s.anchorNode);
536 from = getIdentNode(s.anchorNode);
537 till = getIdentNode(s.focusNode);
537 till = getIdentNode(s.focusNode);
538
538
539 f_int = parseInt(from.id.replace('L',''));
539 f_int = parseInt(from.id.replace('L',''));
540 t_int = parseInt(till.id.replace('L',''));
540 t_int = parseInt(till.id.replace('L',''));
541
541
542 if (f_int > t_int){
542 if (f_int > t_int){
543 //highlight from bottom
543 //highlight from bottom
544 offset = -35;
544 offset = -35;
545 ranges = [t_int,f_int];
545 ranges = [t_int,f_int];
546
546
547 }
547 }
548 else{
548 else{
549 //highligth from top
549 //highligth from top
550 offset = 35;
550 offset = 35;
551 ranges = [f_int,t_int];
551 ranges = [f_int,t_int];
552 }
552 }
553
553
554 if (ranges[0] != ranges[1]){
554 if (ranges[0] != ranges[1]){
555 if(YUD.get('linktt') == null){
555 if(YUD.get('linktt') == null){
556 hl_div = document.createElement('div');
556 hl_div = document.createElement('div');
557 hl_div.id = 'linktt';
557 hl_div.id = 'linktt';
558 }
558 }
559 anchor = '#L'+ranges[0]+'-'+ranges[1];
559 anchor = '#L'+ranges[0]+'-'+ranges[1];
560 hl_div.innerHTML = '';
560 hl_div.innerHTML = '';
561 l = document.createElement('a');
561 l = document.createElement('a');
562 l.href = location.href.substring(0,location.href.indexOf('#'))+anchor;
562 l.href = location.href.substring(0,location.href.indexOf('#'))+anchor;
563 l.innerHTML = selection_link_label;
563 l.innerHTML = selection_link_label;
564 hl_div.appendChild(l);
564 hl_div.appendChild(l);
565
565
566 YUD.get('body').appendChild(hl_div);
566 YUD.get('body').appendChild(hl_div);
567
567
568 xy = YUD.getXY(till.id);
568 xy = YUD.getXY(till.id);
569
569
570 YUD.addClass('linktt','yui-tt');
570 YUD.addClass('linktt','yui-tt');
571 YUD.setStyle('linktt','top',xy[1]+offset+'px');
571 YUD.setStyle('linktt','top',xy[1]+offset+'px');
572 YUD.setStyle('linktt','left',xy[0]+'px');
572 YUD.setStyle('linktt','left',xy[0]+'px');
573 YUD.setStyle('linktt','visibility','visible');
573 YUD.setStyle('linktt','visibility','visible');
574 }
574 }
575 else{
575 else{
576 YUD.setStyle('linktt','visibility','hidden');
576 YUD.setStyle('linktt','visibility','hidden');
577 }
577 }
578 }
578 }
579 }
579 }
580 };
580 };
581
581
582 var deleteNotification = function(url, notification_id,callbacks){
582 var deleteNotification = function(url, notification_id,callbacks){
583 var callback = {
583 var callback = {
584 success:function(o){
584 success:function(o){
585 var obj = YUD.get(String("notification_"+notification_id));
585 var obj = YUD.get(String("notification_"+notification_id));
586 if(obj.parentNode !== undefined){
586 if(obj.parentNode !== undefined){
587 obj.parentNode.removeChild(obj);
587 obj.parentNode.removeChild(obj);
588 }
588 }
589 _run_callbacks(callbacks);
589 _run_callbacks(callbacks);
590 },
590 },
591 failure:function(o){
591 failure:function(o){
592 alert("error");
592 alert("error");
593 },
593 },
594 };
594 };
595 var postData = '_method=delete';
595 var postData = '_method=delete';
596 var sUrl = url.replace('__NOTIFICATION_ID__',notification_id);
596 var sUrl = url.replace('__NOTIFICATION_ID__',notification_id);
597 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl,
597 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl,
598 callback, postData);
598 callback, postData);
599 };
599 };
600
600
601
601
602 /**
602 /**
603 * QUICK REPO MENU
603 * QUICK REPO MENU
604 */
604 */
605 var quick_repo_menu = function(){
605 var quick_repo_menu = function(){
606 YUE.on(YUQ('.quick_repo_menu'),'click',function(e){
606 YUE.on(YUQ('.quick_repo_menu'),'click',function(e){
607 var menu = e.currentTarget.firstElementChild.firstElementChild;
607 var menu = e.currentTarget.firstElementChild.firstElementChild;
608 if(YUD.hasClass(menu,'hidden')){
608 if(YUD.hasClass(menu,'hidden')){
609 YUD.addClass(e.currentTarget,'active');
609 YUD.addClass(e.currentTarget,'active');
610 YUD.removeClass(menu,'hidden');
610 YUD.removeClass(menu,'hidden');
611 }else{
611 }else{
612 YUD.removeClass(e.currentTarget,'active');
612 YUD.removeClass(e.currentTarget,'active');
613 YUD.addClass(menu,'hidden');
613 YUD.addClass(menu,'hidden');
614 }
614 }
615 })
615 })
616 };
616 };
617
617
618
618
619 /**
619 /**
620 * TABLE SORTING
620 * TABLE SORTING
621 */
621 */
622
622
623 // returns a node from given html;
623 // returns a node from given html;
624 var fromHTML = function(html){
624 var fromHTML = function(html){
625 var _html = document.createElement('element');
625 var _html = document.createElement('element');
626 _html.innerHTML = html;
626 _html.innerHTML = html;
627 return _html;
627 return _html;
628 }
628 }
629 var get_rev = function(node){
629 var get_rev = function(node){
630 var n = node.firstElementChild.firstElementChild;
630 var n = node.firstElementChild.firstElementChild;
631
631
632 if (n===null){
632 if (n===null){
633 return -1
633 return -1
634 }
634 }
635 else{
635 else{
636 out = n.firstElementChild.innerHTML.split(':')[0].replace('r','');
636 out = n.firstElementChild.innerHTML.split(':')[0].replace('r','');
637 return parseInt(out);
637 return parseInt(out);
638 }
638 }
639 }
639 }
640
640
641 var get_name = function(node){
641 var get_name = function(node){
642 var name = node.firstElementChild.children[2].innerHTML;
642 var name = node.firstElementChild.children[2].innerHTML;
643 return name
643 return name
644 }
644 }
645 var get_group_name = function(node){
645 var get_group_name = function(node){
646 var name = node.firstElementChild.children[1].innerHTML;
646 var name = node.firstElementChild.children[1].innerHTML;
647 return name
647 return name
648 }
648 }
649 var get_date = function(node){
649 var get_date = function(node){
650 console.log(node.firstElementChild)
650 console.log(node.firstElementChild)
651 var date_ = node.firstElementChild.innerHTML;
651 var date_ = node.firstElementChild.innerHTML;
652 return date_
652 return date_
653 }
653 }
654
654
655 var revisionSort = function(a, b, desc, field) {
655 var revisionSort = function(a, b, desc, field) {
656
656
657 var a_ = fromHTML(a.getData(field));
657 var a_ = fromHTML(a.getData(field));
658 var b_ = fromHTML(b.getData(field));
658 var b_ = fromHTML(b.getData(field));
659
659
660 // extract revisions from string nodes
660 // extract revisions from string nodes
661 a_ = get_rev(a_)
661 a_ = get_rev(a_)
662 b_ = get_rev(b_)
662 b_ = get_rev(b_)
663
663
664 var comp = YAHOO.util.Sort.compare;
664 var comp = YAHOO.util.Sort.compare;
665 var compState = comp(a_, b_, desc);
665 var compState = comp(a_, b_, desc);
666 return compState;
666 return compState;
667 };
667 };
668 var ageSort = function(a, b, desc, field) {
668 var ageSort = function(a, b, desc, field) {
669 var a_ = a.getData(field);
669 var a_ = a.getData(field);
670 var b_ = b.getData(field);
670 var b_ = b.getData(field);
671
671
672 var comp = YAHOO.util.Sort.compare;
672 var comp = YAHOO.util.Sort.compare;
673 var compState = comp(a_, b_, desc);
673 var compState = comp(a_, b_, desc);
674 return compState;
674 return compState;
675 };
675 };
676
676
677 var nameSort = function(a, b, desc, field) {
677 var nameSort = function(a, b, desc, field) {
678 var a_ = fromHTML(a.getData(field));
678 var a_ = fromHTML(a.getData(field));
679 var b_ = fromHTML(b.getData(field));
679 var b_ = fromHTML(b.getData(field));
680
680
681 // extract name from table
681 // extract name from table
682 a_ = get_name(a_)
682 a_ = get_name(a_)
683 b_ = get_name(b_)
683 b_ = get_name(b_)
684
684
685 var comp = YAHOO.util.Sort.compare;
685 var comp = YAHOO.util.Sort.compare;
686 var compState = comp(a_, b_, desc);
686 var compState = comp(a_, b_, desc);
687 return compState;
687 return compState;
688 };
688 };
689
689
690 var groupNameSort = function(a, b, desc, field) {
690 var groupNameSort = function(a, b, desc, field) {
691 var a_ = fromHTML(a.getData(field));
691 var a_ = fromHTML(a.getData(field));
692 var b_ = fromHTML(b.getData(field));
692 var b_ = fromHTML(b.getData(field));
693
693
694 // extract name from table
694 // extract name from table
695 a_ = get_group_name(a_)
695 a_ = get_group_name(a_)
696 b_ = get_group_name(b_)
696 b_ = get_group_name(b_)
697
697
698 var comp = YAHOO.util.Sort.compare;
698 var comp = YAHOO.util.Sort.compare;
699 var compState = comp(a_, b_, desc);
699 var compState = comp(a_, b_, desc);
700 return compState;
700 return compState;
701 };
701 };
702 var dateSort = function(a, b, desc, field) {
702 var dateSort = function(a, b, desc, field) {
703 var a_ = fromHTML(a.getData(field));
703 var a_ = fromHTML(a.getData(field));
704 var b_ = fromHTML(b.getData(field));
704 var b_ = fromHTML(b.getData(field));
705
705
706 // extract name from table
706 // extract name from table
707 a_ = get_date(a_)
707 a_ = get_date(a_)
708 b_ = get_date(b_)
708 b_ = get_date(b_)
709
709
710 var comp = YAHOO.util.Sort.compare;
710 var comp = YAHOO.util.Sort.compare;
711 var compState = comp(a_, b_, desc);
711 var compState = comp(a_, b_, desc);
712 return compState;
712 return compState;
713 }; No newline at end of file
713 };
@@ -1,274 +1,205 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2
3 <%inherit file="/base/base.html"/>
3 <%inherit file="/base/base.html"/>
4
4
5 <%def name="title()">
5 <%def name="title()">
6 ${c.repo_name} ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name}
6 ${c.repo_name} ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name}
7 </%def>
7 </%def>
8
8
9 <%def name="breadcrumbs_links()">
9 <%def name="breadcrumbs_links()">
10 ${h.link_to(u'Home',h.url('/'))}
10 ${h.link_to(u'Home',h.url('/'))}
11 &raquo;
11 &raquo;
12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
13 &raquo;
13 &raquo;
14 ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
14 ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
15 </%def>
15 </%def>
16
16
17 <%def name="page_nav()">
17 <%def name="page_nav()">
18 ${self.menu('changelog')}
18 ${self.menu('changelog')}
19 </%def>
19 </%def>
20
20
21 <%def name="main()">
21 <%def name="main()">
22 <div class="box">
22 <div class="box">
23 <!-- box / title -->
23 <!-- box / title -->
24 <div class="title">
24 <div class="title">
25 ${self.breadcrumbs()}
25 ${self.breadcrumbs()}
26 </div>
26 </div>
27 <div class="table">
27 <div class="table">
28 <div class="diffblock">
28 <div class="diffblock">
29 <div class="code-header">
29 <div class="code-header">
30 <div class="date">${_('commit')} ${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} ${c.changeset.date}</div>
30 <div class="date">${_('commit')} ${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} ${c.changeset.date}</div>
31 <div class="diff-menu-wrapper">
31 <div class="diff-menu-wrapper">
32 <img class="diff-menu-activate" style="cursor: pointer" alt="diff-menu" src="${h.url('/images/icons/script_gear.png')}" />
32 <img class="diff-menu-activate" style="cursor: pointer" alt="diff-menu" src="${h.url('/images/icons/script_gear.png')}" />
33 <div class="diff-menu" style="display:none">
33 <div class="diff-menu" style="display:none">
34 <ul>
34 <ul>
35 <li>${h.link_to(_('raw diff'),h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show'))}</li>
35 <li>${h.link_to(_('raw diff'),h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show'))}</li>
36 <li>${h.link_to(_('download diff'),h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download'))}</li>
36 <li>${h.link_to(_('download diff'),h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download'))}</li>
37 <li>${c.ignorews_url()}</li>
37 <li>${c.ignorews_url()}</li>
38 <li>${c.context_url()}</li>
38 <li>${c.context_url()}</li>
39 </ul>
39 </ul>
40 </div>
40 </div>
41 </div>
41 </div>
42 <div class="comments-number" style="float:right;padding-right:5px">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
42 <div class="comments-number" style="float:right;padding-right:5px">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
43 </div>
43 </div>
44 </div>
44 </div>
45 <div id="changeset_content">
45 <div id="changeset_content">
46 <div class="container">
46 <div class="container">
47 <div class="left">
47 <div class="left">
48 <div class="author">
48 <div class="author">
49 <div class="gravatar">
49 <div class="gravatar">
50 <img alt="gravatar" src="${h.gravatar_url(h.email(c.changeset.author),20)}"/>
50 <img alt="gravatar" src="${h.gravatar_url(h.email(c.changeset.author),20)}"/>
51 </div>
51 </div>
52 <span>${h.person(c.changeset.author)}</span><br/>
52 <span>${h.person(c.changeset.author)}</span><br/>
53 <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
53 <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
54 </div>
54 </div>
55 <div class="message">${h.link_to(h.wrap_paragraphs(c.changeset.message),h.url('changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</div>
55 <div class="message">${h.link_to(h.wrap_paragraphs(c.changeset.message),h.url('changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</div>
56 </div>
56 </div>
57 <div class="right">
57 <div class="right">
58 <div class="changes">
58 <div class="changes">
59 % if len(c.changeset.affected_files) <= c.affected_files_cut_off:
59 % if len(c.changeset.affected_files) <= c.affected_files_cut_off:
60 <span class="removed" title="${_('removed')}">${len(c.changeset.removed)}</span>
60 <span class="removed" title="${_('removed')}">${len(c.changeset.removed)}</span>
61 <span class="changed" title="${_('changed')}">${len(c.changeset.changed)}</span>
61 <span class="changed" title="${_('changed')}">${len(c.changeset.changed)}</span>
62 <span class="added" title="${_('added')}">${len(c.changeset.added)}</span>
62 <span class="added" title="${_('added')}">${len(c.changeset.added)}</span>
63 % else:
63 % else:
64 <span class="removed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
64 <span class="removed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
65 <span class="changed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
65 <span class="changed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
66 <span class="added" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
66 <span class="added" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
67 % endif
67 % endif
68 </div>
68 </div>
69 %if len(c.changeset.parents)>1:
69 %if len(c.changeset.parents)>1:
70 <div class="merge">
70 <div class="merge">
71 ${_('merge')}<img alt="merge" src="${h.url('/images/icons/arrow_join.png')}"/>
71 ${_('merge')}<img alt="merge" src="${h.url('/images/icons/arrow_join.png')}"/>
72 </div>
72 </div>
73 %endif
73 %endif
74
74
75 %if c.changeset.parents:
75 %if c.changeset.parents:
76 %for p_cs in reversed(c.changeset.parents):
76 %for p_cs in reversed(c.changeset.parents):
77 <div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(h.short_id(p_cs.raw_id),
77 <div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(h.short_id(p_cs.raw_id),
78 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
78 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
79 </div>
79 </div>
80 %endfor
80 %endfor
81 %else:
81 %else:
82 <div class="parent">${_('No parents')}</div>
82 <div class="parent">${_('No parents')}</div>
83 %endif
83 %endif
84 <span class="logtags">
84 <span class="logtags">
85 <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
85 <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
86 ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
86 ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
87 %for tag in c.changeset.tags:
87 %for tag in c.changeset.tags:
88 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
88 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
89 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
89 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
90 %endfor
90 %endfor
91 </span>
91 </span>
92 </div>
92 </div>
93 </div>
93 </div>
94 <span style="font-size:1.1em;font-weight: bold">
94 <span style="font-size:1.1em;font-weight: bold">
95 ${_('%s files affected with %s additions and %s deletions.') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
95 ${_('%s files affected with %s additions and %s deletions.') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
96 </span>
96 </span>
97 <div class="cs_files">
97 <div class="cs_files">
98 %for change,filenode,diff,cs1,cs2,stat in c.changes:
98 %for change,filenode,diff,cs1,cs2,stat in c.changes:
99 <div class="cs_${change}">
99 <div class="cs_${change}">
100 <div class="node">
100 <div class="node">
101 %if change != 'removed':
101 %if change != 'removed':
102 ${h.link_to(h.safe_unicode(filenode.path),c.anchor_url(filenode.changeset.raw_id,filenode.path))}
102 ${h.link_to(h.safe_unicode(filenode.path),c.anchor_url(filenode.changeset.raw_id,filenode.path))}
103 %else:
103 %else:
104 ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=h.FID('',filenode.path)))}
104 ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=h.FID('',filenode.path)))}
105 %endif
105 %endif
106 </div>
106 </div>
107 <div class="changes">${h.fancy_file_stats(stat)}</div>
107 <div class="changes">${h.fancy_file_stats(stat)}</div>
108 </div>
108 </div>
109 %endfor
109 %endfor
110 % if c.cut_off:
110 % if c.cut_off:
111 ${_('Changeset was too big and was cut off...')}
111 ${_('Changeset was too big and was cut off...')}
112 % endif
112 % endif
113 </div>
113 </div>
114 </div>
114 </div>
115
115
116 </div>
116 </div>
117
117
118 %for change,filenode,diff,cs1,cs2,stat in c.changes:
118 ## diff block
119 %if change !='removed':
119 <%namespace name="diff_block" file="/changeset/diff_block.html"/>
120 <div id="${h.FID(filenode.changeset.raw_id,filenode.path)}" style="clear:both;height:90px;margin-top:-60px"></div>
120 ${diff_block.diff_block(c.changes)}
121 <div class="diffblock margined comm">
121
122 <div class="code-header">
122 ## template for inline comment form
123 <div class="changeset_header">
124 <div class="changeset_file">
125 ${h.link_to_if(change!='removed',h.safe_unicode(filenode.path),h.url('files_home',repo_name=c.repo_name,
126 revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))}
127 </div>
128 <div class="diff-menu-wrapper">
129 <img class="diff-menu-activate" style="margin-bottom:-6px;cursor: pointer" alt="diff-menu" src="${h.url('/images/icons/script_gear.png')}" />
130 <div class="diff-menu" style="display:none">
131 <ul>
132 <li>${h.link_to(_('diff'),h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='diff'))}</li>
133 <li>${h.link_to(_('raw diff'),h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='raw'))}</li>
134 <li>${h.link_to(_('download diff'),h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='download'))}</li>
135 <li>${c.ignorews_url(h.FID(filenode.changeset.raw_id,filenode.path))}</li>
136 <li>${c.context_url(h.FID(filenode.changeset.raw_id,filenode.path))}</li>
137 </ul>
138 </div>
139 </div>
140 <span style="float:right;margin-top:-3px">
141 <label>
142 ${_('show inline comments')}
143 ${h.checkbox('',checked="checked",class_="show-inline-comments",id_for=h.FID(filenode.changeset.raw_id,filenode.path))}
144 </label>
145 </span>
146 </div>
147 </div>
148 <div class="code-body">
149 <div class="full_f_path" path="${filenode.path}"></div>
150 %if diff:
151 ${diff|n}
152 %else:
153 ${_('No changes in this file')}
154 %endif
155 </div>
156 </div>
157 %endif
158 %endfor
159
160 <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
123 <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
161 ## template for inline comment form
124 ${comment.comment_inline_form(c.changeset)}
162 ${comment.comment_inline_form()}
163
125
164 <div class="comments">
126 ${comment.comments(c.changeset)}
165 <div class="comments-number">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
127
166
167 %for path, lines in c.inline_comments:
168 <div style="display:none" class="inline-comment-placeholder" path="${path}" target_id="${h.FID(c.changeset.raw_id,path)}">
169 % for line,comments in lines.iteritems():
170 <div class="inline-comment-placeholder-line" line="${line}" target_id="${h.safeid(h.safe_unicode(path))}">
171 %for co in comments:
172 ${comment.comment_block(co)}
173 %endfor
174 </div>
175 %endfor
176 </div>
177 %endfor
178
179 %for co in c.comments:
180 ${comment.comment_block(co)}
181 %endfor
182 %if c.rhodecode_user.username != 'default':
183 <div class="comment-form">
184 ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=c.changeset.raw_id))}
185 <strong>${_('Leave a comment')}</strong>
186 <div class="clearfix">
187 <div class="comment-help">
188 ${_('Comments parsed using')} <a href="${h.url('rst_help')}">RST</a> ${_('syntax')}
189 ${_('with')} <span style="color:#003367" class="tooltip" title="${_('Use @username inside this text to send notification to this RhodeCode user')}">@mention</span> ${_('support')}
190 </div>
191 ${h.textarea('text')}
192 </div>
193 <div class="comment-button">
194 ${h.submit('save', _('Comment'), class_='ui-button')}
195 </div>
196 ${h.end_form()}
197 </div>
198 %endif
199 </div>
200 <script type="text/javascript">
128 <script type="text/javascript">
201 var deleteComment = function(comment_id){
129 var deleteComment = function(comment_id){
202
130
203 var url = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}".replace('__COMMENT_ID__',comment_id);
131 var url = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}".replace('__COMMENT_ID__',comment_id);
204 var postData = '_method=delete';
132 var postData = '_method=delete';
205 var success = function(o){
133 var success = function(o){
206 var n = YUD.get('comment-'+comment_id);
134 var n = YUD.get('comment-'+comment_id);
207 n.parentNode.removeChild(n);
135 n.parentNode.removeChild(n);
208 }
136 }
209 ajaxPOST(url,postData,success);
137 ajaxPOST(url,postData,success);
210 }
138 }
211
139
212 YUE.onDOMReady(function(){
140 YUE.onDOMReady(function(){
213
141
214 YUE.on(YUQ('.diff-menu-activate'),'click',function(e){
142 YUE.on(YUQ('.diff-menu-activate'),'click',function(e){
215 var act = e.currentTarget.nextElementSibling;
143 var act = e.currentTarget.nextElementSibling;
216
144
217 if(YUD.hasClass(act,'active')){
145 if(YUD.hasClass(act,'active')){
218 YUD.removeClass(act,'active');
146 YUD.removeClass(act,'active');
219 YUD.setStyle(act,'display','none');
147 YUD.setStyle(act,'display','none');
220 }else{
148 }else{
221 YUD.addClass(act,'active');
149 YUD.addClass(act,'active');
222 YUD.setStyle(act,'display','');
150 YUD.setStyle(act,'display','');
223 }
151 }
224 });
152 });
225
153
226 YUE.on(YUQ('.show-inline-comments'),'change',function(e){
154 YUE.on(YUQ('.show-inline-comments'),'change',function(e){
227 var show = 'none';
155 var show = 'none';
228 var target = e.currentTarget;
156 var target = e.currentTarget;
229 if(target.checked){
157 if(target.checked){
230 var show = ''
158 var show = ''
231 }
159 }
232 var boxid = YUD.getAttribute(target,'id_for');
160 var boxid = YUD.getAttribute(target,'id_for');
233 var comments = YUQ('#{0} .inline-comments'.format(boxid));
161 var comments = YUQ('#{0} .inline-comments'.format(boxid));
234 for(c in comments){
162 for(c in comments){
235 YUD.setStyle(comments[c],'display',show);
163 YUD.setStyle(comments[c],'display',show);
236 }
164 }
237 var btns = YUQ('#{0} .inline-comments-button'.format(boxid));
165 var btns = YUQ('#{0} .inline-comments-button'.format(boxid));
238 for(c in btns){
166 for(c in btns){
239 YUD.setStyle(btns[c],'display',show);
167 YUD.setStyle(btns[c],'display',show);
240 }
168 }
241 })
169 })
242
170
243 YUE.on(YUQ('.line'),'click',function(e){
171 YUE.on(YUQ('.line'),'click',function(e){
244 var tr = e.currentTarget;
172 var tr = e.currentTarget;
245 injectInlineForm(tr);
173 injectInlineForm(tr);
246 });
174 });
247
175
248 // inject comments into they proper positions
176 // inject comments into they proper positions
249 var file_comments = YUQ('.inline-comment-placeholder');
177 var file_comments = YUQ('.inline-comment-placeholder');
250
178
251 for (f in file_comments){
179 for (f in file_comments){
252 var box = file_comments[f];
180 var box = file_comments[f];
253 var inlines = box.children;
181 var inlines = box.children;
254 for(var i=0; i<inlines.length; i++){
182 for(var i=0; i<inlines.length; i++){
255 try{
183 try{
256
184
257 var inline = inlines[i];
185 var inline = inlines[i];
258 var lineno = YUD.getAttribute(inlines[i],'line');
186 var lineno = YUD.getAttribute(inlines[i],'line');
259 var lineid = "{0}_{1}".format(YUD.getAttribute(inline,'target_id'),lineno);
187 var lineid = "{0}_{1}".format(YUD.getAttribute(inline,'target_id'),lineno);
260 var target_line = YUD.get(lineid);
188 var target_line = YUD.get(lineid);
261
189
262 var add = createInlineAddButton(target_line.parentNode,'${_("add another comment")}');
190 var add = createInlineAddButton(target_line.parentNode,'${_("add another comment")}');
263 YUD.insertAfter(add,target_line.parentNode);
191 YUD.insertAfter(add,target_line.parentNode);
264
192
265 var comment = new YAHOO.util.Element(tableTr('inline-comments',inline.innerHTML))
193 var comment = new YAHOO.util.Element(tableTr('inline-comments',inline.innerHTML))
266 YUD.insertAfter(comment,target_line.parentNode);
194 YUD.insertAfter(comment,target_line.parentNode);
267 }catch(e){}
195 }catch(e){
268 }
196 console.log(e);
197 }
198 }
269 }
199 }
270 })
200 })
271
201
272 </script>
202 </script>
273 </div>
203
204 </div>
274 </%def>
205 </%def>
@@ -1,70 +1,111 b''
1 ##usage:
1 ## -*- coding: utf-8 -*-
2 ## usage:
2 ## <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
3 ## <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
3 ## ${comment.comment_block(co)}
4 ## ${comment.comment_block(co)}
4 ##
5 ##
5 <%def name="comment_block(co)">
6 <%def name="comment_block(co)">
6 <div class="comment" id="comment-${co.comment_id}">
7 <div class="comment" id="comment-${co.comment_id}">
7 <div class="comment-wrapp">
8 <div class="comment-wrapp">
8 <div class="meta">
9 <div class="meta">
9 <span class="user">
10 <span class="user">
10 <img src="${h.gravatar_url(co.author.email, 20)}" />
11 <img src="${h.gravatar_url(co.author.email, 20)}" />
11 ${co.author.username}
12 ${co.author.username}
12 </span>
13 </span>
13 <a href="${h.url.current(anchor='comment-%s' % co.comment_id)}"> ${_('commented on')} </a>
14 <a href="${h.url.current(anchor='comment-%s' % co.comment_id)}"> ${_('commented on')} </a>
14 ${h.short_id(co.revision)}
15 ${h.short_id(co.revision)}
15 %if co.f_path:
16 %if co.f_path:
16 ${_(' in file ')}
17 ${_(' in file ')}
17 ${co.f_path}:L ${co.line_no}
18 ${co.f_path}:L ${co.line_no}
18 %endif
19 %endif
19 <span class="date">
20 <span class="date">
20 ${h.age(co.modified_at)}
21 ${h.age(co.modified_at)}
21 </span>
22 </span>
22 </div>
23 </div>
23 <div class="text">
24 <div class="text">
24 %if h.HasPermissionAny('hg.admin', 'repository.admin')() or co.author.user_id == c.rhodecode_user.user_id:
25 %if h.HasPermissionAny('hg.admin', 'repository.admin')() or co.author.user_id == c.rhodecode_user.user_id:
25 <div class="buttons">
26 <div class="buttons">
26 <span onClick="deleteComment(${co.comment_id})" class="delete-comment ui-btn">${_('Delete')}</span>
27 <span onClick="deleteComment(${co.comment_id})" class="delete-comment ui-btn">${_('Delete')}</span>
27 </div>
28 </div>
28 %endif
29 %endif
29 ${h.rst_w_mentions(co.text)|n}
30 ${h.rst_w_mentions(co.text)|n}
30 </div>
31 </div>
31 </div>
32 </div>
32 </div>
33 </div>
33 </%def>
34 </%def>
34
35
35
36
36
37 <%def name="comment_inline_form(changeset)">
37 <%def name="comment_inline_form()">
38 <div id='comment-inline-form-template' style="display:none">
38 <div id='comment-inline-form-template' style="display:none">
39 <div class="comment-inline-form">
39 <div class="comment-inline-form">
40 %if c.rhodecode_user.username != 'default':
40 %if c.rhodecode_user.username != 'default':
41 ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=c.changeset.raw_id))}
41 ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=changeset.raw_id))}
42 <div class="clearfix">
42 <div class="clearfix">
43 <div class="comment-help">${_('Commenting on line')} {1}. ${_('Comments parsed using')}
43 <div class="comment-help">${_('Commenting on line')} {1}. ${_('Comments parsed using')}
44 <a href="${h.url('rst_help')}">RST</a> ${_('syntax')} ${_('with')}
44 <a href="${h.url('rst_help')}">RST</a> ${_('syntax')} ${_('with')}
45 <span style="color:#003367" class="tooltip" title="${_('Use @username inside this text to send notification to this RhodeCode user')}">@mention</span> ${_('support')}
45 <span style="color:#003367" class="tooltip" title="${_('Use @username inside this text to send notification to this RhodeCode user')}">@mention</span> ${_('support')}
46 </div>
46 </div>
47 <textarea id="text_{1}" name="text"></textarea>
47 <textarea id="text_{1}" name="text"></textarea>
48 </div>
48 </div>
49 <div class="comment-button">
49 <div class="comment-button">
50 <input type="hidden" name="f_path" value="{0}">
50 <input type="hidden" name="f_path" value="{0}">
51 <input type="hidden" name="line" value="{1}">
51 <input type="hidden" name="line" value="{1}">
52 ${h.submit('save', _('Comment'), class_='ui-btn')}
52 ${h.submit('save', _('Comment'), class_='ui-btn')}
53 ${h.reset('hide-inline-form', _('Hide'), class_='ui-btn hide-inline-form')}
53 ${h.reset('hide-inline-form', _('Hide'), class_='ui-btn hide-inline-form')}
54 </div>
54 </div>
55 ${h.end_form()}
55 ${h.end_form()}
56 %else:
56 %else:
57 ${h.form('')}
57 ${h.form('')}
58 <div class="clearfix">
58 <div class="clearfix">
59 <div class="comment-help">
59 <div class="comment-help">
60 ${'You need to be logged in to comment.'} <a href="${h.url('login_home',came_from=h.url.current())}">${_('Login now')}</a>
60 ${'You need to be logged in to comment.'} <a href="${h.url('login_home',came_from=h.url.current())}">${_('Login now')}</a>
61 </div>
61 </div>
62 </div>
62 </div>
63 <div class="comment-button">
63 <div class="comment-button">
64 ${h.reset('hide-inline-form', _('Hide'), class_='ui-btn hide-inline-form')}
64 ${h.reset('hide-inline-form', _('Hide'), class_='ui-btn hide-inline-form')}
65 </div>
65 </div>
66 ${h.end_form()}
66 ${h.end_form()}
67 %endif
67 %endif
68 </div>
68 </div>
69 </div>
69 </div>
70 </%def> No newline at end of file
70 </%def>
71
72
73 <%def name="comments(changeset)">
74
75 <div class="comments">
76 <div class="comments-number">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
77
78 %for path, lines in c.inline_comments:
79 <div style="display:none" class="inline-comment-placeholder" path="${path}" target_id="${h.FID(changeset.raw_id,path)}">
80 % for line,comments in lines.iteritems():
81 <div class="inline-comment-placeholder-line" line="${line}" target_id="${h.safeid(h.safe_unicode(path))}">
82 %for co in comments:
83 ${comment_block(co)}
84 %endfor
85 </div>
86 %endfor
87 </div>
88 %endfor
89
90 %for co in c.comments:
91 ${comment.comment_block(co)}
92 %endfor
93 %if c.rhodecode_user.username != 'default':
94 <div class="comment-form">
95 ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=changeset.raw_id))}
96 <strong>${_('Leave a comment')}</strong>
97 <div class="clearfix">
98 <div class="comment-help">
99 ${_('Comments parsed using')} <a href="${h.url('rst_help')}">RST</a> ${_('syntax')}
100 ${_('with')} <span style="color:#003367" class="tooltip" title="${_('Use @username inside this text to send notification to this RhodeCode user')}">@mention</span> ${_('support')}
101 </div>
102 ${h.textarea('text')}
103 </div>
104 <div class="comment-button">
105 ${h.submit('save', _('Comment'), class_='ui-button')}
106 </div>
107 ${h.end_form()}
108 </div>
109 %endif
110 </div>
111 </%def>
@@ -1,93 +1,89 b''
1 ## -*- coding: utf-8 -*-
1 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
2
3
3 <%def name="title()">
4 <%def name="title()">
4 ${c.repo_name} ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} - ${c.rhodecode_name}
5 ${c.repo_name} ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} - ${c.rhodecode_name}
5 </%def>
6 </%def>
6
7
7 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
8 ${h.link_to(u'Home',h.url('/'))}
9 ${h.link_to(u'Home',h.url('/'))}
9 &raquo;
10 &raquo;
10 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
11 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
11 &raquo;
12 &raquo;
12 ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)}
13 ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)}
13 </%def>
14 </%def>
14
15
15 <%def name="page_nav()">
16 <%def name="page_nav()">
16 ${self.menu('changelog')}
17 ${self.menu('changelog')}
17 </%def>
18 </%def>
18
19
19 <%def name="main()">
20 <%def name="main()">
20 <div class="box">
21 <div class="box">
21 <!-- box / title -->
22 <!-- box / title -->
22 <div class="title">
23 <div class="title">
23 ${self.breadcrumbs()}
24 ${self.breadcrumbs()}
24 </div>
25 </div>
25 <div class="table">
26 <div class="table">
26 <div id="body" class="diffblock">
27 <div id="body" class="diffblock">
27 <div class="code-header">
28 <div class="code-header cv">
28 <h3>${_('Compare View')}</h3>
29 <h3 class="code-header-title">${_('Compare View')}</h3>
29 <div>
30 <div>
30 ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)}
31 ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)}
31 </div>
32 </div>
32 </div>
33 </div>
33 </div>
34 </div>
34 <div id="changeset_compare_view_content">
35 <div id="changeset_compare_view_content">
35 <div class="container">
36 <div class="container">
36 <table class="compare_view_commits noborder">
37 <table class="compare_view_commits noborder">
37 %for cs in c.cs_ranges:
38 %for cs in c.cs_ranges:
38 <tr>
39 <tr>
39 <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),14)}"/></div></td>
40 <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),14)}"/></div></td>
40 <td>${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</td>
41 <td>${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</td>
41 <td><div class="author">${h.person(cs.author)}</div></td>
42 <td><div class="author">${h.person(cs.author)}</div></td>
42 <td><span class="tooltip" title="${h.age(cs.date)}">${cs.date}</span></td>
43 <td><span class="tooltip" title="${h.age(cs.date)}">${cs.date}</span></td>
43 <td><div class="message">${h.link_to(h.wrap_paragraphs(cs.message),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div></td>
44 <td><div class="message">${h.link_to(h.wrap_paragraphs(cs.message),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div></td>
44 </tr>
45 </tr>
45 %endfor
46 %endfor
46 </table>
47 </table>
47 </div>
48 </div>
48 <div style="font-size:1.1em;font-weight: bold;clear:both;padding-top:10px">${_('Files affected')}</div>
49 <div style="font-size:1.1em;font-weight: bold;clear:both;padding-top:10px">${_('Files affected')}</div>
49 <div class="cs_files">
50 <div class="cs_files">
50 %for cs in c.cs_ranges:
51 %for cs in c.cs_ranges:
51 <div class="cur_cs">r${cs}</div>
52 <div class="cur_cs">r${cs}</div>
52 %for change,filenode,diff,cs1,cs2,st in c.changes[cs.raw_id]:
53 %for change,filenode,diff,cs1,cs2,st in c.changes[cs.raw_id]:
53 <div class="cs_${change}">${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=h.FID(cs.raw_id,filenode.path)))}</div>
54 <div class="cs_${change}">${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=h.FID(cs.raw_id,filenode.path)))}</div>
54 %endfor
55 %endfor
55 %endfor
56 %endfor
56 </div>
57 </div>
57 </div>
58 </div>
58
59
59 </div>
60 </div>
60 %for cs in c.cs_ranges:
61 <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
61 %for change,filenode,diff,cs1,cs2,st in c.changes[cs.raw_id]:
62 <%namespace name="diff_block" file="/changeset/diff_block.html"/>
62 %if change !='removed':
63 %for cs in c.cs_ranges:
63 <div style="clear:both;height:10px"></div>
64 ##${comment.comment_inline_form(cs)}
64 <div class="diffblock margined">
65 ## diff block
65 <div id="${h.FID(cs.raw_id,filenode.path)}" class="code-header">
66 <h3 style="border:none;padding-top:8px;">${'r%s:%s' % (cs.revision,h.short_id(cs.raw_id))}</h3>
66 <div class="changeset_header">
67 ${diff_block.diff_block(c.changes[cs.raw_id])}
67 <span class="changeset_file">
68 ##${comment.comments(cs)}
68 ${h.link_to_if(change!='removed',h.safe_unicode(filenode.path),h.url('files_home',repo_name=c.repo_name,
69
69 revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))}
70 %endfor
70 </span>
71 <script type="text/javascript">
71 %if 1:
72
72 &raquo; <span>${h.link_to(_('diff'),
73 YUE.onDOMReady(function(){
73 h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='diff'))}</span>
74
74 &raquo; <span>${h.link_to(_('raw diff'),
75 YUE.on(YUQ('.diff-menu-activate'),'click',function(e){
75 h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='raw'))}</span>
76 var act = e.currentTarget.nextElementSibling;
76 &raquo; <span>${h.link_to(_('download diff'),
77
77 h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='download'))}</span>
78 if(YUD.hasClass(act,'active')){
78 %endif
79 YUD.removeClass(act,'active');
79 </div>
80 YUD.setStyle(act,'display','none');
80 </div>
81 }else{
81 <div class="code-body">
82 YUD.addClass(act,'active');
82 %if diff:
83 YUD.setStyle(act,'display','');
83 ${diff|n}
84 }
84 %else:
85 });
85 ${_('No changes in this file')}
86 })
86 %endif
87 </script>
87 </div>
88 </div>
89 %endif
90 %endfor
91 %endfor
92 </div>
88 </div>
93 </%def> No newline at end of file
89 </%def>
General Comments 0
You need to be logged in to leave comments. Login now