##// 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 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.controllers.changeset
4 4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 5
6 6 changeset controller for pylons showoing changes beetween
7 7 revisions
8 8
9 9 :created_on: Apr 25, 2010
10 10 :author: marcink
11 11 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
12 12 :license: GPLv3, see COPYING for more details.
13 13 """
14 14 # This program is free software: you can redistribute it and/or modify
15 15 # it under the terms of the GNU General Public License as published by
16 16 # the Free Software Foundation, either version 3 of the License, or
17 17 # (at your option) any later version.
18 18 #
19 19 # This program is distributed in the hope that it will be useful,
20 20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 22 # GNU General Public License for more details.
23 23 #
24 24 # You should have received a copy of the GNU General Public License
25 25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
26 26 import logging
27 27 import traceback
28 28 from collections import defaultdict
29 29 from webob.exc import HTTPForbidden
30 30
31 31 from pylons import tmpl_context as c, url, request, response
32 32 from pylons.i18n.translation import _
33 33 from pylons.controllers.util import redirect
34 34 from pylons.decorators import jsonify
35 35
36 36 from vcs.exceptions import RepositoryError, ChangesetError, \
37 37 ChangesetDoesNotExistError
38 38 from vcs.nodes import FileNode
39 39
40 40 import rhodecode.lib.helpers as h
41 41 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
42 42 from rhodecode.lib.base import BaseRepoController, render
43 43 from rhodecode.lib.utils import EmptyChangeset
44 44 from rhodecode.lib.compat import OrderedDict
45 45 from rhodecode.lib import diffs
46 46 from rhodecode.model.db import ChangesetComment
47 47 from rhodecode.model.comment import ChangesetCommentsModel
48 48 from rhodecode.model.meta import Session
49 49
50 50 log = logging.getLogger(__name__)
51 51
52 52
53 def anchor_url(revision,path):
53 def anchor_url(revision, path):
54 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 58 def get_ignore_ws(fid, GET):
58 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 61 if ig_ws:
61 62 try:
62 63 return int(ig_ws[0].split(':')[-1])
63 64 except:
64 65 pass
65 66 return ig_ws_global
66 67
68
67 69 def _ignorews_url(fileid=None):
68 70
69 71 params = defaultdict(list)
70 72 lbl = _('show white space')
71 73 ig_ws = get_ignore_ws(fileid, request.GET)
72 74 ln_ctx = get_line_ctx(fileid, request.GET)
73 75 # global option
74 76 if fileid is None:
75 77 if ig_ws is None:
76 78 params['ignorews'] += [1]
77 79 lbl = _('ignore white space')
78 80 ctx_key = 'context'
79 81 ctx_val = ln_ctx
80 82 # per file options
81 83 else:
82 84 if ig_ws is None:
83 85 params[fileid] += ['WS:1']
84 86 lbl = _('ignore white space')
85 87
86 88 ctx_key = fileid
87 89 ctx_val = 'C:%s' % ln_ctx
88 90 # if we have passed in ln_ctx pass it along to our params
89 91 if ln_ctx:
90 92 params[ctx_key] += [ctx_val]
91
93
92 94 params['anchor'] = fileid
93 95 return h.link_to(lbl, h.url.current(**params))
94 96
97
95 98 def get_line_ctx(fid, GET):
96 99 ln_ctx_global = request.GET.get('context')
97 ln_ctx = filter(lambda k:k.startswith('C'),GET.getall(fid))
98
100 ln_ctx = filter(lambda k: k.startswith('C'), GET.getall(fid))
101
99 102 if ln_ctx:
100 103 retval = ln_ctx[0].split(':')[-1]
101 104 else:
102 105 retval = ln_ctx_global
103 106
104 107 try:
105 108 return int(retval)
106 109 except:
107 110 return
108 111
112
109 113 def _context_url(fileid=None):
110 114 """
111 115 Generates url for context lines
112
116
113 117 :param fileid:
114 118 """
115 119 ig_ws = get_ignore_ws(fileid, request.GET)
116 120 ln_ctx = (get_line_ctx(fileid, request.GET) or 3) * 2
117 121
118 122 params = defaultdict(list)
119 123
120 124 # global option
121 125 if fileid is None:
122 126 if ln_ctx > 0:
123 127 params['context'] += [ln_ctx]
124 128
125 129 if ig_ws:
126 130 ig_ws_key = 'ignorews'
127 131 ig_ws_val = 1
128 132
129 133 # per file option
130 134 else:
131 135 params[fileid] += ['C:%s' % ln_ctx]
132 136 ig_ws_key = fileid
133 137 ig_ws_val = 'WS:%s' % 1
134
138
135 139 if ig_ws:
136 140 params[ig_ws_key] += [ig_ws_val]
137 141
138 142 lbl = _('%s line context') % ln_ctx
139 143
140 144 params['anchor'] = fileid
141 145 return h.link_to(lbl, h.url.current(**params))
142 146
147
143 148 def wrap_to_table(str_):
144 149 return '''<table class="code-difftable">
145 <tr class="line">
150 <tr class="line no-comment">
146 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 153 </tr>
149 154 </table>''' % str_
150 155
156
151 157 class ChangesetController(BaseRepoController):
152 158
153 159 @LoginRequired()
154 160 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
155 161 'repository.admin')
156 162 def __before__(self):
157 163 super(ChangesetController, self).__before__()
158 164 c.affected_files_cut_off = 60
159 165
160 166 def index(self, revision):
161 167
162 168 c.anchor_url = anchor_url
163 169 c.ignorews_url = _ignorews_url
164 170 c.context_url = _context_url
165 171
166 172 #get ranges of revisions if preset
167 173 rev_range = revision.split('...')[:2]
168
174 enable_comments = True
169 175 try:
170 176 if len(rev_range) == 2:
177 enable_comments = False
171 178 rev_start = rev_range[0]
172 179 rev_end = rev_range[1]
173 180 rev_ranges = c.rhodecode_repo.get_changesets(start=rev_start,
174 181 end=rev_end)
175 182 else:
176 183 rev_ranges = [c.rhodecode_repo.get_changeset(revision)]
177 184
178 185 c.cs_ranges = list(rev_ranges)
179 186 if not c.cs_ranges:
180 187 raise RepositoryError('Changeset range returned empty result')
181 188
182 189 except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
183 190 log.error(traceback.format_exc())
184 191 h.flash(str(e), category='warning')
185 192 return redirect(url('home'))
186 193
187 194 c.changes = OrderedDict()
188 195 c.sum_added = 0
189 196 c.sum_removed = 0
190 197 c.lines_added = 0
191 198 c.lines_deleted = 0
192 199 c.cut_off = False # defines if cut off limit is reached
193 200
194 201 c.comments = []
195 202 c.inline_comments = []
196 203 c.inline_cnt = 0
197 204 # Iterate over ranges (default changeset view is always one changeset)
198 205 for changeset in c.cs_ranges:
199 206 c.comments.extend(ChangesetCommentsModel()\
200 207 .get_comments(c.rhodecode_db_repo.repo_id,
201 208 changeset.raw_id))
202 209 inlines = ChangesetCommentsModel()\
203 210 .get_inline_comments(c.rhodecode_db_repo.repo_id,
204 211 changeset.raw_id)
205 212 c.inline_comments.extend(inlines)
206 213 c.changes[changeset.raw_id] = []
207 214 try:
208 215 changeset_parent = changeset.parents[0]
209 216 except IndexError:
210 217 changeset_parent = None
211 218
212 219 #==================================================================
213 220 # ADDED FILES
214 221 #==================================================================
215 222 for node in changeset.added:
216 223
217 224 filenode_old = FileNode(node.path, '', EmptyChangeset())
218 225 if filenode_old.is_binary or node.is_binary:
219 226 diff = wrap_to_table(_('binary file'))
220 227 st = (0, 0)
221 228 else:
222 229 # in this case node.size is good parameter since those are
223 230 # added nodes and their size defines how many changes were
224 231 # made
225 232 c.sum_added += node.size
226 233 fid = h.FID(revision, node.path)
227 234 line_context_lcl = get_line_ctx(fid, request.GET)
228 235 ignore_whitespace_lcl = get_ignore_ws(fid, request.GET)
229 236 if c.sum_added < self.cut_off_limit:
230 237 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
231 238 ignore_whitespace=ignore_whitespace_lcl,
232 239 context=line_context_lcl)
233 240 d = diffs.DiffProcessor(f_gitdiff, format='gitdiff')
234 241
235 242 st = d.stat()
236 diff = d.as_html()
243 diff = d.as_html(enable_comments=enable_comments)
237 244
238 245 else:
239 246 diff = wrap_to_table(_('Changeset is to big and '
240 247 'was cut off, see raw '
241 248 'changeset instead'))
242 249 c.cut_off = True
243 250 break
244 251
245 252 cs1 = None
246 253 cs2 = node.last_changeset.raw_id
247 254 c.lines_added += st[0]
248 255 c.lines_deleted += st[1]
249 256 c.changes[changeset.raw_id].append(('added', node, diff,
250 257 cs1, cs2, st))
251 258
252 259 #==================================================================
253 260 # CHANGED FILES
254 261 #==================================================================
255 262 if not c.cut_off:
256 263 for node in changeset.changed:
257 264 try:
258 265 filenode_old = changeset_parent.get_node(node.path)
259 266 except ChangesetError:
260 267 log.warning('Unable to fetch parent node for diff')
261 268 filenode_old = FileNode(node.path, '',
262 269 EmptyChangeset())
263 270
264 271 if filenode_old.is_binary or node.is_binary:
265 272 diff = wrap_to_table(_('binary file'))
266 273 st = (0, 0)
267 274 else:
268 275
269 276 if c.sum_removed < self.cut_off_limit:
270 277 fid = h.FID(revision, node.path)
271 278 line_context_lcl = get_line_ctx(fid, request.GET)
272 279 ignore_whitespace_lcl = get_ignore_ws(fid, request.GET,)
273 280 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
274 281 ignore_whitespace=ignore_whitespace_lcl,
275 282 context=line_context_lcl)
276 283 d = diffs.DiffProcessor(f_gitdiff,
277 284 format='gitdiff')
278 285 st = d.stat()
279 286 if (st[0] + st[1]) * 256 > self.cut_off_limit:
280 287 diff = wrap_to_table(_('Diff is to big '
281 288 'and was cut off, see '
282 289 'raw diff instead'))
283 290 else:
284 diff = d.as_html()
291 diff = d.as_html(enable_comments=enable_comments)
285 292
286 293 if diff:
287 294 c.sum_removed += len(diff)
288 295 else:
289 296 diff = wrap_to_table(_('Changeset is to big and '
290 297 'was cut off, see raw '
291 298 'changeset instead'))
292 299 c.cut_off = True
293 300 break
294 301
295 302 cs1 = filenode_old.last_changeset.raw_id
296 303 cs2 = node.last_changeset.raw_id
297 304 c.lines_added += st[0]
298 305 c.lines_deleted += st[1]
299 306 c.changes[changeset.raw_id].append(('changed', node, diff,
300 307 cs1, cs2, st))
301 308
302 309 #==================================================================
303 310 # REMOVED FILES
304 311 #==================================================================
305 312 if not c.cut_off:
306 313 for node in changeset.removed:
307 314 c.changes[changeset.raw_id].append(('removed', node, None,
308 315 None, None, (0, 0)))
309 316
310 317 # count inline comments
311 318 for path, lines in c.inline_comments:
312 319 for comments in lines.values():
313 320 c.inline_cnt += len(comments)
314 321
315 322 if len(c.cs_ranges) == 1:
316 323 c.changeset = c.cs_ranges[0]
317 324 c.changes = c.changes[c.changeset.raw_id]
318 325
319 326 return render('changeset/changeset.html')
320 327 else:
321 328 return render('changeset/changeset_range.html')
322 329
323 330 def raw_changeset(self, revision):
324 331
325 332 method = request.GET.get('diff', 'show')
326 333 ignore_whitespace = request.GET.get('ignorews') == '1'
327 334 line_context = request.GET.get('context', 3)
328 335 try:
329 336 c.scm_type = c.rhodecode_repo.alias
330 337 c.changeset = c.rhodecode_repo.get_changeset(revision)
331 338 except RepositoryError:
332 339 log.error(traceback.format_exc())
333 340 return redirect(url('home'))
334 341 else:
335 342 try:
336 343 c.changeset_parent = c.changeset.parents[0]
337 344 except IndexError:
338 345 c.changeset_parent = None
339 346 c.changes = []
340 347
341 348 for node in c.changeset.added:
342 349 filenode_old = FileNode(node.path, '')
343 350 if filenode_old.is_binary or node.is_binary:
344 351 diff = _('binary file') + '\n'
345 352 else:
346 353 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
347 354 ignore_whitespace=ignore_whitespace,
348 355 context=line_context)
349 356 diff = diffs.DiffProcessor(f_gitdiff,
350 357 format='gitdiff').raw_diff()
351 358
352 359 cs1 = None
353 360 cs2 = node.last_changeset.raw_id
354 361 c.changes.append(('added', node, diff, cs1, cs2))
355 362
356 363 for node in c.changeset.changed:
357 364 filenode_old = c.changeset_parent.get_node(node.path)
358 365 if filenode_old.is_binary or node.is_binary:
359 366 diff = _('binary file')
360 367 else:
361 368 f_gitdiff = diffs.get_gitdiff(filenode_old, node,
362 369 ignore_whitespace=ignore_whitespace,
363 370 context=line_context)
364 371 diff = diffs.DiffProcessor(f_gitdiff,
365 372 format='gitdiff').raw_diff()
366 373
367 374 cs1 = filenode_old.last_changeset.raw_id
368 375 cs2 = node.last_changeset.raw_id
369 376 c.changes.append(('changed', node, diff, cs1, cs2))
370 377
371 378 response.content_type = 'text/plain'
372 379
373 380 if method == 'download':
374 381 response.content_disposition = 'attachment; filename=%s.patch' \
375 382 % revision
376 383
377 384 c.parent_tmpl = ''.join(['# Parent %s\n' % x.raw_id for x in
378 385 c.changeset.parents])
379 386
380 387 c.diffs = ''
381 388 for x in c.changes:
382 389 c.diffs += x[2]
383 390
384 391 return render('changeset/raw_changeset.html')
385 392
386 393 def comment(self, repo_name, revision):
387 394 ChangesetCommentsModel().create(text=request.POST.get('text'),
388 395 repo_id=c.rhodecode_db_repo.repo_id,
389 396 user_id=c.rhodecode_user.user_id,
390 397 revision=revision,
391 398 f_path=request.POST.get('f_path'),
392 399 line_no=request.POST.get('line'))
393 400 Session.commit()
394 401 return redirect(h.url('changeset_home', repo_name=repo_name,
395 402 revision=revision))
396 403
397 404 @jsonify
398 405 def delete_comment(self, repo_name, comment_id):
399 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 408 if h.HasPermissionAny('hg.admin', 'repository.admin')() or owner:
402 409 ChangesetCommentsModel().delete(comment=co)
403 410 Session.commit()
404 411 return True
405 412 else:
406 413 raise HTTPForbidden()
407
@@ -1,447 +1,451 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.lib.diffs
4 4 ~~~~~~~~~~~~~~~~~~~
5 5
6 6 Set of diffing helpers, previously part of vcs
7 7
8 8
9 9 :created_on: Dec 4, 2011
10 10 :author: marcink
11 11 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
12 12 :original copyright: 2007-2008 by Armin Ronacher
13 13 :license: GPLv3, see COPYING for more details.
14 14 """
15 15 # This program is free software: you can redistribute it and/or modify
16 16 # it under the terms of the GNU General Public License as published by
17 17 # the Free Software Foundation, either version 3 of the License, or
18 18 # (at your option) any later version.
19 19 #
20 20 # This program is distributed in the hope that it will be useful,
21 21 # but WITHOUT ANY WARRANTY; without even the implied warranty of
22 22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 23 # GNU General Public License for more details.
24 24 #
25 25 # You should have received a copy of the GNU General Public License
26 26 # along with this program. If not, see <http://www.gnu.org/licenses/>.
27 27
28 28 import re
29 29 import difflib
30 30
31 31 from itertools import tee, imap
32 32
33 33 from vcs.exceptions import VCSError
34 34 from vcs.nodes import FileNode
35 35 import markupsafe
36 36
37 37
38 38 def get_gitdiff(filenode_old, filenode_new, ignore_whitespace=True, context=3):
39 39 """
40 40 Returns git style diff between given ``filenode_old`` and ``filenode_new``.
41 41
42 42 :param ignore_whitespace: ignore whitespaces in diff
43 43 """
44 44
45 45 for filenode in (filenode_old, filenode_new):
46 46 if not isinstance(filenode, FileNode):
47 47 raise VCSError("Given object should be FileNode object, not %s"
48 48 % filenode.__class__)
49 49
50 50 old_raw_id = getattr(filenode_old.changeset, 'raw_id', '0' * 40)
51 51 new_raw_id = getattr(filenode_new.changeset, 'raw_id', '0' * 40)
52 52
53 53 repo = filenode_new.changeset.repository
54 54 vcs_gitdiff = repo._get_diff(old_raw_id, new_raw_id, filenode_new.path,
55 55 ignore_whitespace, context)
56 56
57 57 return vcs_gitdiff
58 58
59 59
60 60 class DiffProcessor(object):
61 61 """
62 62 Give it a unified diff and it returns a list of the files that were
63 63 mentioned in the diff together with a dict of meta information that
64 64 can be used to render it in a HTML template.
65 65 """
66 66 _chunk_re = re.compile(r'@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)')
67 67
68 68 def __init__(self, diff, differ='diff', format='udiff'):
69 69 """
70 70 :param diff: a text in diff format or generator
71 71 :param format: format of diff passed, `udiff` or `gitdiff`
72 72 """
73 73 if isinstance(diff, basestring):
74 74 diff = [diff]
75 75
76 76 self.__udiff = diff
77 77 self.__format = format
78 78 self.adds = 0
79 79 self.removes = 0
80 80
81 81 if isinstance(self.__udiff, basestring):
82 82 self.lines = iter(self.__udiff.splitlines(1))
83 83
84 84 elif self.__format == 'gitdiff':
85 85 udiff_copy = self.copy_iterator()
86 86 self.lines = imap(self.escaper, self._parse_gitdiff(udiff_copy))
87 87 else:
88 88 udiff_copy = self.copy_iterator()
89 89 self.lines = imap(self.escaper, udiff_copy)
90 90
91 91 # Select a differ.
92 92 if differ == 'difflib':
93 93 self.differ = self._highlight_line_difflib
94 94 else:
95 95 self.differ = self._highlight_line_udiff
96 96
97 97 def escaper(self, string):
98 98 return markupsafe.escape(string)
99 99
100 100 def copy_iterator(self):
101 101 """
102 102 make a fresh copy of generator, we should not iterate thru
103 103 an original as it's needed for repeating operations on
104 104 this instance of DiffProcessor
105 105 """
106 106 self.__udiff, iterator_copy = tee(self.__udiff)
107 107 return iterator_copy
108 108
109 109 def _extract_rev(self, line1, line2):
110 110 """
111 111 Extract the filename and revision hint from a line.
112 112 """
113 113
114 114 try:
115 115 if line1.startswith('--- ') and line2.startswith('+++ '):
116 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 119 old_rev = l1[1] if len(l1) == 2 else 'old'
119 120
120 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 124 new_rev = l2[1] if len(l2) == 2 else 'new'
123 125
124 filename = old_filename if (old_filename !=
125 'dev/null') else new_filename
126 filename = (old_filename
127 if old_filename != '/dev/null' else new_filename)
126 128
127 129 return filename, new_rev, old_rev
128 130 except (ValueError, IndexError):
129 131 pass
130 132
131 133 return None, None, None
132 134
133 135 def _parse_gitdiff(self, diffiterator):
134 136 def line_decoder(l):
135 137 if l.startswith('+') and not l.startswith('+++'):
136 138 self.adds += 1
137 139 elif l.startswith('-') and not l.startswith('---'):
138 140 self.removes += 1
139 141 return l.decode('utf8', 'replace')
140 142
141 143 output = list(diffiterator)
142 144 size = len(output)
143 145
144 146 if size == 2:
145 147 l = []
146 148 l.extend([output[0]])
147 149 l.extend(output[1].splitlines(1))
148 150 return map(line_decoder, l)
149 151 elif size == 1:
150 152 return map(line_decoder, output[0].splitlines(1))
151 153 elif size == 0:
152 154 return []
153 155
154 156 raise Exception('wrong size of diff %s' % size)
155 157
156 158 def _highlight_line_difflib(self, line, next_):
157 159 """
158 160 Highlight inline changes in both lines.
159 161 """
160 162
161 163 if line['action'] == 'del':
162 164 old, new = line, next_
163 165 else:
164 166 old, new = next_, line
165 167
166 168 oldwords = re.split(r'(\W)', old['line'])
167 169 newwords = re.split(r'(\W)', new['line'])
168 170
169 171 sequence = difflib.SequenceMatcher(None, oldwords, newwords)
170 172
171 173 oldfragments, newfragments = [], []
172 174 for tag, i1, i2, j1, j2 in sequence.get_opcodes():
173 175 oldfrag = ''.join(oldwords[i1:i2])
174 176 newfrag = ''.join(newwords[j1:j2])
175 177 if tag != 'equal':
176 178 if oldfrag:
177 179 oldfrag = '<del>%s</del>' % oldfrag
178 180 if newfrag:
179 181 newfrag = '<ins>%s</ins>' % newfrag
180 182 oldfragments.append(oldfrag)
181 183 newfragments.append(newfrag)
182 184
183 185 old['line'] = "".join(oldfragments)
184 186 new['line'] = "".join(newfragments)
185 187
186 188 def _highlight_line_udiff(self, line, next_):
187 189 """
188 190 Highlight inline changes in both lines.
189 191 """
190 192 start = 0
191 193 limit = min(len(line['line']), len(next_['line']))
192 194 while start < limit and line['line'][start] == next_['line'][start]:
193 195 start += 1
194 196 end = -1
195 197 limit -= start
196 198 while -end <= limit and line['line'][end] == next_['line'][end]:
197 199 end -= 1
198 200 end += 1
199 201 if start or end:
200 202 def do(l):
201 203 last = end + len(l['line'])
202 204 if l['action'] == 'add':
203 205 tag = 'ins'
204 206 else:
205 207 tag = 'del'
206 208 l['line'] = '%s<%s>%s</%s>%s' % (
207 209 l['line'][:start],
208 210 tag,
209 211 l['line'][start:last],
210 212 tag,
211 213 l['line'][last:]
212 214 )
213 215 do(line)
214 216 do(next_)
215 217
216 218 def _parse_udiff(self):
217 219 """
218 220 Parse the diff an return data for the template.
219 221 """
220 222 lineiter = self.lines
221 223 files = []
222 224 try:
223 225 line = lineiter.next()
224 226 # skip first context
225 227 skipfirst = True
226 228 while 1:
227 229 # continue until we found the old file
228 230 if not line.startswith('--- '):
229 231 line = lineiter.next()
230 232 continue
231 233
232 234 chunks = []
233 235 filename, old_rev, new_rev = \
234 236 self._extract_rev(line, lineiter.next())
235 237 files.append({
236 238 'filename': filename,
237 239 'old_revision': old_rev,
238 240 'new_revision': new_rev,
239 241 'chunks': chunks
240 242 })
241 243
242 244 line = lineiter.next()
243 245 while line:
244 246 match = self._chunk_re.match(line)
245 247 if not match:
246 248 break
247 249
248 250 lines = []
249 251 chunks.append(lines)
250 252
251 253 old_line, old_end, new_line, new_end = \
252 254 [int(x or 1) for x in match.groups()[:-1]]
253 255 old_line -= 1
254 256 new_line -= 1
255 257 context = len(match.groups()) == 5
256 258 old_end += old_line
257 259 new_end += new_line
258 260
259 261 if context:
260 262 if not skipfirst:
261 263 lines.append({
262 264 'old_lineno': '...',
263 265 'new_lineno': '...',
264 266 'action': 'context',
265 267 'line': line,
266 268 })
267 269 else:
268 270 skipfirst = False
269 271
270 272 line = lineiter.next()
271 273 while old_line < old_end or new_line < new_end:
272 274 if line:
273 275 command, line = line[0], line[1:]
274 276 else:
275 277 command = ' '
276 278 affects_old = affects_new = False
277 279
278 280 # ignore those if we don't expect them
279 281 if command in '#@':
280 282 continue
281 283 elif command == '+':
282 284 affects_new = True
283 285 action = 'add'
284 286 elif command == '-':
285 287 affects_old = True
286 288 action = 'del'
287 289 else:
288 290 affects_old = affects_new = True
289 291 action = 'unmod'
290 292
291 293 old_line += affects_old
292 294 new_line += affects_new
293 295 lines.append({
294 296 'old_lineno': affects_old and old_line or '',
295 297 'new_lineno': affects_new and new_line or '',
296 298 'action': action,
297 299 'line': line
298 300 })
299 301 line = lineiter.next()
300 302
301 303 except StopIteration:
302 304 pass
303 305
304 306 # highlight inline changes
305 307 for _ in files:
306 308 for chunk in chunks:
307 309 lineiter = iter(chunk)
308 310 #first = True
309 311 try:
310 312 while 1:
311 313 line = lineiter.next()
312 314 if line['action'] != 'unmod':
313 315 nextline = lineiter.next()
314 316 if nextline['action'] == 'unmod' or \
315 317 nextline['action'] == line['action']:
316 318 continue
317 319 self.differ(line, nextline)
318 320 except StopIteration:
319 321 pass
320 322
321 323 return files
322 324
323 325 def prepare(self):
324 326 """
325 327 Prepare the passed udiff for HTML rendering. It'l return a list
326 328 of dicts
327 329 """
328 330 return self._parse_udiff()
329 331
330 332 def _safe_id(self, idstring):
331 333 """Make a string safe for including in an id attribute.
332 334
333 335 The HTML spec says that id attributes 'must begin with
334 336 a letter ([A-Za-z]) and may be followed by any number
335 337 of letters, digits ([0-9]), hyphens ("-"), underscores
336 338 ("_"), colons (":"), and periods (".")'. These regexps
337 339 are slightly over-zealous, in that they remove colons
338 340 and periods unnecessarily.
339 341
340 342 Whitespace is transformed into underscores, and then
341 343 anything which is not a hyphen or a character that
342 344 matches \w (alphanumerics and underscore) is removed.
343 345
344 346 """
345 347 # Transform all whitespace to underscore
346 348 idstring = re.sub(r'\s', "_", '%s' % idstring)
347 349 # Remove everything that is not a hyphen or a member of \w
348 350 idstring = re.sub(r'(?!-)\W', "", idstring).lower()
349 351 return idstring
350 352
351 353 def raw_diff(self):
352 354 """
353 355 Returns raw string as udiff
354 356 """
355 357 udiff_copy = self.copy_iterator()
356 358 if self.__format == 'gitdiff':
357 359 udiff_copy = self._parse_gitdiff(udiff_copy)
358 360 return u''.join(udiff_copy)
359 361
360 362 def as_html(self, table_class='code-difftable', line_class='line',
361 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 366 Return udiff as html table with customized css classes
365 367 """
366 368 def _link_to_if(condition, label, url):
367 369 """
368 370 Generates a link if condition is meet or just the label if not.
369 371 """
370 372
371 373 if condition:
372 374 return '''<a href="%(url)s">%(label)s</a>''' % {'url': url,
373 375 'label': label}
374 376 else:
375 377 return label
376 378 diff_lines = self.prepare()
377 379 _html_empty = True
378 380 _html = []
379 381 _html.append('''<table class="%(table_class)s">\n''' \
380 382 % {'table_class': table_class})
381 383 for diff in diff_lines:
382 384 for line in diff['chunks']:
383 385 _html_empty = False
384 386 for change in line:
385 387 _html.append('''<tr class="%(line_class)s %(action)s">\n''' \
386 388 % {'line_class': line_class,
387 389 'action': change['action']})
388 390 anchor_old_id = ''
389 391 anchor_new_id = ''
390 392 anchor_old = "%(filename)s_o%(oldline_no)s" % \
391 393 {'filename': self._safe_id(diff['filename']),
392 394 'oldline_no': change['old_lineno']}
393 395 anchor_new = "%(filename)s_n%(oldline_no)s" % \
394 396 {'filename': self._safe_id(diff['filename']),
395 397 'oldline_no': change['new_lineno']}
396 398 cond_old = change['old_lineno'] != '...' and \
397 399 change['old_lineno']
398 400 cond_new = change['new_lineno'] != '...' and \
399 401 change['new_lineno']
400 402 if cond_old:
401 403 anchor_old_id = 'id="%s"' % anchor_old
402 404 if cond_new:
403 405 anchor_new_id = 'id="%s"' % anchor_new
404 406 ###########################################################
405 407 # OLD LINE NUMBER
406 408 ###########################################################
407 409 _html.append('''\t<td %(a_id)s class="%(old_lineno_cls)s">''' \
408 410 % {'a_id': anchor_old_id,
409 411 'old_lineno_cls': old_lineno_class})
410 412
411 413 _html.append('''%(link)s''' \
412 414 % {'link':
413 415 _link_to_if(cond_old, change['old_lineno'], '#%s' \
414 416 % anchor_old)})
415 417 _html.append('''</td>\n''')
416 418 ###########################################################
417 419 # NEW LINE NUMBER
418 420 ###########################################################
419 421
420 422 _html.append('''\t<td %(a_id)s class="%(new_lineno_cls)s">''' \
421 423 % {'a_id': anchor_new_id,
422 424 'new_lineno_cls': new_lineno_class})
423 425
424 426 _html.append('''%(link)s''' \
425 427 % {'link':
426 428 _link_to_if(cond_new, change['new_lineno'], '#%s' \
427 429 % anchor_new)})
428 430 _html.append('''</td>\n''')
429 431 ###########################################################
430 432 # CODE
431 433 ###########################################################
432 _html.append('''\t<td class="%(code_class)s">''' \
433 % {'code_class': code_class})
434 comments = '' if enable_comments else 'no-comment'
435 _html.append('''\t<td class="%(code_class)s %(in-comments)s">''' \
436 % {'code_class': code_class,
437 'in-comments': comments})
434 438 _html.append('''\n\t\t<pre>%(code)s</pre>\n''' \
435 439 % {'code': change['line']})
436 440 _html.append('''\t</td>''')
437 441 _html.append('''\n</tr>\n''')
438 442 _html.append('''</table>''')
439 443 if _html_empty:
440 444 return None
441 445 return ''.join(_html)
442 446
443 447 def stat(self):
444 448 """
445 449 Returns tuple of added, and removed lines for this instance
446 450 """
447 451 return self.adds, self.removes
@@ -1,4072 +1,4080 b''
1 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 3 border: 0;
4 4 outline: 0;
5 5 font-size: 100%;
6 6 vertical-align: baseline;
7 7 background: transparent;
8 8 margin: 0;
9 9 padding: 0;
10 10 }
11 11
12 12 body {
13 13 line-height: 1;
14 14 height: 100%;
15 15 background: url("../images/background.png") repeat scroll 0 0 #B0B0B0;
16 16 font-family: Lucida Grande, Verdana, Lucida Sans Regular,
17 17 Lucida Sans Unicode, Arial, sans-serif; font-size : 12px;
18 18 color: #000;
19 19 margin: 0;
20 20 padding: 0;
21 21 font-size: 12px;
22 22 }
23 23
24 24 ol,ul {
25 25 list-style: none;
26 26 }
27 27
28 28 blockquote,q {
29 29 quotes: none;
30 30 }
31 31
32 32 blockquote:before,blockquote:after,q:before,q:after {
33 33 content: none;
34 34 }
35 35
36 36 :focus {
37 37 outline: 0;
38 38 }
39 39
40 40 del {
41 41 text-decoration: line-through;
42 42 }
43 43
44 44 table {
45 45 border-collapse: collapse;
46 46 border-spacing: 0;
47 47 }
48 48
49 49 html {
50 50 height: 100%;
51 51 }
52 52
53 53 a {
54 54 color: #003367;
55 55 text-decoration: none;
56 56 cursor: pointer;
57 57 }
58 58
59 59 a:hover {
60 60 color: #316293;
61 61 text-decoration: underline;
62 62 }
63 63
64 64 h1,h2,h3,h4,h5,h6 {
65 65 color: #292929;
66 66 font-weight: 700;
67 67 }
68 68
69 69 h1 {
70 70 font-size: 22px;
71 71 }
72 72
73 73 h2 {
74 74 font-size: 20px;
75 75 }
76 76
77 77 h3 {
78 78 font-size: 18px;
79 79 }
80 80
81 81 h4 {
82 82 font-size: 16px;
83 83 }
84 84
85 85 h5 {
86 86 font-size: 14px;
87 87 }
88 88
89 89 h6 {
90 90 font-size: 11px;
91 91 }
92 92
93 93 ul.circle {
94 94 list-style-type: circle;
95 95 }
96 96
97 97 ul.disc {
98 98 list-style-type: disc;
99 99 }
100 100
101 101 ul.square {
102 102 list-style-type: square;
103 103 }
104 104
105 105 ol.lower-roman {
106 106 list-style-type: lower-roman;
107 107 }
108 108
109 109 ol.upper-roman {
110 110 list-style-type: upper-roman;
111 111 }
112 112
113 113 ol.lower-alpha {
114 114 list-style-type: lower-alpha;
115 115 }
116 116
117 117 ol.upper-alpha {
118 118 list-style-type: upper-alpha;
119 119 }
120 120
121 121 ol.decimal {
122 122 list-style-type: decimal;
123 123 }
124 124
125 125 div.color {
126 126 clear: both;
127 127 overflow: hidden;
128 128 position: absolute;
129 129 background: #FFF;
130 130 margin: 7px 0 0 60px;
131 131 padding: 1px 1px 1px 0;
132 132 }
133 133
134 134 div.color a {
135 135 width: 15px;
136 136 height: 15px;
137 137 display: block;
138 138 float: left;
139 139 margin: 0 0 0 1px;
140 140 padding: 0;
141 141 }
142 142
143 143 div.options {
144 144 clear: both;
145 145 overflow: hidden;
146 146 position: absolute;
147 147 background: #FFF;
148 148 margin: 7px 0 0 162px;
149 149 padding: 0;
150 150 }
151 151
152 152 div.options a {
153 153 height: 1%;
154 154 display: block;
155 155 text-decoration: none;
156 156 margin: 0;
157 157 padding: 3px 8px;
158 158 }
159 159
160 160 .top-left-rounded-corner {
161 161 -webkit-border-top-left-radius: 8px;
162 162 -khtml-border-radius-topleft: 8px;
163 163 -moz-border-radius-topleft: 8px;
164 164 border-top-left-radius: 8px;
165 165 }
166 166
167 167 .top-right-rounded-corner {
168 168 -webkit-border-top-right-radius: 8px;
169 169 -khtml-border-radius-topright: 8px;
170 170 -moz-border-radius-topright: 8px;
171 171 border-top-right-radius: 8px;
172 172 }
173 173
174 174 .bottom-left-rounded-corner {
175 175 -webkit-border-bottom-left-radius: 8px;
176 176 -khtml-border-radius-bottomleft: 8px;
177 177 -moz-border-radius-bottomleft: 8px;
178 178 border-bottom-left-radius: 8px;
179 179 }
180 180
181 181 .bottom-right-rounded-corner {
182 182 -webkit-border-bottom-right-radius: 8px;
183 183 -khtml-border-radius-bottomright: 8px;
184 184 -moz-border-radius-bottomright: 8px;
185 185 border-bottom-right-radius: 8px;
186 186 }
187 187
188 188 #header {
189 189 margin: 0;
190 190 padding: 0 10px;
191 191 }
192 192
193 193 #header ul#logged-user {
194 194 margin-bottom: 5px !important;
195 195 -webkit-border-radius: 0px 0px 8px 8px;
196 196 -khtml-border-radius: 0px 0px 8px 8px;
197 197 -moz-border-radius: 0px 0px 8px 8px;
198 198 border-radius: 0px 0px 8px 8px;
199 199 height: 37px;
200 200 background-color: #eedc94;
201 201 background-repeat: repeat-x;
202 202 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
203 203 to(#eedc94) );
204 204 background-image: -moz-linear-gradient(top, #003b76, #00376e);
205 205 background-image: -ms-linear-gradient(top, #003b76, #00376e);
206 206 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
207 207 color-stop(100%, #00376e) );
208 208 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
209 209 background-image: -o-linear-gradient(top, #003b76, #00376e) );
210 210 background-image: linear-gradient(top, #003b76, #00376e);
211 211 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
212 212 endColorstr='#00376e', GradientType=0 );
213 213 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
214 214 }
215 215
216 216 #header ul#logged-user li {
217 217 list-style: none;
218 218 float: left;
219 219 margin: 8px 0 0;
220 220 padding: 4px 12px;
221 221 border-left: 1px solid #316293;
222 222 }
223 223
224 224 #header ul#logged-user li.first {
225 225 border-left: none;
226 226 margin: 4px;
227 227 }
228 228
229 229 #header ul#logged-user li.first div.gravatar {
230 230 margin-top: -2px;
231 231 }
232 232
233 233 #header ul#logged-user li.first div.account {
234 234 padding-top: 4px;
235 235 float: left;
236 236 }
237 237
238 238 #header ul#logged-user li.last {
239 239 border-right: none;
240 240 }
241 241
242 242 #header ul#logged-user li a {
243 243 color: #fff;
244 244 font-weight: 700;
245 245 text-decoration: none;
246 246 }
247 247
248 248 #header ul#logged-user li a:hover {
249 249 text-decoration: underline;
250 250 }
251 251
252 252 #header ul#logged-user li.highlight a {
253 253 color: #fff;
254 254 }
255 255
256 256 #header ul#logged-user li.highlight a:hover {
257 257 color: #FFF;
258 258 }
259 259
260 260 #header #header-inner {
261 261 min-height: 40px;
262 262 clear: both;
263 263 position: relative;
264 264 background-color: #eedc94;
265 265 background-repeat: repeat-x;
266 266 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
267 267 to(#eedc94) );
268 268 background-image: -moz-linear-gradient(top, #003b76, #00376e);
269 269 background-image: -ms-linear-gradient(top, #003b76, #00376e);
270 270 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
271 271 color-stop(100%, #00376e) );
272 272 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
273 273 background-image: -o-linear-gradient(top, #003b76, #00376e) );
274 274 background-image: linear-gradient(top, #003b76, #00376e);
275 275 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
276 276 endColorstr='#00376e', GradientType=0 );
277 277 margin: 0;
278 278 padding: 0;
279 279 display: block;
280 280 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
281 281 -webkit-border-radius: 4px 4px 4px 4px;
282 282 -khtml-border-radius: 4px 4px 4px 4px;
283 283 -moz-border-radius: 4px 4px 4px 4px;
284 284 border-radius: 4px 4px 4px 4px;
285 285 }
286 286 #header #header-inner.hover{
287 287 position: fixed !important;
288 288 width: 100% !important;
289 289 margin-left: -10px !important;
290 290 z-index: 10000;
291 291 border-radius: 0px 0px 4px 4px;
292 292 }
293 293 #header #header-inner #home a {
294 294 height: 40px;
295 295 width: 46px;
296 296 display: block;
297 297 background: url("../images/button_home.png");
298 298 background-position: 0 0;
299 299 margin: 0;
300 300 padding: 0;
301 301 }
302 302
303 303 #header #header-inner #home a:hover {
304 304 background-position: 0 -40px;
305 305 }
306 306
307 307 #header #header-inner #logo {
308 308 float: left;
309 309 position: absolute;
310 310 }
311 311
312 312 #header #header-inner #logo h1 {
313 313 color: #FFF;
314 314 font-size: 18px;
315 315 margin: 10px 0 0 13px;
316 316 padding: 0;
317 317 }
318 318
319 319 #header #header-inner #logo a {
320 320 color: #fff;
321 321 text-decoration: none;
322 322 }
323 323
324 324 #header #header-inner #logo a:hover {
325 325 color: #bfe3ff;
326 326 }
327 327
328 328 #header #header-inner #quick,#header #header-inner #quick ul {
329 329 position: relative;
330 330 float: right;
331 331 list-style-type: none;
332 332 list-style-position: outside;
333 333 margin: 6px 5px 0 0;
334 334 padding: 0;
335 335 }
336 336
337 337 #header #header-inner #quick li {
338 338 position: relative;
339 339 float: left;
340 340 margin: 0 5px 0 0;
341 341 padding: 0;
342 342 }
343 343
344 344 #header #header-inner #quick li a {
345 345 top: 0;
346 346 left: 0;
347 347 height: 1%;
348 348 display: block;
349 349 clear: both;
350 350 overflow: hidden;
351 351 color: #FFF;
352 352 font-weight: 700;
353 353 text-decoration: none;
354 354 background: #369;
355 355 padding: 0;
356 356 -webkit-border-radius: 4px 4px 4px 4px;
357 357 -khtml-border-radius: 4px 4px 4px 4px;
358 358 -moz-border-radius: 4px 4px 4px 4px;
359 359 border-radius: 4px 4px 4px 4px;
360 360 }
361 361
362 362 #header #header-inner #quick li span.short {
363 363 padding: 9px 6px 8px 6px;
364 364 }
365 365
366 366 #header #header-inner #quick li span {
367 367 top: 0;
368 368 right: 0;
369 369 height: 1%;
370 370 display: block;
371 371 float: left;
372 372 border-left: 1px solid #3f6f9f;
373 373 margin: 0;
374 374 padding: 10px 12px 8px 10px;
375 375 }
376 376
377 377 #header #header-inner #quick li span.normal {
378 378 border: none;
379 379 padding: 10px 12px 8px;
380 380 }
381 381
382 382 #header #header-inner #quick li span.icon {
383 383 top: 0;
384 384 left: 0;
385 385 border-left: none;
386 386 border-right: 1px solid #2e5c89;
387 387 padding: 8px 6px 4px;
388 388 }
389 389
390 390 #header #header-inner #quick li span.icon_short {
391 391 top: 0;
392 392 left: 0;
393 393 border-left: none;
394 394 border-right: 1px solid #2e5c89;
395 395 padding: 8px 6px 4px;
396 396 }
397 397
398 398 #header #header-inner #quick li span.icon img,#header #header-inner #quick li span.icon_short img
399 399 {
400 400 margin: 0px -2px 0px 0px;
401 401 }
402 402
403 403 #header #header-inner #quick li a:hover {
404 404 background: #4e4e4e no-repeat top left;
405 405 }
406 406
407 407 #header #header-inner #quick li a:hover span {
408 408 border-left: 1px solid #545454;
409 409 }
410 410
411 411 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short
412 412 {
413 413 border-left: none;
414 414 border-right: 1px solid #464646;
415 415 }
416 416
417 417 #header #header-inner #quick ul {
418 418 top: 29px;
419 419 right: 0;
420 420 min-width: 200px;
421 421 display: none;
422 422 position: absolute;
423 423 background: #FFF;
424 424 border: 1px solid #666;
425 425 border-top: 1px solid #003367;
426 426 z-index: 100;
427 427 margin: 0;
428 428 padding: 0;
429 429 }
430 430
431 431 #header #header-inner #quick ul.repo_switcher {
432 432 max-height: 275px;
433 433 overflow-x: hidden;
434 434 overflow-y: auto;
435 435 }
436 436
437 437 #header #header-inner #quick ul.repo_switcher li.qfilter_rs {
438 438 float: none;
439 439 margin: 0;
440 440 border-bottom: 2px solid #003367;
441 441 }
442 442
443 443 #header #header-inner #quick .repo_switcher_type {
444 444 position: absolute;
445 445 left: 0;
446 446 top: 9px;
447 447 }
448 448
449 449 #header #header-inner #quick li ul li {
450 450 border-bottom: 1px solid #ddd;
451 451 }
452 452
453 453 #header #header-inner #quick li ul li a {
454 454 width: 182px;
455 455 height: auto;
456 456 display: block;
457 457 float: left;
458 458 background: #FFF;
459 459 color: #003367;
460 460 font-weight: 400;
461 461 margin: 0;
462 462 padding: 7px 9px;
463 463 }
464 464
465 465 #header #header-inner #quick li ul li a:hover {
466 466 color: #000;
467 467 background: #FFF;
468 468 }
469 469
470 470 #header #header-inner #quick ul ul {
471 471 top: auto;
472 472 }
473 473
474 474 #header #header-inner #quick li ul ul {
475 475 right: 200px;
476 476 max-height: 275px;
477 477 overflow: auto;
478 478 overflow-x: hidden;
479 479 white-space: normal;
480 480 }
481 481
482 482 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover
483 483 {
484 484 background: url("../images/icons/book.png") no-repeat scroll 4px 9px
485 485 #FFF;
486 486 width: 167px;
487 487 margin: 0;
488 488 padding: 12px 9px 7px 24px;
489 489 }
490 490
491 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 493 background: url("../images/icons/lock.png") no-repeat scroll 4px 9px
494 494 #FFF;
495 495 min-width: 167px;
496 496 margin: 0;
497 497 padding: 12px 9px 7px 24px;
498 498 }
499 499
500 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 502 background: url("../images/icons/lock_open.png") no-repeat scroll 4px
503 503 9px #FFF;
504 504 min-width: 167px;
505 505 margin: 0;
506 506 padding: 12px 9px 7px 24px;
507 507 }
508 508
509 509 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover
510 510 {
511 511 background: url("../images/icons/hgicon.png") no-repeat scroll 4px 9px
512 512 #FFF;
513 513 min-width: 167px;
514 514 margin: 0 0 0 14px;
515 515 padding: 12px 9px 7px 24px;
516 516 }
517 517
518 518 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover
519 519 {
520 520 background: url("../images/icons/giticon.png") no-repeat scroll 4px 9px
521 521 #FFF;
522 522 min-width: 167px;
523 523 margin: 0 0 0 14px;
524 524 padding: 12px 9px 7px 24px;
525 525 }
526 526
527 527 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover
528 528 {
529 529 background: url("../images/icons/database_edit.png") no-repeat scroll
530 530 4px 9px #FFF;
531 531 width: 167px;
532 532 margin: 0;
533 533 padding: 12px 9px 7px 24px;
534 534 }
535 535
536 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 538 background: url("../images/icons/database_link.png") no-repeat scroll
539 539 4px 9px #FFF;
540 540 width: 167px;
541 541 margin: 0;
542 542 padding: 12px 9px 7px 24px;
543 543 }
544 544
545 545 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover
546 546 {
547 547 background: #FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
548 548 width: 167px;
549 549 margin: 0;
550 550 padding: 12px 9px 7px 24px;
551 551 }
552 552
553 553 #header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover
554 554 {
555 555 background: #FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
556 556 width: 167px;
557 557 margin: 0;
558 558 padding: 12px 9px 7px 24px;
559 559 }
560 560
561 561 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover
562 562 {
563 563 background: #FFF url("../images/icons/cog.png") no-repeat 4px 9px;
564 564 width: 167px;
565 565 margin: 0;
566 566 padding: 12px 9px 7px 24px;
567 567 }
568 568
569 569 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover
570 570 {
571 571 background: #FFF url("../images/icons/key.png") no-repeat 4px 9px;
572 572 width: 167px;
573 573 margin: 0;
574 574 padding: 12px 9px 7px 24px;
575 575 }
576 576
577 577 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover
578 578 {
579 579 background: #FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
580 580 width: 167px;
581 581 margin: 0;
582 582 padding: 12px 9px 7px 24px;
583 583 }
584 584
585 585 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover
586 586 {
587 587 background: #FFF url("../images/icons/arrow_divide.png") no-repeat 4px
588 588 9px;
589 589 width: 167px;
590 590 margin: 0;
591 591 padding: 12px 9px 7px 24px;
592 592 }
593 593
594 594 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover
595 595 {
596 596 background: #FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
597 597 width: 167px;
598 598 margin: 0;
599 599 padding: 12px 9px 7px 24px;
600 600 }
601 601
602 602 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover
603 603 {
604 604 background: #FFF url("../images/icons/delete.png") no-repeat 4px 9px;
605 605 width: 167px;
606 606 margin: 0;
607 607 padding: 12px 9px 7px 24px;
608 608 }
609 609
610 610 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover
611 611 {
612 612 background: #FFF url("../images/icons/arrow_branch.png") no-repeat 4px
613 613 9px;
614 614 width: 167px;
615 615 margin: 0;
616 616 padding: 12px 9px 7px 24px;
617 617 }
618 618
619 619 #header #header-inner #quick li ul li a.tags,
620 620 #header #header-inner #quick li ul li a.tags:hover{
621 621 background: #FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
622 622 width: 167px;
623 623 margin: 0;
624 624 padding: 12px 9px 7px 24px;
625 625 }
626 626
627 627 #header #header-inner #quick li ul li a.bookmarks,
628 628 #header #header-inner #quick li ul li a.bookmarks:hover{
629 629 background: #FFF url("../images/icons/tag_green.png") no-repeat 4px 9px;
630 630 width: 167px;
631 631 margin: 0;
632 632 padding: 12px 9px 7px 24px;
633 633 }
634 634
635 635 #header #header-inner #quick li ul li a.admin,
636 636 #header #header-inner #quick li ul li a.admin:hover{
637 637 background: #FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
638 638 width: 167px;
639 639 margin: 0;
640 640 padding: 12px 9px 7px 24px;
641 641 }
642 642
643 643 .groups_breadcrumbs a {
644 644 color: #fff;
645 645 }
646 646
647 647 .groups_breadcrumbs a:hover {
648 648 color: #bfe3ff;
649 649 text-decoration: none;
650 650 }
651 651
652 652 td.quick_repo_menu {
653 653 background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important;
654 654 cursor: pointer;
655 655 width: 8px;
656 656 border: 1px solid transparent;
657 657 }
658 658
659 659 td.quick_repo_menu.active {
660 660 background: url("../images/dt-arrow-dn.png") no-repeat scroll 5px 50% #FFFFFF !important;
661 661 border: 1px solid #003367;
662 662 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
663 663 cursor: pointer;
664 664 }
665 665
666 666 td.quick_repo_menu .menu_items {
667 667 margin-top: 10px;
668 668 margin-left:-6px;
669 669 width: 150px;
670 670 position: absolute;
671 671 background-color: #FFF;
672 672 background: none repeat scroll 0 0 #FFFFFF;
673 673 border-color: #003367 #666666 #666666;
674 674 border-right: 1px solid #666666;
675 675 border-style: solid;
676 676 border-width: 1px;
677 677 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
678 678 border-top-style: none;
679 679 }
680 680
681 681 td.quick_repo_menu .menu_items li {
682 682 padding: 0 !important;
683 683 }
684 684
685 685 td.quick_repo_menu .menu_items a {
686 686 display: block;
687 687 padding: 4px 12px 4px 8px;
688 688 }
689 689
690 690 td.quick_repo_menu .menu_items a:hover {
691 691 background-color: #EEE;
692 692 text-decoration: none;
693 693 }
694 694
695 695 td.quick_repo_menu .menu_items .icon img {
696 696 margin-bottom: -2px;
697 697 }
698 698
699 699 td.quick_repo_menu .menu_items.hidden {
700 700 display: none;
701 701 }
702 702
703 703 .yui-dt-first th {
704 704 text-align: left;
705 705 }
706 706
707 707 /*
708 708 Copyright (c) 2011, Yahoo! Inc. All rights reserved.
709 709 Code licensed under the BSD License:
710 710 http://developer.yahoo.com/yui/license.html
711 711 version: 2.9.0
712 712 */
713 713 .yui-skin-sam .yui-dt-mask {
714 714 position: absolute;
715 715 z-index: 9500;
716 716 }
717 717 .yui-dt-tmp {
718 718 position: absolute;
719 719 left: -9000px;
720 720 }
721 721 .yui-dt-scrollable .yui-dt-bd { overflow: auto }
722 722 .yui-dt-scrollable .yui-dt-hd {
723 723 overflow: hidden;
724 724 position: relative;
725 725 }
726 726 .yui-dt-scrollable .yui-dt-bd thead tr,
727 727 .yui-dt-scrollable .yui-dt-bd thead th {
728 728 position: absolute;
729 729 left: -1500px;
730 730 }
731 731 .yui-dt-scrollable tbody { -moz-outline: 0 }
732 732 .yui-skin-sam thead .yui-dt-sortable { cursor: pointer }
733 733 .yui-skin-sam thead .yui-dt-draggable { cursor: move }
734 734 .yui-dt-coltarget {
735 735 position: absolute;
736 736 z-index: 999;
737 737 }
738 738 .yui-dt-hd { zoom: 1 }
739 739 th.yui-dt-resizeable .yui-dt-resizerliner { position: relative }
740 740 .yui-dt-resizer {
741 741 position: absolute;
742 742 right: 0;
743 743 bottom: 0;
744 744 height: 100%;
745 745 cursor: e-resize;
746 746 cursor: col-resize;
747 747 background-color: #CCC;
748 748 opacity: 0;
749 749 filter: alpha(opacity=0);
750 750 }
751 751 .yui-dt-resizerproxy {
752 752 visibility: hidden;
753 753 position: absolute;
754 754 z-index: 9000;
755 755 background-color: #CCC;
756 756 opacity: 0;
757 757 filter: alpha(opacity=0);
758 758 }
759 759 th.yui-dt-hidden .yui-dt-liner,
760 760 td.yui-dt-hidden .yui-dt-liner,
761 761 th.yui-dt-hidden .yui-dt-resizer { display: none }
762 762 .yui-dt-editor,
763 763 .yui-dt-editor-shim {
764 764 position: absolute;
765 765 z-index: 9000;
766 766 }
767 767 .yui-skin-sam .yui-dt table {
768 768 margin: 0;
769 769 padding: 0;
770 770 font-family: arial;
771 771 font-size: inherit;
772 772 border-collapse: separate;
773 773 *border-collapse: collapse;
774 774 border-spacing: 0;
775 775 border: 1px solid #7f7f7f;
776 776 }
777 777 .yui-skin-sam .yui-dt thead { border-spacing: 0 }
778 778 .yui-skin-sam .yui-dt caption {
779 779 color: #000;
780 780 font-size: 85%;
781 781 font-weight: normal;
782 782 font-style: italic;
783 783 line-height: 1;
784 784 padding: 1em 0;
785 785 text-align: center;
786 786 }
787 787 .yui-skin-sam .yui-dt th { background: #d8d8da url(../images/sprite.png) repeat-x 0 0 }
788 788 .yui-skin-sam .yui-dt th,
789 789 .yui-skin-sam .yui-dt th a {
790 790 font-weight: normal;
791 791 text-decoration: none;
792 792 color: #000;
793 793 vertical-align: bottom;
794 794 }
795 795 .yui-skin-sam .yui-dt th {
796 796 margin: 0;
797 797 padding: 0;
798 798 border: 0;
799 799 border-right: 1px solid #cbcbcb;
800 800 }
801 801 .yui-skin-sam .yui-dt tr.yui-dt-first td { border-top: 1px solid #7f7f7f }
802 802 .yui-skin-sam .yui-dt th .yui-dt-liner { white-space: nowrap }
803 803 .yui-skin-sam .yui-dt-liner {
804 804 margin: 0;
805 805 padding: 0;
806 806 }
807 807 .yui-skin-sam .yui-dt-coltarget {
808 808 width: 5px;
809 809 background-color: red;
810 810 }
811 811 .yui-skin-sam .yui-dt td {
812 812 margin: 0;
813 813 padding: 0;
814 814 border: 0;
815 815 border-right: 1px solid #cbcbcb;
816 816 text-align: left;
817 817 }
818 818 .yui-skin-sam .yui-dt-list td { border-right: 0 }
819 819 .yui-skin-sam .yui-dt-resizer { width: 6px }
820 820 .yui-skin-sam .yui-dt-mask {
821 821 background-color: #000;
822 822 opacity: .25;
823 823 filter: alpha(opacity=25);
824 824 }
825 825 .yui-skin-sam .yui-dt-message { background-color: #FFF }
826 826 .yui-skin-sam .yui-dt-scrollable table { border: 0 }
827 827 .yui-skin-sam .yui-dt-scrollable .yui-dt-hd {
828 828 border-left: 1px solid #7f7f7f;
829 829 border-top: 1px solid #7f7f7f;
830 830 border-right: 1px solid #7f7f7f;
831 831 }
832 832 .yui-skin-sam .yui-dt-scrollable .yui-dt-bd {
833 833 border-left: 1px solid #7f7f7f;
834 834 border-bottom: 1px solid #7f7f7f;
835 835 border-right: 1px solid #7f7f7f;
836 836 background-color: #FFF;
837 837 }
838 838 .yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td { border-bottom: 1px solid #7f7f7f }
839 839 .yui-skin-sam th.yui-dt-asc,
840 840 .yui-skin-sam th.yui-dt-desc { background: url(../images/sprite.png) repeat-x 0 -100px }
841 841 .yui-skin-sam th.yui-dt-sortable .yui-dt-label { margin-right: 10px }
842 842 .yui-skin-sam th.yui-dt-asc .yui-dt-liner { background: url(../images/dt-arrow-up.png) no-repeat right }
843 843 .yui-skin-sam th.yui-dt-desc .yui-dt-liner { background: url(../images/dt-arrow-dn.png) no-repeat right }
844 844 tbody .yui-dt-editable { cursor: pointer }
845 845 .yui-dt-editor {
846 846 text-align: left;
847 847 background-color: #f2f2f2;
848 848 border: 1px solid #808080;
849 849 padding: 6px;
850 850 }
851 851 .yui-dt-editor label {
852 852 padding-left: 4px;
853 853 padding-right: 6px;
854 854 }
855 855 .yui-dt-editor .yui-dt-button {
856 856 padding-top: 6px;
857 857 text-align: right;
858 858 }
859 859 .yui-dt-editor .yui-dt-button button {
860 860 background: url(../images/sprite.png) repeat-x 0 0;
861 861 border: 1px solid #999;
862 862 width: 4em;
863 863 height: 1.8em;
864 864 margin-left: 6px;
865 865 }
866 866 .yui-dt-editor .yui-dt-button button.yui-dt-default {
867 867 background: url(../images/sprite.png) repeat-x 0 -1400px;
868 868 background-color: #5584e0;
869 869 border: 1px solid #304369;
870 870 color: #FFF;
871 871 }
872 872 .yui-dt-editor .yui-dt-button button:hover {
873 873 background: url(../images/sprite.png) repeat-x 0 -1300px;
874 874 color: #000;
875 875 }
876 876 .yui-dt-editor .yui-dt-button button:active {
877 877 background: url(../images/sprite.png) repeat-x 0 -1700px;
878 878 color: #000;
879 879 }
880 880 .yui-skin-sam tr.yui-dt-even { background-color: #FFF }
881 881 .yui-skin-sam tr.yui-dt-odd { background-color: #edf5ff }
882 882 .yui-skin-sam tr.yui-dt-even td.yui-dt-asc,
883 883 .yui-skin-sam tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
884 884 .yui-skin-sam tr.yui-dt-odd td.yui-dt-asc,
885 885 .yui-skin-sam tr.yui-dt-odd td.yui-dt-desc { background-color: #dbeaff }
886 886 .yui-skin-sam .yui-dt-list tr.yui-dt-even { background-color: #FFF }
887 887 .yui-skin-sam .yui-dt-list tr.yui-dt-odd { background-color: #FFF }
888 888 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,
889 889 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
890 890 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,
891 891 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc { background-color: #edf5ff }
892 892 .yui-skin-sam th.yui-dt-highlighted,
893 893 .yui-skin-sam th.yui-dt-highlighted a { background-color: #b2d2ff }
894 894 .yui-skin-sam tr.yui-dt-highlighted,
895 895 .yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,
896 896 .yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,
897 897 .yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,
898 898 .yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted {
899 899 cursor: pointer;
900 900 background-color: #b2d2ff;
901 901 }
902 902 .yui-skin-sam .yui-dt-list th.yui-dt-highlighted,
903 903 .yui-skin-sam .yui-dt-list th.yui-dt-highlighted a { background-color: #b2d2ff }
904 904 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,
905 905 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,
906 906 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,
907 907 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,
908 908 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted {
909 909 cursor: pointer;
910 910 background-color: #b2d2ff;
911 911 }
912 912 .yui-skin-sam th.yui-dt-selected,
913 913 .yui-skin-sam th.yui-dt-selected a { background-color: #446cd7 }
914 914 .yui-skin-sam tr.yui-dt-selected td,
915 915 .yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,
916 916 .yui-skin-sam tr.yui-dt-selected td.yui-dt-desc {
917 917 background-color: #426fd9;
918 918 color: #FFF;
919 919 }
920 920 .yui-skin-sam tr.yui-dt-even td.yui-dt-selected,
921 921 .yui-skin-sam tr.yui-dt-odd td.yui-dt-selected {
922 922 background-color: #446cd7;
923 923 color: #FFF;
924 924 }
925 925 .yui-skin-sam .yui-dt-list th.yui-dt-selected,
926 926 .yui-skin-sam .yui-dt-list th.yui-dt-selected a { background-color: #446cd7 }
927 927 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td,
928 928 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,
929 929 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc {
930 930 background-color: #426fd9;
931 931 color: #FFF;
932 932 }
933 933 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,
934 934 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected {
935 935 background-color: #446cd7;
936 936 color: #FFF;
937 937 }
938 938 .yui-skin-sam .yui-dt-paginator {
939 939 display: block;
940 940 margin: 6px 0;
941 941 white-space: nowrap;
942 942 }
943 943 .yui-skin-sam .yui-dt-paginator .yui-dt-first,
944 944 .yui-skin-sam .yui-dt-paginator .yui-dt-last,
945 945 .yui-skin-sam .yui-dt-paginator .yui-dt-selected { padding: 2px 6px }
946 946 .yui-skin-sam .yui-dt-paginator a.yui-dt-first,
947 947 .yui-skin-sam .yui-dt-paginator a.yui-dt-last { text-decoration: none }
948 948 .yui-skin-sam .yui-dt-paginator .yui-dt-previous,
949 949 .yui-skin-sam .yui-dt-paginator .yui-dt-next { display: none }
950 950 .yui-skin-sam a.yui-dt-page {
951 951 border: 1px solid #cbcbcb;
952 952 padding: 2px 6px;
953 953 text-decoration: none;
954 954 background-color: #fff;
955 955 }
956 956 .yui-skin-sam .yui-dt-selected {
957 957 border: 1px solid #fff;
958 958 background-color: #fff;
959 959 }
960 960
961 961 #content #left {
962 962 left: 0;
963 963 width: 280px;
964 964 position: absolute;
965 965 }
966 966
967 967 #content #right {
968 968 margin: 0 60px 10px 290px;
969 969 }
970 970
971 971 #content div.box {
972 972 clear: both;
973 973 overflow: hidden;
974 974 background: #fff;
975 975 margin: 0 0 10px;
976 976 padding: 0 0 10px;
977 977 -webkit-border-radius: 4px 4px 4px 4px;
978 978 -khtml-border-radius: 4px 4px 4px 4px;
979 979 -moz-border-radius: 4px 4px 4px 4px;
980 980 border-radius: 4px 4px 4px 4px;
981 981 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
982 982 }
983 983
984 984 #content div.box-left {
985 985 width: 49%;
986 986 clear: none;
987 987 float: left;
988 988 margin: 0 0 10px;
989 989 }
990 990
991 991 #content div.box-right {
992 992 width: 49%;
993 993 clear: none;
994 994 float: right;
995 995 margin: 0 0 10px;
996 996 }
997 997
998 998 #content div.box div.title {
999 999 clear: both;
1000 1000 overflow: hidden;
1001 1001 background-color: #eedc94;
1002 1002 background-repeat: repeat-x;
1003 1003 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1004 1004 to(#eedc94) );
1005 1005 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1006 1006 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1007 1007 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1008 1008 color-stop(100%, #00376e) );
1009 1009 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1010 1010 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1011 1011 background-image: linear-gradient(top, #003b76, #00376e);
1012 1012 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1013 1013 endColorstr='#00376e', GradientType=0 );
1014 1014 margin: 0 0 20px;
1015 1015 padding: 0;
1016 1016 }
1017 1017
1018 1018 #content div.box div.title h5 {
1019 1019 float: left;
1020 1020 border: none;
1021 1021 color: #fff;
1022 1022 text-transform: uppercase;
1023 1023 margin: 0;
1024 1024 padding: 11px 0 11px 10px;
1025 1025 }
1026 1026
1027 1027 #content div.box div.title .link-white{
1028 1028 color: #FFFFFF;
1029 1029 }
1030 1030
1031 1031 #content div.box div.title ul.links li {
1032 1032 list-style: none;
1033 1033 float: left;
1034 1034 margin: 0;
1035 1035 padding: 0;
1036 1036 }
1037 1037
1038 1038 #content div.box div.title ul.links li a {
1039 1039 border-left: 1px solid #316293;
1040 1040 color: #FFFFFF;
1041 1041 display: block;
1042 1042 float: left;
1043 1043 font-size: 13px;
1044 1044 font-weight: 700;
1045 1045 height: 1%;
1046 1046 margin: 0;
1047 1047 padding: 11px 22px 12px;
1048 1048 text-decoration: none;
1049 1049 }
1050 1050
1051 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 1053 clear: both;
1054 1054 overflow: hidden;
1055 1055 border-bottom: 1px solid #DDD;
1056 1056 margin: 10px 20px;
1057 1057 padding: 0 0 15px;
1058 1058 }
1059 1059
1060 1060 #content div.box p {
1061 1061 color: #5f5f5f;
1062 1062 font-size: 12px;
1063 1063 line-height: 150%;
1064 1064 margin: 0 24px 10px;
1065 1065 padding: 0;
1066 1066 }
1067 1067
1068 1068 #content div.box blockquote {
1069 1069 border-left: 4px solid #DDD;
1070 1070 color: #5f5f5f;
1071 1071 font-size: 11px;
1072 1072 line-height: 150%;
1073 1073 margin: 0 34px;
1074 1074 padding: 0 0 0 14px;
1075 1075 }
1076 1076
1077 1077 #content div.box blockquote p {
1078 1078 margin: 10px 0;
1079 1079 padding: 0;
1080 1080 }
1081 1081
1082 1082 #content div.box dl {
1083 1083 margin: 10px 0px;
1084 1084 }
1085 1085
1086 1086 #content div.box dt {
1087 1087 font-size: 12px;
1088 1088 margin: 0;
1089 1089 }
1090 1090
1091 1091 #content div.box dd {
1092 1092 font-size: 12px;
1093 1093 margin: 0;
1094 1094 padding: 8px 0 8px 15px;
1095 1095 }
1096 1096
1097 1097 #content div.box li {
1098 1098 font-size: 12px;
1099 1099 padding: 4px 0;
1100 1100 }
1101 1101
1102 1102 #content div.box ul.disc,#content div.box ul.circle {
1103 1103 margin: 10px 24px 10px 38px;
1104 1104 }
1105 1105
1106 1106 #content div.box ul.square {
1107 1107 margin: 10px 24px 10px 40px;
1108 1108 }
1109 1109
1110 1110 #content div.box img.left {
1111 1111 border: none;
1112 1112 float: left;
1113 1113 margin: 10px 10px 10px 0;
1114 1114 }
1115 1115
1116 1116 #content div.box img.right {
1117 1117 border: none;
1118 1118 float: right;
1119 1119 margin: 10px 0 10px 10px;
1120 1120 }
1121 1121
1122 1122 #content div.box div.messages {
1123 1123 clear: both;
1124 1124 overflow: hidden;
1125 1125 margin: 0 20px;
1126 1126 padding: 0;
1127 1127 }
1128 1128
1129 1129 #content div.box div.message {
1130 1130 clear: both;
1131 1131 overflow: hidden;
1132 1132 margin: 0;
1133 1133 padding: 10px 0;
1134 1134 }
1135 1135
1136 1136 #content div.box div.message a {
1137 1137 font-weight: 400 !important;
1138 1138 }
1139 1139
1140 1140 #content div.box div.message div.image {
1141 1141 float: left;
1142 1142 margin: 9px 0 0 5px;
1143 1143 padding: 6px;
1144 1144 }
1145 1145
1146 1146 #content div.box div.message div.image img {
1147 1147 vertical-align: middle;
1148 1148 margin: 0;
1149 1149 }
1150 1150
1151 1151 #content div.box div.message div.text {
1152 1152 float: left;
1153 1153 margin: 0;
1154 1154 padding: 9px 6px;
1155 1155 }
1156 1156
1157 1157 #content div.box div.message div.dismiss a {
1158 1158 height: 16px;
1159 1159 width: 16px;
1160 1160 display: block;
1161 1161 background: url("../images/icons/cross.png") no-repeat;
1162 1162 margin: 15px 14px 0 0;
1163 1163 padding: 0;
1164 1164 }
1165 1165
1166 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 1168 border: none;
1169 1169 margin: 0;
1170 1170 padding: 0;
1171 1171 }
1172 1172
1173 1173 #content div.box div.message div.text span {
1174 1174 height: 1%;
1175 1175 display: block;
1176 1176 margin: 0;
1177 1177 padding: 5px 0 0;
1178 1178 }
1179 1179
1180 1180 #content div.box div.message-error {
1181 1181 height: 1%;
1182 1182 clear: both;
1183 1183 overflow: hidden;
1184 1184 background: #FBE3E4;
1185 1185 border: 1px solid #FBC2C4;
1186 1186 color: #860006;
1187 1187 }
1188 1188
1189 1189 #content div.box div.message-error h6 {
1190 1190 color: #860006;
1191 1191 }
1192 1192
1193 1193 #content div.box div.message-warning {
1194 1194 height: 1%;
1195 1195 clear: both;
1196 1196 overflow: hidden;
1197 1197 background: #FFF6BF;
1198 1198 border: 1px solid #FFD324;
1199 1199 color: #5f5200;
1200 1200 }
1201 1201
1202 1202 #content div.box div.message-warning h6 {
1203 1203 color: #5f5200;
1204 1204 }
1205 1205
1206 1206 #content div.box div.message-notice {
1207 1207 height: 1%;
1208 1208 clear: both;
1209 1209 overflow: hidden;
1210 1210 background: #8FBDE0;
1211 1211 border: 1px solid #6BACDE;
1212 1212 color: #003863;
1213 1213 }
1214 1214
1215 1215 #content div.box div.message-notice h6 {
1216 1216 color: #003863;
1217 1217 }
1218 1218
1219 1219 #content div.box div.message-success {
1220 1220 height: 1%;
1221 1221 clear: both;
1222 1222 overflow: hidden;
1223 1223 background: #E6EFC2;
1224 1224 border: 1px solid #C6D880;
1225 1225 color: #4e6100;
1226 1226 }
1227 1227
1228 1228 #content div.box div.message-success h6 {
1229 1229 color: #4e6100;
1230 1230 }
1231 1231
1232 1232 #content div.box div.form div.fields div.field {
1233 1233 height: 1%;
1234 1234 border-bottom: 1px solid #DDD;
1235 1235 clear: both;
1236 1236 margin: 0;
1237 1237 padding: 10px 0;
1238 1238 }
1239 1239
1240 1240 #content div.box div.form div.fields div.field-first {
1241 1241 padding: 0 0 10px;
1242 1242 }
1243 1243
1244 1244 #content div.box div.form div.fields div.field-noborder {
1245 1245 border-bottom: 0 !important;
1246 1246 }
1247 1247
1248 1248 #content div.box div.form div.fields div.field span.error-message {
1249 1249 height: 1%;
1250 1250 display: inline-block;
1251 1251 color: red;
1252 1252 margin: 8px 0 0 4px;
1253 1253 padding: 0;
1254 1254 }
1255 1255
1256 1256 #content div.box div.form div.fields div.field span.success {
1257 1257 height: 1%;
1258 1258 display: block;
1259 1259 color: #316309;
1260 1260 margin: 8px 0 0;
1261 1261 padding: 0;
1262 1262 }
1263 1263
1264 1264 #content div.box div.form div.fields div.field div.label {
1265 1265 left: 70px;
1266 1266 width: 155px;
1267 1267 position: absolute;
1268 1268 margin: 0;
1269 1269 padding: 5px 0 0 0px;
1270 1270 }
1271 1271
1272 1272 #content div.box div.form div.fields div.field div.label-summary {
1273 1273 left: 30px;
1274 1274 width: 155px;
1275 1275 position: absolute;
1276 1276 margin: 0;
1277 1277 padding: 0px 0 0 0px;
1278 1278 }
1279 1279
1280 1280 #content div.box-left div.form div.fields div.field div.label,
1281 1281 #content div.box-right div.form div.fields div.field div.label,
1282 1282 #content div.box-left div.form div.fields div.field div.label,
1283 1283 #content div.box-left div.form div.fields div.field div.label-summary,
1284 1284 #content div.box-right div.form div.fields div.field div.label-summary,
1285 1285 #content div.box-left div.form div.fields div.field div.label-summary
1286 1286 {
1287 1287 clear: both;
1288 1288 overflow: hidden;
1289 1289 left: 0;
1290 1290 width: auto;
1291 1291 position: relative;
1292 1292 margin: 0;
1293 1293 padding: 0 0 8px;
1294 1294 }
1295 1295
1296 1296 #content div.box div.form div.fields div.field div.label-select {
1297 1297 padding: 5px 0 0 5px;
1298 1298 }
1299 1299
1300 1300 #content div.box-left div.form div.fields div.field div.label-select,
1301 1301 #content div.box-right div.form div.fields div.field div.label-select
1302 1302 {
1303 1303 padding: 0 0 8px;
1304 1304 }
1305 1305
1306 1306 #content div.box-left div.form div.fields div.field div.label-textarea,
1307 1307 #content div.box-right div.form div.fields div.field div.label-textarea
1308 1308 {
1309 1309 padding: 0 0 8px !important;
1310 1310 }
1311 1311
1312 1312 #content div.box div.form div.fields div.field div.label label,div.label label
1313 1313 {
1314 1314 color: #393939;
1315 1315 font-weight: 700;
1316 1316 }
1317 1317 #content div.box div.form div.fields div.field div.label label,div.label-summary label
1318 1318 {
1319 1319 color: #393939;
1320 1320 font-weight: 700;
1321 1321 }
1322 1322 #content div.box div.form div.fields div.field div.input {
1323 1323 margin: 0 0 0 200px;
1324 1324 }
1325 1325
1326 1326 #content div.box div.form div.fields div.field div.input.summary {
1327 1327 margin: 0 0 0 110px;
1328 1328 }
1329 1329 #content div.box div.form div.fields div.field div.input.summary-short {
1330 1330 margin: 0 0 0 110px;
1331 1331 }
1332 1332 #content div.box div.form div.fields div.field div.file {
1333 1333 margin: 0 0 0 200px;
1334 1334 }
1335 1335
1336 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 1338 margin: 0 0 0 0px;
1339 1339 }
1340 1340
1341 1341 #content div.box div.form div.fields div.field div.input input {
1342 1342 background: #FFF;
1343 1343 border-top: 1px solid #b3b3b3;
1344 1344 border-left: 1px solid #b3b3b3;
1345 1345 border-right: 1px solid #eaeaea;
1346 1346 border-bottom: 1px solid #eaeaea;
1347 1347 color: #000;
1348 1348 font-size: 11px;
1349 1349 margin: 0;
1350 1350 padding: 7px 7px 6px;
1351 1351 }
1352 1352
1353 1353 #content div.box div.form div.fields div.field div.input input#clone_url{
1354 1354 font-size: 16px;
1355 1355 padding: 2px 7px 2px;
1356 1356 }
1357 1357
1358 1358 #content div.box div.form div.fields div.field div.file input {
1359 1359 background: none repeat scroll 0 0 #FFFFFF;
1360 1360 border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
1361 1361 border-style: solid;
1362 1362 border-width: 1px;
1363 1363 color: #000000;
1364 1364 font-size: 11px;
1365 1365 margin: 0;
1366 1366 padding: 7px 7px 6px;
1367 1367 }
1368 1368
1369 1369 #content div.box div.form div.fields div.field div.input input.small {
1370 1370 width: 30%;
1371 1371 }
1372 1372
1373 1373 #content div.box div.form div.fields div.field div.input input.medium {
1374 1374 width: 55%;
1375 1375 }
1376 1376
1377 1377 #content div.box div.form div.fields div.field div.input input.large {
1378 1378 width: 85%;
1379 1379 }
1380 1380
1381 1381 #content div.box div.form div.fields div.field div.input input.date {
1382 1382 width: 177px;
1383 1383 }
1384 1384
1385 1385 #content div.box div.form div.fields div.field div.input input.button {
1386 1386 background: #D4D0C8;
1387 1387 border-top: 1px solid #FFF;
1388 1388 border-left: 1px solid #FFF;
1389 1389 border-right: 1px solid #404040;
1390 1390 border-bottom: 1px solid #404040;
1391 1391 color: #000;
1392 1392 margin: 0;
1393 1393 padding: 4px 8px;
1394 1394 }
1395 1395
1396 1396 #content div.box div.form div.fields div.field div.textarea {
1397 1397 border-top: 1px solid #b3b3b3;
1398 1398 border-left: 1px solid #b3b3b3;
1399 1399 border-right: 1px solid #eaeaea;
1400 1400 border-bottom: 1px solid #eaeaea;
1401 1401 margin: 0 0 0 200px;
1402 1402 padding: 10px;
1403 1403 }
1404 1404
1405 1405 #content div.box div.form div.fields div.field div.textarea-editor {
1406 1406 border: 1px solid #ddd;
1407 1407 padding: 0;
1408 1408 }
1409 1409
1410 1410 #content div.box div.form div.fields div.field div.textarea textarea {
1411 1411 width: 100%;
1412 1412 height: 220px;
1413 1413 overflow: hidden;
1414 1414 background: #FFF;
1415 1415 color: #000;
1416 1416 font-size: 11px;
1417 1417 outline: none;
1418 1418 border-width: 0;
1419 1419 margin: 0;
1420 1420 padding: 0;
1421 1421 }
1422 1422
1423 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 1425 width: 100%;
1426 1426 height: 100px;
1427 1427 }
1428 1428
1429 1429 #content div.box div.form div.fields div.field div.textarea table {
1430 1430 width: 100%;
1431 1431 border: none;
1432 1432 margin: 0;
1433 1433 padding: 0;
1434 1434 }
1435 1435
1436 1436 #content div.box div.form div.fields div.field div.textarea table td {
1437 1437 background: #DDD;
1438 1438 border: none;
1439 1439 padding: 0;
1440 1440 }
1441 1441
1442 1442 #content div.box div.form div.fields div.field div.textarea table td table
1443 1443 {
1444 1444 width: auto;
1445 1445 border: none;
1446 1446 margin: 0;
1447 1447 padding: 0;
1448 1448 }
1449 1449
1450 1450 #content div.box div.form div.fields div.field div.textarea table td table td
1451 1451 {
1452 1452 font-size: 11px;
1453 1453 padding: 5px 5px 5px 0;
1454 1454 }
1455 1455
1456 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 1458 background: #f6f6f6;
1459 1459 border-color: #666;
1460 1460 }
1461 1461
1462 1462 div.form div.fields div.field div.button {
1463 1463 margin: 0;
1464 1464 padding: 0 0 0 8px;
1465 1465 }
1466 1466 #content div.box table.noborder {
1467 1467 border: 1px solid transparent;
1468 1468 }
1469 1469
1470 1470 #content div.box table {
1471 1471 width: 100%;
1472 1472 border-collapse: separate;
1473 1473 margin: 0;
1474 1474 padding: 0;
1475 1475 border: 1px solid #eee;
1476 1476 -webkit-border-radius: 4px;
1477 1477 -moz-border-radius: 4px;
1478 1478 border-radius: 4px;
1479 1479 }
1480 1480
1481 1481 #content div.box table th {
1482 1482 background: #eee;
1483 1483 border-bottom: 1px solid #ddd;
1484 1484 padding: 5px 0px 5px 5px;
1485 1485 }
1486 1486
1487 1487 #content div.box table th.left {
1488 1488 text-align: left;
1489 1489 }
1490 1490
1491 1491 #content div.box table th.right {
1492 1492 text-align: right;
1493 1493 }
1494 1494
1495 1495 #content div.box table th.center {
1496 1496 text-align: center;
1497 1497 }
1498 1498
1499 1499 #content div.box table th.selected {
1500 1500 vertical-align: middle;
1501 1501 padding: 0;
1502 1502 }
1503 1503
1504 1504 #content div.box table td {
1505 1505 background: #fff;
1506 1506 border-bottom: 1px solid #cdcdcd;
1507 1507 vertical-align: middle;
1508 1508 padding: 5px;
1509 1509 }
1510 1510
1511 1511 #content div.box table tr.selected td {
1512 1512 background: #FFC;
1513 1513 }
1514 1514
1515 1515 #content div.box table td.selected {
1516 1516 width: 3%;
1517 1517 text-align: center;
1518 1518 vertical-align: middle;
1519 1519 padding: 0;
1520 1520 }
1521 1521
1522 1522 #content div.box table td.action {
1523 1523 width: 45%;
1524 1524 text-align: left;
1525 1525 }
1526 1526
1527 1527 #content div.box table td.date {
1528 1528 width: 33%;
1529 1529 text-align: center;
1530 1530 }
1531 1531
1532 1532 #content div.box div.action {
1533 1533 float: right;
1534 1534 background: #FFF;
1535 1535 text-align: right;
1536 1536 margin: 10px 0 0;
1537 1537 padding: 0;
1538 1538 }
1539 1539
1540 1540 #content div.box div.action select {
1541 1541 font-size: 11px;
1542 1542 margin: 0;
1543 1543 }
1544 1544
1545 1545 #content div.box div.action .ui-selectmenu {
1546 1546 margin: 0;
1547 1547 padding: 0;
1548 1548 }
1549 1549
1550 1550 #content div.box div.pagination {
1551 1551 height: 1%;
1552 1552 clear: both;
1553 1553 overflow: hidden;
1554 1554 margin: 10px 0 0;
1555 1555 padding: 0;
1556 1556 }
1557 1557
1558 1558 #content div.box div.pagination ul.pager {
1559 1559 float: right;
1560 1560 text-align: right;
1561 1561 margin: 0;
1562 1562 padding: 0;
1563 1563 }
1564 1564
1565 1565 #content div.box div.pagination ul.pager li {
1566 1566 height: 1%;
1567 1567 float: left;
1568 1568 list-style: none;
1569 1569 background: #ebebeb url("../images/pager.png") repeat-x;
1570 1570 border-top: 1px solid #dedede;
1571 1571 border-left: 1px solid #cfcfcf;
1572 1572 border-right: 1px solid #c4c4c4;
1573 1573 border-bottom: 1px solid #c4c4c4;
1574 1574 color: #4A4A4A;
1575 1575 font-weight: 700;
1576 1576 margin: 0 0 0 4px;
1577 1577 padding: 0;
1578 1578 }
1579 1579
1580 1580 #content div.box div.pagination ul.pager li.separator {
1581 1581 padding: 6px;
1582 1582 }
1583 1583
1584 1584 #content div.box div.pagination ul.pager li.current {
1585 1585 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1586 1586 border-top: 1px solid #ccc;
1587 1587 border-left: 1px solid #bebebe;
1588 1588 border-right: 1px solid #b1b1b1;
1589 1589 border-bottom: 1px solid #afafaf;
1590 1590 color: #515151;
1591 1591 padding: 6px;
1592 1592 }
1593 1593
1594 1594 #content div.box div.pagination ul.pager li a {
1595 1595 height: 1%;
1596 1596 display: block;
1597 1597 float: left;
1598 1598 color: #515151;
1599 1599 text-decoration: none;
1600 1600 margin: 0;
1601 1601 padding: 6px;
1602 1602 }
1603 1603
1604 1604 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active
1605 1605 {
1606 1606 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1607 1607 border-top: 1px solid #ccc;
1608 1608 border-left: 1px solid #bebebe;
1609 1609 border-right: 1px solid #b1b1b1;
1610 1610 border-bottom: 1px solid #afafaf;
1611 1611 margin: -1px;
1612 1612 }
1613 1613
1614 1614 #content div.box div.pagination-wh {
1615 1615 height: 1%;
1616 1616 clear: both;
1617 1617 overflow: hidden;
1618 1618 text-align: right;
1619 1619 margin: 10px 0 0;
1620 1620 padding: 0;
1621 1621 }
1622 1622
1623 1623 #content div.box div.pagination-right {
1624 1624 float: right;
1625 1625 }
1626 1626
1627 1627 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot
1628 1628 {
1629 1629 height: 1%;
1630 1630 float: left;
1631 1631 background: #ebebeb url("../images/pager.png") repeat-x;
1632 1632 border-top: 1px solid #dedede;
1633 1633 border-left: 1px solid #cfcfcf;
1634 1634 border-right: 1px solid #c4c4c4;
1635 1635 border-bottom: 1px solid #c4c4c4;
1636 1636 color: #4A4A4A;
1637 1637 font-weight: 700;
1638 1638 margin: 0 0 0 4px;
1639 1639 padding: 6px;
1640 1640 }
1641 1641
1642 1642 #content div.box div.pagination-wh span.pager_curpage {
1643 1643 height: 1%;
1644 1644 float: left;
1645 1645 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1646 1646 border-top: 1px solid #ccc;
1647 1647 border-left: 1px solid #bebebe;
1648 1648 border-right: 1px solid #b1b1b1;
1649 1649 border-bottom: 1px solid #afafaf;
1650 1650 color: #515151;
1651 1651 font-weight: 700;
1652 1652 margin: 0 0 0 4px;
1653 1653 padding: 6px;
1654 1654 }
1655 1655
1656 1656 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active
1657 1657 {
1658 1658 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1659 1659 border-top: 1px solid #ccc;
1660 1660 border-left: 1px solid #bebebe;
1661 1661 border-right: 1px solid #b1b1b1;
1662 1662 border-bottom: 1px solid #afafaf;
1663 1663 text-decoration: none;
1664 1664 }
1665 1665
1666 1666 #content div.box div.traffic div.legend {
1667 1667 clear: both;
1668 1668 overflow: hidden;
1669 1669 border-bottom: 1px solid #ddd;
1670 1670 margin: 0 0 10px;
1671 1671 padding: 0 0 10px;
1672 1672 }
1673 1673
1674 1674 #content div.box div.traffic div.legend h6 {
1675 1675 float: left;
1676 1676 border: none;
1677 1677 margin: 0;
1678 1678 padding: 0;
1679 1679 }
1680 1680
1681 1681 #content div.box div.traffic div.legend li {
1682 1682 list-style: none;
1683 1683 float: left;
1684 1684 font-size: 11px;
1685 1685 margin: 0;
1686 1686 padding: 0 8px 0 4px;
1687 1687 }
1688 1688
1689 1689 #content div.box div.traffic div.legend li.visits {
1690 1690 border-left: 12px solid #edc240;
1691 1691 }
1692 1692
1693 1693 #content div.box div.traffic div.legend li.pageviews {
1694 1694 border-left: 12px solid #afd8f8;
1695 1695 }
1696 1696
1697 1697 #content div.box div.traffic table {
1698 1698 width: auto;
1699 1699 }
1700 1700
1701 1701 #content div.box div.traffic table td {
1702 1702 background: transparent;
1703 1703 border: none;
1704 1704 padding: 2px 3px 3px;
1705 1705 }
1706 1706
1707 1707 #content div.box div.traffic table td.legendLabel {
1708 1708 padding: 0 3px 2px;
1709 1709 }
1710 1710
1711 1711 #summary {
1712 1712
1713 1713 }
1714 1714
1715 1715 #summary .desc {
1716 1716 white-space: pre;
1717 1717 width: 100%;
1718 1718 }
1719 1719
1720 1720 #summary .repo_name {
1721 1721 font-size: 1.6em;
1722 1722 font-weight: bold;
1723 1723 vertical-align: baseline;
1724 1724 clear: right
1725 1725 }
1726 1726
1727 1727 #footer {
1728 1728 clear: both;
1729 1729 overflow: hidden;
1730 1730 text-align: right;
1731 1731 margin: 0;
1732 1732 padding: 0 10px 4px;
1733 1733 margin: -10px 0 0;
1734 1734 }
1735 1735
1736 1736 #footer div#footer-inner {
1737 1737 background-color: #eedc94; background-repeat : repeat-x;
1738 1738 background-image : -khtml-gradient( linear, left top, left bottom,
1739 1739 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1740 1740 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1741 1741 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1742 1742 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1743 1743 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1744 1744 background-image : -o-linear-gradient( top, #003b76, #00376e));
1745 1745 background-image : linear-gradient( top, #003b76, #00376e); filter :
1746 1746 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1747 1747 '#003b76', endColorstr = '#00376e', GradientType = 0);
1748 1748 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1749 1749 -webkit-border-radius: 4px 4px 4px 4px;
1750 1750 -khtml-border-radius: 4px 4px 4px 4px;
1751 1751 -moz-border-radius: 4px 4px 4px 4px;
1752 1752 border-radius: 4px 4px 4px 4px;
1753 1753 background-repeat: repeat-x;
1754 1754 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1755 1755 to(#eedc94) );
1756 1756 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1757 1757 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1758 1758 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1759 1759 color-stop(100%, #00376e) );
1760 1760 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1761 1761 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1762 1762 background-image: linear-gradient(top, #003b76, #00376e);
1763 1763 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1764 1764 endColorstr='#00376e', GradientType=0 );
1765 1765 }
1766 1766
1767 1767 #footer div#footer-inner p {
1768 1768 padding: 15px 25px 15px 0;
1769 1769 color: #FFF;
1770 1770 font-weight: 700;
1771 1771 }
1772 1772
1773 1773 #footer div#footer-inner .footer-link {
1774 1774 float: left;
1775 1775 padding-left: 10px;
1776 1776 }
1777 1777
1778 1778 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a
1779 1779 {
1780 1780 color: #FFF;
1781 1781 }
1782 1782
1783 1783 #login div.title {
1784 1784 width: 420px;
1785 1785 clear: both;
1786 1786 overflow: hidden;
1787 1787 position: relative;
1788 1788 background-color: #eedc94; background-repeat : repeat-x;
1789 1789 background-image : -khtml-gradient( linear, left top, left bottom,
1790 1790 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1791 1791 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1792 1792 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1793 1793 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1794 1794 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1795 1795 background-image : -o-linear-gradient( top, #003b76, #00376e));
1796 1796 background-image : linear-gradient( top, #003b76, #00376e); filter :
1797 1797 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1798 1798 '#003b76', endColorstr = '#00376e', GradientType = 0);
1799 1799 margin: 0 auto;
1800 1800 padding: 0;
1801 1801 background-repeat: repeat-x;
1802 1802 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1803 1803 to(#eedc94) );
1804 1804 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1805 1805 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1806 1806 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1807 1807 color-stop(100%, #00376e) );
1808 1808 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1809 1809 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1810 1810 background-image: linear-gradient(top, #003b76, #00376e);
1811 1811 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1812 1812 endColorstr='#00376e', GradientType=0 );
1813 1813 }
1814 1814
1815 1815 #login div.inner {
1816 1816 width: 380px;
1817 1817 background: #FFF url("../images/login.png") no-repeat top left;
1818 1818 border-top: none;
1819 1819 border-bottom: none;
1820 1820 margin: 0 auto;
1821 1821 padding: 20px;
1822 1822 }
1823 1823
1824 1824 #login div.form div.fields div.field div.label {
1825 1825 width: 173px;
1826 1826 float: left;
1827 1827 text-align: right;
1828 1828 margin: 2px 10px 0 0;
1829 1829 padding: 5px 0 0 5px;
1830 1830 }
1831 1831
1832 1832 #login div.form div.fields div.field div.input input {
1833 1833 width: 176px;
1834 1834 background: #FFF;
1835 1835 border-top: 1px solid #b3b3b3;
1836 1836 border-left: 1px solid #b3b3b3;
1837 1837 border-right: 1px solid #eaeaea;
1838 1838 border-bottom: 1px solid #eaeaea;
1839 1839 color: #000;
1840 1840 font-size: 11px;
1841 1841 margin: 0;
1842 1842 padding: 7px 7px 6px;
1843 1843 }
1844 1844
1845 1845 #login div.form div.fields div.buttons {
1846 1846 clear: both;
1847 1847 overflow: hidden;
1848 1848 border-top: 1px solid #DDD;
1849 1849 text-align: right;
1850 1850 margin: 0;
1851 1851 padding: 10px 0 0;
1852 1852 }
1853 1853
1854 1854 #login div.form div.links {
1855 1855 clear: both;
1856 1856 overflow: hidden;
1857 1857 margin: 10px 0 0;
1858 1858 padding: 0 0 2px;
1859 1859 }
1860 1860
1861 1861 #quick_login {
1862 1862 top: 31px;
1863 1863 background-color: rgb(0, 51, 103);
1864 1864 z-index: 999;
1865 1865 height: 150px;
1866 1866 position: absolute;
1867 1867 margin-left: -16px;
1868 1868 width: 281px;
1869 1869 -webkit-border-radius: 0px 0px 4px 4px;
1870 1870 -khtml-border-radius: 0px 0px 4px 4px;
1871 1871 -moz-border-radius: 0px 0px 4px 4px;
1872 1872 border-radius: 0px 0px 4px 4px;
1873 1873 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1874 1874 }
1875 1875
1876 1876 #quick_login .password_forgoten {
1877 1877 padding-right: 10px;
1878 1878 padding-top: 0px;
1879 1879 float: left;
1880 1880 }
1881 1881
1882 1882 #quick_login .password_forgoten a {
1883 1883 font-size: 10px
1884 1884 }
1885 1885
1886 1886 #quick_login .register {
1887 1887 padding-right: 10px;
1888 1888 padding-top: 5px;
1889 1889 float: left;
1890 1890 }
1891 1891
1892 1892 #quick_login .register a {
1893 1893 font-size: 10px
1894 1894 }
1895 1895
1896 1896 #quick_login div.form div.fields {
1897 1897 padding-top: 2px;
1898 1898 padding-left: 10px;
1899 1899 }
1900 1900
1901 1901 #quick_login div.form div.fields div.field {
1902 1902 padding: 5px;
1903 1903 }
1904 1904
1905 1905 #quick_login div.form div.fields div.field div.label label {
1906 1906 color: #fff;
1907 1907 padding-bottom: 3px;
1908 1908 }
1909 1909
1910 1910 #quick_login div.form div.fields div.field div.input input {
1911 1911 width: 236px;
1912 1912 background: #FFF;
1913 1913 border-top: 1px solid #b3b3b3;
1914 1914 border-left: 1px solid #b3b3b3;
1915 1915 border-right: 1px solid #eaeaea;
1916 1916 border-bottom: 1px solid #eaeaea;
1917 1917 color: #000;
1918 1918 font-size: 11px;
1919 1919 margin: 0;
1920 1920 padding: 5px 7px 4px;
1921 1921 }
1922 1922
1923 1923 #quick_login div.form div.fields div.buttons {
1924 1924 clear: both;
1925 1925 overflow: hidden;
1926 1926 text-align: right;
1927 1927 margin: 0;
1928 1928 padding: 10px 14px 0px 5px;
1929 1929 }
1930 1930
1931 1931 #quick_login div.form div.links {
1932 1932 clear: both;
1933 1933 overflow: hidden;
1934 1934 margin: 10px 0 0;
1935 1935 padding: 0 0 2px;
1936 1936 }
1937 1937
1938 1938 #register div.title {
1939 1939 clear: both;
1940 1940 overflow: hidden;
1941 1941 position: relative;
1942 1942 background-color: #eedc94;
1943 1943 background-repeat: repeat-x;
1944 1944 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1945 1945 to(#eedc94) );
1946 1946 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1947 1947 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1948 1948 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1949 1949 color-stop(100%, #00376e) );
1950 1950 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1951 1951 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1952 1952 background-image: linear-gradient(top, #003b76, #00376e);
1953 1953 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1954 1954 endColorstr='#00376e', GradientType=0 );
1955 1955 margin: 0 auto;
1956 1956 padding: 0;
1957 1957 }
1958 1958
1959 1959 #register div.inner {
1960 1960 background: #FFF;
1961 1961 border-top: none;
1962 1962 border-bottom: none;
1963 1963 margin: 0 auto;
1964 1964 padding: 20px;
1965 1965 }
1966 1966
1967 1967 #register div.form div.fields div.field div.label {
1968 1968 width: 135px;
1969 1969 float: left;
1970 1970 text-align: right;
1971 1971 margin: 2px 10px 0 0;
1972 1972 padding: 5px 0 0 5px;
1973 1973 }
1974 1974
1975 1975 #register div.form div.fields div.field div.input input {
1976 1976 width: 300px;
1977 1977 background: #FFF;
1978 1978 border-top: 1px solid #b3b3b3;
1979 1979 border-left: 1px solid #b3b3b3;
1980 1980 border-right: 1px solid #eaeaea;
1981 1981 border-bottom: 1px solid #eaeaea;
1982 1982 color: #000;
1983 1983 font-size: 11px;
1984 1984 margin: 0;
1985 1985 padding: 7px 7px 6px;
1986 1986 }
1987 1987
1988 1988 #register div.form div.fields div.buttons {
1989 1989 clear: both;
1990 1990 overflow: hidden;
1991 1991 border-top: 1px solid #DDD;
1992 1992 text-align: left;
1993 1993 margin: 0;
1994 1994 padding: 10px 0 0 150px;
1995 1995 }
1996 1996
1997 1997 #register div.form div.activation_msg {
1998 1998 padding-top: 4px;
1999 1999 padding-bottom: 4px;
2000 2000 }
2001 2001
2002 2002 #journal .journal_day {
2003 2003 font-size: 20px;
2004 2004 padding: 10px 0px;
2005 2005 border-bottom: 2px solid #DDD;
2006 2006 margin-left: 10px;
2007 2007 margin-right: 10px;
2008 2008 }
2009 2009
2010 2010 #journal .journal_container {
2011 2011 padding: 5px;
2012 2012 clear: both;
2013 2013 margin: 0px 5px 0px 10px;
2014 2014 }
2015 2015
2016 2016 #journal .journal_action_container {
2017 2017 padding-left: 38px;
2018 2018 }
2019 2019
2020 2020 #journal .journal_user {
2021 2021 color: #747474;
2022 2022 font-size: 14px;
2023 2023 font-weight: bold;
2024 2024 height: 30px;
2025 2025 }
2026 2026
2027 2027 #journal .journal_icon {
2028 2028 clear: both;
2029 2029 float: left;
2030 2030 padding-right: 4px;
2031 2031 padding-top: 3px;
2032 2032 }
2033 2033
2034 2034 #journal .journal_action {
2035 2035 padding-top: 4px;
2036 2036 min-height: 2px;
2037 2037 float: left
2038 2038 }
2039 2039
2040 2040 #journal .journal_action_params {
2041 2041 clear: left;
2042 2042 padding-left: 22px;
2043 2043 }
2044 2044
2045 2045 #journal .journal_repo {
2046 2046 float: left;
2047 2047 margin-left: 6px;
2048 2048 padding-top: 3px;
2049 2049 }
2050 2050
2051 2051 #journal .date {
2052 2052 clear: both;
2053 2053 color: #777777;
2054 2054 font-size: 11px;
2055 2055 padding-left: 22px;
2056 2056 }
2057 2057
2058 2058 #journal .journal_repo .journal_repo_name {
2059 2059 font-weight: bold;
2060 2060 font-size: 1.1em;
2061 2061 }
2062 2062
2063 2063 #journal .compare_view {
2064 2064 padding: 5px 0px 5px 0px;
2065 2065 width: 95px;
2066 2066 }
2067 2067
2068 2068 .journal_highlight {
2069 2069 font-weight: bold;
2070 2070 padding: 0 2px;
2071 2071 vertical-align: bottom;
2072 2072 }
2073 2073
2074 2074 .trending_language_tbl,.trending_language_tbl td {
2075 2075 border: 0 !important;
2076 2076 margin: 0 !important;
2077 2077 padding: 0 !important;
2078 2078 }
2079 2079
2080 2080 .trending_language_tbl,.trending_language_tbl tr {
2081 2081 border-spacing: 1px;
2082 2082 }
2083 2083
2084 2084 .trending_language {
2085 2085 background-color: #003367;
2086 2086 color: #FFF;
2087 2087 display: block;
2088 2088 min-width: 20px;
2089 2089 text-decoration: none;
2090 2090 height: 12px;
2091 2091 margin-bottom: 0px;
2092 2092 margin-left: 5px;
2093 2093 white-space: pre;
2094 2094 padding: 3px;
2095 2095 }
2096 2096
2097 2097 h3.files_location {
2098 2098 font-size: 1.8em;
2099 2099 font-weight: 700;
2100 2100 border-bottom: none !important;
2101 2101 margin: 10px 0 !important;
2102 2102 }
2103 2103
2104 2104 #files_data dl dt {
2105 2105 float: left;
2106 2106 width: 60px;
2107 2107 margin: 0 !important;
2108 2108 padding: 5px;
2109 2109 }
2110 2110
2111 2111 #files_data dl dd {
2112 2112 margin: 0 !important;
2113 2113 padding: 5px !important;
2114 2114 }
2115 2115
2116 2116 #changeset_content {
2117 2117 border: 1px solid #CCC;
2118 2118 padding: 5px;
2119 2119 }
2120 2120
2121 2121 #changeset_compare_view_content {
2122 2122 border: 1px solid #CCC;
2123 2123 padding: 5px;
2124 2124 }
2125 2125
2126 2126 #changeset_content .container {
2127 2127 min-height: 120px;
2128 2128 font-size: 1.2em;
2129 2129 overflow: hidden;
2130 2130 }
2131 2131
2132 2132 #changeset_compare_view_content .compare_view_commits {
2133 2133 width: auto !important;
2134 2134 }
2135 2135
2136 2136 #changeset_compare_view_content .compare_view_commits td {
2137 2137 padding: 0px 0px 0px 12px !important;
2138 2138 }
2139 2139
2140 2140 #changeset_content .container .right {
2141 2141 float: right;
2142 2142 width: 25%;
2143 2143 text-align: right;
2144 2144 }
2145 2145
2146 2146 #changeset_content .container .left .message {
2147 2147 font-style: italic;
2148 2148 color: #556CB5;
2149 2149 white-space: pre-wrap;
2150 2150 }
2151 2151 #changeset_content .container .left .message a:hover {
2152 2152 text-decoration: none;
2153 2153 }
2154 2154 .cs_files .cur_cs {
2155 2155 margin: 10px 2px;
2156 2156 font-weight: bold;
2157 2157 }
2158 2158
2159 2159 .cs_files .node {
2160 2160 float: left;
2161 2161 }
2162 2162
2163 2163 .cs_files .changes {
2164 2164 float: right;
2165 2165 color:#003367;
2166 2166
2167 2167 }
2168 2168
2169 2169 .cs_files .changes .added {
2170 2170 background-color: #BBFFBB;
2171 2171 float: left;
2172 2172 text-align: center;
2173 2173 font-size: 9px;
2174 2174 padding: 2px 0px 2px 0px;
2175 2175 }
2176 2176
2177 2177 .cs_files .changes .deleted {
2178 2178 background-color: #FF8888;
2179 2179 float: left;
2180 2180 text-align: center;
2181 2181 font-size: 9px;
2182 2182 padding: 2px 0px 2px 0px;
2183 2183 }
2184 2184
2185 2185 .cs_files .cs_added {
2186 2186 background: url("../images/icons/page_white_add.png") no-repeat scroll
2187 2187 3px;
2188 2188 height: 16px;
2189 2189 padding-left: 20px;
2190 2190 margin-top: 7px;
2191 2191 text-align: left;
2192 2192 }
2193 2193
2194 2194 .cs_files .cs_changed {
2195 2195 background: url("../images/icons/page_white_edit.png") no-repeat scroll
2196 2196 3px;
2197 2197 height: 16px;
2198 2198 padding-left: 20px;
2199 2199 margin-top: 7px;
2200 2200 text-align: left;
2201 2201 }
2202 2202
2203 2203 .cs_files .cs_removed {
2204 2204 background: url("../images/icons/page_white_delete.png") no-repeat
2205 2205 scroll 3px;
2206 2206 height: 16px;
2207 2207 padding-left: 20px;
2208 2208 margin-top: 7px;
2209 2209 text-align: left;
2210 2210 }
2211 2211
2212 2212 #graph {
2213 2213 overflow: hidden;
2214 2214 }
2215 2215
2216 2216 #graph_nodes {
2217 2217 float: left;
2218 2218 margin-right: -6px;
2219 2219 margin-top: 0px;
2220 2220 }
2221 2221
2222 2222 #graph_content {
2223 2223 width: 800px;
2224 2224 float: left;
2225 2225 }
2226 2226
2227 2227 #graph_content .container_header {
2228 2228 border: 1px solid #CCC;
2229 2229 padding: 10px;
2230 2230 height: 45px;
2231 2231 -webkit-border-radius: 6px 6px 0px 0px;
2232 2232 -moz-border-radius: 6px 6px 0px 0px;
2233 2233 border-radius: 6px 6px 0px 0px;
2234 2234 }
2235 2235
2236 2236 #graph_content #rev_range_container {
2237 2237 padding: 10px 0px;
2238 2238 clear: both;
2239 2239 }
2240 2240
2241 2241 #graph_content .container {
2242 2242 border-bottom: 1px solid #CCC;
2243 2243 border-left: 1px solid #CCC;
2244 2244 border-right: 1px solid #CCC;
2245 2245 min-height: 70px;
2246 2246 overflow: hidden;
2247 2247 font-size: 1.2em;
2248 2248 }
2249 2249
2250 2250 #graph_content .container .right {
2251 2251 float: right;
2252 2252 width: 28%;
2253 2253 text-align: right;
2254 2254 padding-bottom: 5px;
2255 2255 }
2256 2256
2257 2257 #graph_content .container .left .date {
2258 2258 font-weight: 700;
2259 2259 padding-bottom: 5px;
2260 2260 }
2261 2261
2262 2262 #graph_content .container .left .date span {
2263 2263 vertical-align: text-top;
2264 2264 }
2265 2265
2266 2266 #graph_content .container .left .author {
2267 2267 height: 22px;
2268 2268 }
2269 2269
2270 2270 #graph_content .container .left .author .user {
2271 2271 color: #444444;
2272 2272 float: left;
2273 2273 font-size: 12px;
2274 2274 margin-left: -4px;
2275 2275 margin-top: 4px;
2276 2276 }
2277 2277
2278 2278 #graph_content .container .left .message {
2279 2279 font-size: 100%;
2280 2280 padding-top: 3px;
2281 2281 white-space: pre-wrap;
2282 2282 }
2283 2283
2284 2284 #graph_content .container .left .message a:hover{
2285 2285 text-decoration: none;
2286 2286 }
2287 2287
2288 2288 .right div {
2289 2289 clear: both;
2290 2290 }
2291 2291
2292 2292 .right .changes .changed_total {
2293 2293 border: 0px solid #DDD;
2294 2294 display: block;
2295 2295 float: right;
2296 2296 text-align: center;
2297 2297 min-width: 45px;
2298 2298 cursor: pointer;
2299 2299 background: #FD8;
2300 2300 font-weight: bold;
2301 2301 -webkit-border-radius: 0px 0px 0px 6px;
2302 2302 -moz-border-radius: 0px 0px 0px 6px;
2303 2303 border-radius: 0px 0px 0px 6px;
2304 2304 padding: 2px;
2305 2305 }
2306 2306
2307 2307 .right .changes .added,.changed,.removed {
2308 2308 border: 1px solid #DDD;
2309 2309 display: block;
2310 2310 float: right;
2311 2311 text-align: center;
2312 2312 min-width: 15px;
2313 2313 cursor: help;
2314 2314 }
2315 2315
2316 2316 .right .changes .large {
2317 2317 border: 1px solid #DDD;
2318 2318 display: block;
2319 2319 float: right;
2320 2320 text-align: center;
2321 2321 min-width: 45px;
2322 2322 cursor: help;
2323 2323 background: #54A9F7;
2324 2324 }
2325 2325
2326 2326 .right .changes .added {
2327 2327 background: #BFB;
2328 2328 }
2329 2329
2330 2330 .right .changes .changed {
2331 2331 background: #FD8;
2332 2332 }
2333 2333
2334 2334 .right .changes .removed {
2335 2335 background: #F88;
2336 2336 }
2337 2337
2338 2338 .right .merge {
2339 2339 vertical-align: top;
2340 2340 font-size: 0.75em;
2341 2341 font-weight: 700;
2342 2342 }
2343 2343
2344 2344 .right .parent {
2345 2345 font-size: 90%;
2346 2346 font-family: monospace;
2347 2347 padding: 2px 2px 2px 2px;
2348 2348 }
2349 2349 .right .logtags{
2350 2350 padding: 2px 2px 2px 2px;
2351 2351 }
2352 2352 .right .logtags .branchtag,.logtags .branchtag {
2353 2353 padding: 1px 3px 2px;
2354 2354 background-color: #bfbfbf;
2355 2355 font-size: 9.75px;
2356 2356 font-weight: bold;
2357 2357 color: #ffffff;
2358 2358 text-transform: uppercase;
2359 2359 white-space: nowrap;
2360 2360 -webkit-border-radius: 3px;
2361 2361 -moz-border-radius: 3px;
2362 2362 border-radius: 3px;
2363 2363 padding-left:4px;
2364 2364 }
2365 2365 .right .logtags .branchtag a:hover,.logtags .branchtag a{
2366 2366 color: #ffffff;
2367 2367 }
2368 2368 .right .logtags .branchtag a:hover,.logtags .branchtag a:hover{
2369 2369 text-decoration: none;
2370 2370 color: #ffffff;
2371 2371 }
2372 2372 .right .logtags .tagtag,.logtags .tagtag {
2373 2373 padding: 1px 3px 2px;
2374 2374 background-color: #62cffc;
2375 2375 font-size: 9.75px;
2376 2376 font-weight: bold;
2377 2377 color: #ffffff;
2378 2378 text-transform: uppercase;
2379 2379 white-space: nowrap;
2380 2380 -webkit-border-radius: 3px;
2381 2381 -moz-border-radius: 3px;
2382 2382 border-radius: 3px;
2383 2383 }
2384 2384 .right .logtags .tagtag a:hover,.logtags .tagtag a{
2385 2385 color: #ffffff;
2386 2386 }
2387 2387 .right .logtags .tagtag a:hover,.logtags .tagtag a:hover{
2388 2388 text-decoration: none;
2389 2389 color: #ffffff;
2390 2390 }
2391 2391 .right .logbooks .bookbook,.logbooks .bookbook {
2392 2392 padding: 1px 3px 2px;
2393 2393 background-color: #46A546;
2394 2394 font-size: 9.75px;
2395 2395 font-weight: bold;
2396 2396 color: #ffffff;
2397 2397 text-transform: uppercase;
2398 2398 white-space: nowrap;
2399 2399 -webkit-border-radius: 3px;
2400 2400 -moz-border-radius: 3px;
2401 2401 border-radius: 3px;
2402 2402 }
2403 2403 .right .logbooks .bookbook,.logbooks .bookbook a{
2404 2404 color: #ffffff;
2405 2405 }
2406 2406 .right .logbooks .bookbook,.logbooks .bookbook a:hover{
2407 2407 text-decoration: none;
2408 2408 color: #ffffff;
2409 2409 }
2410 2410 div.browserblock {
2411 2411 overflow: hidden;
2412 2412 border: 1px solid #ccc;
2413 2413 background: #f8f8f8;
2414 2414 font-size: 100%;
2415 2415 line-height: 125%;
2416 2416 padding: 0;
2417 2417 -webkit-border-radius: 6px 6px 0px 0px;
2418 2418 -moz-border-radius: 6px 6px 0px 0px;
2419 2419 border-radius: 6px 6px 0px 0px;
2420 2420 }
2421 2421
2422 2422 div.browserblock .browser-header {
2423 2423 background: #FFF;
2424 2424 padding: 10px 0px 15px 0px;
2425 2425 width: 100%;
2426 2426 }
2427 2427
2428 2428 div.browserblock .browser-nav {
2429 2429 float: left
2430 2430 }
2431 2431
2432 2432 div.browserblock .browser-branch {
2433 2433 float: left;
2434 2434 }
2435 2435
2436 2436 div.browserblock .browser-branch label {
2437 2437 color: #4A4A4A;
2438 2438 vertical-align: text-top;
2439 2439 }
2440 2440
2441 2441 div.browserblock .browser-header span {
2442 2442 margin-left: 5px;
2443 2443 font-weight: 700;
2444 2444 }
2445 2445
2446 2446 div.browserblock .browser-search {
2447 2447 clear: both;
2448 2448 padding: 8px 8px 0px 5px;
2449 2449 height: 20px;
2450 2450 }
2451 2451
2452 2452 div.browserblock #node_filter_box {
2453 2453
2454 2454 }
2455 2455
2456 2456 div.browserblock .search_activate {
2457 2457 float: left
2458 2458 }
2459 2459
2460 2460 div.browserblock .add_node {
2461 2461 float: left;
2462 2462 padding-left: 5px;
2463 2463 }
2464 2464
2465 2465 div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover
2466 2466 {
2467 2467 text-decoration: none !important;
2468 2468 }
2469 2469
2470 2470 div.browserblock .browser-body {
2471 2471 background: #EEE;
2472 2472 border-top: 1px solid #CCC;
2473 2473 }
2474 2474
2475 2475 table.code-browser {
2476 2476 border-collapse: collapse;
2477 2477 width: 100%;
2478 2478 }
2479 2479
2480 2480 table.code-browser tr {
2481 2481 margin: 3px;
2482 2482 }
2483 2483
2484 2484 table.code-browser thead th {
2485 2485 background-color: #EEE;
2486 2486 height: 20px;
2487 2487 font-size: 1.1em;
2488 2488 font-weight: 700;
2489 2489 text-align: left;
2490 2490 padding-left: 10px;
2491 2491 }
2492 2492
2493 2493 table.code-browser tbody td {
2494 2494 padding-left: 10px;
2495 2495 height: 20px;
2496 2496 }
2497 2497
2498 2498 table.code-browser .browser-file {
2499 2499 background: url("../images/icons/document_16.png") no-repeat scroll 3px;
2500 2500 height: 16px;
2501 2501 padding-left: 20px;
2502 2502 text-align: left;
2503 2503 }
2504 2504 .diffblock .changeset_header {
2505 2505 height: 16px;
2506 2506 }
2507 2507 .diffblock .changeset_file {
2508 2508 background: url("../images/icons/file.png") no-repeat scroll 3px;
2509 2509 text-align: left;
2510 2510 float: left;
2511 2511 padding: 2px 0px 2px 22px;
2512 2512 }
2513 2513 .diffblock .diff-menu-wrapper{
2514 2514 float: left;
2515 2515 }
2516 2516
2517 2517 .diffblock .diff-menu{
2518 2518 position: absolute;
2519 2519 background: none repeat scroll 0 0 #FFFFFF;
2520 2520 border-color: #003367 #666666 #666666;
2521 2521 border-right: 1px solid #666666;
2522 2522 border-style: solid solid solid;
2523 2523 border-width: 1px;
2524 2524 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
2525 2525 margin-top:5px;
2526 2526 margin-left:1px;
2527 2527
2528 2528 }
2529 2529
2530 2530 .diffblock .diff-menu ul li {
2531 2531 padding: 0px 0px 0px 0px !important;
2532 2532 }
2533 2533 .diffblock .diff-menu ul li a{
2534 2534 display: block;
2535 2535 padding: 3px 8px 3px 8px !important;
2536 2536 }
2537 2537 .diffblock .diff-menu ul li a:hover{
2538 2538 text-decoration: none;
2539 2539 background-color: #EEEEEE;
2540 2540 }
2541 2541 table.code-browser .browser-dir {
2542 2542 background: url("../images/icons/folder_16.png") no-repeat scroll 3px;
2543 2543 height: 16px;
2544 2544 padding-left: 20px;
2545 2545 text-align: left;
2546 2546 }
2547 2547
2548 2548 .box .search {
2549 2549 clear: both;
2550 2550 overflow: hidden;
2551 2551 margin: 0;
2552 2552 padding: 0 20px 10px;
2553 2553 }
2554 2554
2555 2555 .box .search div.search_path {
2556 2556 background: none repeat scroll 0 0 #EEE;
2557 2557 border: 1px solid #CCC;
2558 2558 color: blue;
2559 2559 margin-bottom: 10px;
2560 2560 padding: 10px 0;
2561 2561 }
2562 2562
2563 2563 .box .search div.search_path div.link {
2564 2564 font-weight: 700;
2565 2565 margin-left: 25px;
2566 2566 }
2567 2567
2568 2568 .box .search div.search_path div.link a {
2569 2569 color: #003367;
2570 2570 cursor: pointer;
2571 2571 text-decoration: none;
2572 2572 }
2573 2573
2574 2574 #path_unlock {
2575 2575 color: red;
2576 2576 font-size: 1.2em;
2577 2577 padding-left: 4px;
2578 2578 }
2579 2579
2580 2580 .info_box span {
2581 2581 margin-left: 3px;
2582 2582 margin-right: 3px;
2583 2583 }
2584 2584
2585 2585 .info_box .rev {
2586 2586 color: #003367;
2587 2587 font-size: 1.6em;
2588 2588 font-weight: bold;
2589 2589 vertical-align: sub;
2590 2590 }
2591 2591
2592 2592 .info_box input#at_rev,.info_box input#size {
2593 2593 background: #FFF;
2594 2594 border-top: 1px solid #b3b3b3;
2595 2595 border-left: 1px solid #b3b3b3;
2596 2596 border-right: 1px solid #eaeaea;
2597 2597 border-bottom: 1px solid #eaeaea;
2598 2598 color: #000;
2599 2599 font-size: 12px;
2600 2600 margin: 0;
2601 2601 padding: 1px 5px 1px;
2602 2602 }
2603 2603
2604 2604 .info_box input#view {
2605 2605 text-align: center;
2606 2606 padding: 4px 3px 2px 2px;
2607 2607 }
2608 2608
2609 2609 .yui-overlay,.yui-panel-container {
2610 2610 visibility: hidden;
2611 2611 position: absolute;
2612 2612 z-index: 2;
2613 2613 }
2614 2614
2615 2615 .yui-tt {
2616 2616 visibility: hidden;
2617 2617 position: absolute;
2618 2618 color: #666;
2619 2619 background-color: #FFF;
2620 2620 border: 2px solid #003367;
2621 2621 font: 100% sans-serif;
2622 2622 width: auto;
2623 2623 opacity: 1px;
2624 2624 padding: 8px;
2625 2625 white-space: pre-wrap;
2626 2626 -webkit-border-radius: 8px 8px 8px 8px;
2627 2627 -khtml-border-radius: 8px 8px 8px 8px;
2628 2628 -moz-border-radius: 8px 8px 8px 8px;
2629 2629 border-radius: 8px 8px 8px 8px;
2630 2630 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
2631 2631 }
2632 2632
2633 2633 .ac {
2634 2634 vertical-align: top;
2635 2635 }
2636 2636
2637 2637 .ac .yui-ac {
2638 2638 position: relative;
2639 2639 font-size: 100%;
2640 2640 }
2641 2641
2642 2642 .ac .perm_ac {
2643 2643 width: 15em;
2644 2644 }
2645 2645
2646 2646 .ac .yui-ac-input {
2647 2647 width: 100%;
2648 2648 }
2649 2649
2650 2650 .ac .yui-ac-container {
2651 2651 position: absolute;
2652 2652 top: 1.6em;
2653 2653 width: 100%;
2654 2654 }
2655 2655
2656 2656 .ac .yui-ac-content {
2657 2657 position: absolute;
2658 2658 width: 100%;
2659 2659 border: 1px solid gray;
2660 2660 background: #fff;
2661 2661 overflow: hidden;
2662 2662 z-index: 9050;
2663 2663 }
2664 2664
2665 2665 .ac .yui-ac-shadow {
2666 2666 position: absolute;
2667 2667 width: 100%;
2668 2668 background: #000;
2669 2669 -moz-opacity: 0.1px;
2670 2670 opacity: .10;
2671 2671 filter: alpha(opacity = 10);
2672 2672 z-index: 9049;
2673 2673 margin: .3em;
2674 2674 }
2675 2675
2676 2676 .ac .yui-ac-content ul {
2677 2677 width: 100%;
2678 2678 margin: 0;
2679 2679 padding: 0;
2680 2680 }
2681 2681
2682 2682 .ac .yui-ac-content li {
2683 2683 cursor: default;
2684 2684 white-space: nowrap;
2685 2685 margin: 0;
2686 2686 padding: 2px 5px;
2687 2687 }
2688 2688
2689 2689 .ac .yui-ac-content li.yui-ac-prehighlight {
2690 2690 background: #B3D4FF;
2691 2691 }
2692 2692
2693 2693 .ac .yui-ac-content li.yui-ac-highlight {
2694 2694 background: #556CB5;
2695 2695 color: #FFF;
2696 2696 }
2697 2697
2698 2698 .follow {
2699 2699 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2700 2700 height: 16px;
2701 2701 width: 20px;
2702 2702 cursor: pointer;
2703 2703 display: block;
2704 2704 float: right;
2705 2705 margin-top: 2px;
2706 2706 }
2707 2707
2708 2708 .following {
2709 2709 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2710 2710 height: 16px;
2711 2711 width: 20px;
2712 2712 cursor: pointer;
2713 2713 display: block;
2714 2714 float: right;
2715 2715 margin-top: 2px;
2716 2716 }
2717 2717
2718 2718 .currently_following {
2719 2719 padding-left: 10px;
2720 2720 padding-bottom: 5px;
2721 2721 }
2722 2722
2723 2723 .add_icon {
2724 2724 background: url("../images/icons/add.png") no-repeat scroll 3px;
2725 2725 padding-left: 20px;
2726 2726 padding-top: 0px;
2727 2727 text-align: left;
2728 2728 }
2729 2729
2730 2730 .edit_icon {
2731 2731 background: url("../images/icons/folder_edit.png") no-repeat scroll 3px;
2732 2732 padding-left: 20px;
2733 2733 padding-top: 0px;
2734 2734 text-align: left;
2735 2735 }
2736 2736
2737 2737 .delete_icon {
2738 2738 background: url("../images/icons/delete.png") no-repeat scroll 3px;
2739 2739 padding-left: 20px;
2740 2740 padding-top: 0px;
2741 2741 text-align: left;
2742 2742 }
2743 2743
2744 2744 .refresh_icon {
2745 2745 background: url("../images/icons/arrow_refresh.png") no-repeat scroll
2746 2746 3px;
2747 2747 padding-left: 20px;
2748 2748 padding-top: 0px;
2749 2749 text-align: left;
2750 2750 }
2751 2751
2752 2752 .pull_icon {
2753 2753 background: url("../images/icons/connect.png") no-repeat scroll 3px;
2754 2754 padding-left: 20px;
2755 2755 padding-top: 0px;
2756 2756 text-align: left;
2757 2757 }
2758 2758
2759 2759 .rss_icon {
2760 2760 background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
2761 2761 padding-left: 20px;
2762 2762 padding-top: 4px;
2763 2763 text-align: left;
2764 2764 font-size: 8px
2765 2765 }
2766 2766
2767 2767 .atom_icon {
2768 2768 background: url("../images/icons/atom.png") no-repeat scroll 3px;
2769 2769 padding-left: 20px;
2770 2770 padding-top: 4px;
2771 2771 text-align: left;
2772 2772 font-size: 8px
2773 2773 }
2774 2774
2775 2775 .archive_icon {
2776 2776 background: url("../images/icons/compress.png") no-repeat scroll 3px;
2777 2777 padding-left: 20px;
2778 2778 text-align: left;
2779 2779 padding-top: 1px;
2780 2780 }
2781 2781
2782 2782 .start_following_icon {
2783 2783 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2784 2784 padding-left: 20px;
2785 2785 text-align: left;
2786 2786 padding-top: 0px;
2787 2787 }
2788 2788
2789 2789 .stop_following_icon {
2790 2790 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2791 2791 padding-left: 20px;
2792 2792 text-align: left;
2793 2793 padding-top: 0px;
2794 2794 }
2795 2795
2796 2796 .action_button {
2797 2797 border: 0;
2798 2798 display: inline;
2799 2799 }
2800 2800
2801 2801 .action_button:hover {
2802 2802 border: 0;
2803 2803 text-decoration: underline;
2804 2804 cursor: pointer;
2805 2805 }
2806 2806
2807 2807 #switch_repos {
2808 2808 position: absolute;
2809 2809 height: 25px;
2810 2810 z-index: 1;
2811 2811 }
2812 2812
2813 2813 #switch_repos select {
2814 2814 min-width: 150px;
2815 2815 max-height: 250px;
2816 2816 z-index: 1;
2817 2817 }
2818 2818
2819 2819 .breadcrumbs {
2820 2820 border: medium none;
2821 2821 color: #FFF;
2822 2822 float: left;
2823 2823 text-transform: uppercase;
2824 2824 font-weight: 700;
2825 2825 font-size: 14px;
2826 2826 margin: 0;
2827 2827 padding: 11px 0 11px 10px;
2828 2828 }
2829 2829
2830 2830 .breadcrumbs a {
2831 2831 color: #FFF;
2832 2832 }
2833 2833
2834 2834 .flash_msg {
2835 2835
2836 2836 }
2837 2837
2838 2838 .flash_msg ul {
2839 2839
2840 2840 }
2841 2841
2842 2842 .error_msg {
2843 2843 background-color: #c43c35;
2844 2844 background-repeat: repeat-x;
2845 2845 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b),
2846 2846 to(#c43c35) );
2847 2847 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
2848 2848 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
2849 2849 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b),
2850 2850 color-stop(100%, #c43c35) );
2851 2851 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
2852 2852 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
2853 2853 background-image: linear-gradient(top, #ee5f5b, #c43c35);
2854 2854 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',
2855 2855 endColorstr='#c43c35', GradientType=0 );
2856 2856 border-color: #c43c35 #c43c35 #882a25;
2857 2857 }
2858 2858
2859 2859 .warning_msg {
2860 2860 color: #404040 !important;
2861 2861 background-color: #eedc94;
2862 2862 background-repeat: repeat-x;
2863 2863 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
2864 2864 to(#eedc94) );
2865 2865 background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
2866 2866 background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
2867 2867 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1),
2868 2868 color-stop(100%, #eedc94) );
2869 2869 background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
2870 2870 background-image: -o-linear-gradient(top, #fceec1, #eedc94);
2871 2871 background-image: linear-gradient(top, #fceec1, #eedc94);
2872 2872 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1',
2873 2873 endColorstr='#eedc94', GradientType=0 );
2874 2874 border-color: #eedc94 #eedc94 #e4c652;
2875 2875 }
2876 2876
2877 2877 .success_msg {
2878 2878 background-color: #57a957;
2879 2879 background-repeat: repeat-x !important;
2880 2880 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462),
2881 2881 to(#57a957) );
2882 2882 background-image: -moz-linear-gradient(top, #62c462, #57a957);
2883 2883 background-image: -ms-linear-gradient(top, #62c462, #57a957);
2884 2884 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462),
2885 2885 color-stop(100%, #57a957) );
2886 2886 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
2887 2887 background-image: -o-linear-gradient(top, #62c462, #57a957);
2888 2888 background-image: linear-gradient(top, #62c462, #57a957);
2889 2889 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462',
2890 2890 endColorstr='#57a957', GradientType=0 );
2891 2891 border-color: #57a957 #57a957 #3d773d;
2892 2892 }
2893 2893
2894 2894 .notice_msg {
2895 2895 background-color: #339bb9;
2896 2896 background-repeat: repeat-x;
2897 2897 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de),
2898 2898 to(#339bb9) );
2899 2899 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
2900 2900 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
2901 2901 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de),
2902 2902 color-stop(100%, #339bb9) );
2903 2903 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
2904 2904 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
2905 2905 background-image: linear-gradient(top, #5bc0de, #339bb9);
2906 2906 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de',
2907 2907 endColorstr='#339bb9', GradientType=0 );
2908 2908 border-color: #339bb9 #339bb9 #22697d;
2909 2909 }
2910 2910
2911 2911 .success_msg,.error_msg,.notice_msg,.warning_msg {
2912 2912 font-size: 12px;
2913 2913 font-weight: 700;
2914 2914 min-height: 14px;
2915 2915 line-height: 14px;
2916 2916 margin-bottom: 10px;
2917 2917 margin-top: 0;
2918 2918 display: block;
2919 2919 overflow: auto;
2920 2920 padding: 6px 10px 6px 10px;
2921 2921 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2922 2922 position: relative;
2923 2923 color: #FFF;
2924 2924 border-width: 1px;
2925 2925 border-style: solid;
2926 2926 -webkit-border-radius: 4px;
2927 2927 -moz-border-radius: 4px;
2928 2928 border-radius: 4px;
2929 2929 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2930 2930 -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2931 2931 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2932 2932 }
2933 2933
2934 2934 #msg_close {
2935 2935 background: transparent url("../icons/cross_grey_small.png") no-repeat
2936 2936 scroll 0 0;
2937 2937 cursor: pointer;
2938 2938 height: 16px;
2939 2939 position: absolute;
2940 2940 right: 5px;
2941 2941 top: 5px;
2942 2942 width: 16px;
2943 2943 }
2944 2944
2945 2945 div#legend_container table,div#legend_choices table {
2946 2946 width: auto !important;
2947 2947 }
2948 2948
2949 2949 table#permissions_manage {
2950 2950 width: 0 !important;
2951 2951 }
2952 2952
2953 2953 table#permissions_manage span.private_repo_msg {
2954 2954 font-size: 0.8em;
2955 2955 opacity: 0.6px;
2956 2956 }
2957 2957
2958 2958 table#permissions_manage td.private_repo_msg {
2959 2959 font-size: 0.8em;
2960 2960 }
2961 2961
2962 2962 table#permissions_manage tr#add_perm_input td {
2963 2963 vertical-align: middle;
2964 2964 }
2965 2965
2966 2966 div.gravatar {
2967 2967 background-color: #FFF;
2968 2968 border: 0px solid #D0D0D0;
2969 2969 float: left;
2970 2970 margin-right: 0.7em;
2971 2971 padding: 2px 2px 2px 2px;
2972 2972 line-height:0;
2973 2973 -webkit-border-radius: 6px;
2974 2974 -khtml-border-radius: 6px;
2975 2975 -moz-border-radius: 6px;
2976 2976 border-radius: 6px;
2977 2977 }
2978 2978
2979 2979 div.gravatar img {
2980 2980 -webkit-border-radius: 4px;
2981 2981 -khtml-border-radius: 4px;
2982 2982 -moz-border-radius: 4px;
2983 2983 border-radius: 4px;
2984 2984 }
2985 2985
2986 2986 #header,#content,#footer {
2987 2987 min-width: 978px;
2988 2988 }
2989 2989
2990 2990 #content {
2991 2991 clear: both;
2992 2992 overflow: hidden;
2993 2993 padding: 14px 10px;
2994 2994 }
2995 2995
2996 2996 #content div.box div.title div.search {
2997 2997
2998 2998 border-left: 1px solid #316293;
2999 2999 }
3000 3000
3001 3001 #content div.box div.title div.search div.input input {
3002 3002 border: 1px solid #316293;
3003 3003 }
3004 3004
3005 3005 .ui-btn{
3006 3006 color: #515151;
3007 3007 background-color: #DADADA;
3008 3008 background-repeat: repeat-x;
3009 3009 background-image: -khtml-gradient(linear, left top, left bottom, from(#F4F4F4),to(#DADADA) );
3010 3010 background-image: -moz-linear-gradient(top, #F4F4F4, #DADADA);
3011 3011 background-image: -ms-linear-gradient(top, #F4F4F4, #DADADA);
3012 3012 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F4F4F4),color-stop(100%, #DADADA) );
3013 3013 background-image: -webkit-linear-gradient(top, #F4F4F4, #DADADA) );
3014 3014 background-image: -o-linear-gradient(top, #F4F4F4, #DADADA) );
3015 3015 background-image: linear-gradient(top, #F4F4F4, #DADADA);
3016 3016 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F4F4F4', endColorstr='#DADADA', GradientType=0);
3017 3017
3018 3018 border-top: 1px solid #DDD;
3019 3019 border-left: 1px solid #c6c6c6;
3020 3020 border-right: 1px solid #DDD;
3021 3021 border-bottom: 1px solid #c6c6c6;
3022 3022 color: #515151;
3023 3023 outline: none;
3024 3024 margin: 0px 3px 3px 0px;
3025 3025 -webkit-border-radius: 4px 4px 4px 4px !important;
3026 3026 -khtml-border-radius: 4px 4px 4px 4px !important;
3027 3027 -moz-border-radius: 4px 4px 4px 4px !important;
3028 3028 border-radius: 4px 4px 4px 4px !important;
3029 3029 cursor: pointer !important;
3030 3030 padding: 3px 3px 3px 3px;
3031 3031 background-position: 0 -15px;
3032 3032
3033 3033 }
3034 3034 .ui-btn.xsmall{
3035 3035 padding: 1px 2px 1px 1px;
3036 3036 }
3037 3037
3038 3038 .ui-btn:focus {
3039 3039 outline: none;
3040 3040 }
3041 3041 .ui-btn:hover{
3042 3042 background-position: 0 0px;
3043 3043 text-decoration: none;
3044 3044 color: #515151;
3045 3045 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 3px #FFFFFF !important;
3046 3046 }
3047 3047
3048 3048 .ui-btn.red{
3049 3049 color:#fff;
3050 3050 background-color: #c43c35;
3051 3051 background-repeat: repeat-x;
3052 3052 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
3053 3053 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
3054 3054 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
3055 3055 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
3056 3056 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
3057 3057 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
3058 3058 background-image: linear-gradient(top, #ee5f5b, #c43c35);
3059 3059 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
3060 3060 border-color: #c43c35 #c43c35 #882a25;
3061 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 3065 .ui-btn.blue{
3066 3066 background-color: #339bb9;
3067 3067 background-repeat: repeat-x;
3068 3068 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));
3069 3069 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
3070 3070 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
3071 3071 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));
3072 3072 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
3073 3073 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
3074 3074 background-image: linear-gradient(top, #5bc0de, #339bb9);
3075 3075 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
3076 3076 border-color: #339bb9 #339bb9 #22697d;
3077 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 3080 .ui-btn.green{
3081 3081 background-color: #57a957;
3082 3082 background-repeat: repeat-x;
3083 3083 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));
3084 3084 background-image: -moz-linear-gradient(top, #62c462, #57a957);
3085 3085 background-image: -ms-linear-gradient(top, #62c462, #57a957);
3086 3086 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));
3087 3087 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
3088 3088 background-image: -o-linear-gradient(top, #62c462, #57a957);
3089 3089 background-image: linear-gradient(top, #62c462, #57a957);
3090 3090 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
3091 3091 border-color: #57a957 #57a957 #3d773d;
3092 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 3095 ins,div.options a:hover {
3096 3096 text-decoration: none;
3097 3097 }
3098 3098
3099 3099 img,
3100 3100 #header #header-inner #quick li a:hover span.normal,
3101 3101 #header #header-inner #quick li ul li.last,
3102 3102 #content div.box div.form div.fields div.field div.textarea table td table td a,
3103 3103 #clone_url
3104 3104 {
3105 3105 border: none;
3106 3106 }
3107 3107
3108 3108 img.icon,.right .merge img {
3109 3109 vertical-align: bottom;
3110 3110 }
3111 3111
3112 3112 #header ul#logged-user,#content div.box div.title ul.links,
3113 3113 #content div.box div.message div.dismiss,
3114 3114 #content div.box div.traffic div.legend ul
3115 3115 {
3116 3116 float: right;
3117 3117 margin: 0;
3118 3118 padding: 0;
3119 3119 }
3120 3120
3121 3121 #header #header-inner #home,#header #header-inner #logo,
3122 3122 #content div.box ul.left,#content div.box ol.left,
3123 3123 #content div.box div.pagination-left,div#commit_history,
3124 3124 div#legend_data,div#legend_container,div#legend_choices
3125 3125 {
3126 3126 float: left;
3127 3127 }
3128 3128
3129 3129 #header #header-inner #quick li:hover ul ul,
3130 3130 #header #header-inner #quick li:hover ul ul ul,
3131 3131 #header #header-inner #quick li:hover ul ul ul ul,
3132 3132 #content #left #menu ul.closed,#content #left #menu li ul.collapsed,.yui-tt-shadow
3133 3133 {
3134 3134 display: none;
3135 3135 }
3136 3136
3137 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 3139 display: block;
3140 3140 }
3141 3141
3142 3142 #content div.graph {
3143 3143 padding: 0 10px 10px;
3144 3144 }
3145 3145
3146 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 3148 color: #bfe3ff;
3149 3149 }
3150 3150
3151 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 3153 margin: 10px 24px 10px 44px;
3154 3154 }
3155 3155
3156 3156 #content div.box div.form,#content div.box div.table,#content div.box div.traffic
3157 3157 {
3158 3158 clear: both;
3159 3159 overflow: hidden;
3160 3160 margin: 0;
3161 3161 padding: 0 20px 10px;
3162 3162 }
3163 3163
3164 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 3166 clear: both;
3167 3167 overflow: hidden;
3168 3168 margin: 0;
3169 3169 padding: 0;
3170 3170 }
3171 3171
3172 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 3174 height: 1%;
3175 3175 display: block;
3176 3176 color: #363636;
3177 3177 margin: 0;
3178 3178 padding: 2px 0 0;
3179 3179 }
3180 3180
3181 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 3183 background: #FBE3E4;
3184 3184 border-top: 1px solid #e1b2b3;
3185 3185 border-left: 1px solid #e1b2b3;
3186 3186 border-right: 1px solid #FBC2C4;
3187 3187 border-bottom: 1px solid #FBC2C4;
3188 3188 }
3189 3189
3190 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 3192 background: #E6EFC2;
3193 3193 border-top: 1px solid #cebb98;
3194 3194 border-left: 1px solid #cebb98;
3195 3195 border-right: 1px solid #c6d880;
3196 3196 border-bottom: 1px solid #c6d880;
3197 3197 }
3198 3198
3199 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 3201 margin: 0;
3202 3202 }
3203 3203
3204 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 3206 margin: 0 0 0 0px !important;
3207 3207 padding: 0;
3208 3208 }
3209 3209
3210 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 3212 margin: 0 0 0 200px;
3213 3213 padding: 0;
3214 3214 }
3215 3215
3216 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 3218 color: #000;
3219 3219 text-decoration: none;
3220 3220 }
3221 3221
3222 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 3224 border: 1px solid #666;
3225 3225 }
3226 3226
3227 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 3229 clear: both;
3230 3230 overflow: hidden;
3231 3231 margin: 0;
3232 3232 padding: 8px 0 2px;
3233 3233 }
3234 3234
3235 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 3237 float: left;
3238 3238 margin: 0;
3239 3239 }
3240 3240
3241 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 3243 height: 1%;
3244 3244 display: block;
3245 3245 float: left;
3246 3246 margin: 2px 0 0 4px;
3247 3247 }
3248 3248
3249 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 3251 color: #000;
3252 3252 font-size: 11px;
3253 3253 font-weight: 700;
3254 3254 margin: 0;
3255 3255 }
3256 3256
3257 3257 input.ui-button {
3258 3258 background: #e5e3e3 url("../images/button.png") repeat-x;
3259 3259 border-top: 1px solid #DDD;
3260 3260 border-left: 1px solid #c6c6c6;
3261 3261 border-right: 1px solid #DDD;
3262 3262 border-bottom: 1px solid #c6c6c6;
3263 3263 color: #515151 !important;
3264 3264 outline: none;
3265 3265 margin: 0;
3266 3266 padding: 6px 12px;
3267 3267 -webkit-border-radius: 4px 4px 4px 4px;
3268 3268 -khtml-border-radius: 4px 4px 4px 4px;
3269 3269 -moz-border-radius: 4px 4px 4px 4px;
3270 3270 border-radius: 4px 4px 4px 4px;
3271 3271 box-shadow: 0 1px 0 #ececec;
3272 3272 cursor: pointer;
3273 3273 }
3274 3274
3275 3275 input.ui-button:hover {
3276 3276 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
3277 3277 border-top: 1px solid #ccc;
3278 3278 border-left: 1px solid #bebebe;
3279 3279 border-right: 1px solid #b1b1b1;
3280 3280 border-bottom: 1px solid #afafaf;
3281 3281 }
3282 3282
3283 3283 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight
3284 3284 {
3285 3285 display: inline;
3286 3286 }
3287 3287
3288 3288 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons
3289 3289 {
3290 3290 margin: 10px 0 0 200px;
3291 3291 padding: 0;
3292 3292 }
3293 3293
3294 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 3296 margin: 10px 0 0;
3297 3297 }
3298 3298
3299 3299 #content div.box table td.user,#content div.box table td.address {
3300 3300 width: 10%;
3301 3301 text-align: center;
3302 3302 }
3303 3303
3304 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 3306 text-align: right;
3307 3307 margin: 6px 0 0;
3308 3308 padding: 0;
3309 3309 }
3310 3310
3311 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 3313 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
3314 3314 border-top: 1px solid #ccc;
3315 3315 border-left: 1px solid #bebebe;
3316 3316 border-right: 1px solid #b1b1b1;
3317 3317 border-bottom: 1px solid #afafaf;
3318 3318 color: #515151;
3319 3319 margin: 0;
3320 3320 padding: 6px 12px;
3321 3321 }
3322 3322
3323 3323 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results
3324 3324 {
3325 3325 text-align: left;
3326 3326 float: left;
3327 3327 margin: 0;
3328 3328 padding: 0;
3329 3329 }
3330 3330
3331 3331 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span
3332 3332 {
3333 3333 height: 1%;
3334 3334 display: block;
3335 3335 float: left;
3336 3336 background: #ebebeb url("../images/pager.png") repeat-x;
3337 3337 border-top: 1px solid #dedede;
3338 3338 border-left: 1px solid #cfcfcf;
3339 3339 border-right: 1px solid #c4c4c4;
3340 3340 border-bottom: 1px solid #c4c4c4;
3341 3341 color: #4A4A4A;
3342 3342 font-weight: 700;
3343 3343 margin: 0;
3344 3344 padding: 6px 8px;
3345 3345 }
3346 3346
3347 3347 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled
3348 3348 {
3349 3349 color: #B4B4B4;
3350 3350 padding: 6px;
3351 3351 }
3352 3352
3353 3353 #login,#register {
3354 3354 width: 520px;
3355 3355 margin: 10% auto 0;
3356 3356 padding: 0;
3357 3357 }
3358 3358
3359 3359 #login div.color,#register div.color {
3360 3360 clear: both;
3361 3361 overflow: hidden;
3362 3362 background: #FFF;
3363 3363 margin: 10px auto 0;
3364 3364 padding: 3px 3px 3px 0;
3365 3365 }
3366 3366
3367 3367 #login div.color a,#register div.color a {
3368 3368 width: 20px;
3369 3369 height: 20px;
3370 3370 display: block;
3371 3371 float: left;
3372 3372 margin: 0 0 0 3px;
3373 3373 padding: 0;
3374 3374 }
3375 3375
3376 3376 #login div.title h5,#register div.title h5 {
3377 3377 color: #fff;
3378 3378 margin: 10px;
3379 3379 padding: 0;
3380 3380 }
3381 3381
3382 3382 #login div.form div.fields div.field,#register div.form div.fields div.field
3383 3383 {
3384 3384 clear: both;
3385 3385 overflow: hidden;
3386 3386 margin: 0;
3387 3387 padding: 0 0 10px;
3388 3388 }
3389 3389
3390 3390 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message
3391 3391 {
3392 3392 height: 1%;
3393 3393 display: block;
3394 3394 color: red;
3395 3395 margin: 8px 0 0;
3396 3396 padding: 0;
3397 3397 max-width: 320px;
3398 3398 }
3399 3399
3400 3400 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label
3401 3401 {
3402 3402 color: #000;
3403 3403 font-weight: 700;
3404 3404 }
3405 3405
3406 3406 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input
3407 3407 {
3408 3408 float: left;
3409 3409 margin: 0;
3410 3410 padding: 0;
3411 3411 }
3412 3412
3413 3413 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox
3414 3414 {
3415 3415 margin: 0 0 0 184px;
3416 3416 padding: 0;
3417 3417 }
3418 3418
3419 3419 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label
3420 3420 {
3421 3421 color: #565656;
3422 3422 font-weight: 700;
3423 3423 }
3424 3424
3425 3425 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input
3426 3426 {
3427 3427 color: #000;
3428 3428 font-size: 1em;
3429 3429 font-weight: 700;
3430 3430 margin: 0;
3431 3431 }
3432 3432
3433 3433 #changeset_content .container .wrapper,#graph_content .container .wrapper
3434 3434 {
3435 3435 width: 600px;
3436 3436 }
3437 3437
3438 3438 #changeset_content .container .left,#graph_content .container .left {
3439 3439 float: left;
3440 3440 width: 70%;
3441 3441 padding-left: 5px;
3442 3442 }
3443 3443
3444 3444 #changeset_content .container .left .date,.ac .match {
3445 3445 font-weight: 700;
3446 3446 padding-top: 5px;
3447 3447 padding-bottom: 5px;
3448 3448 }
3449 3449
3450 3450 div#legend_container table td,div#legend_choices table td {
3451 3451 border: none !important;
3452 3452 height: 20px !important;
3453 3453 padding: 0 !important;
3454 3454 }
3455 3455
3456 3456 .q_filter_box {
3457 3457 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3458 3458 -webkit-border-radius: 4px;
3459 3459 -moz-border-radius: 4px;
3460 3460 border-radius: 4px;
3461 3461 border: 0 none;
3462 3462 color: #AAAAAA;
3463 3463 margin-bottom: -4px;
3464 3464 margin-top: -4px;
3465 3465 padding-left: 3px;
3466 3466 }
3467 3467
3468 3468 #node_filter {
3469 3469 border: 0px solid #545454;
3470 3470 color: #AAAAAA;
3471 3471 padding-left: 3px;
3472 3472 }
3473 3473
3474 3474 /*README STYLE*/
3475 3475
3476 3476 div.readme {
3477 3477 padding:0px;
3478 3478 }
3479 3479
3480 3480 div.readme h2 {
3481 3481 font-weight: normal;
3482 3482 }
3483 3483
3484 3484 div.readme .readme_box {
3485 3485 background-color: #fafafa;
3486 3486 }
3487 3487
3488 3488 div.readme .readme_box {
3489 3489 clear:both;
3490 3490 overflow:hidden;
3491 3491 margin:0;
3492 3492 padding:0 20px 10px;
3493 3493 }
3494 3494
3495 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 3496 border-bottom: 0 !important;
3497 3497 margin: 0 !important;
3498 3498 padding: 0 !important;
3499 3499 line-height: 1.5em !important;
3500 3500 }
3501 3501
3502 3502
3503 3503 div.readme .readme_box h1:first-child {
3504 3504 padding-top: .25em !important;
3505 3505 }
3506 3506
3507 3507 div.readme .readme_box h2, div.readme .readme_box h3 {
3508 3508 margin: 1em 0 !important;
3509 3509 }
3510 3510
3511 3511 div.readme .readme_box h2 {
3512 3512 margin-top: 1.5em !important;
3513 3513 border-top: 4px solid #e0e0e0 !important;
3514 3514 padding-top: .5em !important;
3515 3515 }
3516 3516
3517 3517 div.readme .readme_box p {
3518 3518 color: black !important;
3519 3519 margin: 1em 0 !important;
3520 3520 line-height: 1.5em !important;
3521 3521 }
3522 3522
3523 3523 div.readme .readme_box ul {
3524 3524 list-style: disc !important;
3525 3525 margin: 1em 0 1em 2em !important;
3526 3526 }
3527 3527
3528 3528 div.readme .readme_box ol {
3529 3529 list-style: decimal;
3530 3530 margin: 1em 0 1em 2em !important;
3531 3531 }
3532 3532
3533 3533 div.readme .readme_box pre, code {
3534 3534 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
3535 3535 }
3536 3536
3537 3537 div.readme .readme_box code {
3538 3538 font-size: 12px !important;
3539 3539 background-color: ghostWhite !important;
3540 3540 color: #444 !important;
3541 3541 padding: 0 .2em !important;
3542 3542 border: 1px solid #dedede !important;
3543 3543 }
3544 3544
3545 3545 div.readme .readme_box pre code {
3546 3546 padding: 0 !important;
3547 3547 font-size: 12px !important;
3548 3548 background-color: #eee !important;
3549 3549 border: none !important;
3550 3550 }
3551 3551
3552 3552 div.readme .readme_box pre {
3553 3553 margin: 1em 0;
3554 3554 font-size: 12px;
3555 3555 background-color: #eee;
3556 3556 border: 1px solid #ddd;
3557 3557 padding: 5px;
3558 3558 color: #444;
3559 3559 overflow: auto;
3560 3560 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3561 3561 -webkit-border-radius: 3px;
3562 3562 -moz-border-radius: 3px;
3563 3563 border-radius: 3px;
3564 3564 }
3565 3565
3566 3566
3567 3567 /** RST STYLE **/
3568 3568
3569 3569
3570 3570 div.rst-block {
3571 3571 padding:0px;
3572 3572 }
3573 3573
3574 3574 div.rst-block h2 {
3575 3575 font-weight: normal;
3576 3576 }
3577 3577
3578 3578 div.rst-block {
3579 3579 background-color: #fafafa;
3580 3580 }
3581 3581
3582 3582 div.rst-block {
3583 3583 clear:both;
3584 3584 overflow:hidden;
3585 3585 margin:0;
3586 3586 padding:0 20px 10px;
3587 3587 }
3588 3588
3589 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 3590 border-bottom: 0 !important;
3591 3591 margin: 0 !important;
3592 3592 padding: 0 !important;
3593 3593 line-height: 1.5em !important;
3594 3594 }
3595 3595
3596 3596
3597 3597 div.rst-block h1:first-child {
3598 3598 padding-top: .25em !important;
3599 3599 }
3600 3600
3601 3601 div.rst-block h2, div.rst-block h3 {
3602 3602 margin: 1em 0 !important;
3603 3603 }
3604 3604
3605 3605 div.rst-block h2 {
3606 3606 margin-top: 1.5em !important;
3607 3607 border-top: 4px solid #e0e0e0 !important;
3608 3608 padding-top: .5em !important;
3609 3609 }
3610 3610
3611 3611 div.rst-block p {
3612 3612 color: black !important;
3613 3613 margin: 1em 0 !important;
3614 3614 line-height: 1.5em !important;
3615 3615 }
3616 3616
3617 3617 div.rst-block ul {
3618 3618 list-style: disc !important;
3619 3619 margin: 1em 0 1em 2em !important;
3620 3620 }
3621 3621
3622 3622 div.rst-block ol {
3623 3623 list-style: decimal;
3624 3624 margin: 1em 0 1em 2em !important;
3625 3625 }
3626 3626
3627 3627 div.rst-block pre, code {
3628 3628 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
3629 3629 }
3630 3630
3631 3631 div.rst-block code {
3632 3632 font-size: 12px !important;
3633 3633 background-color: ghostWhite !important;
3634 3634 color: #444 !important;
3635 3635 padding: 0 .2em !important;
3636 3636 border: 1px solid #dedede !important;
3637 3637 }
3638 3638
3639 3639 div.rst-block pre code {
3640 3640 padding: 0 !important;
3641 3641 font-size: 12px !important;
3642 3642 background-color: #eee !important;
3643 3643 border: none !important;
3644 3644 }
3645 3645
3646 3646 div.rst-block pre {
3647 3647 margin: 1em 0;
3648 3648 font-size: 12px;
3649 3649 background-color: #eee;
3650 3650 border: 1px solid #ddd;
3651 3651 padding: 5px;
3652 3652 color: #444;
3653 3653 overflow: auto;
3654 3654 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3655 3655 -webkit-border-radius: 3px;
3656 3656 -moz-border-radius: 3px;
3657 3657 border-radius: 3px;
3658 3658 }
3659 3659
3660 3660
3661 3661 /** comment main **/
3662 3662 .comments {
3663 3663 padding:10px 20px;
3664 3664 }
3665 3665
3666 3666 .comments .comment {
3667 3667 border: 1px solid #ddd;
3668 3668 margin-top: 10px;
3669 3669 -webkit-border-radius: 4px;
3670 3670 -moz-border-radius: 4px;
3671 3671 border-radius: 4px;
3672 3672 }
3673 3673
3674 3674 .comments .comment .meta {
3675 3675 background: #f8f8f8;
3676 3676 padding: 6px;
3677 3677 border-bottom: 1px solid #ddd;
3678 3678 }
3679 3679
3680 3680 .comments .comment .meta img {
3681 3681 vertical-align: middle;
3682 3682 }
3683 3683
3684 3684 .comments .comment .meta .user {
3685 3685 font-weight: bold;
3686 3686 }
3687 3687
3688 3688 .comments .comment .meta .date {
3689 3689 float: right;
3690 3690 }
3691 3691
3692 3692 .comments .comment .text {
3693 3693 padding: 8px 6px 6px 14px;
3694 3694 background-color: #FAFAFA;
3695 3695 }
3696 3696
3697 3697 .comments .comments-number{
3698 3698 padding:0px 0px 10px 0px;
3699 3699 font-weight: bold;
3700 3700 color: #666;
3701 3701 font-size: 16px;
3702 3702 }
3703 3703
3704 3704 /** comment form **/
3705 3705
3706 3706 .comment-form .clearfix{
3707 3707 background: #EEE;
3708 3708 -webkit-border-radius: 4px;
3709 3709 -moz-border-radius: 4px;
3710 3710 border-radius: 4px;
3711 3711 padding: 10px;
3712 3712 }
3713 3713
3714 3714 div.comment-form {
3715 3715 margin-top: 20px;
3716 3716 }
3717 3717
3718 3718 .comment-form strong {
3719 3719 display: block;
3720 3720 margin-bottom: 15px;
3721 3721 }
3722 3722
3723 3723 .comment-form textarea {
3724 3724 width: 100%;
3725 3725 height: 100px;
3726 3726 font-family: 'Monaco', 'Courier', 'Courier New', monospace;
3727 3727 }
3728 3728
3729 3729 form.comment-form {
3730 3730 margin-top: 10px;
3731 3731 margin-left: 10px;
3732 3732 }
3733 3733
3734 3734 .comment-form-submit {
3735 3735 margin-top: 5px;
3736 3736 margin-left: 525px;
3737 3737 }
3738 3738
3739 3739 .file-comments {
3740 3740 display: none;
3741 3741 }
3742 3742
3743 3743 .comment-form .comment {
3744 3744 margin-left: 10px;
3745 3745 }
3746 3746
3747 3747 .comment-form .comment-help{
3748 3748 padding: 0px 0px 5px 0px;
3749 3749 color: #666;
3750 3750 }
3751 3751
3752 3752 .comment-form .comment-button{
3753 3753 padding-top:5px;
3754 3754 }
3755 3755
3756 3756 .add-another-button {
3757 3757 margin-left: 10px;
3758 3758 margin-top: 10px;
3759 3759 margin-bottom: 10px;
3760 3760 }
3761 3761
3762 3762 .comment .buttons {
3763 3763 position: absolute;
3764 3764 right:40px;
3765 3765 }
3766 3766
3767 3767
3768 3768 .show-inline-comments{
3769 3769 position: relative;
3770 3770 top:1px
3771 3771 }
3772 3772
3773 3773 /** comment inline form **/
3774 3774
3775 3775 .comment-inline-form .clearfix{
3776 3776 background: #EEE;
3777 3777 -webkit-border-radius: 4px;
3778 3778 -moz-border-radius: 4px;
3779 3779 border-radius: 4px;
3780 3780 padding: 5px;
3781 3781 }
3782 3782
3783 3783 div.comment-inline-form {
3784 3784 margin-top: 5px;
3785 3785 padding:2px 6px 8px 6px;
3786 3786 }
3787 3787
3788 3788 .comment-inline-form strong {
3789 3789 display: block;
3790 3790 margin-bottom: 15px;
3791 3791 }
3792 3792
3793 3793 .comment-inline-form textarea {
3794 3794 width: 100%;
3795 3795 height: 100px;
3796 3796 font-family: 'Monaco', 'Courier', 'Courier New', monospace;
3797 3797 }
3798 3798
3799 3799 form.comment-inline-form {
3800 3800 margin-top: 10px;
3801 3801 margin-left: 10px;
3802 3802 }
3803 3803
3804 3804 .comment-inline-form-submit {
3805 3805 margin-top: 5px;
3806 3806 margin-left: 525px;
3807 3807 }
3808 3808
3809 3809 .file-comments {
3810 3810 display: none;
3811 3811 }
3812 3812
3813 3813 .comment-inline-form .comment {
3814 3814 margin-left: 10px;
3815 3815 }
3816 3816
3817 3817 .comment-inline-form .comment-help{
3818 3818 padding: 0px 0px 2px 0px;
3819 3819 color: #666666;
3820 3820 font-size: 10px;
3821 3821 }
3822 3822
3823 3823 .comment-inline-form .comment-button{
3824 3824 padding-top:5px;
3825 3825 }
3826 3826
3827 3827 /** comment inline **/
3828 3828 .inline-comments {
3829 3829 padding:10px 20px;
3830 3830 }
3831 3831
3832 3832 .inline-comments div.rst-block {
3833 3833 clear:both;
3834 3834 overflow:hidden;
3835 3835 margin:0;
3836 3836 padding:0 20px 0px;
3837 3837 }
3838 3838 .inline-comments .comment {
3839 3839 border: 1px solid #ddd;
3840 3840 -webkit-border-radius: 4px;
3841 3841 -moz-border-radius: 4px;
3842 3842 border-radius: 4px;
3843 3843 margin: 3px 3px 5px 5px;
3844 3844 background-color: #FAFAFA;
3845 3845 }
3846 3846 .inline-comments .comment-wrapp{
3847 3847 padding:1px;
3848 3848 }
3849 3849 .inline-comments .comment .meta {
3850 3850 background: #f8f8f8;
3851 3851 padding: 6px;
3852 3852 border-bottom: 1px solid #ddd;
3853 3853 }
3854 3854
3855 3855 .inline-comments .comment .meta img {
3856 3856 vertical-align: middle;
3857 3857 }
3858 3858
3859 3859 .inline-comments .comment .meta .user {
3860 3860 font-weight: bold;
3861 3861 }
3862 3862
3863 3863 .inline-comments .comment .meta .date {
3864 3864 float: right;
3865 3865 }
3866 3866
3867 3867 .inline-comments .comment .text {
3868 3868 padding: 8px 6px 6px 14px;
3869 3869 background-color: #FAFAFA;
3870 3870 }
3871 3871
3872 3872 .inline-comments .comments-number{
3873 3873 padding:0px 0px 10px 0px;
3874 3874 font-weight: bold;
3875 3875 color: #666;
3876 3876 font-size: 16px;
3877 3877 }
3878 3878 .inline-comments-button .add-comment{
3879 3879 margin:10px 5px !important;
3880 3880 }
3881 3881 .notifications{
3882 3882 width:22px;
3883 3883 padding:2px;
3884 3884 float:right;
3885 3885 -webkit-border-radius: 4px;
3886 3886 -moz-border-radius: 4px;
3887 3887 border-radius: 4px;
3888 3888 text-align: center;
3889 3889 margin: 0px -10px 0px 5px;
3890 3890 background-color: #DEDEDE;
3891 3891 }
3892 3892 .notifications a{
3893 3893 color:#888 !important;
3894 3894 display: block;
3895 3895 font-size: 10px
3896 3896 }
3897 3897 .notifications a:hover{
3898 3898 text-decoration: none !important;
3899 3899 }
3900 3900 .notification-header{
3901
3901 padding-top:6px;
3902 3902 }
3903 3903 .notification-header .desc{
3904 3904 font-size: 16px;
3905 3905 height: 24px;
3906 padding-top: 6px;
3907 3906 float: left
3908 3907 }
3909 3908 .notification-list .container.unread{
3910 3909
3911 3910 }
3911 .notification-header .gravatar{
3912
3913 }
3912 3914 .notification-header .desc.unread{
3913 3915 font-weight: bold;
3914 3916 font-size: 17px;
3915 3917 }
3916 3918
3917 3919 .notification-header .delete-notifications{
3918 3920 float: right;
3919 3921 padding-top: 8px;
3920 3922 cursor: pointer;
3921 3923 }
3922 3924 .notification-subject{
3923 3925 clear:both;
3924 3926 border-bottom: 1px solid #eee;
3925 3927 padding:5px 0px 5px 38px;
3926 3928 }
3927 3929
3928 3930
3929 3931 /*****************************************************************************
3930 3932 DIFFS CSS
3931 3933 ******************************************************************************/
3932 3934
3933 3935 div.diffblock {
3934 3936 overflow: auto;
3935 3937 padding: 0px;
3936 3938 border: 1px solid #ccc;
3937 3939 background: #f8f8f8;
3938 3940 font-size: 100%;
3939 3941 line-height: 100%;
3940 3942 /* new */
3941 3943 line-height: 125%;
3942 3944 -webkit-border-radius: 6px 6px 0px 0px;
3943 3945 -moz-border-radius: 6px 6px 0px 0px;
3944 3946 border-radius: 6px 6px 0px 0px;
3945 3947 }
3946 3948 div.diffblock.margined{
3947 3949 margin: 0px 20px 0px 20px;
3948 3950 }
3949 3951 div.diffblock .code-header{
3950 3952 border-bottom: 1px solid #CCCCCC;
3951 3953 background: #EEEEEE;
3952 3954 padding:10px 0 10px 0;
3953 3955 height: 14px;
3954 3956 }
3955 3957 div.diffblock .code-header.cv{
3956 3958 height: 34px;
3957 3959 }
3958 3960 div.diffblock .code-header-title{
3959 3961 padding: 0px 0px 10px 5px !important;
3960 3962 margin: 0 !important;
3961 3963 }
3962 3964
3963 3965 div.diffblock .code-header .date{
3964 3966 float:left;
3965 3967 text-transform: uppercase;
3966 3968 }
3967 3969 div.diffblock .code-header div{
3968 3970 margin-left:4px;
3969 3971 font-weight: bold;
3970 3972 font-size: 14px;
3971 3973 }
3972 3974 div.diffblock .code-body{
3973 3975 background: #FFFFFF;
3974 3976 }
3975 3977 div.diffblock pre.raw{
3976 3978 background: #FFFFFF;
3977 3979 color:#000000;
3978 3980 }
3979 3981 table.code-difftable{
3980 3982 border-collapse: collapse;
3981 3983 width: 99%;
3982 3984 }
3983 3985 table.code-difftable td {
3984 3986 padding: 0 !important;
3985 3987 background: none !important;
3986 3988 border:0 !important;
3987 3989 vertical-align: none !important;
3988 3990 }
3989 3991 table.code-difftable .context{
3990 3992 background:none repeat scroll 0 0 #DDE7EF;
3991 3993 }
3992 3994 table.code-difftable .add{
3993 3995 background:none repeat scroll 0 0 #DDFFDD;
3994 3996 }
3995 3997 table.code-difftable .add ins{
3996 3998 background:none repeat scroll 0 0 #AAFFAA;
3997 3999 text-decoration:none;
3998 4000 }
3999 4001 table.code-difftable .del{
4000 4002 background:none repeat scroll 0 0 #FFDDDD;
4001 4003 }
4002 4004 table.code-difftable .del del{
4003 4005 background:none repeat scroll 0 0 #FFAAAA;
4004 4006 text-decoration:none;
4005 4007 }
4006 4008
4007 4009 /** LINE NUMBERS **/
4008 4010 table.code-difftable .lineno{
4009 4011 background:none repeat scroll 0 0 #EEEEEE !important;
4010 4012 padding-left:2px;
4011 4013 padding-right:2px;
4012 4014 text-align:right;
4013 4015 width:32px;
4014 4016 -moz-user-select:none;
4015 4017 -webkit-user-select: none;
4016 4018 border-right: 1px solid #CCC !important;
4017 4019 border-left: 0px solid #CCC !important;
4018 4020 border-top: 0px solid #CCC !important;
4019 4021 border-bottom: none !important;
4020 4022 vertical-align: middle !important;
4021 4023
4022 4024 }
4023 4025 table.code-difftable .lineno.new {
4024 4026 }
4025 4027 table.code-difftable .lineno.old {
4026 4028 }
4027 4029 table.code-difftable .lineno a{
4028 4030 color:#747474 !important;
4029 4031 font:11px "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace !important;
4030 4032 letter-spacing:-1px;
4031 4033 text-align:right;
4032 4034 padding-right: 2px;
4033 4035 cursor: pointer;
4034 4036 display: block;
4035 4037 width: 32px;
4036 4038 }
4037 4039
4038 4040 table.code-difftable .lineno-inline{
4039 4041 background:none repeat scroll 0 0 #FFF !important;
4040 4042 padding-left:2px;
4041 4043 padding-right:2px;
4042 4044 text-align:right;
4043 4045 width:30px;
4044 4046 -moz-user-select:none;
4045 4047 -webkit-user-select: none;
4046 4048 }
4047 4049
4048 4050 /** CODE **/
4049 4051 table.code-difftable .code {
4050 4052 display: block;
4051 4053 width: 100%;
4052 4054 }
4053 4055 table.code-difftable .code td{
4054 4056 margin:0;
4055 4057 padding:0;
4056 4058 }
4057 4059 table.code-difftable .code pre{
4058 4060 margin:0;
4059 4061 padding:0;
4060 4062 height: 17px;
4061 4063 line-height: 17px;
4062 4064 }
4063 4065
4064 4066
4065 4067 .diffblock.margined.comm .line .code:hover{
4066 4068 background-color:#FFFFCC !important;
4067 4069 cursor: pointer !important;
4068 4070 background-image:url("../images/icons/comment_add.png") !important;
4069 4071 background-repeat:no-repeat !important;
4070 4072 background-position: right !important;
4071 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 4080 } No newline at end of file
@@ -1,713 +1,713 b''
1 1 /**
2 2 RhodeCode JS Files
3 3 **/
4 4
5 5 if (typeof console == "undefined" || typeof console.log == "undefined"){
6 6 console = { log: function() {} }
7 7 }
8 8
9 9
10 10 var str_repeat = function(i, m) {
11 11 for (var o = []; m > 0; o[--m] = i);
12 12 return o.join('');
13 13 };
14 14
15 15 /**
16 16 * INJECT .format function into String
17 17 * Usage: "My name is {0} {1}".format("Johny","Bravo")
18 18 * Return "My name is Johny Bravo"
19 19 * Inspired by https://gist.github.com/1049426
20 20 */
21 21 String.prototype.format = function() {
22 22
23 23 function format() {
24 24 var str = this;
25 25 var len = arguments.length+1;
26 26 var safe = undefined;
27 27 var arg = undefined;
28 28
29 29 // For each {0} {1} {n...} replace with the argument in that position. If
30 30 // the argument is an object or an array it will be stringified to JSON.
31 31 for (var i=0; i < len; arg = arguments[i++]) {
32 32 safe = typeof arg === 'object' ? JSON.stringify(arg) : arg;
33 33 str = str.replace(RegExp('\\{'+(i-1)+'\\}', 'g'), safe);
34 34 }
35 35 return str;
36 36 }
37 37
38 38 // Save a reference of what may already exist under the property native.
39 39 // Allows for doing something like: if("".format.native) { /* use native */ }
40 40 format.native = String.prototype.format;
41 41
42 42 // Replace the prototype property
43 43 return format;
44 44
45 45 }();
46 46
47 47
48 48 /**
49 49 * SmartColorGenerator
50 50 *
51 51 *usage::
52 52 * var CG = new ColorGenerator();
53 53 * var col = CG.getColor(key); //returns array of RGB
54 54 * 'rgb({0})'.format(col.join(',')
55 55 *
56 56 * @returns {ColorGenerator}
57 57 */
58 58 var ColorGenerator = function(){
59 59 this.GOLDEN_RATIO = 0.618033988749895;
60 60 this.CURRENT_RATIO = 0.22717784590367374 // this can be random
61 61 this.HSV_1 = 0.75;//saturation
62 62 this.HSV_2 = 0.95;
63 63 this.color;
64 64 this.cacheColorMap = {};
65 65 };
66 66
67 67 ColorGenerator.prototype = {
68 68 getColor:function(key){
69 69 if(this.cacheColorMap[key] !== undefined){
70 70 return this.cacheColorMap[key];
71 71 }
72 72 else{
73 73 this.cacheColorMap[key] = this.generateColor();
74 74 return this.cacheColorMap[key];
75 75 }
76 76 },
77 77 _hsvToRgb:function(h,s,v){
78 78 if (s == 0.0)
79 79 return [v, v, v];
80 80 i = parseInt(h * 6.0)
81 81 f = (h * 6.0) - i
82 82 p = v * (1.0 - s)
83 83 q = v * (1.0 - s * f)
84 84 t = v * (1.0 - s * (1.0 - f))
85 85 i = i % 6
86 86 if (i == 0)
87 87 return [v, t, p]
88 88 if (i == 1)
89 89 return [q, v, p]
90 90 if (i == 2)
91 91 return [p, v, t]
92 92 if (i == 3)
93 93 return [p, q, v]
94 94 if (i == 4)
95 95 return [t, p, v]
96 96 if (i == 5)
97 97 return [v, p, q]
98 98 },
99 99 generateColor:function(){
100 100 this.CURRENT_RATIO = this.CURRENT_RATIO+this.GOLDEN_RATIO;
101 101 this.CURRENT_RATIO = this.CURRENT_RATIO %= 1;
102 102 HSV_tuple = [this.CURRENT_RATIO, this.HSV_1, this.HSV_2]
103 103 RGB_tuple = this._hsvToRgb(HSV_tuple[0],HSV_tuple[1],HSV_tuple[2]);
104 104 function toRgb(v){
105 105 return ""+parseInt(v*256)
106 106 }
107 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 117 * GLOBAL YUI Shortcuts
118 118 */
119 119 var YUC = YAHOO.util.Connect;
120 120 var YUD = YAHOO.util.Dom;
121 121 var YUE = YAHOO.util.Event;
122 122 var YUQ = YAHOO.util.Selector.query;
123 123
124 124 // defines if push state is enabled for this browser ?
125 125 var push_state_enabled = Boolean(
126 126 window.history && window.history.pushState && window.history.replaceState
127 127 && !( /* disable for versions of iOS before version 4.3 (8F190) */
128 128 (/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i).test(navigator.userAgent)
129 129 /* disable for the mercury iOS browser, or at least older versions of the webkit engine */
130 130 || (/AppleWebKit\/5([0-2]|3[0-2])/i).test(navigator.userAgent)
131 131 )
132 132 );
133 133
134 134 var _run_callbacks = function(callbacks){
135 135 if (callbacks !== undefined){
136 136 var _l = callbacks.length;
137 137 for (var i=0;i<_l;i++){
138 138 var func = callbacks[i];
139 139 if(typeof(func)=='function'){
140 140 try{
141 141 func();
142 142 }catch (err){};
143 143 }
144 144 }
145 145 }
146 146 }
147 147
148 148 /**
149 149 * Partial Ajax Implementation
150 150 *
151 151 * @param url: defines url to make partial request
152 152 * @param container: defines id of container to input partial result
153 153 * @param s_call: success callback function that takes o as arg
154 154 * o.tId
155 155 * o.status
156 156 * o.statusText
157 157 * o.getResponseHeader[ ]
158 158 * o.getAllResponseHeaders
159 159 * o.responseText
160 160 * o.responseXML
161 161 * o.argument
162 162 * @param f_call: failure callback
163 163 * @param args arguments
164 164 */
165 165 function ypjax(url,container,s_call,f_call,args){
166 166 var method='GET';
167 167 if(args===undefined){
168 168 args=null;
169 169 }
170 170
171 171 // Set special header for partial ajax == HTTP_X_PARTIAL_XHR
172 172 YUC.initHeader('X-PARTIAL-XHR',true);
173 173
174 174 // wrapper of passed callback
175 175 var s_wrapper = (function(o){
176 176 return function(o){
177 177 YUD.get(container).innerHTML=o.responseText;
178 178 YUD.setStyle(container,'opacity','1.0');
179 179 //execute the given original callback
180 180 if (s_call !== undefined){
181 181 s_call(o);
182 182 }
183 183 }
184 184 })()
185 185 YUD.setStyle(container,'opacity','0.3');
186 186 YUC.asyncRequest(method,url,{
187 187 success:s_wrapper,
188 188 failure:function(o){
189 189 console.log(o);
190 190 YUD.get(container).innerHTML='ERROR';
191 191 YUD.setStyle(container,'opacity','1.0');
192 192 YUD.setStyle(container,'color','red');
193 193 }
194 194 },args);
195 195
196 196 };
197 197
198 198 /**
199 199 * tooltip activate
200 200 */
201 201 var tooltip_activate = function(){
202 202 function toolTipsId(){
203 203 var ids = [];
204 204 var tts = YUQ('.tooltip');
205 205 for (var i = 0; i < tts.length; i++) {
206 206 // if element doesn't not have and id
207 207 // autogenerate one for tooltip
208 208 if (!tts[i].id){
209 209 tts[i].id='tt'+((i*100)+tts.length);
210 210 }
211 211 ids.push(tts[i].id);
212 212 }
213 213 return ids
214 214 };
215 215 var myToolTips = new YAHOO.widget.Tooltip("tooltip", {
216 216 context: [[toolTipsId()],"tl","bl",null,[0,5]],
217 217 monitorresize:false,
218 218 xyoffset :[0,0],
219 219 autodismissdelay:300000,
220 220 hidedelay:5,
221 221 showdelay:20,
222 222 });
223 223 };
224 224
225 225 /**
226 226 * show more
227 227 */
228 228 var show_more_event = function(){
229 229 YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){
230 230 var el = e.target;
231 231 YUD.setStyle(YUD.get(el.id.substring(1)),'display','');
232 232 YUD.setStyle(el.parentNode,'display','none');
233 233 });
234 234 };
235 235
236 236
237 237 /**
238 238 * Quick filter widget
239 239 *
240 240 * @param target: filter input target
241 241 * @param nodes: list of nodes in html we want to filter.
242 242 * @param display_element function that takes current node from nodes and
243 243 * does hide or show based on the node
244 244 *
245 245 */
246 246 var q_filter = function(target,nodes,display_element){
247 247
248 248 var nodes = nodes;
249 249 var q_filter_field = YUD.get(target);
250 250 var F = YAHOO.namespace(target);
251 251
252 252 YUE.on(q_filter_field,'click',function(){
253 253 q_filter_field.value = '';
254 254 });
255 255
256 256 YUE.on(q_filter_field,'keyup',function(e){
257 257 clearTimeout(F.filterTimeout);
258 258 F.filterTimeout = setTimeout(F.updateFilter,600);
259 259 });
260 260
261 261 F.filterTimeout = null;
262 262
263 263 var show_node = function(node){
264 264 YUD.setStyle(node,'display','')
265 265 }
266 266 var hide_node = function(node){
267 267 YUD.setStyle(node,'display','none');
268 268 }
269 269
270 270 F.updateFilter = function() {
271 271 // Reset timeout
272 272 F.filterTimeout = null;
273 273
274 274 var obsolete = [];
275 275
276 276 var req = q_filter_field.value.toLowerCase();
277 277
278 278 var l = nodes.length;
279 279 var i;
280 280 var showing = 0;
281 281
282 282 for (i=0;i<l;i++ ){
283 283 var n = nodes[i];
284 284 var target_element = display_element(n)
285 285 if(req && n.innerHTML.toLowerCase().indexOf(req) == -1){
286 286 hide_node(target_element);
287 287 }
288 288 else{
289 289 show_node(target_element);
290 290 showing+=1;
291 291 }
292 292 }
293 293
294 294 // if repo_count is set update the number
295 295 var cnt = YUD.get('repo_count');
296 296 if(cnt){
297 297 YUD.get('repo_count').innerHTML = showing;
298 298 }
299 299
300 300 }
301 301 };
302 302
303 303 var ajaxPOST = function(url,postData,success) {
304 304 var sUrl = url;
305 305 var callback = {
306 306 success: success,
307 307 failure: function (o) {
308 308 alert("error");
309 309 },
310 310 };
311 311 var postData = postData;
312 312 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
313 313 };
314 314
315 315
316 316 /** comments **/
317 317 var removeInlineForm = function(form) {
318 318 form.parentNode.removeChild(form);
319 319 };
320 320
321 321 var tableTr = function(cls,body){
322 322 var form = document.createElement('tr');
323 323 YUD.addClass(form, cls);
324 324 form.innerHTML = '<td class="lineno-inline new-inline"></td>'+
325 325 '<td class="lineno-inline old-inline"></td>'+
326 326 '<td>{0}</td>'.format(body);
327 327 return form;
328 328 };
329 329
330 330 var createInlineForm = function(parent_tr, f_path, line) {
331 331 var tmpl = YUD.get('comment-inline-form-template').innerHTML;
332 332 tmpl = tmpl.format(f_path, line);
333 333 var form = tableTr('comment-form-inline',tmpl)
334 334
335 335 // create event for hide button
336 336 form = new YAHOO.util.Element(form);
337 337 var form_hide_button = new YAHOO.util.Element(form.getElementsByClassName('hide-inline-form')[0]);
338 338 form_hide_button.on('click', function(e) {
339 339 var newtr = e.currentTarget.parentNode.parentNode.parentNode.parentNode.parentNode;
340 340 removeInlineForm(newtr);
341 341 YUD.removeClass(parent_tr, 'form-open');
342 342 });
343 343 return form
344 344 };
345 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 347 return
348 348 }
349 349 YUD.addClass(tr,'form-open');
350 350 var node = tr.parentNode.parentNode.parentNode.getElementsByClassName('full_f_path')[0];
351 351 var f_path = YUD.getAttribute(node,'path');
352 352 var lineno = getLineNo(tr);
353 353 var form = createInlineForm(tr, f_path, lineno);
354 354 var target_tr = tr;
355 355 if(YUD.hasClass(YUD.getNextSibling(tr),'inline-comments')){
356 356 target_tr = YUD.getNextSibling(tr);
357 357 }
358 358 YUD.insertAfter(form,target_tr);
359 359 YUD.get('text_'+lineno).focus();
360 360 tooltip_activate();
361 361 };
362 362
363 363 var createInlineAddButton = function(tr,label){
364 364 var html = '<div class="add-comment"><span class="ui-btn">{0}</span></div>'.format(label);
365 365
366 366 var add = new YAHOO.util.Element(tableTr('inline-comments-button',html));
367 367 add.on('click', function(e) {
368 368 injectInlineForm(tr);
369 369 });
370 370 return add;
371 371 };
372 372
373 373 var getLineNo = function(tr) {
374 374 var line;
375 375 var o = tr.children[0].id.split('_');
376 376 var n = tr.children[1].id.split('_');
377 377
378 378 if (n.length >= 2) {
379 379 line = n[n.length-1];
380 380 } else if (o.length >= 2) {
381 381 line = o[o.length-1];
382 382 }
383 383
384 384 return line
385 385 };
386 386
387 387
388 388 var fileBrowserListeners = function(current_url, node_list_url, url_base,
389 389 truncated_lbl, nomatch_lbl){
390 390 var current_url_branch = +"?branch=__BRANCH__";
391 391 var url = url_base;
392 392 var node_url = node_list_url;
393 393
394 394 YUE.on('stay_at_branch','click',function(e){
395 395 if(e.target.checked){
396 396 var uri = current_url_branch;
397 397 uri = uri.replace('__BRANCH__',e.target.value);
398 398 window.location = uri;
399 399 }
400 400 else{
401 401 window.location = current_url;
402 402 }
403 403 })
404 404
405 405 var n_filter = YUD.get('node_filter');
406 406 var F = YAHOO.namespace('node_filter');
407 407
408 408 F.filterTimeout = null;
409 409 var nodes = null;
410 410
411 411 F.initFilter = function(){
412 412 YUD.setStyle('node_filter_box_loading','display','');
413 413 YUD.setStyle('search_activate_id','display','none');
414 414 YUD.setStyle('add_node_id','display','none');
415 415 YUC.initHeader('X-PARTIAL-XHR',true);
416 416 YUC.asyncRequest('GET',url,{
417 417 success:function(o){
418 418 nodes = JSON.parse(o.responseText);
419 419 YUD.setStyle('node_filter_box_loading','display','none');
420 420 YUD.setStyle('node_filter_box','display','');
421 421 },
422 422 failure:function(o){
423 423 console.log('failed to load');
424 424 }
425 425 },null);
426 426 }
427 427
428 428 F.updateFilter = function(e) {
429 429
430 430 return function(){
431 431 // Reset timeout
432 432 F.filterTimeout = null;
433 433 var query = e.target.value;
434 434 var match = [];
435 435 var matches = 0;
436 436 var matches_max = 20;
437 437 if (query != ""){
438 438 for(var i=0;i<nodes.length;i++){
439 439 var pos = nodes[i].toLowerCase().indexOf(query)
440 440 if(query && pos != -1){
441 441
442 442 matches++
443 443 //show only certain amount to not kill browser
444 444 if (matches > matches_max){
445 445 break;
446 446 }
447 447
448 448 var n = nodes[i];
449 449 var n_hl = n.substring(0,pos)
450 450 +"<b>{0}</b>".format(n.substring(pos,pos+query.length))
451 451 +n.substring(pos+query.length)
452 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 454 if(match.length >= matches_max){
455 455 match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(truncated_lbl));
456 456 }
457 457
458 458 }
459 459 }
460 460 if(query != ""){
461 461 YUD.setStyle('tbody','display','none');
462 462 YUD.setStyle('tbody_filtered','display','');
463 463
464 464 if (match.length==0){
465 465 match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(nomatch_lbl));
466 466 }
467 467
468 468 YUD.get('tbody_filtered').innerHTML = match.join("");
469 469 }
470 470 else{
471 471 YUD.setStyle('tbody','display','');
472 472 YUD.setStyle('tbody_filtered','display','none');
473 473 }
474 474
475 475 }
476 476 };
477 477
478 478 YUE.on(YUD.get('filter_activate'),'click',function(){
479 479 F.initFilter();
480 480 })
481 481 YUE.on(n_filter,'click',function(){
482 482 n_filter.value = '';
483 483 });
484 484 YUE.on(n_filter,'keyup',function(e){
485 485 clearTimeout(F.filterTimeout);
486 486 F.filterTimeout = setTimeout(F.updateFilter(e),600);
487 487 });
488 488 };
489 489
490 490
491 491 var initCodeMirror = function(textAreadId,resetUrl){
492 492 var myCodeMirror = CodeMirror.fromTextArea(YUD.get(textAreadId),{
493 493 mode: "null",
494 494 lineNumbers:true
495 495 });
496 496 YUE.on('reset','click',function(e){
497 497 window.location=resetUrl
498 498 });
499 499
500 500 YUE.on('file_enable','click',function(){
501 501 YUD.setStyle('editor_container','display','');
502 502 YUD.setStyle('upload_file_container','display','none');
503 503 YUD.setStyle('filename_container','display','');
504 504 });
505 505
506 506 YUE.on('upload_file_enable','click',function(){
507 507 YUD.setStyle('editor_container','display','none');
508 508 YUD.setStyle('upload_file_container','display','');
509 509 YUD.setStyle('filename_container','display','none');
510 510 });
511 511 };
512 512
513 513
514 514
515 515 var getIdentNode = function(n){
516 516 //iterate thru nodes untill matched interesting node !
517 517
518 518 if (typeof n == 'undefined'){
519 519 return -1
520 520 }
521 521
522 522 if(typeof n.id != "undefined" && n.id.match('L[0-9]+')){
523 523 return n
524 524 }
525 525 else{
526 526 return getIdentNode(n.parentNode);
527 527 }
528 528 };
529 529
530 530 var getSelectionLink = function(selection_link_label) {
531 531 return function(){
532 532 //get selection from start/to nodes
533 533 if (typeof window.getSelection != "undefined") {
534 534 s = window.getSelection();
535 535
536 536 from = getIdentNode(s.anchorNode);
537 537 till = getIdentNode(s.focusNode);
538 538
539 539 f_int = parseInt(from.id.replace('L',''));
540 540 t_int = parseInt(till.id.replace('L',''));
541 541
542 542 if (f_int > t_int){
543 543 //highlight from bottom
544 544 offset = -35;
545 545 ranges = [t_int,f_int];
546 546
547 547 }
548 548 else{
549 549 //highligth from top
550 550 offset = 35;
551 551 ranges = [f_int,t_int];
552 552 }
553 553
554 554 if (ranges[0] != ranges[1]){
555 555 if(YUD.get('linktt') == null){
556 556 hl_div = document.createElement('div');
557 557 hl_div.id = 'linktt';
558 558 }
559 559 anchor = '#L'+ranges[0]+'-'+ranges[1];
560 560 hl_div.innerHTML = '';
561 561 l = document.createElement('a');
562 562 l.href = location.href.substring(0,location.href.indexOf('#'))+anchor;
563 563 l.innerHTML = selection_link_label;
564 564 hl_div.appendChild(l);
565 565
566 566 YUD.get('body').appendChild(hl_div);
567 567
568 568 xy = YUD.getXY(till.id);
569 569
570 570 YUD.addClass('linktt','yui-tt');
571 571 YUD.setStyle('linktt','top',xy[1]+offset+'px');
572 572 YUD.setStyle('linktt','left',xy[0]+'px');
573 573 YUD.setStyle('linktt','visibility','visible');
574 574 }
575 575 else{
576 576 YUD.setStyle('linktt','visibility','hidden');
577 577 }
578 578 }
579 579 }
580 580 };
581 581
582 582 var deleteNotification = function(url, notification_id,callbacks){
583 583 var callback = {
584 584 success:function(o){
585 585 var obj = YUD.get(String("notification_"+notification_id));
586 586 if(obj.parentNode !== undefined){
587 587 obj.parentNode.removeChild(obj);
588 588 }
589 589 _run_callbacks(callbacks);
590 590 },
591 591 failure:function(o){
592 592 alert("error");
593 593 },
594 594 };
595 595 var postData = '_method=delete';
596 596 var sUrl = url.replace('__NOTIFICATION_ID__',notification_id);
597 597 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl,
598 598 callback, postData);
599 599 };
600 600
601 601
602 602 /**
603 603 * QUICK REPO MENU
604 604 */
605 605 var quick_repo_menu = function(){
606 606 YUE.on(YUQ('.quick_repo_menu'),'click',function(e){
607 607 var menu = e.currentTarget.firstElementChild.firstElementChild;
608 608 if(YUD.hasClass(menu,'hidden')){
609 609 YUD.addClass(e.currentTarget,'active');
610 610 YUD.removeClass(menu,'hidden');
611 611 }else{
612 612 YUD.removeClass(e.currentTarget,'active');
613 613 YUD.addClass(menu,'hidden');
614 614 }
615 615 })
616 616 };
617 617
618 618
619 619 /**
620 620 * TABLE SORTING
621 621 */
622 622
623 623 // returns a node from given html;
624 624 var fromHTML = function(html){
625 625 var _html = document.createElement('element');
626 626 _html.innerHTML = html;
627 627 return _html;
628 628 }
629 629 var get_rev = function(node){
630 630 var n = node.firstElementChild.firstElementChild;
631 631
632 632 if (n===null){
633 633 return -1
634 634 }
635 635 else{
636 636 out = n.firstElementChild.innerHTML.split(':')[0].replace('r','');
637 637 return parseInt(out);
638 638 }
639 639 }
640 640
641 641 var get_name = function(node){
642 642 var name = node.firstElementChild.children[2].innerHTML;
643 643 return name
644 644 }
645 645 var get_group_name = function(node){
646 646 var name = node.firstElementChild.children[1].innerHTML;
647 647 return name
648 648 }
649 649 var get_date = function(node){
650 650 console.log(node.firstElementChild)
651 651 var date_ = node.firstElementChild.innerHTML;
652 652 return date_
653 653 }
654 654
655 655 var revisionSort = function(a, b, desc, field) {
656 656
657 657 var a_ = fromHTML(a.getData(field));
658 658 var b_ = fromHTML(b.getData(field));
659 659
660 660 // extract revisions from string nodes
661 661 a_ = get_rev(a_)
662 662 b_ = get_rev(b_)
663 663
664 664 var comp = YAHOO.util.Sort.compare;
665 665 var compState = comp(a_, b_, desc);
666 666 return compState;
667 667 };
668 668 var ageSort = function(a, b, desc, field) {
669 669 var a_ = a.getData(field);
670 670 var b_ = b.getData(field);
671 671
672 672 var comp = YAHOO.util.Sort.compare;
673 673 var compState = comp(a_, b_, desc);
674 674 return compState;
675 675 };
676 676
677 677 var nameSort = function(a, b, desc, field) {
678 678 var a_ = fromHTML(a.getData(field));
679 679 var b_ = fromHTML(b.getData(field));
680 680
681 681 // extract name from table
682 682 a_ = get_name(a_)
683 683 b_ = get_name(b_)
684 684
685 685 var comp = YAHOO.util.Sort.compare;
686 686 var compState = comp(a_, b_, desc);
687 687 return compState;
688 688 };
689 689
690 690 var groupNameSort = function(a, b, desc, field) {
691 691 var a_ = fromHTML(a.getData(field));
692 692 var b_ = fromHTML(b.getData(field));
693 693
694 694 // extract name from table
695 695 a_ = get_group_name(a_)
696 696 b_ = get_group_name(b_)
697 697
698 698 var comp = YAHOO.util.Sort.compare;
699 699 var compState = comp(a_, b_, desc);
700 700 return compState;
701 701 };
702 702 var dateSort = function(a, b, desc, field) {
703 703 var a_ = fromHTML(a.getData(field));
704 704 var b_ = fromHTML(b.getData(field));
705 705
706 706 // extract name from table
707 707 a_ = get_date(a_)
708 708 b_ = get_date(b_)
709 709
710 710 var comp = YAHOO.util.Sort.compare;
711 711 var compState = comp(a_, b_, desc);
712 712 return compState;
713 713 }; No newline at end of file
@@ -1,274 +1,205 b''
1 1 ## -*- coding: utf-8 -*-
2 2
3 3 <%inherit file="/base/base.html"/>
4 4
5 5 <%def name="title()">
6 6 ${c.repo_name} ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name}
7 7 </%def>
8 8
9 9 <%def name="breadcrumbs_links()">
10 10 ${h.link_to(u'Home',h.url('/'))}
11 11 &raquo;
12 12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
13 13 &raquo;
14 14 ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
15 15 </%def>
16 16
17 17 <%def name="page_nav()">
18 18 ${self.menu('changelog')}
19 19 </%def>
20 20
21 21 <%def name="main()">
22 22 <div class="box">
23 23 <!-- box / title -->
24 24 <div class="title">
25 25 ${self.breadcrumbs()}
26 26 </div>
27 27 <div class="table">
28 28 <div class="diffblock">
29 29 <div class="code-header">
30 30 <div class="date">${_('commit')} ${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} ${c.changeset.date}</div>
31 31 <div class="diff-menu-wrapper">
32 32 <img class="diff-menu-activate" style="cursor: pointer" alt="diff-menu" src="${h.url('/images/icons/script_gear.png')}" />
33 33 <div class="diff-menu" style="display:none">
34 34 <ul>
35 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 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 37 <li>${c.ignorews_url()}</li>
38 38 <li>${c.context_url()}</li>
39 39 </ul>
40 40 </div>
41 41 </div>
42 42 <div class="comments-number" style="float:right;padding-right:5px">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
43 43 </div>
44 44 </div>
45 45 <div id="changeset_content">
46 46 <div class="container">
47 47 <div class="left">
48 48 <div class="author">
49 49 <div class="gravatar">
50 50 <img alt="gravatar" src="${h.gravatar_url(h.email(c.changeset.author),20)}"/>
51 51 </div>
52 52 <span>${h.person(c.changeset.author)}</span><br/>
53 53 <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
54 54 </div>
55 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 56 </div>
57 57 <div class="right">
58 58 <div class="changes">
59 59 % if len(c.changeset.affected_files) <= c.affected_files_cut_off:
60 60 <span class="removed" title="${_('removed')}">${len(c.changeset.removed)}</span>
61 61 <span class="changed" title="${_('changed')}">${len(c.changeset.changed)}</span>
62 62 <span class="added" title="${_('added')}">${len(c.changeset.added)}</span>
63 63 % else:
64 64 <span class="removed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
65 65 <span class="changed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
66 66 <span class="added" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
67 67 % endif
68 68 </div>
69 69 %if len(c.changeset.parents)>1:
70 70 <div class="merge">
71 71 ${_('merge')}<img alt="merge" src="${h.url('/images/icons/arrow_join.png')}"/>
72 72 </div>
73 73 %endif
74 74
75 75 %if c.changeset.parents:
76 76 %for p_cs in reversed(c.changeset.parents):
77 77 <div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(h.short_id(p_cs.raw_id),
78 78 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
79 79 </div>
80 80 %endfor
81 81 %else:
82 82 <div class="parent">${_('No parents')}</div>
83 83 %endif
84 84 <span class="logtags">
85 85 <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
86 86 ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
87 87 %for tag in c.changeset.tags:
88 88 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
89 89 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
90 90 %endfor
91 91 </span>
92 92 </div>
93 93 </div>
94 94 <span style="font-size:1.1em;font-weight: bold">
95 95 ${_('%s files affected with %s additions and %s deletions.') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
96 96 </span>
97 97 <div class="cs_files">
98 98 %for change,filenode,diff,cs1,cs2,stat in c.changes:
99 99 <div class="cs_${change}">
100 100 <div class="node">
101 101 %if change != 'removed':
102 102 ${h.link_to(h.safe_unicode(filenode.path),c.anchor_url(filenode.changeset.raw_id,filenode.path))}
103 103 %else:
104 104 ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=h.FID('',filenode.path)))}
105 105 %endif
106 106 </div>
107 107 <div class="changes">${h.fancy_file_stats(stat)}</div>
108 108 </div>
109 109 %endfor
110 110 % if c.cut_off:
111 111 ${_('Changeset was too big and was cut off...')}
112 112 % endif
113 113 </div>
114 114 </div>
115 115
116 116 </div>
117
118 %for change,filenode,diff,cs1,cs2,stat in c.changes:
119 %if change !='removed':
120 <div id="${h.FID(filenode.changeset.raw_id,filenode.path)}" style="clear:both;height:90px;margin-top:-60px"></div>
121 <div class="diffblock margined comm">
122 <div class="code-header">
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
117
118 ## diff block
119 <%namespace name="diff_block" file="/changeset/diff_block.html"/>
120 ${diff_block.diff_block(c.changes)}
121
122 ## template for inline comment form
160 123 <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
161 ## template for inline comment form
162 ${comment.comment_inline_form()}
124 ${comment.comment_inline_form(c.changeset)}
163 125
164 <div class="comments">
165 <div class="comments-number">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
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>
126 ${comment.comments(c.changeset)}
127
200 128 <script type="text/javascript">
201 129 var deleteComment = function(comment_id){
202 130
203 131 var url = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}".replace('__COMMENT_ID__',comment_id);
204 132 var postData = '_method=delete';
205 133 var success = function(o){
206 134 var n = YUD.get('comment-'+comment_id);
207 135 n.parentNode.removeChild(n);
208 136 }
209 137 ajaxPOST(url,postData,success);
210 138 }
211 139
212 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 143 var act = e.currentTarget.nextElementSibling;
216 144
217 145 if(YUD.hasClass(act,'active')){
218 YUD.removeClass(act,'active');
219 YUD.setStyle(act,'display','none');
146 YUD.removeClass(act,'active');
147 YUD.setStyle(act,'display','none');
220 148 }else{
221 YUD.addClass(act,'active');
222 YUD.setStyle(act,'display','');
149 YUD.addClass(act,'active');
150 YUD.setStyle(act,'display','');
223 151 }
224 152 });
225
226 YUE.on(YUQ('.show-inline-comments'),'change',function(e){
227 var show = 'none';
228 var target = e.currentTarget;
229 if(target.checked){
230 var show = ''
231 }
232 var boxid = YUD.getAttribute(target,'id_for');
233 var comments = YUQ('#{0} .inline-comments'.format(boxid));
234 for(c in comments){
235 YUD.setStyle(comments[c],'display',show);
236 }
237 var btns = YUQ('#{0} .inline-comments-button'.format(boxid));
153
154 YUE.on(YUQ('.show-inline-comments'),'change',function(e){
155 var show = 'none';
156 var target = e.currentTarget;
157 if(target.checked){
158 var show = ''
159 }
160 var boxid = YUD.getAttribute(target,'id_for');
161 var comments = YUQ('#{0} .inline-comments'.format(boxid));
162 for(c in comments){
163 YUD.setStyle(comments[c],'display',show);
164 }
165 var btns = YUQ('#{0} .inline-comments-button'.format(boxid));
238 166 for(c in btns){
239 167 YUD.setStyle(btns[c],'display',show);
240 }
241 })
168 }
169 })
242 170
243 171 YUE.on(YUQ('.line'),'click',function(e){
244 var tr = e.currentTarget;
245 injectInlineForm(tr);
172 var tr = e.currentTarget;
173 injectInlineForm(tr);
246 174 });
247 175
248 176 // inject comments into they proper positions
249 177 var file_comments = YUQ('.inline-comment-placeholder');
250 178
251 179 for (f in file_comments){
252 var box = file_comments[f];
253 var inlines = box.children;
254 for(var i=0; i<inlines.length; i++){
255 try{
180 var box = file_comments[f];
181 var inlines = box.children;
182 for(var i=0; i<inlines.length; i++){
183 try{
256 184
257 var inline = inlines[i];
258 var lineno = YUD.getAttribute(inlines[i],'line');
259 var lineid = "{0}_{1}".format(YUD.getAttribute(inline,'target_id'),lineno);
185 var inline = inlines[i];
186 var lineno = YUD.getAttribute(inlines[i],'line');
187 var lineid = "{0}_{1}".format(YUD.getAttribute(inline,'target_id'),lineno);
260 188 var target_line = YUD.get(lineid);
261 189
262 190 var add = createInlineAddButton(target_line.parentNode,'${_("add another comment")}');
263 191 YUD.insertAfter(add,target_line.parentNode);
264 192
265 193 var comment = new YAHOO.util.Element(tableTr('inline-comments',inline.innerHTML))
266 194 YUD.insertAfter(comment,target_line.parentNode);
267 }catch(e){}
268 }
195 }catch(e){
196 console.log(e);
197 }
198 }
269 199 }
270 200 })
271 201
272 </script>
273 </div>
202 </script>
203
204 </div>
274 205 </%def>
@@ -1,70 +1,111 b''
1 ##usage:
1 ## -*- coding: utf-8 -*-
2 ## usage:
2 3 ## <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
3 4 ## ${comment.comment_block(co)}
4 5 ##
5 6 <%def name="comment_block(co)">
6 7 <div class="comment" id="comment-${co.comment_id}">
7 8 <div class="comment-wrapp">
8 9 <div class="meta">
9 10 <span class="user">
10 11 <img src="${h.gravatar_url(co.author.email, 20)}" />
11 12 ${co.author.username}
12 13 </span>
13 14 <a href="${h.url.current(anchor='comment-%s' % co.comment_id)}"> ${_('commented on')} </a>
14 15 ${h.short_id(co.revision)}
15 16 %if co.f_path:
16 17 ${_(' in file ')}
17 18 ${co.f_path}:L ${co.line_no}
18 19 %endif
19 20 <span class="date">
20 21 ${h.age(co.modified_at)}
21 22 </span>
22 23 </div>
23 24 <div class="text">
24 25 %if h.HasPermissionAny('hg.admin', 'repository.admin')() or co.author.user_id == c.rhodecode_user.user_id:
25 26 <div class="buttons">
26 27 <span onClick="deleteComment(${co.comment_id})" class="delete-comment ui-btn">${_('Delete')}</span>
27 28 </div>
28 29 %endif
29 30 ${h.rst_w_mentions(co.text)|n}
30 31 </div>
31 32 </div>
32 33 </div>
33 34 </%def>
34 35
35 36
36
37 <%def name="comment_inline_form()">
37 <%def name="comment_inline_form(changeset)">
38 38 <div id='comment-inline-form-template' style="display:none">
39 39 <div class="comment-inline-form">
40 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 42 <div class="clearfix">
43 43 <div class="comment-help">${_('Commenting on line')} {1}. ${_('Comments parsed using')}
44 44 <a href="${h.url('rst_help')}">RST</a> ${_('syntax')} ${_('with')}
45 45 <span style="color:#003367" class="tooltip" title="${_('Use @username inside this text to send notification to this RhodeCode user')}">@mention</span> ${_('support')}
46 46 </div>
47 47 <textarea id="text_{1}" name="text"></textarea>
48 48 </div>
49 49 <div class="comment-button">
50 50 <input type="hidden" name="f_path" value="{0}">
51 51 <input type="hidden" name="line" value="{1}">
52 52 ${h.submit('save', _('Comment'), class_='ui-btn')}
53 53 ${h.reset('hide-inline-form', _('Hide'), class_='ui-btn hide-inline-form')}
54 54 </div>
55 55 ${h.end_form()}
56 56 %else:
57 57 ${h.form('')}
58 58 <div class="clearfix">
59 59 <div class="comment-help">
60 60 ${'You need to be logged in to comment.'} <a href="${h.url('login_home',came_from=h.url.current())}">${_('Login now')}</a>
61 61 </div>
62 62 </div>
63 63 <div class="comment-button">
64 64 ${h.reset('hide-inline-form', _('Hide'), class_='ui-btn hide-inline-form')}
65 65 </div>
66 66 ${h.end_form()}
67 67 %endif
68 68 </div>
69 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 2 <%inherit file="/base/base.html"/>
2 3
3 4 <%def name="title()">
4 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 6 </%def>
6 7
7 8 <%def name="breadcrumbs_links()">
8 9 ${h.link_to(u'Home',h.url('/'))}
9 10 &raquo;
10 11 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
11 12 &raquo;
12 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 14 </%def>
14 15
15 16 <%def name="page_nav()">
16 17 ${self.menu('changelog')}
17 18 </%def>
18 19
19 20 <%def name="main()">
20 21 <div class="box">
21 22 <!-- box / title -->
22 23 <div class="title">
23 24 ${self.breadcrumbs()}
24 25 </div>
25 26 <div class="table">
26 27 <div id="body" class="diffblock">
27 <div class="code-header">
28 <h3>${_('Compare View')}</h3>
28 <div class="code-header cv">
29 <h3 class="code-header-title">${_('Compare View')}</h3>
29 30 <div>
30 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 32 </div>
32 33 </div>
33 34 </div>
34 35 <div id="changeset_compare_view_content">
35 36 <div class="container">
36 37 <table class="compare_view_commits noborder">
37 38 %for cs in c.cs_ranges:
38 39 <tr>
39 40 <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),14)}"/></div></td>
40 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 42 <td><div class="author">${h.person(cs.author)}</div></td>
42 43 <td><span class="tooltip" title="${h.age(cs.date)}">${cs.date}</span></td>
43 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 45 </tr>
45 46 %endfor
46 47 </table>
47 48 </div>
48 49 <div style="font-size:1.1em;font-weight: bold;clear:both;padding-top:10px">${_('Files affected')}</div>
49 50 <div class="cs_files">
50 51 %for cs in c.cs_ranges:
51 52 <div class="cur_cs">r${cs}</div>
52 53 %for change,filenode,diff,cs1,cs2,st in c.changes[cs.raw_id]:
53 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 55 %endfor
55 56 %endfor
56 57 </div>
57 58 </div>
58 59
59 60 </div>
60 %for cs in c.cs_ranges:
61 %for change,filenode,diff,cs1,cs2,st in c.changes[cs.raw_id]:
62 %if change !='removed':
63 <div style="clear:both;height:10px"></div>
64 <div class="diffblock margined">
65 <div id="${h.FID(cs.raw_id,filenode.path)}" class="code-header">
66 <div class="changeset_header">
67 <span class="changeset_file">
68 ${h.link_to_if(change!='removed',h.safe_unicode(filenode.path),h.url('files_home',repo_name=c.repo_name,
69 revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))}
70 </span>
71 %if 1:
72 &raquo; <span>${h.link_to(_('diff'),
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 &raquo; <span>${h.link_to(_('raw diff'),
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 &raquo; <span>${h.link_to(_('download diff'),
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 %endif
79 </div>
80 </div>
81 <div class="code-body">
82 %if diff:
83 ${diff|n}
84 %else:
85 ${_('No changes in this file')}
86 %endif
87 </div>
88 </div>
89 %endif
90 %endfor
91 %endfor
61 <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
62 <%namespace name="diff_block" file="/changeset/diff_block.html"/>
63 %for cs in c.cs_ranges:
64 ##${comment.comment_inline_form(cs)}
65 ## diff block
66 <h3 style="border:none;padding-top:8px;">${'r%s:%s' % (cs.revision,h.short_id(cs.raw_id))}</h3>
67 ${diff_block.diff_block(c.changes[cs.raw_id])}
68 ##${comment.comments(cs)}
69
70 %endfor
71 <script type="text/javascript">
72
73 YUE.onDOMReady(function(){
74
75 YUE.on(YUQ('.diff-menu-activate'),'click',function(e){
76 var act = e.currentTarget.nextElementSibling;
77
78 if(YUD.hasClass(act,'active')){
79 YUD.removeClass(act,'active');
80 YUD.setStyle(act,'display','none');
81 }else{
82 YUD.addClass(act,'active');
83 YUD.setStyle(act,'display','');
84 }
85 });
86 })
87 </script>
92 88 </div>
93 89 </%def> No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now