##// END OF EJS Templates
new files views...
marcink -
r1737:61eda8bf beta
parent child Browse files
Show More
@@ -1,512 +1,512 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.controllers.files
4 4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 5
6 6 Files controller for RhodeCode
7 7
8 8 :created_on: Apr 21, 2010
9 9 :author: marcink
10 10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 11 :license: GPLv3, see COPYING for more details.
12 12 """
13 13 # This program is free software: you can redistribute it and/or modify
14 14 # it under the terms of the GNU General Public License as published by
15 15 # the Free Software Foundation, either version 3 of the License, or
16 16 # (at your option) any later version.
17 17 #
18 18 # This program is distributed in the hope that it will be useful,
19 19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 21 # GNU General Public License for more details.
22 22 #
23 23 # You should have received a copy of the GNU General Public License
24 24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 25
26 26 import os
27 27 import logging
28 28 import traceback
29 29
30 30 from os.path import join as jn
31 31
32 32 from pylons import request, response, session, tmpl_context as c, url
33 33 from pylons.i18n.translation import _
34 34 from pylons.controllers.util import redirect
35 35 from pylons.decorators import jsonify
36 36
37 37 from vcs.conf import settings
38 38 from vcs.exceptions import RepositoryError, ChangesetDoesNotExistError, \
39 39 EmptyRepositoryError, ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError
40 40 from vcs.nodes import FileNode, NodeKind
41 41 from vcs.utils import diffs as differ
42 42
43 43 from rhodecode.lib import convert_line_endings, detect_mode, safe_str
44 44 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
45 45 from rhodecode.lib.base import BaseRepoController, render
46 46 from rhodecode.lib.utils import EmptyChangeset
47 47 import rhodecode.lib.helpers as h
48 48 from rhodecode.model.repo import RepoModel
49 49
50 50 log = logging.getLogger(__name__)
51 51
52 52
53 53 class FilesController(BaseRepoController):
54 54
55 55 @LoginRequired()
56 56 def __before__(self):
57 57 super(FilesController, self).__before__()
58 58 c.cut_off_limit = self.cut_off_limit
59 59
60 60 def __get_cs_or_redirect(self, rev, repo_name, redirect_after=True):
61 61 """
62 62 Safe way to get changeset if error occur it redirects to tip with
63 63 proper message
64 64
65 65 :param rev: revision to fetch
66 66 :param repo_name: repo name to redirect after
67 67 """
68 68
69 69 try:
70 70 return c.rhodecode_repo.get_changeset(rev)
71 71 except EmptyRepositoryError, e:
72 72 if not redirect_after:
73 73 return None
74 74 url_ = url('files_add_home',
75 75 repo_name=c.repo_name,
76 76 revision=0, f_path='')
77 77 add_new = '<a href="%s">[%s]</a>' % (url_, _('add new'))
78 78 h.flash(h.literal(_('There are no files yet %s' % add_new)),
79 79 category='warning')
80 80 redirect(h.url('summary_home', repo_name=repo_name))
81 81
82 82 except RepositoryError, e:
83 83 h.flash(str(e), category='warning')
84 84 redirect(h.url('files_home', repo_name=repo_name, revision='tip'))
85 85
86 86 def __get_filenode_or_redirect(self, repo_name, cs, path):
87 87 """
88 88 Returns file_node, if error occurs or given path is directory,
89 89 it'll redirect to top level path
90 90
91 91 :param repo_name: repo_name
92 92 :param cs: given changeset
93 93 :param path: path to lookup
94 94 """
95 95
96 96 try:
97 97 file_node = cs.get_node(path)
98 98 if file_node.is_dir():
99 99 raise RepositoryError('given path is a directory')
100 100 except RepositoryError, e:
101 101 h.flash(str(e), category='warning')
102 102 redirect(h.url('files_home', repo_name=repo_name,
103 103 revision=cs.raw_id))
104 104
105 105 return file_node
106 106
107 107
108 108 def __get_paths(self, changeset, starting_path):
109 109 """recursive walk in root dir and return a set of all path in that dir
110 110 based on repository walk function
111 111 """
112 112 _files = list()
113 113 _dirs = list()
114 114
115 115 try:
116 116 tip = changeset
117 117 for topnode, dirs, files in tip.walk(starting_path):
118 118 for f in files:
119 119 _files.append(f.path)
120 120 for d in dirs:
121 121 _dirs.append(d.path)
122 122 except RepositoryError, e:
123 123 log.debug(traceback.format_exc())
124 124 pass
125 125 return _dirs, _files
126 126
127 127 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
128 128 'repository.admin')
129 129 def index(self, repo_name, revision, f_path):
130 130 #reditect to given revision from form if given
131 131 post_revision = request.POST.get('at_rev', None)
132 132 if post_revision:
133 133 cs = self.__get_cs_or_redirect(post_revision, repo_name)
134 134 redirect(url('files_home', repo_name=c.repo_name,
135 135 revision=cs.raw_id, f_path=f_path))
136 136
137 137 c.changeset = self.__get_cs_or_redirect(revision, repo_name)
138 138 c.branch = request.GET.get('branch', None)
139 139 c.f_path = f_path
140 140
141 141 cur_rev = c.changeset.revision
142 142
143 143 #prev link
144 144 try:
145 145 prev_rev = c.rhodecode_repo.get_changeset(cur_rev).prev(c.branch)
146 146 c.url_prev = url('files_home', repo_name=c.repo_name,
147 147 revision=prev_rev.raw_id, f_path=f_path)
148 148 if c.branch:
149 149 c.url_prev += '?branch=%s' % c.branch
150 150 except (ChangesetDoesNotExistError, VCSError):
151 151 c.url_prev = '#'
152 152
153 153 #next link
154 154 try:
155 155 next_rev = c.rhodecode_repo.get_changeset(cur_rev).next(c.branch)
156 156 c.url_next = url('files_home', repo_name=c.repo_name,
157 157 revision=next_rev.raw_id, f_path=f_path)
158 158 if c.branch:
159 159 c.url_next += '?branch=%s' % c.branch
160 160 except (ChangesetDoesNotExistError, VCSError):
161 161 c.url_next = '#'
162 162
163 163 #files or dirs
164 164 try:
165 c.files_list = c.changeset.get_node(f_path)
165 c.file = c.changeset.get_node(f_path)
166 166
167 if c.files_list.is_file():
167 if c.file.is_file():
168 168 c.file_history = self._get_node_history(c.changeset, f_path)
169 169 else:
170 170 c.file_history = []
171 171 except RepositoryError, e:
172 172 h.flash(str(e), category='warning')
173 173 redirect(h.url('files_home', repo_name=repo_name,
174 174 revision=revision))
175 175
176 176 return render('files/files.html')
177 177
178 178 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
179 179 'repository.admin')
180 180 def rawfile(self, repo_name, revision, f_path):
181 181 cs = self.__get_cs_or_redirect(revision, repo_name)
182 182 file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path)
183 183
184 184 response.content_disposition = 'attachment; filename=%s' % \
185 185 safe_str(f_path.split(os.sep)[-1])
186 186
187 187 response.content_type = file_node.mimetype
188 188 return file_node.content
189 189
190 190 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
191 191 'repository.admin')
192 192 def raw(self, repo_name, revision, f_path):
193 193 cs = self.__get_cs_or_redirect(revision, repo_name)
194 194 file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path)
195 195
196 196 raw_mimetype_mapping = {
197 197 # map original mimetype to a mimetype used for "show as raw"
198 198 # you can also provide a content-disposition to override the
199 199 # default "attachment" disposition.
200 200 # orig_type: (new_type, new_dispo)
201 201
202 202 # show images inline:
203 203 'image/x-icon': ('image/x-icon', 'inline'),
204 204 'image/png': ('image/png', 'inline'),
205 205 'image/gif': ('image/gif', 'inline'),
206 206 'image/jpeg': ('image/jpeg', 'inline'),
207 207 'image/svg+xml': ('image/svg+xml', 'inline'),
208 208 }
209 209
210 210 mimetype = file_node.mimetype
211 211 try:
212 212 mimetype, dispo = raw_mimetype_mapping[mimetype]
213 213 except KeyError:
214 214 # we don't know anything special about this, handle it safely
215 215 if file_node.is_binary:
216 216 # do same as download raw for binary files
217 217 mimetype, dispo = 'application/octet-stream', 'attachment'
218 218 else:
219 219 # do not just use the original mimetype, but force text/plain,
220 220 # otherwise it would serve text/html and that might be unsafe.
221 221 # Note: underlying vcs library fakes text/plain mimetype if the
222 222 # mimetype can not be determined and it thinks it is not
223 223 # binary.This might lead to erroneous text display in some
224 224 # cases, but helps in other cases, like with text files
225 225 # without extension.
226 226 mimetype, dispo = 'text/plain', 'inline'
227 227
228 228 if dispo == 'attachment':
229 229 dispo = 'attachment; filename=%s' % \
230 230 safe_str(f_path.split(os.sep)[-1])
231 231
232 232 response.content_disposition = dispo
233 233 response.content_type = mimetype
234 234 return file_node.content
235 235
236 236 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
237 237 'repository.admin')
238 238 def annotate(self, repo_name, revision, f_path):
239 239 c.cs = self.__get_cs_or_redirect(revision, repo_name)
240 240 c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
241 241
242 242 c.file_history = self._get_node_history(c.cs, f_path)
243 243 c.f_path = f_path
244 244 return render('files/files_annotate.html')
245 245
246 246 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
247 247 def edit(self, repo_name, revision, f_path):
248 248 r_post = request.POST
249 249
250 250 c.cs = self.__get_cs_or_redirect(revision, repo_name)
251 251 c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
252 252
253 253 if c.file.is_binary:
254 254 return redirect(url('files_home', repo_name=c.repo_name,
255 255 revision=c.cs.raw_id, f_path=f_path))
256 256
257 257 c.f_path = f_path
258 258
259 259 if r_post:
260 260
261 261 old_content = c.file.content
262 262 sl = old_content.splitlines(1)
263 263 first_line = sl[0] if sl else ''
264 264 # modes: 0 - Unix, 1 - Mac, 2 - DOS
265 265 mode = detect_mode(first_line, 0)
266 266 content = convert_line_endings(r_post.get('content'), mode)
267 267
268 268 message = r_post.get('message') or (_('Edited %s via RhodeCode')
269 269 % (f_path))
270 270 author = self.rhodecode_user.full_contact
271 271
272 272 if content == old_content:
273 273 h.flash(_('No changes'),
274 274 category='warning')
275 275 return redirect(url('changeset_home', repo_name=c.repo_name,
276 276 revision='tip'))
277 277
278 278 try:
279 279 self.scm_model.commit_change(repo=c.rhodecode_repo,
280 280 repo_name=repo_name, cs=c.cs,
281 281 user=self.rhodecode_user,
282 282 author=author, message=message,
283 283 content=content, f_path=f_path)
284 284 h.flash(_('Successfully committed to %s' % f_path),
285 285 category='success')
286 286
287 287 except Exception:
288 288 log.error(traceback.format_exc())
289 289 h.flash(_('Error occurred during commit'), category='error')
290 290 return redirect(url('changeset_home',
291 291 repo_name=c.repo_name, revision='tip'))
292 292
293 293 return render('files/files_edit.html')
294 294
295 295 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
296 296 def add(self, repo_name, revision, f_path):
297 297 r_post = request.POST
298 298 c.cs = self.__get_cs_or_redirect(revision, repo_name,
299 299 redirect_after=False)
300 300 if c.cs is None:
301 301 c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias)
302 302
303 303 c.f_path = f_path
304 304
305 305 if r_post:
306 306 unix_mode = 0
307 307 content = convert_line_endings(r_post.get('content'), unix_mode)
308 308
309 309 message = r_post.get('message') or (_('Added %s via RhodeCode')
310 310 % (f_path))
311 311 location = r_post.get('location')
312 312 filename = r_post.get('filename')
313 313 file_obj = r_post.get('upload_file', None)
314 314
315 315 if file_obj is not None and hasattr(file_obj, 'filename'):
316 316 filename = file_obj.filename
317 317 content = file_obj.file
318 318
319 319 node_path = os.path.join(location, filename)
320 320 author = self.rhodecode_user.full_contact
321 321
322 322 if not content:
323 323 h.flash(_('No content'), category='warning')
324 324 return redirect(url('changeset_home', repo_name=c.repo_name,
325 325 revision='tip'))
326 326 if not filename:
327 327 h.flash(_('No filename'), category='warning')
328 328 return redirect(url('changeset_home', repo_name=c.repo_name,
329 329 revision='tip'))
330 330
331 331 try:
332 332 self.scm_model.create_node(repo=c.rhodecode_repo,
333 333 repo_name=repo_name, cs=c.cs,
334 334 user=self.rhodecode_user,
335 335 author=author, message=message,
336 336 content=content, f_path=node_path)
337 337 h.flash(_('Successfully committed to %s' % node_path),
338 338 category='success')
339 339 except NodeAlreadyExistsError, e:
340 340 h.flash(_(e), category='error')
341 341 except Exception:
342 342 log.error(traceback.format_exc())
343 343 h.flash(_('Error occurred during commit'), category='error')
344 344 return redirect(url('changeset_home',
345 345 repo_name=c.repo_name, revision='tip'))
346 346
347 347 return render('files/files_add.html')
348 348
349 349 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
350 350 'repository.admin')
351 351 def archivefile(self, repo_name, fname):
352 352
353 353 fileformat = None
354 354 revision = None
355 355 ext = None
356 356 subrepos = request.GET.get('subrepos') == 'true'
357 357
358 358 for a_type, ext_data in settings.ARCHIVE_SPECS.items():
359 359 archive_spec = fname.split(ext_data[1])
360 360 if len(archive_spec) == 2 and archive_spec[1] == '':
361 361 fileformat = a_type or ext_data[1]
362 362 revision = archive_spec[0]
363 363 ext = ext_data[1]
364 364
365 365 try:
366 366 dbrepo = RepoModel().get_by_repo_name(repo_name)
367 367 if dbrepo.enable_downloads is False:
368 368 return _('downloads disabled')
369 369
370 370 # patch and reset hooks section of UI config to not run any
371 371 # hooks on fetching archives with subrepos
372 372 for k, v in c.rhodecode_repo._repo.ui.configitems('hooks'):
373 373 c.rhodecode_repo._repo.ui.setconfig('hooks', k, None)
374 374
375 375 cs = c.rhodecode_repo.get_changeset(revision)
376 376 content_type = settings.ARCHIVE_SPECS[fileformat][0]
377 377 except ChangesetDoesNotExistError:
378 378 return _('Unknown revision %s') % revision
379 379 except EmptyRepositoryError:
380 380 return _('Empty repository')
381 381 except (ImproperArchiveTypeError, KeyError):
382 382 return _('Unknown archive type')
383 383
384 384 response.content_type = content_type
385 385 response.content_disposition = 'attachment; filename=%s-%s%s' \
386 386 % (repo_name, revision, ext)
387 387
388 388 import tempfile
389 389 archive = tempfile.mkstemp()[1]
390 390 t = open(archive, 'wb')
391 391 cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
392 392
393 393 def get_chunked_archive(archive):
394 394 stream = open(archive, 'rb')
395 395 while True:
396 396 data = stream.read(4096)
397 397 if not data:
398 398 os.remove(archive)
399 399 break
400 400 yield data
401 401
402 402 return get_chunked_archive(archive)
403 403
404 404 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
405 405 'repository.admin')
406 406 def diff(self, repo_name, f_path):
407 407 diff1 = request.GET.get('diff1')
408 408 diff2 = request.GET.get('diff2')
409 409 c.action = request.GET.get('diff')
410 410 c.no_changes = diff1 == diff2
411 411 c.f_path = f_path
412 412 c.big_diff = False
413 413
414 414 try:
415 415 if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]:
416 416 c.changeset_1 = c.rhodecode_repo.get_changeset(diff1)
417 417 node1 = c.changeset_1.get_node(f_path)
418 418 else:
419 419 c.changeset_1 = EmptyChangeset(repo=c.rhodecode_repo)
420 420 node1 = FileNode('.', '', changeset=c.changeset_1)
421 421
422 422 if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]:
423 423 c.changeset_2 = c.rhodecode_repo.get_changeset(diff2)
424 424 node2 = c.changeset_2.get_node(f_path)
425 425 else:
426 426 c.changeset_2 = EmptyChangeset(repo=c.rhodecode_repo)
427 427 node2 = FileNode('.', '', changeset=c.changeset_2)
428 428 except RepositoryError:
429 429 return redirect(url('files_home',
430 430 repo_name=c.repo_name, f_path=f_path))
431 431
432 432 if c.action == 'download':
433 433 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
434 434 format='gitdiff')
435 435
436 436 diff_name = '%s_vs_%s.diff' % (diff1, diff2)
437 437 response.content_type = 'text/plain'
438 438 response.content_disposition = 'attachment; filename=%s' \
439 439 % diff_name
440 440 return diff.raw_diff()
441 441
442 442 elif c.action == 'raw':
443 443 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
444 444 format='gitdiff')
445 445 response.content_type = 'text/plain'
446 446 return diff.raw_diff()
447 447
448 448 elif c.action == 'diff':
449 449 if node1.is_binary or node2.is_binary:
450 450 c.cur_diff = _('Binary file')
451 451 elif node1.size > self.cut_off_limit or \
452 452 node2.size > self.cut_off_limit:
453 453 c.cur_diff = ''
454 454 c.big_diff = True
455 455 else:
456 456 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
457 457 format='gitdiff')
458 458 c.cur_diff = diff.as_html()
459 459 else:
460 460
461 461 #default option
462 462 if node1.is_binary or node2.is_binary:
463 463 c.cur_diff = _('Binary file')
464 464 elif node1.size > self.cut_off_limit or \
465 465 node2.size > self.cut_off_limit:
466 466 c.cur_diff = ''
467 467 c.big_diff = True
468 468
469 469 else:
470 470 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
471 471 format='gitdiff')
472 472 c.cur_diff = diff.as_html()
473 473
474 474 if not c.cur_diff and not c.big_diff:
475 475 c.no_changes = True
476 476 return render('files/file_diff.html')
477 477
478 478 def _get_node_history(self, cs, f_path):
479 479 changesets = cs.get_file_history(f_path)
480 480 hist_l = []
481 481
482 482 changesets_group = ([], _("Changesets"))
483 483 branches_group = ([], _("Branches"))
484 484 tags_group = ([], _("Tags"))
485 485
486 486 for chs in changesets:
487 487 n_desc = 'r%s:%s' % (chs.revision, chs.short_id)
488 488 changesets_group[0].append((chs.raw_id, n_desc,))
489 489
490 490 hist_l.append(changesets_group)
491 491
492 492 for name, chs in c.rhodecode_repo.branches.items():
493 493 #chs = chs.split(':')[-1]
494 494 branches_group[0].append((chs, name),)
495 495 hist_l.append(branches_group)
496 496
497 497 for name, chs in c.rhodecode_repo.tags.items():
498 498 #chs = chs.split(':')[-1]
499 499 tags_group[0].append((chs, name),)
500 500 hist_l.append(tags_group)
501 501
502 502 return hist_l
503 503
504 504 @jsonify
505 505 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
506 506 'repository.admin')
507 507 def nodelist(self, repo_name, revision, f_path):
508 508 if request.environ.get('HTTP_X_PARTIAL_XHR'):
509 509 cs = self.__get_cs_or_redirect(revision, repo_name)
510 510 _d, _f = self.__get_paths(cs, f_path)
511 511 return _d + _f
512 512
@@ -1,127 +1,159 b''
1 1 div.codeblock {
2 2 overflow: auto;
3 3 padding: 0px;
4 4 border: 1px solid #ccc;
5 5 background: #f8f8f8;
6 6 font-size: 100%;
7 7 line-height: 100%;
8 8 /* new */
9 9 line-height: 125%;
10 -webkit-border-radius: 4px;
11 -moz-border-radius: 4px;
12 border-radius: 4px;
10 13 }
11 14 div.codeblock .code-header{
12 15 border-bottom: 1px solid #CCCCCC;
13 16 background: #EEEEEE;
14 17 padding:10px 0 10px 0;
15 18 }
16 div.codeblock .code-header .revision{
19
20 div.codeblock .code-header .stats{
21 clear: both;
22 margin-top:-3px;
23 padding-left: 8px;
24 border-bottom: 1px solid rgb(204, 204, 204);
25 margin-bottom: 5px; height: 23px;
26 }
27
28 div.codeblock .code-header .stats .left{
29 float:left;
30 }
31 div.codeblock .code-header .stats .left.item{
32 float:left;
33 padding: 0 9px 0 9px;
34 border-right:1px solid #ccc;
35 }
36 div.codeblock .code-header .stats .left.item.last{
37 border-right:none;
38 }
39 div.codeblock .code-header .stats .buttons{
40 float:right;
41 padding-right:4px;
42 }
43
44 div.codeblock .code-header .author{
17 45 margin-left:25px;
18 46 font-weight: bold;
47 height: 25px;
48 }
49 div.codeblock .code-header .author .user{
50 padding-top:3px;
19 51 }
20 52 div.codeblock .code-header .commit{
21 53 margin-left:25px;
22 54 font-weight: normal;
23 55 white-space:pre;
24 56 }
25 57
26 58 div.codeblock .code-body table{
27 59 width: 0 !important;
28 60 border: 0px !important;
29 61 }
30 62 div.codeblock .code-body table td {
31 63 border: 0px !important;
32 64 }
33 65 div.code-body {
34 66 background-color: #FFFFFF;
35 67 }
36 68 div.code-body pre .match{
37 69 background-color: #FAFFA6;
38 70 }
39 71 div.code-body pre .break{
40 72 background-color: #DDE7EF;
41 73 width: 100%;
42 74 color: #747474;
43 75 display: block;
44 76
45 77 }
46 78 div.annotatediv{
47 79 margin-left:2px;
48 80 margin-right:4px;
49 81 }
50 82 .code-highlight {
51 83 padding: 0px;
52 84 margin-top: 5px;
53 85 margin-bottom: 5px;
54 86 border-left: 2px solid #ccc;
55 87 }
56 88 .code-highlight pre, .linenodiv pre {
57 89 padding: 5px;
58 90 margin: 0;
59 91 }
60 92 .code-highlight pre div:target {
61 93 background-color: #FFFFBE !important;
62 94 }
63 95
64 96 .linenos a { text-decoration: none; }
65 97
66 98 .code { display: block; }
67 99 .code-highlight .hll { background-color: #ffffcc }
68 100 .code-highlight .c { color: #408080; font-style: italic } /* Comment */
69 101 .code-highlight .err { border: 1px solid #FF0000 } /* Error */
70 102 .code-highlight .k { color: #008000; font-weight: bold } /* Keyword */
71 103 .code-highlight .o { color: #666666 } /* Operator */
72 104 .code-highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
73 105 .code-highlight .cp { color: #BC7A00 } /* Comment.Preproc */
74 106 .code-highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
75 107 .code-highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
76 108 .code-highlight .gd { color: #A00000 } /* Generic.Deleted */
77 109 .code-highlight .ge { font-style: italic } /* Generic.Emph */
78 110 .code-highlight .gr { color: #FF0000 } /* Generic.Error */
79 111 .code-highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
80 112 .code-highlight .gi { color: #00A000 } /* Generic.Inserted */
81 113 .code-highlight .go { color: #808080 } /* Generic.Output */
82 114 .code-highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
83 115 .code-highlight .gs { font-weight: bold } /* Generic.Strong */
84 116 .code-highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
85 117 .code-highlight .gt { color: #0040D0 } /* Generic.Traceback */
86 118 .code-highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
87 119 .code-highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
88 120 .code-highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
89 121 .code-highlight .kp { color: #008000 } /* Keyword.Pseudo */
90 122 .code-highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
91 123 .code-highlight .kt { color: #B00040 } /* Keyword.Type */
92 124 .code-highlight .m { color: #666666 } /* Literal.Number */
93 125 .code-highlight .s { color: #BA2121 } /* Literal.String */
94 126 .code-highlight .na { color: #7D9029 } /* Name.Attribute */
95 127 .code-highlight .nb { color: #008000 } /* Name.Builtin */
96 128 .code-highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
97 129 .code-highlight .no { color: #880000 } /* Name.Constant */
98 130 .code-highlight .nd { color: #AA22FF } /* Name.Decorator */
99 131 .code-highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
100 132 .code-highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
101 133 .code-highlight .nf { color: #0000FF } /* Name.Function */
102 134 .code-highlight .nl { color: #A0A000 } /* Name.Label */
103 135 .code-highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
104 136 .code-highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
105 137 .code-highlight .nv { color: #19177C } /* Name.Variable */
106 138 .code-highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
107 139 .code-highlight .w { color: #bbbbbb } /* Text.Whitespace */
108 140 .code-highlight .mf { color: #666666 } /* Literal.Number.Float */
109 141 .code-highlight .mh { color: #666666 } /* Literal.Number.Hex */
110 142 .code-highlight .mi { color: #666666 } /* Literal.Number.Integer */
111 143 .code-highlight .mo { color: #666666 } /* Literal.Number.Oct */
112 144 .code-highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
113 145 .code-highlight .sc { color: #BA2121 } /* Literal.String.Char */
114 146 .code-highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
115 147 .code-highlight .s2 { color: #BA2121 } /* Literal.String.Double */
116 148 .code-highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
117 149 .code-highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
118 150 .code-highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
119 151 .code-highlight .sx { color: #008000 } /* Literal.String.Other */
120 152 .code-highlight .sr { color: #BB6688 } /* Literal.String.Regex */
121 153 .code-highlight .s1 { color: #BA2121 } /* Literal.String.Single */
122 154 .code-highlight .ss { color: #19177C } /* Literal.String.Symbol */
123 155 .code-highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
124 156 .code-highlight .vc { color: #19177C } /* Name.Variable.Class */
125 157 .code-highlight .vg { color: #19177C } /* Name.Variable.Global */
126 158 .code-highlight .vi { color: #19177C } /* Name.Variable.Instance */
127 159 .code-highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
@@ -1,3541 +1,3544 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,#header #header-inner #quick li ul li a.tags:hover
620 620 {
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.admin,#header #header-inner #quick li ul li a.admin:hover
628 628 {
629 629 background: #FFF url("../images/icons/cog_edit.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 .groups_breadcrumbs a {
636 636 color: #fff;
637 637 }
638 638
639 639 .groups_breadcrumbs a:hover {
640 640 color: #bfe3ff;
641 641 text-decoration: none;
642 642 }
643 643
644 644 .quick_repo_menu {
645 background: #FFF url("../images/vertical-indicator.png") 8px 50%
646 no-repeat !important;
645 background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important;
647 646 cursor: pointer;
648 647 width: 8px;
648 border: 1px solid transparent;
649 649 }
650 650
651 651 .quick_repo_menu.active {
652 background: #FFF url("../images/horizontal-indicator.png") 4px 50%
653 no-repeat !important;
654 cursor: pointer;
652 background: url("../images/horizontal-indicator.png") no-repeat scroll 5px 50% #FFFFFF !important;
653 border: 1px solid #003367;
654 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
655 cursor: pointer;
655 656 }
656 657
657 658 .quick_repo_menu .menu_items {
658 margin-top: 6px;
659 margin-top: 10px;
660 margin-left:-6px;
659 661 width: 150px;
660 662 position: absolute;
661 663 background-color: #FFF;
662 664 background: none repeat scroll 0 0 #FFFFFF;
663 665 border-color: #003367 #666666 #666666;
664 666 border-right: 1px solid #666666;
665 667 border-style: solid;
666 668 border-width: 1px;
667 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
669 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
670 border-top-style: none;
668 671 }
669 672
670 673 .quick_repo_menu .menu_items li {
671 674 padding: 0 !important;
672 675 }
673 676
674 677 .quick_repo_menu .menu_items a {
675 678 display: block;
676 679 padding: 4px 12px 4px 8px;
677 680 }
678 681
679 682 .quick_repo_menu .menu_items a:hover {
680 683 background-color: #EEE;
681 684 text-decoration: none;
682 685 }
683 686
684 687 .quick_repo_menu .menu_items .icon img {
685 688 margin-bottom: -2px;
686 689 }
687 690
688 691 .quick_repo_menu .menu_items.hidden {
689 692 display: none;
690 693 }
691 694
692 695 #content #left {
693 696 left: 0;
694 697 width: 280px;
695 698 position: absolute;
696 699 }
697 700
698 701 #content #right {
699 702 margin: 0 60px 10px 290px;
700 703 }
701 704
702 705 #content div.box {
703 706 clear: both;
704 707 overflow: hidden;
705 708 background: #fff;
706 709 margin: 0 0 10px;
707 710 padding: 0 0 10px;
708 711 -webkit-border-radius: 4px 4px 4px 4px;
709 712 -khtml-border-radius: 4px 4px 4px 4px;
710 713 -moz-border-radius: 4px 4px 4px 4px;
711 714 border-radius: 4px 4px 4px 4px;
712 715 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
713 716 }
714 717
715 718 #content div.box-left {
716 719 width: 49%;
717 720 clear: none;
718 721 float: left;
719 722 margin: 0 0 10px;
720 723 }
721 724
722 725 #content div.box-right {
723 726 width: 49%;
724 727 clear: none;
725 728 float: right;
726 729 margin: 0 0 10px;
727 730 }
728 731
729 732 #content div.box div.title {
730 733 clear: both;
731 734 overflow: hidden;
732 735 background-color: #eedc94;
733 736 background-repeat: repeat-x;
734 737 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
735 738 to(#eedc94) );
736 739 background-image: -moz-linear-gradient(top, #003b76, #00376e);
737 740 background-image: -ms-linear-gradient(top, #003b76, #00376e);
738 741 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
739 742 color-stop(100%, #00376e) );
740 743 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
741 744 background-image: -o-linear-gradient(top, #003b76, #00376e) );
742 745 background-image: linear-gradient(top, #003b76, #00376e);
743 746 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
744 747 endColorstr='#00376e', GradientType=0 );
745 748 margin: 0 0 20px;
746 749 padding: 0;
747 750 }
748 751
749 752 #content div.box div.title h5 {
750 753 float: left;
751 754 border: none;
752 755 color: #fff;
753 756 text-transform: uppercase;
754 757 margin: 0;
755 758 padding: 11px 0 11px 10px;
756 759 }
757 760
758 761 #content div.box div.title ul.links li {
759 762 list-style: none;
760 763 float: left;
761 764 margin: 0;
762 765 padding: 0;
763 766 }
764 767
765 768 #content div.box div.title ul.links li a {
766 769 border-left: 1px solid #316293;
767 770 color: #FFFFFF;
768 771 display: block;
769 772 float: left;
770 773 font-size: 13px;
771 774 font-weight: 700;
772 775 height: 1%;
773 776 margin: 0;
774 777 padding: 11px 22px 12px;
775 778 text-decoration: none;
776 779 }
777 780
778 781 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6
779 782 {
780 783 clear: both;
781 784 overflow: hidden;
782 785 border-bottom: 1px solid #DDD;
783 786 margin: 10px 20px;
784 787 padding: 0 0 15px;
785 788 }
786 789
787 790 #content div.box p {
788 791 color: #5f5f5f;
789 792 font-size: 12px;
790 793 line-height: 150%;
791 794 margin: 0 24px 10px;
792 795 padding: 0;
793 796 }
794 797
795 798 #content div.box blockquote {
796 799 border-left: 4px solid #DDD;
797 800 color: #5f5f5f;
798 801 font-size: 11px;
799 802 line-height: 150%;
800 803 margin: 0 34px;
801 804 padding: 0 0 0 14px;
802 805 }
803 806
804 807 #content div.box blockquote p {
805 808 margin: 10px 0;
806 809 padding: 0;
807 810 }
808 811
809 812 #content div.box dl {
810 margin: 10px 24px;
813 margin: 10px 0px;
811 814 }
812 815
813 816 #content div.box dt {
814 817 font-size: 12px;
815 818 margin: 0;
816 819 }
817 820
818 821 #content div.box dd {
819 822 font-size: 12px;
820 823 margin: 0;
821 824 padding: 8px 0 8px 15px;
822 825 }
823 826
824 827 #content div.box li {
825 828 font-size: 12px;
826 829 padding: 4px 0;
827 830 }
828 831
829 832 #content div.box ul.disc,#content div.box ul.circle {
830 833 margin: 10px 24px 10px 38px;
831 834 }
832 835
833 836 #content div.box ul.square {
834 837 margin: 10px 24px 10px 40px;
835 838 }
836 839
837 840 #content div.box img.left {
838 841 border: none;
839 842 float: left;
840 843 margin: 10px 10px 10px 0;
841 844 }
842 845
843 846 #content div.box img.right {
844 847 border: none;
845 848 float: right;
846 849 margin: 10px 0 10px 10px;
847 850 }
848 851
849 852 #content div.box div.messages {
850 853 clear: both;
851 854 overflow: hidden;
852 855 margin: 0 20px;
853 856 padding: 0;
854 857 }
855 858
856 859 #content div.box div.message {
857 860 clear: both;
858 861 overflow: hidden;
859 862 margin: 0;
860 863 padding: 10px 0;
861 864 }
862 865
863 866 #content div.box div.message a {
864 867 font-weight: 400 !important;
865 868 }
866 869
867 870 #content div.box div.message div.image {
868 871 float: left;
869 872 margin: 9px 0 0 5px;
870 873 padding: 6px;
871 874 }
872 875
873 876 #content div.box div.message div.image img {
874 877 vertical-align: middle;
875 878 margin: 0;
876 879 }
877 880
878 881 #content div.box div.message div.text {
879 882 float: left;
880 883 margin: 0;
881 884 padding: 9px 6px;
882 885 }
883 886
884 887 #content div.box div.message div.dismiss a {
885 888 height: 16px;
886 889 width: 16px;
887 890 display: block;
888 891 background: url("../images/icons/cross.png") no-repeat;
889 892 margin: 15px 14px 0 0;
890 893 padding: 0;
891 894 }
892 895
893 896 #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
894 897 {
895 898 border: none;
896 899 margin: 0;
897 900 padding: 0;
898 901 }
899 902
900 903 #content div.box div.message div.text span {
901 904 height: 1%;
902 905 display: block;
903 906 margin: 0;
904 907 padding: 5px 0 0;
905 908 }
906 909
907 910 #content div.box div.message-error {
908 911 height: 1%;
909 912 clear: both;
910 913 overflow: hidden;
911 914 background: #FBE3E4;
912 915 border: 1px solid #FBC2C4;
913 916 color: #860006;
914 917 }
915 918
916 919 #content div.box div.message-error h6 {
917 920 color: #860006;
918 921 }
919 922
920 923 #content div.box div.message-warning {
921 924 height: 1%;
922 925 clear: both;
923 926 overflow: hidden;
924 927 background: #FFF6BF;
925 928 border: 1px solid #FFD324;
926 929 color: #5f5200;
927 930 }
928 931
929 932 #content div.box div.message-warning h6 {
930 933 color: #5f5200;
931 934 }
932 935
933 936 #content div.box div.message-notice {
934 937 height: 1%;
935 938 clear: both;
936 939 overflow: hidden;
937 940 background: #8FBDE0;
938 941 border: 1px solid #6BACDE;
939 942 color: #003863;
940 943 }
941 944
942 945 #content div.box div.message-notice h6 {
943 946 color: #003863;
944 947 }
945 948
946 949 #content div.box div.message-success {
947 950 height: 1%;
948 951 clear: both;
949 952 overflow: hidden;
950 953 background: #E6EFC2;
951 954 border: 1px solid #C6D880;
952 955 color: #4e6100;
953 956 }
954 957
955 958 #content div.box div.message-success h6 {
956 959 color: #4e6100;
957 960 }
958 961
959 962 #content div.box div.form div.fields div.field {
960 963 height: 1%;
961 964 border-bottom: 1px solid #DDD;
962 965 clear: both;
963 966 margin: 0;
964 967 padding: 10px 0;
965 968 }
966 969
967 970 #content div.box div.form div.fields div.field-first {
968 971 padding: 0 0 10px;
969 972 }
970 973
971 974 #content div.box div.form div.fields div.field-noborder {
972 975 border-bottom: 0 !important;
973 976 }
974 977
975 978 #content div.box div.form div.fields div.field span.error-message {
976 979 height: 1%;
977 980 display: inline-block;
978 981 color: red;
979 982 margin: 8px 0 0 4px;
980 983 padding: 0;
981 984 }
982 985
983 986 #content div.box div.form div.fields div.field span.success {
984 987 height: 1%;
985 988 display: block;
986 989 color: #316309;
987 990 margin: 8px 0 0;
988 991 padding: 0;
989 992 }
990 993
991 994 #content div.box div.form div.fields div.field div.label {
992 995 left: 70px;
993 996 width: 155px;
994 997 position: absolute;
995 998 margin: 0;
996 999 padding: 5px 0 0 0px;
997 1000 }
998 1001
999 1002 #content div.box div.form div.fields div.field div.label-summary {
1000 1003 left: 30px;
1001 1004 width: 155px;
1002 1005 position: absolute;
1003 1006 margin: 0;
1004 1007 padding: 0px 0 0 0px;
1005 1008 }
1006 1009
1007 1010 #content div.box-left div.form div.fields div.field div.label,
1008 1011 #content div.box-right div.form div.fields div.field div.label,
1009 1012 #content div.box-left div.form div.fields div.field div.label,
1010 1013 #content div.box-left div.form div.fields div.field div.label-summary,
1011 1014 #content div.box-right div.form div.fields div.field div.label-summary,
1012 1015 #content div.box-left div.form div.fields div.field div.label-summary
1013 1016 {
1014 1017 clear: both;
1015 1018 overflow: hidden;
1016 1019 left: 0;
1017 1020 width: auto;
1018 1021 position: relative;
1019 1022 margin: 0;
1020 1023 padding: 0 0 8px;
1021 1024 }
1022 1025
1023 1026 #content div.box div.form div.fields div.field div.label-select {
1024 1027 padding: 5px 0 0 5px;
1025 1028 }
1026 1029
1027 1030 #content div.box-left div.form div.fields div.field div.label-select,
1028 1031 #content div.box-right div.form div.fields div.field div.label-select
1029 1032 {
1030 1033 padding: 0 0 8px;
1031 1034 }
1032 1035
1033 1036 #content div.box-left div.form div.fields div.field div.label-textarea,
1034 1037 #content div.box-right div.form div.fields div.field div.label-textarea
1035 1038 {
1036 1039 padding: 0 0 8px !important;
1037 1040 }
1038 1041
1039 1042 #content div.box div.form div.fields div.field div.label label,div.label label
1040 1043 {
1041 1044 color: #393939;
1042 1045 font-weight: 700;
1043 1046 }
1044 1047 #content div.box div.form div.fields div.field div.label label,div.label-summary label
1045 1048 {
1046 1049 color: #393939;
1047 1050 font-weight: 700;
1048 1051 }
1049 1052 #content div.box div.form div.fields div.field div.input {
1050 1053 margin: 0 0 0 200px;
1051 1054 }
1052 1055
1053 1056 #content div.box div.form div.fields div.field div.input.summary {
1054 1057 margin: 0 0 0 110px;
1055 1058 }
1056 1059 #content div.box div.form div.fields div.field div.input.summary-short {
1057 1060 margin: 0 0 0 110px;
1058 1061 }
1059 1062 #content div.box div.form div.fields div.field div.file {
1060 1063 margin: 0 0 0 200px;
1061 1064 }
1062 1065
1063 1066 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input
1064 1067 {
1065 1068 margin: 0 0 0 0px;
1066 1069 }
1067 1070
1068 1071 #content div.box div.form div.fields div.field div.input input {
1069 1072 background: #FFF;
1070 1073 border-top: 1px solid #b3b3b3;
1071 1074 border-left: 1px solid #b3b3b3;
1072 1075 border-right: 1px solid #eaeaea;
1073 1076 border-bottom: 1px solid #eaeaea;
1074 1077 color: #000;
1075 1078 font-size: 11px;
1076 1079 margin: 0;
1077 1080 padding: 7px 7px 6px;
1078 1081 }
1079 1082
1080 1083 #content div.box div.form div.fields div.field div.file input {
1081 1084 background: none repeat scroll 0 0 #FFFFFF;
1082 1085 border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
1083 1086 border-style: solid;
1084 1087 border-width: 1px;
1085 1088 color: #000000;
1086 1089 font-size: 11px;
1087 1090 margin: 0;
1088 1091 padding: 7px 7px 6px;
1089 1092 }
1090 1093
1091 1094 #content div.box div.form div.fields div.field div.input input.small {
1092 1095 width: 30%;
1093 1096 }
1094 1097
1095 1098 #content div.box div.form div.fields div.field div.input input.medium {
1096 1099 width: 55%;
1097 1100 }
1098 1101
1099 1102 #content div.box div.form div.fields div.field div.input input.large {
1100 1103 width: 85%;
1101 1104 }
1102 1105
1103 1106 #content div.box div.form div.fields div.field div.input input.date {
1104 1107 width: 177px;
1105 1108 }
1106 1109
1107 1110 #content div.box div.form div.fields div.field div.input input.button {
1108 1111 background: #D4D0C8;
1109 1112 border-top: 1px solid #FFF;
1110 1113 border-left: 1px solid #FFF;
1111 1114 border-right: 1px solid #404040;
1112 1115 border-bottom: 1px solid #404040;
1113 1116 color: #000;
1114 1117 margin: 0;
1115 1118 padding: 4px 8px;
1116 1119 }
1117 1120
1118 1121 #content div.box div.form div.fields div.field div.textarea {
1119 1122 border-top: 1px solid #b3b3b3;
1120 1123 border-left: 1px solid #b3b3b3;
1121 1124 border-right: 1px solid #eaeaea;
1122 1125 border-bottom: 1px solid #eaeaea;
1123 1126 margin: 0 0 0 200px;
1124 1127 padding: 10px;
1125 1128 }
1126 1129
1127 1130 #content div.box div.form div.fields div.field div.textarea-editor {
1128 1131 border: 1px solid #ddd;
1129 1132 padding: 0;
1130 1133 }
1131 1134
1132 1135 #content div.box div.form div.fields div.field div.textarea textarea {
1133 1136 width: 100%;
1134 1137 height: 220px;
1135 1138 overflow: hidden;
1136 1139 background: #FFF;
1137 1140 color: #000;
1138 1141 font-size: 11px;
1139 1142 outline: none;
1140 1143 border-width: 0;
1141 1144 margin: 0;
1142 1145 padding: 0;
1143 1146 }
1144 1147
1145 1148 #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
1146 1149 {
1147 1150 width: 100%;
1148 1151 height: 100px;
1149 1152 }
1150 1153
1151 1154 #content div.box div.form div.fields div.field div.textarea table {
1152 1155 width: 100%;
1153 1156 border: none;
1154 1157 margin: 0;
1155 1158 padding: 0;
1156 1159 }
1157 1160
1158 1161 #content div.box div.form div.fields div.field div.textarea table td {
1159 1162 background: #DDD;
1160 1163 border: none;
1161 1164 padding: 0;
1162 1165 }
1163 1166
1164 1167 #content div.box div.form div.fields div.field div.textarea table td table
1165 1168 {
1166 1169 width: auto;
1167 1170 border: none;
1168 1171 margin: 0;
1169 1172 padding: 0;
1170 1173 }
1171 1174
1172 1175 #content div.box div.form div.fields div.field div.textarea table td table td
1173 1176 {
1174 1177 font-size: 11px;
1175 1178 padding: 5px 5px 5px 0;
1176 1179 }
1177 1180
1178 1181 #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
1179 1182 {
1180 1183 background: #f6f6f6;
1181 1184 border-color: #666;
1182 1185 }
1183 1186
1184 1187 div.form div.fields div.field div.button {
1185 1188 margin: 0;
1186 1189 padding: 0 0 0 8px;
1187 1190 }
1188 1191 #content div.box table.noborder {
1189 1192 border: 1px solid transparent;
1190 1193 }
1191 1194
1192 1195 #content div.box table {
1193 1196 width: 100%;
1194 1197 border-collapse: separate;
1195 1198 margin: 0;
1196 1199 padding: 0;
1197 1200 border: 1px solid #eee;
1198 1201 -webkit-border-radius: 4px;
1199 1202 -moz-border-radius: 4px;
1200 1203 border-radius: 4px;
1201 1204 }
1202 1205
1203 1206 #content div.box table th {
1204 1207 background: #eee;
1205 1208 border-bottom: 1px solid #ddd;
1206 1209 padding: 5px 0px 5px 5px;
1207 1210 }
1208 1211
1209 1212 #content div.box table th.left {
1210 1213 text-align: left;
1211 1214 }
1212 1215
1213 1216 #content div.box table th.right {
1214 1217 text-align: right;
1215 1218 }
1216 1219
1217 1220 #content div.box table th.center {
1218 1221 text-align: center;
1219 1222 }
1220 1223
1221 1224 #content div.box table th.selected {
1222 1225 vertical-align: middle;
1223 1226 padding: 0;
1224 1227 }
1225 1228
1226 1229 #content div.box table td {
1227 1230 background: #fff;
1228 1231 border-bottom: 1px solid #cdcdcd;
1229 1232 vertical-align: middle;
1230 1233 padding: 5px;
1231 1234 }
1232 1235
1233 1236 #content div.box table tr.selected td {
1234 1237 background: #FFC;
1235 1238 }
1236 1239
1237 1240 #content div.box table td.selected {
1238 1241 width: 3%;
1239 1242 text-align: center;
1240 1243 vertical-align: middle;
1241 1244 padding: 0;
1242 1245 }
1243 1246
1244 1247 #content div.box table td.action {
1245 1248 width: 45%;
1246 1249 text-align: left;
1247 1250 }
1248 1251
1249 1252 #content div.box table td.date {
1250 1253 width: 33%;
1251 1254 text-align: center;
1252 1255 }
1253 1256
1254 1257 #content div.box div.action {
1255 1258 float: right;
1256 1259 background: #FFF;
1257 1260 text-align: right;
1258 1261 margin: 10px 0 0;
1259 1262 padding: 0;
1260 1263 }
1261 1264
1262 1265 #content div.box div.action select {
1263 1266 font-size: 11px;
1264 1267 margin: 0;
1265 1268 }
1266 1269
1267 1270 #content div.box div.action .ui-selectmenu {
1268 1271 margin: 0;
1269 1272 padding: 0;
1270 1273 }
1271 1274
1272 1275 #content div.box div.pagination {
1273 1276 height: 1%;
1274 1277 clear: both;
1275 1278 overflow: hidden;
1276 1279 margin: 10px 0 0;
1277 1280 padding: 0;
1278 1281 }
1279 1282
1280 1283 #content div.box div.pagination ul.pager {
1281 1284 float: right;
1282 1285 text-align: right;
1283 1286 margin: 0;
1284 1287 padding: 0;
1285 1288 }
1286 1289
1287 1290 #content div.box div.pagination ul.pager li {
1288 1291 height: 1%;
1289 1292 float: left;
1290 1293 list-style: none;
1291 1294 background: #ebebeb url("../images/pager.png") repeat-x;
1292 1295 border-top: 1px solid #dedede;
1293 1296 border-left: 1px solid #cfcfcf;
1294 1297 border-right: 1px solid #c4c4c4;
1295 1298 border-bottom: 1px solid #c4c4c4;
1296 1299 color: #4A4A4A;
1297 1300 font-weight: 700;
1298 1301 margin: 0 0 0 4px;
1299 1302 padding: 0;
1300 1303 }
1301 1304
1302 1305 #content div.box div.pagination ul.pager li.separator {
1303 1306 padding: 6px;
1304 1307 }
1305 1308
1306 1309 #content div.box div.pagination ul.pager li.current {
1307 1310 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1308 1311 border-top: 1px solid #ccc;
1309 1312 border-left: 1px solid #bebebe;
1310 1313 border-right: 1px solid #b1b1b1;
1311 1314 border-bottom: 1px solid #afafaf;
1312 1315 color: #515151;
1313 1316 padding: 6px;
1314 1317 }
1315 1318
1316 1319 #content div.box div.pagination ul.pager li a {
1317 1320 height: 1%;
1318 1321 display: block;
1319 1322 float: left;
1320 1323 color: #515151;
1321 1324 text-decoration: none;
1322 1325 margin: 0;
1323 1326 padding: 6px;
1324 1327 }
1325 1328
1326 1329 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active
1327 1330 {
1328 1331 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1329 1332 border-top: 1px solid #ccc;
1330 1333 border-left: 1px solid #bebebe;
1331 1334 border-right: 1px solid #b1b1b1;
1332 1335 border-bottom: 1px solid #afafaf;
1333 1336 margin: -1px;
1334 1337 }
1335 1338
1336 1339 #content div.box div.pagination-wh {
1337 1340 height: 1%;
1338 1341 clear: both;
1339 1342 overflow: hidden;
1340 1343 text-align: right;
1341 1344 margin: 10px 0 0;
1342 1345 padding: 0;
1343 1346 }
1344 1347
1345 1348 #content div.box div.pagination-right {
1346 1349 float: right;
1347 1350 }
1348 1351
1349 1352 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot
1350 1353 {
1351 1354 height: 1%;
1352 1355 float: left;
1353 1356 background: #ebebeb url("../images/pager.png") repeat-x;
1354 1357 border-top: 1px solid #dedede;
1355 1358 border-left: 1px solid #cfcfcf;
1356 1359 border-right: 1px solid #c4c4c4;
1357 1360 border-bottom: 1px solid #c4c4c4;
1358 1361 color: #4A4A4A;
1359 1362 font-weight: 700;
1360 1363 margin: 0 0 0 4px;
1361 1364 padding: 6px;
1362 1365 }
1363 1366
1364 1367 #content div.box div.pagination-wh span.pager_curpage {
1365 1368 height: 1%;
1366 1369 float: left;
1367 1370 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1368 1371 border-top: 1px solid #ccc;
1369 1372 border-left: 1px solid #bebebe;
1370 1373 border-right: 1px solid #b1b1b1;
1371 1374 border-bottom: 1px solid #afafaf;
1372 1375 color: #515151;
1373 1376 font-weight: 700;
1374 1377 margin: 0 0 0 4px;
1375 1378 padding: 6px;
1376 1379 }
1377 1380
1378 1381 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active
1379 1382 {
1380 1383 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1381 1384 border-top: 1px solid #ccc;
1382 1385 border-left: 1px solid #bebebe;
1383 1386 border-right: 1px solid #b1b1b1;
1384 1387 border-bottom: 1px solid #afafaf;
1385 1388 text-decoration: none;
1386 1389 }
1387 1390
1388 1391 #content div.box div.traffic div.legend {
1389 1392 clear: both;
1390 1393 overflow: hidden;
1391 1394 border-bottom: 1px solid #ddd;
1392 1395 margin: 0 0 10px;
1393 1396 padding: 0 0 10px;
1394 1397 }
1395 1398
1396 1399 #content div.box div.traffic div.legend h6 {
1397 1400 float: left;
1398 1401 border: none;
1399 1402 margin: 0;
1400 1403 padding: 0;
1401 1404 }
1402 1405
1403 1406 #content div.box div.traffic div.legend li {
1404 1407 list-style: none;
1405 1408 float: left;
1406 1409 font-size: 11px;
1407 1410 margin: 0;
1408 1411 padding: 0 8px 0 4px;
1409 1412 }
1410 1413
1411 1414 #content div.box div.traffic div.legend li.visits {
1412 1415 border-left: 12px solid #edc240;
1413 1416 }
1414 1417
1415 1418 #content div.box div.traffic div.legend li.pageviews {
1416 1419 border-left: 12px solid #afd8f8;
1417 1420 }
1418 1421
1419 1422 #content div.box div.traffic table {
1420 1423 width: auto;
1421 1424 }
1422 1425
1423 1426 #content div.box div.traffic table td {
1424 1427 background: transparent;
1425 1428 border: none;
1426 1429 padding: 2px 3px 3px;
1427 1430 }
1428 1431
1429 1432 #content div.box div.traffic table td.legendLabel {
1430 1433 padding: 0 3px 2px;
1431 1434 }
1432 1435
1433 1436 #summary {
1434 1437
1435 1438 }
1436 1439
1437 1440 #summary .desc {
1438 1441 white-space: pre;
1439 1442 width: 100%;
1440 1443 }
1441 1444
1442 1445 #summary .repo_name {
1443 1446 font-size: 1.6em;
1444 1447 font-weight: bold;
1445 1448 vertical-align: baseline;
1446 1449 clear: right
1447 1450 }
1448 1451
1449 1452 #footer {
1450 1453 clear: both;
1451 1454 overflow: hidden;
1452 1455 text-align: right;
1453 1456 margin: 0;
1454 1457 padding: 0 10px 4px;
1455 1458 margin: -10px 0 0;
1456 1459 }
1457 1460
1458 1461 #footer div#footer-inner {
1459 1462 background-color: #eedc94; background-repeat : repeat-x;
1460 1463 background-image : -khtml-gradient( linear, left top, left bottom,
1461 1464 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1462 1465 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1463 1466 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1464 1467 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1465 1468 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1466 1469 background-image : -o-linear-gradient( top, #003b76, #00376e));
1467 1470 background-image : linear-gradient( top, #003b76, #00376e); filter :
1468 1471 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1469 1472 '#003b76', endColorstr = '#00376e', GradientType = 0);
1470 1473 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1471 1474 -webkit-border-radius: 4px 4px 4px 4px;
1472 1475 -khtml-border-radius: 4px 4px 4px 4px;
1473 1476 -moz-border-radius: 4px 4px 4px 4px;
1474 1477 border-radius: 4px 4px 4px 4px;
1475 1478 background-repeat: repeat-x;
1476 1479 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1477 1480 to(#eedc94) );
1478 1481 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1479 1482 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1480 1483 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1481 1484 color-stop(100%, #00376e) );
1482 1485 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1483 1486 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1484 1487 background-image: linear-gradient(top, #003b76, #00376e);
1485 1488 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1486 1489 endColorstr='#00376e', GradientType=0 );
1487 1490 }
1488 1491
1489 1492 #footer div#footer-inner p {
1490 1493 padding: 15px 25px 15px 0;
1491 1494 color: #FFF;
1492 1495 font-weight: 700;
1493 1496 }
1494 1497
1495 1498 #footer div#footer-inner .footer-link {
1496 1499 float: left;
1497 1500 padding-left: 10px;
1498 1501 }
1499 1502
1500 1503 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a
1501 1504 {
1502 1505 color: #FFF;
1503 1506 }
1504 1507
1505 1508 #login div.title {
1506 1509 width: 420px;
1507 1510 clear: both;
1508 1511 overflow: hidden;
1509 1512 position: relative;
1510 1513 background-color: #eedc94; background-repeat : repeat-x;
1511 1514 background-image : -khtml-gradient( linear, left top, left bottom,
1512 1515 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1513 1516 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1514 1517 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1515 1518 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1516 1519 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1517 1520 background-image : -o-linear-gradient( top, #003b76, #00376e));
1518 1521 background-image : linear-gradient( top, #003b76, #00376e); filter :
1519 1522 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1520 1523 '#003b76', endColorstr = '#00376e', GradientType = 0);
1521 1524 margin: 0 auto;
1522 1525 padding: 0;
1523 1526 background-repeat: repeat-x;
1524 1527 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1525 1528 to(#eedc94) );
1526 1529 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1527 1530 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1528 1531 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1529 1532 color-stop(100%, #00376e) );
1530 1533 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1531 1534 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1532 1535 background-image: linear-gradient(top, #003b76, #00376e);
1533 1536 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1534 1537 endColorstr='#00376e', GradientType=0 );
1535 1538 }
1536 1539
1537 1540 #login div.inner {
1538 1541 width: 380px;
1539 1542 background: #FFF url("../images/login.png") no-repeat top left;
1540 1543 border-top: none;
1541 1544 border-bottom: none;
1542 1545 margin: 0 auto;
1543 1546 padding: 20px;
1544 1547 }
1545 1548
1546 1549 #login div.form div.fields div.field div.label {
1547 1550 width: 173px;
1548 1551 float: left;
1549 1552 text-align: right;
1550 1553 margin: 2px 10px 0 0;
1551 1554 padding: 5px 0 0 5px;
1552 1555 }
1553 1556
1554 1557 #login div.form div.fields div.field div.input input {
1555 1558 width: 176px;
1556 1559 background: #FFF;
1557 1560 border-top: 1px solid #b3b3b3;
1558 1561 border-left: 1px solid #b3b3b3;
1559 1562 border-right: 1px solid #eaeaea;
1560 1563 border-bottom: 1px solid #eaeaea;
1561 1564 color: #000;
1562 1565 font-size: 11px;
1563 1566 margin: 0;
1564 1567 padding: 7px 7px 6px;
1565 1568 }
1566 1569
1567 1570 #login div.form div.fields div.buttons {
1568 1571 clear: both;
1569 1572 overflow: hidden;
1570 1573 border-top: 1px solid #DDD;
1571 1574 text-align: right;
1572 1575 margin: 0;
1573 1576 padding: 10px 0 0;
1574 1577 }
1575 1578
1576 1579 #login div.form div.links {
1577 1580 clear: both;
1578 1581 overflow: hidden;
1579 1582 margin: 10px 0 0;
1580 1583 padding: 0 0 2px;
1581 1584 }
1582 1585
1583 1586 #quick_login {
1584 1587 top: 31px;
1585 1588 background-color: rgb(0, 51, 103);
1586 1589 z-index: 999;
1587 1590 height: 150px;
1588 1591 position: absolute;
1589 1592 margin-left: -16px;
1590 1593 width: 281px;
1591 1594 -webkit-border-radius: 0px 0px 4px 4px;
1592 1595 -khtml-border-radius: 0px 0px 4px 4px;
1593 1596 -moz-border-radius: 0px 0px 4px 4px;
1594 1597 border-radius: 0px 0px 4px 4px;
1595 1598 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1596 1599 }
1597 1600
1598 1601 #quick_login .password_forgoten {
1599 1602 padding-right: 10px;
1600 1603 padding-top: 0px;
1601 1604 float: left;
1602 1605 }
1603 1606
1604 1607 #quick_login .password_forgoten a {
1605 1608 font-size: 10px
1606 1609 }
1607 1610
1608 1611 #quick_login .register {
1609 1612 padding-right: 10px;
1610 1613 padding-top: 5px;
1611 1614 float: left;
1612 1615 }
1613 1616
1614 1617 #quick_login .register a {
1615 1618 font-size: 10px
1616 1619 }
1617 1620
1618 1621 #quick_login div.form div.fields {
1619 1622 padding-top: 2px;
1620 1623 padding-left: 10px;
1621 1624 }
1622 1625
1623 1626 #quick_login div.form div.fields div.field {
1624 1627 padding: 5px;
1625 1628 }
1626 1629
1627 1630 #quick_login div.form div.fields div.field div.label label {
1628 1631 color: #fff;
1629 1632 padding-bottom: 3px;
1630 1633 }
1631 1634
1632 1635 #quick_login div.form div.fields div.field div.input input {
1633 1636 width: 236px;
1634 1637 background: #FFF;
1635 1638 border-top: 1px solid #b3b3b3;
1636 1639 border-left: 1px solid #b3b3b3;
1637 1640 border-right: 1px solid #eaeaea;
1638 1641 border-bottom: 1px solid #eaeaea;
1639 1642 color: #000;
1640 1643 font-size: 11px;
1641 1644 margin: 0;
1642 1645 padding: 5px 7px 4px;
1643 1646 }
1644 1647
1645 1648 #quick_login div.form div.fields div.buttons {
1646 1649 clear: both;
1647 1650 overflow: hidden;
1648 1651 text-align: right;
1649 1652 margin: 0;
1650 1653 padding: 10px 14px 0px 5px;
1651 1654 }
1652 1655
1653 1656 #quick_login div.form div.links {
1654 1657 clear: both;
1655 1658 overflow: hidden;
1656 1659 margin: 10px 0 0;
1657 1660 padding: 0 0 2px;
1658 1661 }
1659 1662
1660 1663 #register div.title {
1661 1664 clear: both;
1662 1665 overflow: hidden;
1663 1666 position: relative;
1664 1667 background-color: #eedc94;
1665 1668 background-repeat: repeat-x;
1666 1669 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1667 1670 to(#eedc94) );
1668 1671 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1669 1672 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1670 1673 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1671 1674 color-stop(100%, #00376e) );
1672 1675 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1673 1676 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1674 1677 background-image: linear-gradient(top, #003b76, #00376e);
1675 1678 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1676 1679 endColorstr='#00376e', GradientType=0 );
1677 1680 margin: 0 auto;
1678 1681 padding: 0;
1679 1682 }
1680 1683
1681 1684 #register div.inner {
1682 1685 background: #FFF;
1683 1686 border-top: none;
1684 1687 border-bottom: none;
1685 1688 margin: 0 auto;
1686 1689 padding: 20px;
1687 1690 }
1688 1691
1689 1692 #register div.form div.fields div.field div.label {
1690 1693 width: 135px;
1691 1694 float: left;
1692 1695 text-align: right;
1693 1696 margin: 2px 10px 0 0;
1694 1697 padding: 5px 0 0 5px;
1695 1698 }
1696 1699
1697 1700 #register div.form div.fields div.field div.input input {
1698 1701 width: 300px;
1699 1702 background: #FFF;
1700 1703 border-top: 1px solid #b3b3b3;
1701 1704 border-left: 1px solid #b3b3b3;
1702 1705 border-right: 1px solid #eaeaea;
1703 1706 border-bottom: 1px solid #eaeaea;
1704 1707 color: #000;
1705 1708 font-size: 11px;
1706 1709 margin: 0;
1707 1710 padding: 7px 7px 6px;
1708 1711 }
1709 1712
1710 1713 #register div.form div.fields div.buttons {
1711 1714 clear: both;
1712 1715 overflow: hidden;
1713 1716 border-top: 1px solid #DDD;
1714 1717 text-align: left;
1715 1718 margin: 0;
1716 1719 padding: 10px 0 0 150px;
1717 1720 }
1718 1721
1719 1722 #register div.form div.activation_msg {
1720 1723 padding-top: 4px;
1721 1724 padding-bottom: 4px;
1722 1725 }
1723 1726
1724 1727 #journal .journal_day {
1725 1728 font-size: 20px;
1726 1729 padding: 10px 0px;
1727 1730 border-bottom: 2px solid #DDD;
1728 1731 margin-left: 10px;
1729 1732 margin-right: 10px;
1730 1733 }
1731 1734
1732 1735 #journal .journal_container {
1733 1736 padding: 5px;
1734 1737 clear: both;
1735 1738 margin: 0px 5px 0px 10px;
1736 1739 }
1737 1740
1738 1741 #journal .journal_action_container {
1739 1742 padding-left: 38px;
1740 1743 }
1741 1744
1742 1745 #journal .journal_user {
1743 1746 color: #747474;
1744 1747 font-size: 14px;
1745 1748 font-weight: bold;
1746 1749 height: 30px;
1747 1750 }
1748 1751
1749 1752 #journal .journal_icon {
1750 1753 clear: both;
1751 1754 float: left;
1752 1755 padding-right: 4px;
1753 1756 padding-top: 3px;
1754 1757 }
1755 1758
1756 1759 #journal .journal_action {
1757 1760 padding-top: 4px;
1758 1761 min-height: 2px;
1759 1762 float: left
1760 1763 }
1761 1764
1762 1765 #journal .journal_action_params {
1763 1766 clear: left;
1764 1767 padding-left: 22px;
1765 1768 }
1766 1769
1767 1770 #journal .journal_repo {
1768 1771 float: left;
1769 1772 margin-left: 6px;
1770 1773 padding-top: 3px;
1771 1774 }
1772 1775
1773 1776 #journal .date {
1774 1777 clear: both;
1775 1778 color: #777777;
1776 1779 font-size: 11px;
1777 1780 padding-left: 22px;
1778 1781 }
1779 1782
1780 1783 #journal .journal_repo .journal_repo_name {
1781 1784 font-weight: bold;
1782 1785 font-size: 1.1em;
1783 1786 }
1784 1787
1785 1788 #journal .compare_view {
1786 1789 padding: 5px 0px 5px 0px;
1787 1790 width: 95px;
1788 1791 }
1789 1792
1790 1793 .journal_highlight {
1791 1794 font-weight: bold;
1792 1795 padding: 0 2px;
1793 1796 vertical-align: bottom;
1794 1797 }
1795 1798
1796 1799 .trending_language_tbl,.trending_language_tbl td {
1797 1800 border: 0 !important;
1798 1801 margin: 0 !important;
1799 1802 padding: 0 !important;
1800 1803 }
1801 1804
1802 1805 .trending_language_tbl,.trending_language_tbl tr {
1803 1806 border-spacing: 1px;
1804 1807 }
1805 1808
1806 1809 .trending_language {
1807 1810 background-color: #003367;
1808 1811 color: #FFF;
1809 1812 display: block;
1810 1813 min-width: 20px;
1811 1814 text-decoration: none;
1812 1815 height: 12px;
1813 1816 margin-bottom: 0px;
1814 1817 margin-left: 5px;
1815 1818 white-space: pre;
1816 1819 padding: 3px;
1817 1820 }
1818 1821
1819 1822 h3.files_location {
1820 1823 font-size: 1.8em;
1821 1824 font-weight: 700;
1822 1825 border-bottom: none !important;
1823 1826 margin: 10px 0 !important;
1824 1827 }
1825 1828
1826 1829 #files_data dl dt {
1827 1830 float: left;
1828 width: 115px;
1831 width: 60px;
1829 1832 margin: 0 !important;
1830 1833 padding: 5px;
1831 1834 }
1832 1835
1833 1836 #files_data dl dd {
1834 1837 margin: 0 !important;
1835 1838 padding: 5px !important;
1836 1839 }
1837 1840
1838 1841 #changeset_content {
1839 1842 border: 1px solid #CCC;
1840 1843 padding: 5px;
1841 1844 }
1842 1845
1843 1846 #changeset_compare_view_content {
1844 1847 border: 1px solid #CCC;
1845 1848 padding: 5px;
1846 1849 }
1847 1850
1848 1851 #changeset_content .container {
1849 1852 min-height: 120px;
1850 1853 font-size: 1.2em;
1851 1854 overflow: hidden;
1852 1855 }
1853 1856
1854 1857 #changeset_compare_view_content .compare_view_commits {
1855 1858 width: auto !important;
1856 1859 }
1857 1860
1858 1861 #changeset_compare_view_content .compare_view_commits td {
1859 1862 padding: 0px 0px 0px 12px !important;
1860 1863 }
1861 1864
1862 1865 #changeset_content .container .right {
1863 1866 float: right;
1864 1867 width: 25%;
1865 1868 text-align: right;
1866 1869 }
1867 1870
1868 1871 #changeset_content .container .left .message {
1869 1872 font-style: italic;
1870 1873 color: #556CB5;
1871 1874 white-space: pre-wrap;
1872 1875 }
1873 1876
1874 1877 .cs_files .cur_cs {
1875 1878 margin: 10px 2px;
1876 1879 font-weight: bold;
1877 1880 }
1878 1881
1879 1882 .cs_files .node {
1880 1883 float: left;
1881 1884 }
1882 1885
1883 1886 .cs_files .changes {
1884 1887 float: right;
1885 1888 color:#003367;
1886 1889
1887 1890 }
1888 1891
1889 1892 .cs_files .changes .added {
1890 1893 background-color: #BBFFBB;
1891 1894 float: left;
1892 1895 text-align: center;
1893 1896 font-size: 9px;
1894 1897 padding: 2px 0px 2px 0px;
1895 1898 }
1896 1899
1897 1900 .cs_files .changes .deleted {
1898 1901 background-color: #FF8888;
1899 1902 float: left;
1900 1903 text-align: center;
1901 1904 font-size: 9px;
1902 1905 padding: 2px 0px 2px 0px;
1903 1906 }
1904 1907
1905 1908 .cs_files .cs_added {
1906 1909 background: url("../images/icons/page_white_add.png") no-repeat scroll
1907 1910 3px;
1908 1911 height: 16px;
1909 1912 padding-left: 20px;
1910 1913 margin-top: 7px;
1911 1914 text-align: left;
1912 1915 }
1913 1916
1914 1917 .cs_files .cs_changed {
1915 1918 background: url("../images/icons/page_white_edit.png") no-repeat scroll
1916 1919 3px;
1917 1920 height: 16px;
1918 1921 padding-left: 20px;
1919 1922 margin-top: 7px;
1920 1923 text-align: left;
1921 1924 }
1922 1925
1923 1926 .cs_files .cs_removed {
1924 1927 background: url("../images/icons/page_white_delete.png") no-repeat
1925 1928 scroll 3px;
1926 1929 height: 16px;
1927 1930 padding-left: 20px;
1928 1931 margin-top: 7px;
1929 1932 text-align: left;
1930 1933 }
1931 1934
1932 1935 #graph {
1933 1936 overflow: hidden;
1934 1937 }
1935 1938
1936 1939 #graph_nodes {
1937 1940 float: left;
1938 1941 margin-right: -6px;
1939 1942 margin-top: 0px;
1940 1943 }
1941 1944
1942 1945 #graph_content {
1943 1946 width: 800px;
1944 1947 float: left;
1945 1948 }
1946 1949
1947 1950 #graph_content .container_header {
1948 1951 border: 1px solid #CCC;
1949 1952 padding: 10px;
1950 1953 height: 45px;
1951 1954 -webkit-border-radius: 6px 6px 0px 0px;
1952 1955 -moz-border-radius: 6px 6px 0px 0px;
1953 1956 border-radius: 6px 6px 0px 0px;
1954 1957 }
1955 1958
1956 1959 #graph_content #rev_range_container {
1957 1960 padding: 10px 0px;
1958 1961 clear: both;
1959 1962 }
1960 1963
1961 1964 #graph_content .container {
1962 1965 border-bottom: 1px solid #CCC;
1963 1966 border-left: 1px solid #CCC;
1964 1967 border-right: 1px solid #CCC;
1965 1968 min-height: 70px;
1966 1969 overflow: hidden;
1967 1970 font-size: 1.2em;
1968 1971 }
1969 1972
1970 1973 #graph_content .container .right {
1971 1974 float: right;
1972 1975 width: 28%;
1973 1976 text-align: right;
1974 1977 padding-bottom: 5px;
1975 1978 }
1976 1979
1977 1980 #graph_content .container .left .date {
1978 1981 font-weight: 700;
1979 1982 padding-bottom: 5px;
1980 1983 }
1981 1984
1982 1985 #graph_content .container .left .date span {
1983 1986 vertical-align: text-top;
1984 1987 }
1985 1988
1986 1989 #graph_content .container .left .author {
1987 1990 height: 22px;
1988 1991 }
1989 1992
1990 1993 #graph_content .container .left .author .user {
1991 1994 color: #444444;
1992 1995 float: left;
1993 1996 font-size: 12px;
1994 1997 margin-left: -4px;
1995 1998 margin-top: 4px;
1996 1999 }
1997 2000
1998 2001 #graph_content .container .left .message {
1999 2002 font-size: 100%;
2000 2003 padding-top: 3px;
2001 2004 white-space: pre-wrap;
2002 2005 }
2003 2006
2004 2007 #graph_content .container .left .message a:hover{
2005 2008 text-decoration: none;
2006 2009 }
2007 2010
2008 2011 .right div {
2009 2012 clear: both;
2010 2013 }
2011 2014
2012 2015 .right .changes .changed_total {
2013 2016 border: 0px solid #DDD;
2014 2017 display: block;
2015 2018 float: right;
2016 2019 text-align: center;
2017 2020 min-width: 45px;
2018 2021 cursor: pointer;
2019 2022 background: #FD8;
2020 2023 font-weight: bold;
2021 2024 -webkit-border-radius: 0px 0px 0px 6px;
2022 2025 -moz-border-radius: 0px 0px 0px 6px;
2023 2026 border-radius: 0px 0px 0px 6px;
2024 2027 padding: 2px;
2025 2028 }
2026 2029
2027 2030 .right .changes .added,.changed,.removed {
2028 2031 border: 1px solid #DDD;
2029 2032 display: block;
2030 2033 float: right;
2031 2034 text-align: center;
2032 2035 min-width: 15px;
2033 2036 cursor: help;
2034 2037 }
2035 2038
2036 2039 .right .changes .large {
2037 2040 border: 1px solid #DDD;
2038 2041 display: block;
2039 2042 float: right;
2040 2043 text-align: center;
2041 2044 min-width: 45px;
2042 2045 cursor: help;
2043 2046 background: #54A9F7;
2044 2047 }
2045 2048
2046 2049 .right .changes .added {
2047 2050 background: #BFB;
2048 2051 }
2049 2052
2050 2053 .right .changes .changed {
2051 2054 background: #FD8;
2052 2055 }
2053 2056
2054 2057 .right .changes .removed {
2055 2058 background: #F88;
2056 2059 }
2057 2060
2058 2061 .right .merge {
2059 2062 vertical-align: top;
2060 2063 font-size: 0.75em;
2061 2064 font-weight: 700;
2062 2065 }
2063 2066
2064 2067 .right .parent {
2065 2068 font-size: 90%;
2066 2069 font-family: monospace;
2067 2070 padding: 2px 2px 2px 2px;
2068 2071 }
2069 2072 .right .logtags{
2070 2073 padding: 2px 2px 2px 2px;
2071 2074 }
2072 2075 .right .logtags .branchtag,.logtags .branchtag {
2073 2076 padding: 1px 3px 2px;
2074 2077 background-color: #bfbfbf;
2075 2078 font-size: 9.75px;
2076 2079 font-weight: bold;
2077 2080 color: #ffffff;
2078 2081 text-transform: uppercase;
2079 2082 white-space: nowrap;
2080 2083 -webkit-border-radius: 3px;
2081 2084 -moz-border-radius: 3px;
2082 2085 border-radius: 3px;
2083 2086 padding-left:4px;
2084 2087 }
2085 2088 .right .logtags .branchtag a:hover,.logtags .branchtag a:hover{
2086 2089 text-decoration: none;
2087 2090 }
2088 2091 .right .logtags .tagtag,.logtags .tagtag {
2089 2092 padding: 1px 3px 2px;
2090 2093 background-color: #62cffc;
2091 2094 font-size: 9.75px;
2092 2095 font-weight: bold;
2093 2096 color: #ffffff;
2094 2097 text-transform: uppercase;
2095 2098 white-space: nowrap;
2096 2099 -webkit-border-radius: 3px;
2097 2100 -moz-border-radius: 3px;
2098 2101 border-radius: 3px;
2099 2102 }
2100 2103 .right .logtags .tagtag a:hover,.logtags .tagtag a:hover{
2101 2104 text-decoration: none;
2102 2105 }
2103 2106 div.browserblock {
2104 2107 overflow: hidden;
2105 2108 border: 1px solid #ccc;
2106 2109 background: #f8f8f8;
2107 2110 font-size: 100%;
2108 2111 line-height: 125%;
2109 2112 padding: 0;
2110 2113 }
2111 2114
2112 2115 div.browserblock .browser-header {
2113 2116 background: #FFF;
2114 2117 padding: 10px 0px 15px 0px;
2115 2118 width: 100%;
2116 2119 }
2117 2120
2118 2121 div.browserblock .browser-nav {
2119 2122 float: left
2120 2123 }
2121 2124
2122 2125 div.browserblock .browser-branch {
2123 2126 float: left;
2124 2127 }
2125 2128
2126 2129 div.browserblock .browser-branch label {
2127 2130 color: #4A4A4A;
2128 2131 vertical-align: text-top;
2129 2132 }
2130 2133
2131 2134 div.browserblock .browser-header span {
2132 2135 margin-left: 5px;
2133 2136 font-weight: 700;
2134 2137 }
2135 2138
2136 2139 div.browserblock .browser-search {
2137 2140 clear: both;
2138 2141 padding: 8px 8px 0px 5px;
2139 2142 height: 20px;
2140 2143 }
2141 2144
2142 2145 div.browserblock #node_filter_box {
2143 2146
2144 2147 }
2145 2148
2146 2149 div.browserblock .search_activate {
2147 2150 float: left
2148 2151 }
2149 2152
2150 2153 div.browserblock .add_node {
2151 2154 float: left;
2152 2155 padding-left: 5px;
2153 2156 }
2154 2157
2155 2158 div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover
2156 2159 {
2157 2160 text-decoration: none !important;
2158 2161 }
2159 2162
2160 2163 div.browserblock .browser-body {
2161 2164 background: #EEE;
2162 2165 border-top: 1px solid #CCC;
2163 2166 }
2164 2167
2165 2168 table.code-browser {
2166 2169 border-collapse: collapse;
2167 2170 width: 100%;
2168 2171 }
2169 2172
2170 2173 table.code-browser tr {
2171 2174 margin: 3px;
2172 2175 }
2173 2176
2174 2177 table.code-browser thead th {
2175 2178 background-color: #EEE;
2176 2179 height: 20px;
2177 2180 font-size: 1.1em;
2178 2181 font-weight: 700;
2179 2182 text-align: left;
2180 2183 padding-left: 10px;
2181 2184 }
2182 2185
2183 2186 table.code-browser tbody td {
2184 2187 padding-left: 10px;
2185 2188 height: 20px;
2186 2189 }
2187 2190
2188 2191 table.code-browser .browser-file {
2189 2192 background: url("../images/icons/document_16.png") no-repeat scroll 3px;
2190 2193 height: 16px;
2191 2194 padding-left: 20px;
2192 2195 text-align: left;
2193 2196 }
2194 2197
2195 2198 .diffblock .changeset_file {
2196 2199 background: url("../images/icons/file.png") no-repeat scroll 3px;
2197 2200 height: 16px;
2198 2201 padding-left: 22px;
2199 2202 text-align: left;
2200 2203 font-size: 14px;
2201 2204 }
2202 2205
2203 2206 .diffblock .changeset_header {
2204 2207 margin-left: 6px !important;
2205 2208 }
2206 2209
2207 2210 table.code-browser .browser-dir {
2208 2211 background: url("../images/icons/folder_16.png") no-repeat scroll 3px;
2209 2212 height: 16px;
2210 2213 padding-left: 20px;
2211 2214 text-align: left;
2212 2215 }
2213 2216
2214 2217 .box .search {
2215 2218 clear: both;
2216 2219 overflow: hidden;
2217 2220 margin: 0;
2218 2221 padding: 0 20px 10px;
2219 2222 }
2220 2223
2221 2224 .box .search div.search_path {
2222 2225 background: none repeat scroll 0 0 #EEE;
2223 2226 border: 1px solid #CCC;
2224 2227 color: blue;
2225 2228 margin-bottom: 10px;
2226 2229 padding: 10px 0;
2227 2230 }
2228 2231
2229 2232 .box .search div.search_path div.link {
2230 2233 font-weight: 700;
2231 2234 margin-left: 25px;
2232 2235 }
2233 2236
2234 2237 .box .search div.search_path div.link a {
2235 2238 color: #003367;
2236 2239 cursor: pointer;
2237 2240 text-decoration: none;
2238 2241 }
2239 2242
2240 2243 #path_unlock {
2241 2244 color: red;
2242 2245 font-size: 1.2em;
2243 2246 padding-left: 4px;
2244 2247 }
2245 2248
2246 2249 .info_box span {
2247 2250 margin-left: 3px;
2248 2251 margin-right: 3px;
2249 2252 }
2250 2253
2251 2254 .info_box .rev {
2252 2255 color: #003367;
2253 2256 font-size: 1.6em;
2254 2257 font-weight: bold;
2255 2258 vertical-align: sub;
2256 2259 }
2257 2260
2258 2261 .info_box input#at_rev,.info_box input#size {
2259 2262 background: #FFF;
2260 2263 border-top: 1px solid #b3b3b3;
2261 2264 border-left: 1px solid #b3b3b3;
2262 2265 border-right: 1px solid #eaeaea;
2263 2266 border-bottom: 1px solid #eaeaea;
2264 2267 color: #000;
2265 2268 font-size: 12px;
2266 2269 margin: 0;
2267 2270 padding: 1px 5px 1px;
2268 2271 }
2269 2272
2270 2273 .info_box input#view {
2271 2274 text-align: center;
2272 2275 padding: 4px 3px 2px 2px;
2273 2276 }
2274 2277
2275 2278 .yui-overlay,.yui-panel-container {
2276 2279 visibility: hidden;
2277 2280 position: absolute;
2278 2281 z-index: 2;
2279 2282 }
2280 2283
2281 2284 .yui-tt {
2282 2285 visibility: hidden;
2283 2286 position: absolute;
2284 2287 color: #666;
2285 2288 background-color: #FFF;
2286 2289 border: 2px solid #003367;
2287 2290 font: 100% sans-serif;
2288 2291 width: auto;
2289 2292 opacity: 1px;
2290 2293 padding: 8px;
2291 2294 white-space: pre-wrap;
2292 2295 -webkit-border-radius: 8px 8px 8px 8px;
2293 2296 -khtml-border-radius: 8px 8px 8px 8px;
2294 2297 -moz-border-radius: 8px 8px 8px 8px;
2295 2298 border-radius: 8px 8px 8px 8px;
2296 2299 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
2297 2300 }
2298 2301
2299 2302 .ac {
2300 2303 vertical-align: top;
2301 2304 }
2302 2305
2303 2306 .ac .yui-ac {
2304 2307 position: relative;
2305 2308 font-size: 100%;
2306 2309 }
2307 2310
2308 2311 .ac .perm_ac {
2309 2312 width: 15em;
2310 2313 }
2311 2314
2312 2315 .ac .yui-ac-input {
2313 2316 width: 100%;
2314 2317 }
2315 2318
2316 2319 .ac .yui-ac-container {
2317 2320 position: absolute;
2318 2321 top: 1.6em;
2319 2322 width: 100%;
2320 2323 }
2321 2324
2322 2325 .ac .yui-ac-content {
2323 2326 position: absolute;
2324 2327 width: 100%;
2325 2328 border: 1px solid gray;
2326 2329 background: #fff;
2327 2330 overflow: hidden;
2328 2331 z-index: 9050;
2329 2332 }
2330 2333
2331 2334 .ac .yui-ac-shadow {
2332 2335 position: absolute;
2333 2336 width: 100%;
2334 2337 background: #000;
2335 2338 -moz-opacity: 0.1px;
2336 2339 opacity: .10;
2337 2340 filter: alpha(opacity = 10);
2338 2341 z-index: 9049;
2339 2342 margin: .3em;
2340 2343 }
2341 2344
2342 2345 .ac .yui-ac-content ul {
2343 2346 width: 100%;
2344 2347 margin: 0;
2345 2348 padding: 0;
2346 2349 }
2347 2350
2348 2351 .ac .yui-ac-content li {
2349 2352 cursor: default;
2350 2353 white-space: nowrap;
2351 2354 margin: 0;
2352 2355 padding: 2px 5px;
2353 2356 }
2354 2357
2355 2358 .ac .yui-ac-content li.yui-ac-prehighlight {
2356 2359 background: #B3D4FF;
2357 2360 }
2358 2361
2359 2362 .ac .yui-ac-content li.yui-ac-highlight {
2360 2363 background: #556CB5;
2361 2364 color: #FFF;
2362 2365 }
2363 2366
2364 2367 .follow {
2365 2368 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2366 2369 height: 16px;
2367 2370 width: 20px;
2368 2371 cursor: pointer;
2369 2372 display: block;
2370 2373 float: right;
2371 2374 margin-top: 2px;
2372 2375 }
2373 2376
2374 2377 .following {
2375 2378 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2376 2379 height: 16px;
2377 2380 width: 20px;
2378 2381 cursor: pointer;
2379 2382 display: block;
2380 2383 float: right;
2381 2384 margin-top: 2px;
2382 2385 }
2383 2386
2384 2387 .currently_following {
2385 2388 padding-left: 10px;
2386 2389 padding-bottom: 5px;
2387 2390 }
2388 2391
2389 2392 .add_icon {
2390 2393 background: url("../images/icons/add.png") no-repeat scroll 3px;
2391 2394 padding-left: 20px;
2392 2395 padding-top: 0px;
2393 2396 text-align: left;
2394 2397 }
2395 2398
2396 2399 .edit_icon {
2397 2400 background: url("../images/icons/folder_edit.png") no-repeat scroll 3px;
2398 2401 padding-left: 20px;
2399 2402 padding-top: 0px;
2400 2403 text-align: left;
2401 2404 }
2402 2405
2403 2406 .delete_icon {
2404 2407 background: url("../images/icons/delete.png") no-repeat scroll 3px;
2405 2408 padding-left: 20px;
2406 2409 padding-top: 0px;
2407 2410 text-align: left;
2408 2411 }
2409 2412
2410 2413 .refresh_icon {
2411 2414 background: url("../images/icons/arrow_refresh.png") no-repeat scroll
2412 2415 3px;
2413 2416 padding-left: 20px;
2414 2417 padding-top: 0px;
2415 2418 text-align: left;
2416 2419 }
2417 2420
2418 2421 .pull_icon {
2419 2422 background: url("../images/icons/connect.png") no-repeat scroll 3px;
2420 2423 padding-left: 20px;
2421 2424 padding-top: 0px;
2422 2425 text-align: left;
2423 2426 }
2424 2427
2425 2428 .rss_icon {
2426 2429 background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
2427 2430 padding-left: 20px;
2428 2431 padding-top: 4px;
2429 2432 text-align: left;
2430 2433 font-size: 8px
2431 2434 }
2432 2435
2433 2436 .atom_icon {
2434 2437 background: url("../images/icons/atom.png") no-repeat scroll 3px;
2435 2438 padding-left: 20px;
2436 2439 padding-top: 4px;
2437 2440 text-align: left;
2438 2441 font-size: 8px
2439 2442 }
2440 2443
2441 2444 .archive_icon {
2442 2445 background: url("../images/icons/compress.png") no-repeat scroll 3px;
2443 2446 padding-left: 20px;
2444 2447 text-align: left;
2445 2448 padding-top: 1px;
2446 2449 }
2447 2450
2448 2451 .start_following_icon {
2449 2452 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2450 2453 padding-left: 20px;
2451 2454 text-align: left;
2452 2455 padding-top: 0px;
2453 2456 }
2454 2457
2455 2458 .stop_following_icon {
2456 2459 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2457 2460 padding-left: 20px;
2458 2461 text-align: left;
2459 2462 padding-top: 0px;
2460 2463 }
2461 2464
2462 2465 .action_button {
2463 2466 border: 0;
2464 2467 display: inline;
2465 2468 }
2466 2469
2467 2470 .action_button:hover {
2468 2471 border: 0;
2469 2472 text-decoration: underline;
2470 2473 cursor: pointer;
2471 2474 }
2472 2475
2473 2476 #switch_repos {
2474 2477 position: absolute;
2475 2478 height: 25px;
2476 2479 z-index: 1;
2477 2480 }
2478 2481
2479 2482 #switch_repos select {
2480 2483 min-width: 150px;
2481 2484 max-height: 250px;
2482 2485 z-index: 1;
2483 2486 }
2484 2487
2485 2488 .breadcrumbs {
2486 2489 border: medium none;
2487 2490 color: #FFF;
2488 2491 float: left;
2489 2492 text-transform: uppercase;
2490 2493 font-weight: 700;
2491 2494 font-size: 14px;
2492 2495 margin: 0;
2493 2496 padding: 11px 0 11px 10px;
2494 2497 }
2495 2498
2496 2499 .breadcrumbs a {
2497 2500 color: #FFF;
2498 2501 }
2499 2502
2500 2503 .flash_msg {
2501 2504
2502 2505 }
2503 2506
2504 2507 .flash_msg ul {
2505 2508
2506 2509 }
2507 2510
2508 2511 .error_msg {
2509 2512 background-color: #c43c35;
2510 2513 background-repeat: repeat-x;
2511 2514 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b),
2512 2515 to(#c43c35) );
2513 2516 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
2514 2517 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
2515 2518 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b),
2516 2519 color-stop(100%, #c43c35) );
2517 2520 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
2518 2521 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
2519 2522 background-image: linear-gradient(top, #ee5f5b, #c43c35);
2520 2523 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',
2521 2524 endColorstr='#c43c35', GradientType=0 );
2522 2525 border-color: #c43c35 #c43c35 #882a25;
2523 2526 }
2524 2527
2525 2528 .warning_msg {
2526 2529 color: #404040 !important;
2527 2530 background-color: #eedc94;
2528 2531 background-repeat: repeat-x;
2529 2532 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
2530 2533 to(#eedc94) );
2531 2534 background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
2532 2535 background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
2533 2536 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1),
2534 2537 color-stop(100%, #eedc94) );
2535 2538 background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
2536 2539 background-image: -o-linear-gradient(top, #fceec1, #eedc94);
2537 2540 background-image: linear-gradient(top, #fceec1, #eedc94);
2538 2541 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1',
2539 2542 endColorstr='#eedc94', GradientType=0 );
2540 2543 border-color: #eedc94 #eedc94 #e4c652;
2541 2544 }
2542 2545
2543 2546 .success_msg {
2544 2547 background-color: #57a957;
2545 2548 background-repeat: repeat-x !important;
2546 2549 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462),
2547 2550 to(#57a957) );
2548 2551 background-image: -moz-linear-gradient(top, #62c462, #57a957);
2549 2552 background-image: -ms-linear-gradient(top, #62c462, #57a957);
2550 2553 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462),
2551 2554 color-stop(100%, #57a957) );
2552 2555 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
2553 2556 background-image: -o-linear-gradient(top, #62c462, #57a957);
2554 2557 background-image: linear-gradient(top, #62c462, #57a957);
2555 2558 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462',
2556 2559 endColorstr='#57a957', GradientType=0 );
2557 2560 border-color: #57a957 #57a957 #3d773d;
2558 2561 }
2559 2562
2560 2563 .notice_msg {
2561 2564 background-color: #339bb9;
2562 2565 background-repeat: repeat-x;
2563 2566 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de),
2564 2567 to(#339bb9) );
2565 2568 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
2566 2569 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
2567 2570 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de),
2568 2571 color-stop(100%, #339bb9) );
2569 2572 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
2570 2573 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
2571 2574 background-image: linear-gradient(top, #5bc0de, #339bb9);
2572 2575 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de',
2573 2576 endColorstr='#339bb9', GradientType=0 );
2574 2577 border-color: #339bb9 #339bb9 #22697d;
2575 2578 }
2576 2579
2577 2580 .success_msg,.error_msg,.notice_msg,.warning_msg {
2578 2581 font-size: 12px;
2579 2582 font-weight: 700;
2580 2583 min-height: 14px;
2581 2584 line-height: 14px;
2582 2585 margin-bottom: 10px;
2583 2586 margin-top: 0;
2584 2587 display: block;
2585 2588 overflow: auto;
2586 2589 padding: 6px 10px 6px 10px;
2587 2590 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2588 2591 position: relative;
2589 2592 color: #FFF;
2590 2593 border-width: 1px;
2591 2594 border-style: solid;
2592 2595 -webkit-border-radius: 4px;
2593 2596 -moz-border-radius: 4px;
2594 2597 border-radius: 4px;
2595 2598 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2596 2599 -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2597 2600 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2598 2601 }
2599 2602
2600 2603 #msg_close {
2601 2604 background: transparent url("../icons/cross_grey_small.png") no-repeat
2602 2605 scroll 0 0;
2603 2606 cursor: pointer;
2604 2607 height: 16px;
2605 2608 position: absolute;
2606 2609 right: 5px;
2607 2610 top: 5px;
2608 2611 width: 16px;
2609 2612 }
2610 2613
2611 2614 div#legend_container table,div#legend_choices table {
2612 2615 width: auto !important;
2613 2616 }
2614 2617
2615 2618 table#permissions_manage {
2616 2619 width: 0 !important;
2617 2620 }
2618 2621
2619 2622 table#permissions_manage span.private_repo_msg {
2620 2623 font-size: 0.8em;
2621 2624 opacity: 0.6px;
2622 2625 }
2623 2626
2624 2627 table#permissions_manage td.private_repo_msg {
2625 2628 font-size: 0.8em;
2626 2629 }
2627 2630
2628 2631 table#permissions_manage tr#add_perm_input td {
2629 2632 vertical-align: middle;
2630 2633 }
2631 2634
2632 2635 div.gravatar {
2633 2636 background-color: #FFF;
2634 2637 border: 0px solid #D0D0D0;
2635 2638 float: left;
2636 2639 margin-right: 0.7em;
2637 2640 padding: 2px 2px 2px 2px;
2638 2641 line-height:0;
2639 2642 -webkit-border-radius: 6px;
2640 2643 -khtml-border-radius: 6px;
2641 2644 -moz-border-radius: 6px;
2642 2645 border-radius: 6px;
2643 2646 }
2644 2647
2645 2648 div.gravatar img {
2646 2649 -webkit-border-radius: 4px;
2647 2650 -khtml-border-radius: 4px;
2648 2651 -moz-border-radius: 4px;
2649 2652 border-radius: 4px;
2650 2653 }
2651 2654
2652 2655 #header,#content,#footer {
2653 2656 min-width: 978px;
2654 2657 }
2655 2658
2656 2659 #content {
2657 2660 clear: both;
2658 2661 overflow: hidden;
2659 2662 padding: 14px 10px;
2660 2663 }
2661 2664
2662 2665 #content div.box div.title div.search {
2663 2666
2664 2667 border-left: 1px solid #316293;
2665 2668 }
2666 2669
2667 2670 #content div.box div.title div.search div.input input {
2668 2671 border: 1px solid #316293;
2669 2672 }
2670 2673
2671 2674 .ui-button-small a:hover {
2672 2675
2673 2676 }
2674 2677
2675 2678 input.ui-button-small,.ui-button-small {
2676 2679 background: #e5e3e3 url("../images/button.png") repeat-x !important;
2677 2680 border-top: 1px solid #DDD !important;
2678 2681 border-left: 1px solid #c6c6c6 !important;
2679 2682 border-right: 1px solid #DDD !important;
2680 2683 border-bottom: 1px solid #c6c6c6 !important;
2681 2684 color: #515151 !important;
2682 2685 outline: none !important;
2683 2686 margin: 0 !important;
2684 2687 -webkit-border-radius: 4px 4px 4px 4px !important;
2685 2688 -khtml-border-radius: 4px 4px 4px 4px !important;
2686 2689 -moz-border-radius: 4px 4px 4px 4px !important;
2687 2690 border-radius: 4px 4px 4px 4px !important;
2688 2691 box-shadow: 0 1px 0 #ececec !important;
2689 2692 cursor: pointer !important;
2690 2693 padding: 3px 3px 3px 3px;
2691 2694 }
2692 2695
2693 2696 input.ui-button-small.xsmall,.ui-button-small.xsmall{
2694 2697 padding: 1px 2px 1px 1px;
2695 2698 }
2696 2699
2697 2700 input.ui-button-small:hover,.ui-button-small:hover {
2698 2701 background: #b4b4b4 url("../images/button_selected.png") repeat-x
2699 2702 !important;
2700 2703 border-top: 1px solid #ccc !important;
2701 2704 border-left: 1px solid #bebebe !important;
2702 2705 border-right: 1px solid #b1b1b1 !important;
2703 2706 border-bottom: 1px solid #afafaf !important;
2704 2707 text-decoration: none;
2705 2708 }
2706 2709
2707 2710 input.ui-button-small-blue,.ui-button-small-blue {
2708 2711 background: #4e85bb url("../images/button_highlight.png") repeat-x;
2709 2712 border-top: 1px solid #5c91a4;
2710 2713 border-left: 1px solid #2a6f89;
2711 2714 border-right: 1px solid #2b7089;
2712 2715 border-bottom: 1px solid #1a6480;
2713 2716 color: #fff;
2714 2717 -webkit-border-radius: 4px 4px 4px 4px;
2715 2718 -khtml-border-radius: 4px 4px 4px 4px;
2716 2719 -moz-border-radius: 4px 4px 4px 4px;
2717 2720 border-radius: 4px 4px 4px 4px;
2718 2721 box-shadow: 0 1px 0 #ececec;
2719 2722 cursor: pointer;
2720 2723 padding: 0px 2px 1px 2px;
2721 2724 }
2722 2725
2723 2726 input.ui-button-small-blue:hover {
2724 2727
2725 2728 }
2726 2729
2727 2730 ins,div.options a:hover {
2728 2731 text-decoration: none;
2729 2732 }
2730 2733
2731 2734 img,#header #header-inner #quick li a:hover span.normal,#header #header-inner #quick li ul li.last,#content div.box div.form div.fields div.field div.textarea table td table td a,#clone_url
2732 2735 {
2733 2736 border: none;
2734 2737 }
2735 2738
2736 2739 img.icon,.right .merge img {
2737 2740 vertical-align: bottom;
2738 2741 }
2739 2742
2740 2743 #header ul#logged-user,#content div.box div.title ul.links,#content div.box div.message div.dismiss,#content div.box div.traffic div.legend ul
2741 2744 {
2742 2745 float: right;
2743 2746 margin: 0;
2744 2747 padding: 0;
2745 2748 }
2746 2749
2747 2750 #header #header-inner #home,#header #header-inner #logo,#content div.box ul.left,#content div.box ol.left,#content div.box div.pagination-left,div#commit_history,div#legend_data,div#legend_container,div#legend_choices
2748 2751 {
2749 2752 float: left;
2750 2753 }
2751 2754
2752 2755 #header #header-inner #quick li:hover ul ul,#header #header-inner #quick li:hover ul ul ul,#header #header-inner #quick li:hover ul ul ul ul,#content #left #menu ul.closed,#content #left #menu li ul.collapsed,.yui-tt-shadow
2753 2756 {
2754 2757 display: none;
2755 2758 }
2756 2759
2757 2760 #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
2758 2761 {
2759 2762 display: block;
2760 2763 }
2761 2764
2762 2765 #content div.graph {
2763 2766 padding: 0 10px 10px;
2764 2767 }
2765 2768
2766 2769 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a
2767 2770 {
2768 2771 color: #bfe3ff;
2769 2772 }
2770 2773
2771 2774 #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
2772 2775 {
2773 2776 margin: 10px 24px 10px 44px;
2774 2777 }
2775 2778
2776 2779 #content div.box div.form,#content div.box div.table,#content div.box div.traffic
2777 2780 {
2778 2781 clear: both;
2779 2782 overflow: hidden;
2780 2783 margin: 0;
2781 2784 padding: 0 20px 10px;
2782 2785 }
2783 2786
2784 2787 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields
2785 2788 {
2786 2789 clear: both;
2787 2790 overflow: hidden;
2788 2791 margin: 0;
2789 2792 padding: 0;
2790 2793 }
2791 2794
2792 2795 #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
2793 2796 {
2794 2797 height: 1%;
2795 2798 display: block;
2796 2799 color: #363636;
2797 2800 margin: 0;
2798 2801 padding: 2px 0 0;
2799 2802 }
2800 2803
2801 2804 #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
2802 2805 {
2803 2806 background: #FBE3E4;
2804 2807 border-top: 1px solid #e1b2b3;
2805 2808 border-left: 1px solid #e1b2b3;
2806 2809 border-right: 1px solid #FBC2C4;
2807 2810 border-bottom: 1px solid #FBC2C4;
2808 2811 }
2809 2812
2810 2813 #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
2811 2814 {
2812 2815 background: #E6EFC2;
2813 2816 border-top: 1px solid #cebb98;
2814 2817 border-left: 1px solid #cebb98;
2815 2818 border-right: 1px solid #c6d880;
2816 2819 border-bottom: 1px solid #c6d880;
2817 2820 }
2818 2821
2819 2822 #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
2820 2823 {
2821 2824 margin: 0;
2822 2825 }
2823 2826
2824 2827 #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
2825 2828 {
2826 2829 margin: 0 0 0 0px !important;
2827 2830 padding: 0;
2828 2831 }
2829 2832
2830 2833 #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
2831 2834 {
2832 2835 margin: 0 0 0 200px;
2833 2836 padding: 0;
2834 2837 }
2835 2838
2836 2839 #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
2837 2840 {
2838 2841 color: #000;
2839 2842 text-decoration: none;
2840 2843 }
2841 2844
2842 2845 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus
2843 2846 {
2844 2847 border: 1px solid #666;
2845 2848 }
2846 2849
2847 2850 #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
2848 2851 {
2849 2852 clear: both;
2850 2853 overflow: hidden;
2851 2854 margin: 0;
2852 2855 padding: 8px 0 2px;
2853 2856 }
2854 2857
2855 2858 #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
2856 2859 {
2857 2860 float: left;
2858 2861 margin: 0;
2859 2862 }
2860 2863
2861 2864 #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
2862 2865 {
2863 2866 height: 1%;
2864 2867 display: block;
2865 2868 float: left;
2866 2869 margin: 2px 0 0 4px;
2867 2870 }
2868 2871
2869 2872 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
2870 2873 {
2871 2874 color: #000;
2872 2875 font-size: 11px;
2873 2876 font-weight: 700;
2874 2877 margin: 0;
2875 2878 }
2876 2879
2877 2880 input.ui-button {
2878 2881 background: #e5e3e3 url("../images/button.png") repeat-x;
2879 2882 border-top: 1px solid #DDD;
2880 2883 border-left: 1px solid #c6c6c6;
2881 2884 border-right: 1px solid #DDD;
2882 2885 border-bottom: 1px solid #c6c6c6;
2883 2886 color: #515151 !important;
2884 2887 outline: none;
2885 2888 margin: 0;
2886 2889 padding: 6px 12px;
2887 2890 -webkit-border-radius: 4px 4px 4px 4px;
2888 2891 -khtml-border-radius: 4px 4px 4px 4px;
2889 2892 -moz-border-radius: 4px 4px 4px 4px;
2890 2893 border-radius: 4px 4px 4px 4px;
2891 2894 box-shadow: 0 1px 0 #ececec;
2892 2895 cursor: pointer;
2893 2896 }
2894 2897
2895 2898 input.ui-button:hover {
2896 2899 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
2897 2900 border-top: 1px solid #ccc;
2898 2901 border-left: 1px solid #bebebe;
2899 2902 border-right: 1px solid #b1b1b1;
2900 2903 border-bottom: 1px solid #afafaf;
2901 2904 }
2902 2905
2903 2906 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight
2904 2907 {
2905 2908 display: inline;
2906 2909 }
2907 2910
2908 2911 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons
2909 2912 {
2910 2913 margin: 10px 0 0 200px;
2911 2914 padding: 0;
2912 2915 }
2913 2916
2914 2917 #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
2915 2918 {
2916 2919 margin: 10px 0 0;
2917 2920 }
2918 2921
2919 2922 #content div.box table td.user,#content div.box table td.address {
2920 2923 width: 10%;
2921 2924 text-align: center;
2922 2925 }
2923 2926
2924 2927 #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
2925 2928 {
2926 2929 text-align: right;
2927 2930 margin: 6px 0 0;
2928 2931 padding: 0;
2929 2932 }
2930 2933
2931 2934 #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
2932 2935 {
2933 2936 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
2934 2937 border-top: 1px solid #ccc;
2935 2938 border-left: 1px solid #bebebe;
2936 2939 border-right: 1px solid #b1b1b1;
2937 2940 border-bottom: 1px solid #afafaf;
2938 2941 color: #515151;
2939 2942 margin: 0;
2940 2943 padding: 6px 12px;
2941 2944 }
2942 2945
2943 2946 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results
2944 2947 {
2945 2948 text-align: left;
2946 2949 float: left;
2947 2950 margin: 0;
2948 2951 padding: 0;
2949 2952 }
2950 2953
2951 2954 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span
2952 2955 {
2953 2956 height: 1%;
2954 2957 display: block;
2955 2958 float: left;
2956 2959 background: #ebebeb url("../images/pager.png") repeat-x;
2957 2960 border-top: 1px solid #dedede;
2958 2961 border-left: 1px solid #cfcfcf;
2959 2962 border-right: 1px solid #c4c4c4;
2960 2963 border-bottom: 1px solid #c4c4c4;
2961 2964 color: #4A4A4A;
2962 2965 font-weight: 700;
2963 2966 margin: 0;
2964 2967 padding: 6px 8px;
2965 2968 }
2966 2969
2967 2970 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled
2968 2971 {
2969 2972 color: #B4B4B4;
2970 2973 padding: 6px;
2971 2974 }
2972 2975
2973 2976 #login,#register {
2974 2977 width: 520px;
2975 2978 margin: 10% auto 0;
2976 2979 padding: 0;
2977 2980 }
2978 2981
2979 2982 #login div.color,#register div.color {
2980 2983 clear: both;
2981 2984 overflow: hidden;
2982 2985 background: #FFF;
2983 2986 margin: 10px auto 0;
2984 2987 padding: 3px 3px 3px 0;
2985 2988 }
2986 2989
2987 2990 #login div.color a,#register div.color a {
2988 2991 width: 20px;
2989 2992 height: 20px;
2990 2993 display: block;
2991 2994 float: left;
2992 2995 margin: 0 0 0 3px;
2993 2996 padding: 0;
2994 2997 }
2995 2998
2996 2999 #login div.title h5,#register div.title h5 {
2997 3000 color: #fff;
2998 3001 margin: 10px;
2999 3002 padding: 0;
3000 3003 }
3001 3004
3002 3005 #login div.form div.fields div.field,#register div.form div.fields div.field
3003 3006 {
3004 3007 clear: both;
3005 3008 overflow: hidden;
3006 3009 margin: 0;
3007 3010 padding: 0 0 10px;
3008 3011 }
3009 3012
3010 3013 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message
3011 3014 {
3012 3015 height: 1%;
3013 3016 display: block;
3014 3017 color: red;
3015 3018 margin: 8px 0 0;
3016 3019 padding: 0;
3017 3020 max-width: 320px;
3018 3021 }
3019 3022
3020 3023 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label
3021 3024 {
3022 3025 color: #000;
3023 3026 font-weight: 700;
3024 3027 }
3025 3028
3026 3029 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input
3027 3030 {
3028 3031 float: left;
3029 3032 margin: 0;
3030 3033 padding: 0;
3031 3034 }
3032 3035
3033 3036 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox
3034 3037 {
3035 3038 margin: 0 0 0 184px;
3036 3039 padding: 0;
3037 3040 }
3038 3041
3039 3042 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label
3040 3043 {
3041 3044 color: #565656;
3042 3045 font-weight: 700;
3043 3046 }
3044 3047
3045 3048 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input
3046 3049 {
3047 3050 color: #000;
3048 3051 font-size: 1em;
3049 3052 font-weight: 700;
3050 3053 margin: 0;
3051 3054 }
3052 3055
3053 3056 #changeset_content .container .wrapper,#graph_content .container .wrapper
3054 3057 {
3055 3058 width: 600px;
3056 3059 }
3057 3060
3058 3061 #changeset_content .container .left,#graph_content .container .left {
3059 3062 float: left;
3060 3063 width: 70%;
3061 3064 padding-left: 5px;
3062 3065 }
3063 3066
3064 3067 #changeset_content .container .left .date,.ac .match {
3065 3068 font-weight: 700;
3066 3069 padding-top: 5px;
3067 3070 padding-bottom: 5px;
3068 3071 }
3069 3072
3070 3073 div#legend_container table td,div#legend_choices table td {
3071 3074 border: none !important;
3072 3075 height: 20px !important;
3073 3076 padding: 0 !important;
3074 3077 }
3075 3078
3076 3079 .q_filter_box {
3077 3080 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3078 3081 -webkit-border-radius: 4px;
3079 3082 -moz-border-radius: 4px;
3080 3083 border-radius: 4px;
3081 3084 border: 0 none;
3082 3085 color: #AAAAAA;
3083 3086 margin-bottom: -4px;
3084 3087 margin-top: -4px;
3085 3088 padding-left: 3px;
3086 3089 }
3087 3090
3088 3091 #node_filter {
3089 3092 border: 0px solid #545454;
3090 3093 color: #AAAAAA;
3091 3094 padding-left: 3px;
3092 3095 }
3093 3096
3094 3097 /*README STYLE*/
3095 3098
3096 3099 div.readme {
3097 3100 padding:0px;
3098 3101 }
3099 3102
3100 3103 div.readme h2 {
3101 3104 font-weight: normal;
3102 3105 }
3103 3106
3104 3107 div.readme .readme_box {
3105 3108 background-color: #fafafa;
3106 3109 }
3107 3110
3108 3111 div.readme .readme_box {
3109 3112 clear:both;
3110 3113 overflow:hidden;
3111 3114 margin:0;
3112 3115 padding:0 20px 10px;
3113 3116 }
3114 3117
3115 3118 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 {
3116 3119 border-bottom: 0 !important;
3117 3120 margin: 0 !important;
3118 3121 padding: 0 !important;
3119 3122 line-height: 1.5em !important;
3120 3123 }
3121 3124
3122 3125
3123 3126 div.readme .readme_box h1:first-child {
3124 3127 padding-top: .25em !important;
3125 3128 }
3126 3129
3127 3130 div.readme .readme_box h2, div.readme .readme_box h3 {
3128 3131 margin: 1em 0 !important;
3129 3132 }
3130 3133
3131 3134 div.readme .readme_box h2 {
3132 3135 margin-top: 1.5em !important;
3133 3136 border-top: 4px solid #e0e0e0 !important;
3134 3137 padding-top: .5em !important;
3135 3138 }
3136 3139
3137 3140 div.readme .readme_box p {
3138 3141 color: black !important;
3139 3142 margin: 1em 0 !important;
3140 3143 line-height: 1.5em !important;
3141 3144 }
3142 3145
3143 3146 div.readme .readme_box ul {
3144 3147 list-style: disc !important;
3145 3148 margin: 1em 0 1em 2em !important;
3146 3149 }
3147 3150
3148 3151 div.readme .readme_box ol {
3149 3152 list-style: decimal;
3150 3153 margin: 1em 0 1em 2em !important;
3151 3154 }
3152 3155
3153 3156 div.readme .readme_box pre, code {
3154 3157 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
3155 3158 }
3156 3159
3157 3160 div.readme .readme_box code {
3158 3161 font-size: 12px !important;
3159 3162 background-color: ghostWhite !important;
3160 3163 color: #444 !important;
3161 3164 padding: 0 .2em !important;
3162 3165 border: 1px solid #dedede !important;
3163 3166 }
3164 3167
3165 3168 div.readme .readme_box pre code {
3166 3169 padding: 0 !important;
3167 3170 font-size: 12px !important;
3168 3171 background-color: #eee !important;
3169 3172 border: none !important;
3170 3173 }
3171 3174
3172 3175 div.readme .readme_box pre {
3173 3176 margin: 1em 0;
3174 3177 font-size: 12px;
3175 3178 background-color: #eee;
3176 3179 border: 1px solid #ddd;
3177 3180 padding: 5px;
3178 3181 color: #444;
3179 3182 overflow: auto;
3180 3183 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3181 3184 -webkit-border-radius: 3px;
3182 3185 -moz-border-radius: 3px;
3183 3186 border-radius: 3px;
3184 3187 }
3185 3188
3186 3189
3187 3190 /** RST STYLE **/
3188 3191
3189 3192
3190 3193 div.rst-block {
3191 3194 padding:0px;
3192 3195 }
3193 3196
3194 3197 div.rst-block h2 {
3195 3198 font-weight: normal;
3196 3199 }
3197 3200
3198 3201 div.rst-block {
3199 3202 background-color: #fafafa;
3200 3203 }
3201 3204
3202 3205 div.rst-block {
3203 3206 clear:both;
3204 3207 overflow:hidden;
3205 3208 margin:0;
3206 3209 padding:0 20px 10px;
3207 3210 }
3208 3211
3209 3212 div.rst-block h1, div.rst-block h2, div.rst-block h3, div.rst-block h4, div.rst-block h5, div.rst-block h6 {
3210 3213 border-bottom: 0 !important;
3211 3214 margin: 0 !important;
3212 3215 padding: 0 !important;
3213 3216 line-height: 1.5em !important;
3214 3217 }
3215 3218
3216 3219
3217 3220 div.rst-block h1:first-child {
3218 3221 padding-top: .25em !important;
3219 3222 }
3220 3223
3221 3224 div.rst-block h2, div.rst-block h3 {
3222 3225 margin: 1em 0 !important;
3223 3226 }
3224 3227
3225 3228 div.rst-block h2 {
3226 3229 margin-top: 1.5em !important;
3227 3230 border-top: 4px solid #e0e0e0 !important;
3228 3231 padding-top: .5em !important;
3229 3232 }
3230 3233
3231 3234 div.rst-block p {
3232 3235 color: black !important;
3233 3236 margin: 1em 0 !important;
3234 3237 line-height: 1.5em !important;
3235 3238 }
3236 3239
3237 3240 div.rst-block ul {
3238 3241 list-style: disc !important;
3239 3242 margin: 1em 0 1em 2em !important;
3240 3243 }
3241 3244
3242 3245 div.rst-block ol {
3243 3246 list-style: decimal;
3244 3247 margin: 1em 0 1em 2em !important;
3245 3248 }
3246 3249
3247 3250 div.rst-block pre, code {
3248 3251 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
3249 3252 }
3250 3253
3251 3254 div.rst-block code {
3252 3255 font-size: 12px !important;
3253 3256 background-color: ghostWhite !important;
3254 3257 color: #444 !important;
3255 3258 padding: 0 .2em !important;
3256 3259 border: 1px solid #dedede !important;
3257 3260 }
3258 3261
3259 3262 div.rst-block pre code {
3260 3263 padding: 0 !important;
3261 3264 font-size: 12px !important;
3262 3265 background-color: #eee !important;
3263 3266 border: none !important;
3264 3267 }
3265 3268
3266 3269 div.rst-block pre {
3267 3270 margin: 1em 0;
3268 3271 font-size: 12px;
3269 3272 background-color: #eee;
3270 3273 border: 1px solid #ddd;
3271 3274 padding: 5px;
3272 3275 color: #444;
3273 3276 overflow: auto;
3274 3277 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3275 3278 -webkit-border-radius: 3px;
3276 3279 -moz-border-radius: 3px;
3277 3280 border-radius: 3px;
3278 3281 }
3279 3282
3280 3283
3281 3284 /** comment main **/
3282 3285 .comments {
3283 3286 padding:10px 20px;
3284 3287 }
3285 3288
3286 3289 .comments .comment {
3287 3290 border: 1px solid #ddd;
3288 3291 margin-top: 10px;
3289 3292 -webkit-border-radius: 4px;
3290 3293 -moz-border-radius: 4px;
3291 3294 border-radius: 4px;
3292 3295 }
3293 3296
3294 3297 .comments .comment .meta {
3295 3298 background: #f8f8f8;
3296 3299 padding: 6px;
3297 3300 border-bottom: 1px solid #ddd;
3298 3301 }
3299 3302
3300 3303 .comments .comment .meta img {
3301 3304 vertical-align: middle;
3302 3305 }
3303 3306
3304 3307 .comments .comment .meta .user {
3305 3308 font-weight: bold;
3306 3309 }
3307 3310
3308 3311 .comments .comment .meta .date {
3309 3312 float: right;
3310 3313 }
3311 3314
3312 3315 .comments .comment .text {
3313 3316 padding: 8px 6px 6px 14px;
3314 3317 background-color: #FAFAFA;
3315 3318 }
3316 3319
3317 3320 .comments .comments-number{
3318 3321 padding:0px 0px 10px 0px;
3319 3322 font-weight: bold;
3320 3323 color: #666;
3321 3324 font-size: 16px;
3322 3325 }
3323 3326
3324 3327 /** comment form **/
3325 3328
3326 3329 .comment-form .clearfix{
3327 3330 background: #EEE;
3328 3331 -webkit-border-radius: 4px;
3329 3332 -moz-border-radius: 4px;
3330 3333 border-radius: 4px;
3331 3334 padding: 10px;
3332 3335 }
3333 3336
3334 3337 div.comment-form {
3335 3338 margin-top: 20px;
3336 3339 }
3337 3340
3338 3341 .comment-form strong {
3339 3342 display: block;
3340 3343 margin-bottom: 15px;
3341 3344 }
3342 3345
3343 3346 .comment-form textarea {
3344 3347 width: 100%;
3345 3348 height: 100px;
3346 3349 font-family: 'Monaco', 'Courier', 'Courier New', monospace;
3347 3350 }
3348 3351
3349 3352 form.comment-form {
3350 3353 margin-top: 10px;
3351 3354 margin-left: 10px;
3352 3355 }
3353 3356
3354 3357 .comment-form-submit {
3355 3358 margin-top: 5px;
3356 3359 margin-left: 525px;
3357 3360 }
3358 3361
3359 3362 .file-comments {
3360 3363 display: none;
3361 3364 }
3362 3365
3363 3366 .comment-form .comment {
3364 3367 margin-left: 10px;
3365 3368 }
3366 3369
3367 3370 .comment-form .comment-help{
3368 3371 padding: 0px 0px 5px 0px;
3369 3372 color: #666;
3370 3373 }
3371 3374
3372 3375 .comment-form .comment-button{
3373 3376 padding-top:5px;
3374 3377 }
3375 3378
3376 3379 .add-another-button {
3377 3380 margin-left: 10px;
3378 3381 margin-top: 10px;
3379 3382 margin-bottom: 10px;
3380 3383 }
3381 3384
3382 3385 .comment .buttons {
3383 3386 position: absolute;
3384 3387 right:40px;
3385 3388 }
3386 3389
3387 3390
3388 3391 .show-inline-comments{
3389 3392 position: relative;
3390 3393 top:1px
3391 3394 }
3392 3395
3393 3396 /** comment inline form **/
3394 3397
3395 3398 .comment-inline-form .clearfix{
3396 3399 background: #EEE;
3397 3400 -webkit-border-radius: 4px;
3398 3401 -moz-border-radius: 4px;
3399 3402 border-radius: 4px;
3400 3403 padding: 5px;
3401 3404 }
3402 3405
3403 3406 div.comment-inline-form {
3404 3407 margin-top: 5px;
3405 3408 padding:2px 6px 8px 6px;
3406 3409 }
3407 3410
3408 3411 .comment-inline-form strong {
3409 3412 display: block;
3410 3413 margin-bottom: 15px;
3411 3414 }
3412 3415
3413 3416 .comment-inline-form textarea {
3414 3417 width: 100%;
3415 3418 height: 100px;
3416 3419 font-family: 'Monaco', 'Courier', 'Courier New', monospace;
3417 3420 }
3418 3421
3419 3422 form.comment-inline-form {
3420 3423 margin-top: 10px;
3421 3424 margin-left: 10px;
3422 3425 }
3423 3426
3424 3427 .comment-inline-form-submit {
3425 3428 margin-top: 5px;
3426 3429 margin-left: 525px;
3427 3430 }
3428 3431
3429 3432 .file-comments {
3430 3433 display: none;
3431 3434 }
3432 3435
3433 3436 .comment-inline-form .comment {
3434 3437 margin-left: 10px;
3435 3438 }
3436 3439
3437 3440 .comment-inline-form .comment-help{
3438 3441 padding: 0px 0px 2px 0px;
3439 3442 color: #666666;
3440 3443 font-size: 10px;
3441 3444 }
3442 3445
3443 3446 .comment-inline-form .comment-button{
3444 3447 padding-top:5px;
3445 3448 }
3446 3449
3447 3450 /** comment inline **/
3448 3451 .inline-comments {
3449 3452 padding:10px 20px;
3450 3453 }
3451 3454
3452 3455 .inline-comments div.rst-block {
3453 3456 clear:both;
3454 3457 overflow:hidden;
3455 3458 margin:0;
3456 3459 padding:0 20px 0px;
3457 3460 }
3458 3461 .inline-comments .comment {
3459 3462 border: 1px solid #ddd;
3460 3463 -webkit-border-radius: 4px;
3461 3464 -moz-border-radius: 4px;
3462 3465 border-radius: 4px;
3463 3466 margin: 3px 3px 5px 5px;
3464 3467 }
3465 3468
3466 3469 .inline-comments .comment .meta {
3467 3470 background: #f8f8f8;
3468 3471 padding: 6px;
3469 3472 border-bottom: 1px solid #ddd;
3470 3473 }
3471 3474
3472 3475 .inline-comments .comment .meta img {
3473 3476 vertical-align: middle;
3474 3477 }
3475 3478
3476 3479 .inline-comments .comment .meta .user {
3477 3480 font-weight: bold;
3478 3481 }
3479 3482
3480 3483 .inline-comments .comment .meta .date {
3481 3484 float: right;
3482 3485 }
3483 3486
3484 3487 .inline-comments .comment .text {
3485 3488 padding: 8px 6px 6px 14px;
3486 3489 background-color: #FAFAFA;
3487 3490 }
3488 3491
3489 3492 .inline-comments .comments-number{
3490 3493 padding:0px 0px 10px 0px;
3491 3494 font-weight: bold;
3492 3495 color: #666;
3493 3496 font-size: 16px;
3494 3497 }
3495 3498 .inline-comments-button .add-comment{
3496 3499 margin:10px 5px !important;
3497 3500 }
3498 3501 .notifications{
3499 3502 width:22px;
3500 3503 padding:2px;
3501 3504 float:right;
3502 3505 -webkit-border-radius: 4px;
3503 3506 -moz-border-radius: 4px;
3504 3507 border-radius: 4px;
3505 3508 text-align: center;
3506 3509 margin: 0px -10px 0px 5px;
3507 3510 background-color: #DEDEDE;
3508 3511 }
3509 3512 .notifications a{
3510 3513 color:#888 !important;
3511 3514 display: block;
3512 3515 font-size: 10px
3513 3516 }
3514 3517 .notifications a:hover{
3515 3518 text-decoration: none !important;
3516 3519 }
3517 3520 .notification-header{
3518 3521
3519 3522 }
3520 3523 .notification-header .desc{
3521 3524 font-size: 16px;
3522 3525 height: 24px;
3523 3526 padding-top: 6px;
3524 3527 float: left
3525 3528 }
3526 3529
3527 3530 .notification-header .desc.unread{
3528 3531 font-weight: bold;
3529 3532 font-size: 17px;
3530 3533 }
3531 3534
3532 3535 .notification-header .delete-notifications{
3533 3536 float: right;
3534 3537 padding-top: 8px;
3535 3538 cursor: pointer;
3536 3539 }
3537 3540 .notification-subject{
3538 3541 clear:both;
3539 3542 border-bottom: 1px solid #eee;
3540 3543 padding:5px 0px 5px 38px;
3541 3544 } No newline at end of file
@@ -1,48 +1,48 b''
1 1 <%inherit file="/base/base.html"/>
2 2
3 3 <%def name="title()">
4 4 ${c.repo_name} ${_('Files')} - ${c.rhodecode_name}
5 5 </%def>
6 6
7 7 <%def name="breadcrumbs_links()">
8 8 ${h.link_to(u'Home',h.url('/'))}
9 9 &raquo;
10 10 ${h.link_to(c.repo_name,h.url('files_home',repo_name=c.repo_name))}
11 11 &raquo;
12 12 ${_('files')}
13 %if c.files_list:
13 %if c.file:
14 14 @ r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
15 15 %endif
16 16 </%def>
17 17
18 18 <%def name="page_nav()">
19 19 ${self.menu('files')}
20 20 </%def>
21 21
22 22 <%def name="main()">
23 23 <div class="box">
24 24 <!-- box / title -->
25 25 <div class="title">
26 26 ${self.breadcrumbs()}
27 27 <ul class="links">
28 28 <li>
29 29 <span style="text-transform: uppercase;"><a href="#">${_('branch')}: ${c.changeset.branch}</a></span>
30 30 </li>
31 31 </ul>
32 32 </div>
33 33 <div class="table">
34 34 <div id="files_data">
35 35 <%include file='files_ypjax.html'/>
36 36 </div>
37 37 </div>
38 38 </div>
39 39 <script type="text/javascript">
40 40 var YPJAX_TITLE = "${c.repo_name} ${_('Files')} - ${c.rhodecode_name}";
41 41 var current_url = "${h.url.current()}";
42 var node_list_url = '${h.url("files_home",repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.files_list.path)}';
43 var url_base = '${h.url("files_nodelist_home",repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.files_list.path)}';
42 var node_list_url = '${h.url("files_home",repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.path)}';
43 var url_base = '${h.url("files_nodelist_home",repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.path)}';
44 44 var truncated_lbl = "${_('search truncated')}";
45 45 var nomatch_lbl = "${_('no matching files')}";
46 46 fileBrowserListeners(current_url, node_list_url, url_base, truncated_lbl, nomatch_lbl);
47 47 </script>
48 48 </%def> No newline at end of file
@@ -1,136 +1,136 b''
1 1 <%inherit file="/base/base.html"/>
2 2
3 3 <%def name="title()">
4 4 ${c.repo_name} ${_('File annotate')} - ${c.rhodecode_name}
5 5 </%def>
6 6
7 7 <%def name="breadcrumbs_links()">
8 8 ${h.link_to(u'Home',h.url('/'))}
9 9 &raquo;
10 10 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
11 11 &raquo;
12 12 ${_('annotate')} @ R${c.cs.revision}:${h.short_id(c.cs.raw_id)}
13 13 </%def>
14 14
15 15 <%def name="page_nav()">
16 16 ${self.menu('files')}
17 17 </%def>
18 18 <%def name="main()">
19 19 <div class="box">
20 20 <!-- box / title -->
21 21 <div class="title">
22 22 ${self.breadcrumbs()}
23 23 <ul class="links">
24 24 <li>
25 25 <span style="text-transform: uppercase;"><a href="#">${_('branch')}: ${c.cs.branch}</a></span>
26 26 </li>
27 27 </ul>
28 28 </div>
29 29 <div class="table">
30 30 <div id="files_data">
31 31 <h3 class="files_location">${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cs.revision,c.file.path)}</h3>
32 <dl class="overview">
33 <dt>${_('Revision')}</dt>
34 <dd>${h.link_to("r%s:%s" % (c.file.last_changeset.revision,h.short_id(c.file.last_changeset.raw_id)),
35 h.url('changeset_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id))} </dd>
36 <dt>${_('Size')}</dt>
37 <dd>${h.format_byte_size(c.file.size,binary=True)}</dd>
38 <dt>${_('Mimetype')}</dt>
39 <dd>${c.file.mimetype}</dd>
40 <dt>${_('Options')}</dt>
41 <dd>${h.link_to(_('show source'),
42 h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path))}
43 / ${h.link_to(_('show as raw'),
44 h.url('files_raw_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path))}
45 / ${h.link_to(_('download as raw'),
46 h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path))}
47 % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
48 % if not c.file.is_binary:
49 / ${h.link_to(_('edit'),
50 h.url('files_edit_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path))}
51 % endif
52 % endif
53 </dd>
54 <dt>${_('History')}</dt>
32 <dl>
33 <dt style="padding-top:10px;font-size:16px">${_('History')}</dt>
55 34 <dd>
56 35 <div>
57 36 ${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')}
58 37 ${h.hidden('diff2',c.file.last_changeset.raw_id)}
59 38 ${h.select('diff1',c.file.last_changeset.raw_id,c.file_history)}
60 39 ${h.submit('diff','diff to revision',class_="ui-button-small")}
61 40 ${h.submit('show_rev','show at revision',class_="ui-button-small")}
62 41 ${h.end_form()}
63 42 </div>
64 43 </dd>
65 44 </dl>
66 45 <div id="body" class="codeblock">
67 <div class="code-header">
68 <div class="revision">${c.file.name}@r${c.file.last_changeset.revision}:${h.short_id(c.file.last_changeset.raw_id)}</div>
69 <div class="commit">"${c.file.message}"</div>
70 </div>
46 <div class="code-header">
47 <div class="stats">
48 <div class="left"><img src="${h.url('/images/icons/file.png')}"/></div>
49 <div class="left item">${h.link_to("r%s:%s" % (c.file.last_changeset.revision,h.short_id(c.file.last_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id))}</div>
50 <div class="left item">${h.format_byte_size(c.file.size,binary=True)}</div>
51 <div class="left item last">${c.file.mimetype}</div>
52 <div class="buttons">
53 ${h.link_to(_('show source'),h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-button-small")}
54 ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-button-small")}
55 ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-button-small")}
56 % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
57 % if not c.file.is_binary:
58 ${h.link_to(_('edit'),h.url('files_edit_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-button-small")}
59 % endif
60 % endif
61 </div>
62 </div>
63 <div class="author">
64 <div class="gravatar">
65 <img alt="gravatar" src="${h.gravatar_url(h.email(c.cs.author),16)}"/>
66 </div>
67 <div title="${h.email_or_none(c.cs.author)}" class="user">${h.person(c.cs.author)}</div>
68 </div>
69 <div class="commit">${c.file.last_changeset.message}</div>
70 </div>
71 71 <div class="code-body">
72 72 %if c.file.is_binary:
73 73 ${_('Binary file (%s)') % c.file.mimetype}
74 74 %else:
75 75 % if c.file.size < c.cut_off_limit:
76 76 ${h.pygmentize_annotation(c.repo_name,c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
77 77 %else:
78 78 ${_('File is too big to display')} ${h.link_to(_('show as raw'),
79 79 h.url('files_raw_home',repo_name=c.repo_name,revision=c.cs.revision,f_path=c.f_path))}
80 80 %endif
81 81 <script type="text/javascript">
82 82 function highlight_lines(lines){
83 83 for(pos in lines){
84 84 YUD.setStyle('L'+lines[pos],'background-color','#FFFFBE');
85 85 }
86 86 }
87 87 page_highlights = location.href.substring(location.href.indexOf('#')+1).split('L');
88 88 if (page_highlights.length == 2){
89 89 highlight_ranges = page_highlights[1].split(",");
90 90
91 91 var h_lines = [];
92 92 for (pos in highlight_ranges){
93 93 var _range = highlight_ranges[pos].split('-');
94 94 if(_range.length == 2){
95 95 var start = parseInt(_range[0]);
96 96 var end = parseInt(_range[1]);
97 97 if (start < end){
98 98 for(var i=start;i<=end;i++){
99 99 h_lines.push(i);
100 100 }
101 101 }
102 102 }
103 103 else{
104 104 h_lines.push(parseInt(highlight_ranges[pos]));
105 105 }
106 106 }
107 107 highlight_lines(h_lines);
108 108
109 109 //remember original location
110 110 var old_hash = location.href.substring(location.href.indexOf('#'));
111 111
112 112 // this makes a jump to anchor moved by 3 posstions for padding
113 113 window.location.hash = '#L'+Math.max(parseInt(h_lines[0])-3,1);
114 114
115 115 //sets old anchor
116 116 window.location.hash = old_hash;
117 117
118 118 }
119 119 </script>
120 120 %endif
121 121 </div>
122 122 </div>
123 123 <script type="text/javascript">
124 124 YAHOO.util.Event.onDOMReady(function(){
125 125 YUE.on('show_rev','click',function(e){
126 126 YAHOO.util.Event.preventDefault(e);
127 127 var cs = YAHOO.util.Dom.get('diff1').value;
128 128 var url = "${h.url('files_annotate_home',repo_name=c.repo_name,revision='__CS__',f_path=c.f_path)}".replace('__CS__',cs);
129 129 window.location = url;
130 130 });
131 131 });
132 132 </script>
133 133 </div>
134 134 </div>
135 135 </div>
136 136 </%def>
@@ -1,109 +1,109 b''
1 1 <%def name="file_class(node)">
2 2 %if node.is_file():
3 3 <%return "browser-file" %>
4 4 %else:
5 5 <%return "browser-dir"%>
6 6 %endif
7 7 </%def>
8 8 <div id="body" class="browserblock">
9 9 <div class="browser-header">
10 10 <div class="browser-nav">
11 11 ${h.form(h.url.current())}
12 12 <div class="info_box">
13 13 <span class="rev">${_('view')}@rev</span>
14 14 <a class="ui-button-small" href="${c.url_prev}" title="${_('previous revision')}">&laquo;</a>
15 15 ${h.text('at_rev',value=c.changeset.revision,size=5)}
16 16 <a class="ui-button-small" href="${c.url_next}" title="${_('next revision')}">&raquo;</a>
17 17 ## ${h.submit('view',_('view'),class_="ui-button-small")}
18 18 </div>
19 19 ${h.end_form()}
20 20 </div>
21 21 <div class="browser-branch">
22 22 ${h.checkbox('stay_at_branch',c.changeset.branch,c.changeset.branch==c.branch)}
23 23 <label>${_('follow current branch')}</label>
24 24 </div>
25 25 <div class="browser-search">
26 26 <div id="search_activate_id" class="search_activate">
27 27 <a class="ui-button-small" id="filter_activate" href="#">${_('search file list')}</a>
28 28 </div>
29 29 % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
30 30 <div id="add_node_id" class="add_node">
31 31 <a class="ui-button-small" href="${h.url('files_add_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path)}">${_('add new file')}</a>
32 32 </div>
33 33 % endif
34 34 <div>
35 35 <div id="node_filter_box_loading" style="display:none">${_('Loading file list...')}</div>
36 36 <div id="node_filter_box" style="display:none">
37 ${h.files_breadcrumbs(c.repo_name,c.changeset.raw_id,c.files_list.path)}/<input type="text" value="type to search..." name="filter" size="25" id="node_filter" autocomplete="off">
37 ${h.files_breadcrumbs(c.repo_name,c.changeset.raw_id,c.file.path)}/<input type="text" value="type to search..." name="filter" size="25" id="node_filter" autocomplete="off">
38 38 </div>
39 39 </div>
40 40 </div>
41 41 </div>
42 42
43 43 <div class="browser-body">
44 44 <table class="code-browser">
45 45 <thead>
46 46 <tr>
47 47 <th>${_('Name')}</th>
48 48 <th>${_('Size')}</th>
49 49 <th>${_('Mimetype')}</th>
50 50 <th>${_('Revision')}</th>
51 51 <th>${_('Last modified')}</th>
52 52 <th>${_('Last commiter')}</th>
53 53 </tr>
54 54 </thead>
55 55
56 56 <tbody id="tbody">
57 %if c.files_list.parent:
57 %if c.file.parent:
58 58 <tr class="parity0">
59 59 <td>
60 ${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.files_list.parent.path),class_="browser-dir ypjax-link")}
60 ${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.parent.path),class_="browser-dir ypjax-link")}
61 61 </td>
62 62 <td></td>
63 63 <td></td>
64 64 <td></td>
65 65 <td></td>
66 66 <td></td>
67 67 </tr>
68 68 %endif
69 69
70 %for cnt,node in enumerate(c.files_list):
70 %for cnt,node in enumerate(c.file):
71 71 <tr class="parity${cnt%2}">
72 72 <td>
73 73 ${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=h.safe_unicode(node.path)),class_=file_class(node)+" ypjax-link")}
74 74 </td>
75 75 <td>
76 76 %if node.is_file():
77 77 ${h.format_byte_size(node.size,binary=True)}
78 78 %endif
79 79 </td>
80 80 <td>
81 81 %if node.is_file():
82 82 ${node.mimetype}
83 83 %endif
84 84 </td>
85 85 <td>
86 86 %if node.is_file():
87 87 <span class="tooltip" title="${node.last_changeset.message}">
88 88 ${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}</span>
89 89 %endif
90 90 </td>
91 91 <td>
92 92 %if node.is_file():
93 93 <span class="tooltip" title="${node.last_changeset.date}">
94 94 ${h.age(node.last_changeset.date)}</span>
95 95 %endif
96 96 </td>
97 97 <td>
98 98 %if node.is_file():
99 99 ${node.last_changeset.author}
100 100 %endif
101 101 </td>
102 102 </tr>
103 103 %endfor
104 104 </tbody>
105 105 <tbody id="tbody_filtered" style="display:none">
106 106 </tbody>
107 107 </table>
108 108 </div>
109 109 </div> No newline at end of file
@@ -1,59 +1,78 b''
1 1 <%inherit file="/base/base.html"/>
2 2
3 3 <%def name="title()">
4 4 ${c.repo_name} ${_('Edit file')} - ${c.rhodecode_name}
5 5 </%def>
6 6
7 7 <%def name="js_extra()">
8 8 <script type="text/javascript" src="${h.url('/js/codemirror.js')}"></script>
9 9 </%def>
10 10 <%def name="css_extra()">
11 11 <link rel="stylesheet" type="text/css" href="${h.url('/css/codemirror.css')}"/>
12 12 </%def>
13 13
14 14 <%def name="breadcrumbs_links()">
15 15 ${h.link_to(u'Home',h.url('/'))}
16 16 &raquo;
17 17 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
18 18 &raquo;
19 19 ${_('edit file')} @ R${c.cs.revision}:${h.short_id(c.cs.raw_id)}
20 20 </%def>
21 21
22 22 <%def name="page_nav()">
23 23 ${self.menu('files')}
24 24 </%def>
25 25 <%def name="main()">
26 26 <div class="box">
27 27 <!-- box / title -->
28 28 <div class="title">
29 29 ${self.breadcrumbs()}
30 30 <ul class="links">
31 31 <li>
32 32 <span style="text-transform: uppercase;">
33 33 <a href="#">${_('branch')}: ${c.cs.branch}</a></span>
34 34 </li>
35 35 </ul>
36 36 </div>
37 37 <div class="table">
38 38 <div id="files_data">
39 39 <h3 class="files_location">${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cs.revision,c.file.path)}</h3>
40 40 ${h.form(h.url.current(),method='post',id='eform')}
41 41 <div id="body" class="codeblock">
42 <div class="code-header">
43 <div class="stats">
44 <div class="left"><img src="${h.url('/images/icons/file.png')}"/></div>
45 <div class="left item">${h.link_to("r%s:%s" % (c.file.last_changeset.revision,h.short_id(c.file.last_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id))}</div>
46 <div class="left item">${h.format_byte_size(c.file.size,binary=True)}</div>
47 <div class="left item last">${c.file.mimetype}</div>
48 <div class="buttons">
49 ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-button-small")}
50 ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-button-small")}
51 ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-button-small")}
52 % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
53 % if not c.file.is_binary:
54 ${h.link_to(_('source'),h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-button-small")}
55 % endif
56 % endif
57 </div>
58 </div>
59 <div class="commit">${_('Editing file')}: ${c.file.path}</div>
60 </div>
42 61 <pre id="editor_pre"></pre>
43 62 <textarea id="editor" name="content" style="display:none">${c.file.content|n}</textarea>
44 63 <div style="padding: 10px;color:#666666">${_('commit message')}</div>
45 64 <textarea id="commit" name="message" style="height: 60px;width: 99%;margin-left:4px"></textarea>
46 65 </div>
47 66 <div style="text-align: left;padding-top: 5px">
48 67 ${h.submit('commit',_('Commit changes'),class_="ui-button-small")}
49 68 ${h.reset('reset',_('Reset'),class_="ui-button-small")}
50 69 </div>
51 70 ${h.end_form()}
52 71 <script type="text/javascript">
53 72 var reset_url = "${h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.file.path)}";
54 73 initCodeMirror('editor',reset_url);
55 74 </script>
56 75 </div>
57 76 </div>
58 77 </div>
59 78 </%def> No newline at end of file
@@ -1,107 +1,105 b''
1 1 <dl>
2 <dt>${_('Revision')}</dt>
3 <dd>
4 ${h.link_to("r%s:%s" % (c.files_list.last_changeset.revision,h.short_id(c.files_list.last_changeset.raw_id)),
5 h.url('changeset_home',repo_name=c.repo_name,revision=c.files_list.last_changeset.raw_id))}
6 </dd>
7 <dt>${_('Size')}</dt>
8 <dd>${h.format_byte_size(c.files_list.size,binary=True)}</dd>
9 <dt>${_('Mimetype')}</dt>
10 <dd>${c.files_list.mimetype}</dd>
11 <dt>${_('Options')}</dt>
12 <dd>${h.link_to(_('show annotation'),
13 h.url('files_annotate_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path))}
14 / ${h.link_to(_('show as raw'),
15 h.url('files_raw_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path))}
16 / ${h.link_to(_('download as raw'),
17 h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path))}
18 % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
19 % if not c.files_list.is_binary:
20 / ${h.link_to(_('edit'),
21 h.url('files_edit_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path))}
22 % endif
23 % endif
24 </dd>
25 <dt>${_('History')}</dt>
2 <dt style="padding-top:10px;font-size:16px">${_('History')}</dt>
26 3 <dd>
27 4 <div>
28 5 ${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')}
29 ${h.hidden('diff2',c.files_list.last_changeset.raw_id)}
30 ${h.select('diff1',c.files_list.last_changeset.raw_id,c.file_history)}
6 ${h.hidden('diff2',c.file.last_changeset.raw_id)}
7 ${h.select('diff1',c.file.last_changeset.raw_id,c.file_history)}
31 8 ${h.submit('diff','diff to revision',class_="ui-button-small")}
32 9 ${h.submit('show_rev','show at revision',class_="ui-button-small")}
33 10 ${h.end_form()}
34 11 </div>
35 12 </dd>
36 </dl>
13 </dl>
37 14
38 15
39 16 <div id="body" class="codeblock">
40 17 <div class="code-header">
41 <div class="revision">${c.files_list.name}@r${c.files_list.last_changeset.revision}:${h.short_id(c.files_list.last_changeset.raw_id)}</div>
42 <div class="commit">"${c.files_list.last_changeset.message}"</div>
18 <div class="stats">
19 <div class="left"><img src="${h.url('/images/icons/file.png')}"/></div>
20 <div class="left item">${h.link_to("r%s:%s" % (c.file.last_changeset.revision,h.short_id(c.file.last_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id))}</div>
21 <div class="left item">${h.format_byte_size(c.file.size,binary=True)}</div>
22 <div class="left item last">${c.file.mimetype}</div>
23 <div class="buttons">
24 ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path),class_="ui-button-small")}
25 ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path),class_="ui-button-small")}
26 ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path),class_="ui-button-small")}
27 % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
28 % if not c.file.is_binary:
29 ${h.link_to(_('edit'),h.url('files_edit_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path),class_="ui-button-small")}
30 % endif
31 % endif
32 </div>
33 </div>
34 <div class="author">
35 <div class="gravatar">
36 <img alt="gravatar" src="${h.gravatar_url(h.email(c.changeset.author),16)}"/>
37 </div>
38 <div title="${h.email_or_none(c.changeset.author)}" class="user">${h.person(c.changeset.author)}</div>
39 </div>
40 <div class="commit">${c.file.last_changeset.message}</div>
43 41 </div>
44 42 <div class="code-body">
45 %if c.files_list.is_binary:
46 ${_('Binary file (%s)') % c.files_list.mimetype}
43 %if c.file.is_binary:
44 ${_('Binary file (%s)') % c.file.mimetype}
47 45 %else:
48 % if c.files_list.size < c.cut_off_limit:
49 ${h.pygmentize(c.files_list,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
46 % if c.file.size < c.cut_off_limit:
47 ${h.pygmentize(c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
50 48 %else:
51 49 ${_('File is too big to display')} ${h.link_to(_('show as raw'),
52 50 h.url('files_raw_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path))}
53 51 %endif
54 52 <script type="text/javascript">
55 53 function highlight_lines(lines){
56 54 for(pos in lines){
57 55 YUD.setStyle('L'+lines[pos],'background-color','#FFFFBE');
58 56 }
59 57 }
60 58 page_highlights = location.href.substring(location.href.indexOf('#')+1).split('L');
61 59 if (page_highlights.length == 2){
62 60 highlight_ranges = page_highlights[1].split(",");
63 61
64 62 var h_lines = [];
65 63 for (pos in highlight_ranges){
66 64 var _range = highlight_ranges[pos].split('-');
67 65 if(_range.length == 2){
68 66 var start = parseInt(_range[0]);
69 67 var end = parseInt(_range[1]);
70 68 if (start < end){
71 69 for(var i=start;i<=end;i++){
72 70 h_lines.push(i);
73 71 }
74 72 }
75 73 }
76 74 else{
77 75 h_lines.push(parseInt(highlight_ranges[pos]));
78 76 }
79 77 }
80 78 highlight_lines(h_lines);
81 79
82 80 //remember original location
83 81 var old_hash = location.href.substring(location.href.indexOf('#'));
84 82
85 83 // this makes a jump to anchor moved by 3 posstions for padding
86 84 window.location.hash = '#L'+Math.max(parseInt(h_lines[0])-3,1);
87 85
88 86 //sets old anchor
89 87 window.location.hash = old_hash;
90 88
91 89 }
92 90 </script>
93 91 %endif
94 92 </div>
95 93 </div>
96 94
97 95 <script type="text/javascript">
98 96 YUE.onDOMReady(function(){
99 97 YUE.on('show_rev','click',function(e){
100 98 YUE.preventDefault(e);
101 99 var cs = YUD.get('diff1').value;
102 100 var url = "${h.url('files_home',repo_name=c.repo_name,revision='__CS__',f_path=c.f_path)}".replace('__CS__',cs);
103 101 window.location = url;
104 102 });
105 103 YUE.on('hlcode','mouseup',getSelectionLink("${_('Selection link')}"))
106 104 });
107 105 </script>
@@ -1,15 +1,15 b''
1 %if c.files_list:
1 %if c.file:
2 2 <h3 class="files_location">
3 ${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.changeset.raw_id,c.files_list.path)}
3 ${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.changeset.raw_id,c.file.path)}
4 4 </h3>
5 %if c.files_list.is_dir():
5 %if c.file.is_dir():
6 6 <%include file='files_browser.html'/>
7 7 %else:
8 8 <%include file='files_source.html'/>
9 9 %endif
10 10 %else:
11 11 <h2>
12 12 <a href="#" onClick="javascript:parent.history.back();" target="main">${_('Go back')}</a>
13 13 ${_('No files at given path')}: "${c.f_path or "/"}"
14 14 </h2>
15 15 %endif
@@ -1,166 +1,167 b''
1 1 <%page args="parent" />
2 2 <div class="box">
3 3 <!-- box / title -->
4 4 <div class="title">
5 5 <h5>
6 6 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${parent.breadcrumbs()} <span id="repo_count">${len(c.repos_list)}</span> ${_('repositories')}
7 7 </h5>
8 8 %if c.rhodecode_user.username != 'default':
9 9 %if h.HasPermissionAny('hg.admin','hg.create.repository')():
10 10 <ul class="links">
11 11 <li>
12 12 <span>${h.link_to(_('ADD NEW REPOSITORY'),h.url('admin_settings_create_repository'))}</span>
13 13 </li>
14 14 </ul>
15 15 %endif
16 16 %endif
17 17 </div>
18 18 <!-- end box / title -->
19 19 <div class="table">
20 20 % if c.groups:
21 21 <table>
22 22 <thead>
23 23 <tr>
24 24 <th class="left"><a href="#">${_('Group name')}</a></th>
25 25 <th class="left"><a href="#">${_('Description')}</a></th>
26 26 ##<th class="left"><a href="#">${_('Number of repositories')}</a></th>
27 27 </tr>
28 28 </thead>
29 29
30 30 ## REPO GROUPS
31 31
32 32 % for gr in c.groups:
33 33 <tr>
34 34 <td>
35 35 <div style="white-space: nowrap">
36 36 <img class="icon" alt="${_('Repositories group')}" src="${h.url('/images/icons/database_link.png')}"/>
37 37 ${h.link_to(gr.name,url('repos_group_home',group_name=gr.group_name))}
38 38 </div>
39 39 </td>
40 40 <td>${gr.group_description}</td>
41 41 ##<td><b>${gr.repositories.count()}</b></td>
42 42 </tr>
43 43 % endfor
44 44
45 45 </table>
46 46 <div style="height: 20px"></div>
47 47 % endif
48 48 <div id="welcome" style="display:none;text-align:center">
49 49 <h1><a href="${h.url('home')}">${c.rhodecode_name} ${c.rhodecode_version}</a></h1>
50 50 </div>
51 51 <table id="repos_list">
52 52 <thead>
53 53 <tr>
54 54 <th class="left"></th>
55 55 <th class="left">${_('Name')}</th>
56 56 <th class="left">${_('Description')}</th>
57 57 <th class="left">${_('Last change')}</th>
58 58 <th class="left">${_('Tip')}</th>
59 59 <th class="left">${_('Owner')}</th>
60 60 <th class="left">${_('RSS')}</th>
61 61 <th class="left">${_('Atom')}</th>
62 62 </tr>
63 63 </thead>
64 64 <tbody>
65 65 %for cnt,repo in enumerate(c.repos_list):
66 66 <tr class="parity${cnt%2}">
67 67 <td class="quick_repo_menu">
68 68 <ul class="menu_items hidden">
69 <li style="border-top:1px solid #003367;margin-left:18px;padding-left:-99px"></li>
69 70 <li>
70 71 <a title="${_('Summary')}" href="${h.url('summary_home',repo_name=repo['name'])}">
71 72 <span class="icon">
72 73 <img src="${h.url('/images/icons/clipboard_16.png')}" alt="${_('Summary')}" />
73 74 </span>
74 75 <span>${_('Summary')}</span>
75 76 </a>
76 77 </li>
77 78 <li>
78 79 <a title="${_('Changelog')}" href="${h.url('changelog_home',repo_name=repo['name'])}">
79 80 <span class="icon">
80 81 <img src="${h.url('/images/icons/time.png')}" alt="${_('Changelog')}" />
81 82 </span>
82 83 <span>${_('Changelog')}</span>
83 84 </a>
84 85 </li>
85 86 <li>
86 87 <a title="${_('Files')}" href="${h.url('files_home',repo_name=repo['name'])}">
87 88 <span class="icon">
88 89 <img src="${h.url('/images/icons/file.png')}" alt="${_('Files')}" />
89 90 </span>
90 91 <span>${_('Files')}</span>
91 92 </a>
92 93 </li>
93 94 </ul>
94 95 </td>
95 96 <td>
96 97 ## TYPE OF REPO
97 98 <div style="white-space: nowrap">
98 99 %if repo['dbrepo']['repo_type'] =='hg':
99 100 <img class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
100 101 %elif repo['dbrepo']['repo_type'] =='git':
101 102 <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
102 103 %endif
103 104
104 105 ##PRIVATE/PUBLIC
105 106 %if repo['dbrepo']['private']:
106 107 <img class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
107 108 %else:
108 109 <img class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
109 110 %endif
110 111
111 112 ##NAME
112 113 ${h.link_to(repo['name'],
113 114 h.url('summary_home',repo_name=repo['name']),class_="repo_name")}
114 115 %if repo['dbrepo_fork']:
115 116 <a href="${h.url('summary_home',repo_name=repo['dbrepo_fork']['repo_name'])}">
116 117 <img class="icon" alt="${_('fork')}"
117 118 title="${_('Fork of')} ${repo['dbrepo_fork']['repo_name']}"
118 119 src="${h.url('/images/icons/arrow_divide.png')}"/></a>
119 120 %endif
120 121 </div>
121 122 </td>
122 123 ##DESCRIPTION
123 124 <td><span class="tooltip" title="${h.tooltip(repo['description'])}">
124 125 ${h.truncate(repo['description'],60)}</span>
125 126 </td>
126 127 ##LAST CHANGE
127 128 <td>
128 129 <span class="tooltip" title="${repo['last_change']}">
129 130 ${h.age(repo['last_change'])}</span>
130 131 </td>
131 132 <td>
132 133 %if repo['rev']>=0:
133 134 <a title="${h.tooltip('%s\n%s' % (repo['author'],repo['last_msg']))}" class="tooltip" href="${h.url('changeset_home',repo_name=repo['name'],revision=repo['tip'])}">${'r%s:%s' % (repo['rev'],h.short_id(repo['tip']))}</a>
134 135 %else:
135 136 ${_('No changesets yet')}
136 137 %endif
137 138 </td>
138 139 <td title="${repo['contact']}">${h.person(repo['contact'])}</td>
139 140 <td>
140 141 %if c.rhodecode_user.username != 'default':
141 142 <a title="${_('Subscribe to %s rss feed')%repo['name']}" class="rss_icon" href="${h.url('rss_feed_home',repo_name=repo['name'],api_key=c.rhodecode_user.api_key)}"></a>
142 143 %else:
143 144 <a title="${_('Subscribe to %s rss feed')%repo['name']}" class="rss_icon" href="${h.url('rss_feed_home',repo_name=repo['name'])}"></a>
144 145 %endif:
145 146 </td>
146 147 <td>
147 148 %if c.rhodecode_user.username != 'default':
148 149 <a title="${_('Subscribe to %s atom feed')%repo['name']}" class="atom_icon" href="${h.url('atom_feed_home',repo_name=repo['name'],api_key=c.rhodecode_user.api_key)}"></a>
149 150 %else:
150 151 <a title="${_('Subscribe to %s atom feed')%repo['name']}" class="atom_icon" href="${h.url('atom_feed_home',repo_name=repo['name'])}"></a>
151 152 %endif:
152 153 </td>
153 154 </tr>
154 155 %endfor
155 156 </tbody>
156 157 </table>
157 158 </div>
158 159 </div>
159 160 <script>
160 161 var nodes = YUQ('div.table tr td a.repo_name');
161 162 var target = 'q_filter';
162 163 var func = function(node){
163 164 return node.parentNode.parentNode.parentNode;
164 165 }
165 166 q_filter(target,nodes,func);
166 167 </script> No newline at end of file
@@ -1,313 +1,313 b''
1 1 from rhodecode.tests import *
2 2
3 3 ARCHIVE_SPECS = {
4 4 '.tar.bz2': ('application/x-bzip2', 'tbz2', ''),
5 5 '.tar.gz': ('application/x-gzip', 'tgz', ''),
6 6 '.zip': ('application/zip', 'zip', ''),
7 7 }
8 8
9 9 class TestFilesController(TestController):
10 10
11 11 def test_index(self):
12 12 self.log_user()
13 13 response = self.app.get(url(controller='files', action='index',
14 14 repo_name=HG_REPO,
15 15 revision='tip',
16 16 f_path='/'))
17 17 # Test response...
18 18 assert '<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/docs">docs</a>' in response.body, 'missing dir'
19 19 assert '<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/tests">tests</a>' in response.body, 'missing dir'
20 20 assert '<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/vcs">vcs</a>' in response.body, 'missing dir'
21 21 assert '<a class="browser-file ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/.hgignore">.hgignore</a>' in response.body, 'missing file'
22 22 assert '<a class="browser-file ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/MANIFEST.in">MANIFEST.in</a>' in response.body, 'missing file'
23 23
24 24
25 25 def test_index_revision(self):
26 26 self.log_user()
27 27
28 28 response = self.app.get(url(controller='files', action='index',
29 29 repo_name=HG_REPO,
30 30 revision='7ba66bec8d6dbba14a2155be32408c435c5f4492',
31 31 f_path='/'))
32 32
33 33
34 34
35 35 #Test response...
36 36
37 37 assert '<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/7ba66bec8d6dbba14a2155be32408c435c5f4492/docs">docs</a>' in response.body, 'missing dir'
38 38 assert '<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/7ba66bec8d6dbba14a2155be32408c435c5f4492/tests">tests</a>' in response.body, 'missing dir'
39 39 assert '<a class="browser-file ypjax-link" href="/vcs_test_hg/files/7ba66bec8d6dbba14a2155be32408c435c5f4492/README.rst">README.rst</a>' in response.body, 'missing file'
40 40 assert '1.1 KiB' in response.body, 'missing size of setup.py'
41 41 assert 'text/x-python' in response.body, 'missing mimetype of setup.py'
42 42
43 43
44 44
45 45 def test_index_different_branch(self):
46 46 self.log_user()
47 47
48 48 response = self.app.get(url(controller='files', action='index',
49 49 repo_name=HG_REPO,
50 50 revision='97e8b885c04894463c51898e14387d80c30ed1ee',
51 51 f_path='/'))
52 52
53 53
54 54
55 55 assert """<span style="text-transform: uppercase;"><a href="#">branch: git</a></span>""" in response.body, 'missing or wrong branch info'
56 56
57 57
58 58
59 59 def test_index_paging(self):
60 60 self.log_user()
61 61
62 62 for r in [(73, 'a066b25d5df7016b45a41b7e2a78c33b57adc235'),
63 63 (92, 'cc66b61b8455b264a7a8a2d8ddc80fcfc58c221e'),
64 64 (109, '75feb4c33e81186c87eac740cee2447330288412'),
65 65 (1, '3d8f361e72ab303da48d799ff1ac40d5ac37c67e'),
66 66 (0, 'b986218ba1c9b0d6a259fac9b050b1724ed8e545')]:
67 67
68 68 response = self.app.get(url(controller='files', action='index',
69 69 repo_name=HG_REPO,
70 70 revision=r[1],
71 71 f_path='/'))
72 72
73 73 assert """@ r%s:%s""" % (r[0], r[1][:12]) in response.body, 'missing info about current revision'
74 74
75 75 def test_file_source(self):
76 76 self.log_user()
77 77 response = self.app.get(url(controller='files', action='index',
78 78 repo_name=HG_REPO,
79 79 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
80 80 f_path='vcs/nodes.py'))
81 81
82 82 #test or history
83 83 assert """<optgroup label="Changesets">
84 84 <option selected="selected" value="8911406ad776fdd3d0b9932a2e89677e57405a48">r167:8911406ad776</option>
85 85 <option value="aa957ed78c35a1541f508d2ec90e501b0a9e3167">r165:aa957ed78c35</option>
86 86 <option value="48e11b73e94c0db33e736eaeea692f990cb0b5f1">r140:48e11b73e94c</option>
87 87 <option value="adf3cbf483298563b968a6c673cd5bde5f7d5eea">r126:adf3cbf48329</option>
88 88 <option value="6249fd0fb2cfb1411e764129f598e2cf0de79a6f">r113:6249fd0fb2cf</option>
89 89 <option value="75feb4c33e81186c87eac740cee2447330288412">r109:75feb4c33e81</option>
90 90 <option value="9a4dc232ecdc763ef2e98ae2238cfcbba4f6ad8d">r108:9a4dc232ecdc</option>
91 91 <option value="595cce4efa21fda2f2e4eeb4fe5f2a6befe6fa2d">r107:595cce4efa21</option>
92 92 <option value="4a8bd421fbc2dfbfb70d85a3fe064075ab2c49da">r104:4a8bd421fbc2</option>
93 93 <option value="57be63fc8f85e65a0106a53187f7316f8c487ffa">r102:57be63fc8f85</option>
94 94 <option value="5530bd87f7e2e124a64d07cb2654c997682128be">r101:5530bd87f7e2</option>
95 95 <option value="e516008b1c93f142263dc4b7961787cbad654ce1">r99:e516008b1c93</option>
96 96 <option value="41f43fc74b8b285984554532eb105ac3be5c434f">r93:41f43fc74b8b</option>
97 97 <option value="cc66b61b8455b264a7a8a2d8ddc80fcfc58c221e">r92:cc66b61b8455</option>
98 98 <option value="73ab5b616b3271b0518682fb4988ce421de8099f">r91:73ab5b616b32</option>
99 99 <option value="e0da75f308c0f18f98e9ce6257626009fdda2b39">r82:e0da75f308c0</option>
100 100 <option value="fb2e41e0f0810be4d7103bc2a4c7be16ee3ec611">r81:fb2e41e0f081</option>
101 101 <option value="602ae2f5e7ade70b3b66a58cdd9e3e613dc8a028">r76:602ae2f5e7ad</option>
102 102 <option value="a066b25d5df7016b45a41b7e2a78c33b57adc235">r73:a066b25d5df7</option>
103 103 <option value="637a933c905958ce5151f154147c25c1c7b68832">r61:637a933c9059</option>
104 104 <option value="0c21004effeb8ce2d2d5b4a8baf6afa8394b6fbc">r60:0c21004effeb</option>
105 105 <option value="a1f39c56d3f1d52d5fb5920370a2a2716cd9a444">r59:a1f39c56d3f1</option>
106 106 <option value="97d32df05c715a3bbf936bf3cc4e32fb77fe1a7f">r58:97d32df05c71</option>
107 107 <option value="08eaf14517718dccea4b67755a93368341aca919">r57:08eaf1451771</option>
108 108 <option value="22f71ad265265a53238359c883aa976e725aa07d">r56:22f71ad26526</option>
109 109 <option value="97501f02b7b4330924b647755663a2d90a5e638d">r49:97501f02b7b4</option>
110 110 <option value="86ede6754f2b27309452bb11f997386ae01d0e5a">r47:86ede6754f2b</option>
111 111 <option value="014c40c0203c423dc19ecf94644f7cac9d4cdce0">r45:014c40c0203c</option>
112 112 <option value="ee87846a61c12153b51543bf860e1026c6d3dcba">r30:ee87846a61c1</option>
113 113 <option value="9bb326a04ae5d98d437dece54be04f830cf1edd9">r26:9bb326a04ae5</option>
114 114 <option value="536c1a19428381cfea92ac44985304f6a8049569">r24:536c1a194283</option>
115 115 <option value="dc5d2c0661b61928834a785d3e64a3f80d3aad9c">r8:dc5d2c0661b6</option>
116 116 <option value="3803844fdbd3b711175fc3da9bdacfcd6d29a6fb">r7:3803844fdbd3</option>
117 117 </optgroup>
118 118 <optgroup label="Branches">
119 119 <option value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">default</option>
120 120 <option value="97e8b885c04894463c51898e14387d80c30ed1ee">git</option>
121 121 <option value="2e6a2bf9356ca56df08807f4ad86d480da72a8f4">web</option>
122 122 </optgroup>
123 123 <optgroup label="Tags">
124 124 <option value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">tip</option>
125 125 <option value="fd4bdb5e9b2a29b4393a4ac6caef48c17ee1a200">0.1.4</option>
126 126 <option value="17544fbfcd33ffb439e2b728b5d526b1ef30bfcf">0.1.3</option>
127 127 <option value="a7e60bff65d57ac3a1a1ce3b12a70f8a9e8a7720">0.1.2</option>
128 128 <option value="eb3a60fc964309c1a318b8dfe26aa2d1586c85ae">0.1.1</option>
129 129 </optgroup>""" in response.body
130 130
131 131
132 assert """<div class="commit">"Partially implemented #16. filecontent/commit message/author/node name are safe_unicode now.
132 assert """<div class="commit">Partially implemented #16. filecontent/commit message/author/node name are safe_unicode now.
133 133 In addition some other __str__ are unicode as well
134 134 Added test for unicode
135 135 Improved test to clone into uniq repository.
136 removed extra unicode conversion in diff."</div>""" in response.body
136 removed extra unicode conversion in diff.</div>""" in response.body
137 137
138 138 assert """<span style="text-transform: uppercase;"><a href="#">branch: default</a></span>""" in response.body, 'missing or wrong branch info'
139 139
140 140 def test_file_annotation(self):
141 141 self.log_user()
142 142 response = self.app.get(url(controller='files', action='annotate',
143 143 repo_name=HG_REPO,
144 144 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
145 145 f_path='vcs/nodes.py'))
146 146
147 147 print response.body
148 148 assert """<optgroup label="Changesets">
149 149 <option selected="selected" value="8911406ad776fdd3d0b9932a2e89677e57405a48">r167:8911406ad776</option>
150 150 <option value="aa957ed78c35a1541f508d2ec90e501b0a9e3167">r165:aa957ed78c35</option>
151 151 <option value="48e11b73e94c0db33e736eaeea692f990cb0b5f1">r140:48e11b73e94c</option>
152 152 <option value="adf3cbf483298563b968a6c673cd5bde5f7d5eea">r126:adf3cbf48329</option>
153 153 <option value="6249fd0fb2cfb1411e764129f598e2cf0de79a6f">r113:6249fd0fb2cf</option>
154 154 <option value="75feb4c33e81186c87eac740cee2447330288412">r109:75feb4c33e81</option>
155 155 <option value="9a4dc232ecdc763ef2e98ae2238cfcbba4f6ad8d">r108:9a4dc232ecdc</option>
156 156 <option value="595cce4efa21fda2f2e4eeb4fe5f2a6befe6fa2d">r107:595cce4efa21</option>
157 157 <option value="4a8bd421fbc2dfbfb70d85a3fe064075ab2c49da">r104:4a8bd421fbc2</option>
158 158 <option value="57be63fc8f85e65a0106a53187f7316f8c487ffa">r102:57be63fc8f85</option>
159 159 <option value="5530bd87f7e2e124a64d07cb2654c997682128be">r101:5530bd87f7e2</option>
160 160 <option value="e516008b1c93f142263dc4b7961787cbad654ce1">r99:e516008b1c93</option>
161 161 <option value="41f43fc74b8b285984554532eb105ac3be5c434f">r93:41f43fc74b8b</option>
162 162 <option value="cc66b61b8455b264a7a8a2d8ddc80fcfc58c221e">r92:cc66b61b8455</option>
163 163 <option value="73ab5b616b3271b0518682fb4988ce421de8099f">r91:73ab5b616b32</option>
164 164 <option value="e0da75f308c0f18f98e9ce6257626009fdda2b39">r82:e0da75f308c0</option>
165 165 <option value="fb2e41e0f0810be4d7103bc2a4c7be16ee3ec611">r81:fb2e41e0f081</option>
166 166 <option value="602ae2f5e7ade70b3b66a58cdd9e3e613dc8a028">r76:602ae2f5e7ad</option>
167 167 <option value="a066b25d5df7016b45a41b7e2a78c33b57adc235">r73:a066b25d5df7</option>
168 168 <option value="637a933c905958ce5151f154147c25c1c7b68832">r61:637a933c9059</option>
169 169 <option value="0c21004effeb8ce2d2d5b4a8baf6afa8394b6fbc">r60:0c21004effeb</option>
170 170 <option value="a1f39c56d3f1d52d5fb5920370a2a2716cd9a444">r59:a1f39c56d3f1</option>
171 171 <option value="97d32df05c715a3bbf936bf3cc4e32fb77fe1a7f">r58:97d32df05c71</option>
172 172 <option value="08eaf14517718dccea4b67755a93368341aca919">r57:08eaf1451771</option>
173 173 <option value="22f71ad265265a53238359c883aa976e725aa07d">r56:22f71ad26526</option>
174 174 <option value="97501f02b7b4330924b647755663a2d90a5e638d">r49:97501f02b7b4</option>
175 175 <option value="86ede6754f2b27309452bb11f997386ae01d0e5a">r47:86ede6754f2b</option>
176 176 <option value="014c40c0203c423dc19ecf94644f7cac9d4cdce0">r45:014c40c0203c</option>
177 177 <option value="ee87846a61c12153b51543bf860e1026c6d3dcba">r30:ee87846a61c1</option>
178 178 <option value="9bb326a04ae5d98d437dece54be04f830cf1edd9">r26:9bb326a04ae5</option>
179 179 <option value="536c1a19428381cfea92ac44985304f6a8049569">r24:536c1a194283</option>
180 180 <option value="dc5d2c0661b61928834a785d3e64a3f80d3aad9c">r8:dc5d2c0661b6</option>
181 181 <option value="3803844fdbd3b711175fc3da9bdacfcd6d29a6fb">r7:3803844fdbd3</option>
182 182 </optgroup>
183 183 <optgroup label="Branches">
184 184 <option value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">default</option>
185 185 <option value="97e8b885c04894463c51898e14387d80c30ed1ee">git</option>
186 186 <option value="2e6a2bf9356ca56df08807f4ad86d480da72a8f4">web</option>
187 187 </optgroup>
188 188 <optgroup label="Tags">
189 189 <option value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">tip</option>
190 190 <option value="fd4bdb5e9b2a29b4393a4ac6caef48c17ee1a200">0.1.4</option>
191 191 <option value="17544fbfcd33ffb439e2b728b5d526b1ef30bfcf">0.1.3</option>
192 192 <option value="a7e60bff65d57ac3a1a1ce3b12a70f8a9e8a7720">0.1.2</option>
193 193 <option value="eb3a60fc964309c1a318b8dfe26aa2d1586c85ae">0.1.1</option>
194 194 </optgroup>""" in response.body, 'missing or wrong history in annotation'
195 195
196 196 assert """<span style="text-transform: uppercase;"><a href="#">branch: default</a></span>""" in response.body, 'missing or wrong branch info'
197 197
198 198
199 199
200 200 def test_archival(self):
201 201 self.log_user()
202 202
203 203 for arch_ext, info in ARCHIVE_SPECS.items():
204 204 fname = '27cd5cce30c96924232dffcd24178a07ffeb5dfc%s' % arch_ext
205 205 filename = '%s-%s' % (HG_REPO, fname)
206 206
207 207 response = self.app.get(url(controller='files', action='archivefile',
208 208 repo_name=HG_REPO,
209 209 fname=fname))
210 210
211 211 assert response.status == '200 OK', 'wrong response code'
212 212 assert response.response._headers.items() == [('Pragma', 'no-cache'),
213 213 ('Cache-Control', 'no-cache'),
214 214 ('Content-Type', '%s; charset=utf-8' % info[0]),
215 215 ('Content-Disposition', 'attachment; filename=%s' % filename), ], 'wrong headers'
216 216
217 217 def test_archival_wrong_ext(self):
218 218 self.log_user()
219 219
220 220 for arch_ext in ['tar', 'rar', 'x', '..ax', '.zipz']:
221 221 fname = '27cd5cce30c96924232dffcd24178a07ffeb5dfc%s' % arch_ext
222 222
223 223 response = self.app.get(url(controller='files', action='archivefile',
224 224 repo_name=HG_REPO,
225 225 fname=fname))
226 226 assert 'Unknown archive type' in response.body
227 227
228 228
229 229 def test_archival_wrong_revision(self):
230 230 self.log_user()
231 231
232 232 for rev in ['00x000000', 'tar', 'wrong', '@##$@$424213232', '232dffcd']:
233 233 fname = '%s.zip' % rev
234 234
235 235 response = self.app.get(url(controller='files', action='archivefile',
236 236 repo_name=HG_REPO,
237 237 fname=fname))
238 238 assert 'Unknown revision' in response.body
239 239
240 240 #==========================================================================
241 241 # RAW FILE
242 242 #==========================================================================
243 243 def test_raw_file_ok(self):
244 244 self.log_user()
245 245 response = self.app.get(url(controller='files', action='rawfile',
246 246 repo_name=HG_REPO,
247 247 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
248 248 f_path='vcs/nodes.py'))
249 249
250 250 assert response.content_disposition == "attachment; filename=nodes.py"
251 251 assert response.content_type == "text/x-python"
252 252
253 253 def test_raw_file_wrong_cs(self):
254 254 self.log_user()
255 255 rev = u'ERRORce30c96924232dffcd24178a07ffeb5dfc'
256 256 f_path = 'vcs/nodes.py'
257 257
258 258 response = self.app.get(url(controller='files', action='rawfile',
259 259 repo_name=HG_REPO,
260 260 revision=rev,
261 261 f_path=f_path))
262 262
263 263 assert """Revision %r does not exist for this repository""" % (rev) in response.session['flash'][0][1], 'No flash message'
264 264 assert """%s""" % (HG_REPO) in response.session['flash'][0][1], 'No flash message'
265 265
266 266
267 267
268 268 def test_raw_file_wrong_f_path(self):
269 269 self.log_user()
270 270 rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
271 271 f_path = 'vcs/ERRORnodes.py'
272 272 response = self.app.get(url(controller='files', action='rawfile',
273 273 repo_name=HG_REPO,
274 274 revision=rev,
275 275 f_path=f_path))
276 276 assert "There is no file nor directory at the given path: %r at revision %r" % (f_path, rev[:12]) in response.session['flash'][0][1], 'No flash message'
277 277
278 278 #==========================================================================
279 279 # RAW RESPONSE - PLAIN
280 280 #==========================================================================
281 281 def test_raw_ok(self):
282 282 self.log_user()
283 283 response = self.app.get(url(controller='files', action='raw',
284 284 repo_name=HG_REPO,
285 285 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
286 286 f_path='vcs/nodes.py'))
287 287
288 288 assert response.content_type == "text/plain"
289 289
290 290 def test_raw_wrong_cs(self):
291 291 self.log_user()
292 292 rev = u'ERRORcce30c96924232dffcd24178a07ffeb5dfc'
293 293 f_path = 'vcs/nodes.py'
294 294
295 295 response = self.app.get(url(controller='files', action='raw',
296 296 repo_name=HG_REPO,
297 297 revision=rev,
298 298 f_path=f_path))
299 299
300 300 assert """Revision %r does not exist for this repository""" % (rev) in response.session['flash'][0][1], 'No flash message'
301 301 assert """%s""" % (HG_REPO) in response.session['flash'][0][1], 'No flash message'
302 302
303 303
304 304 def test_raw_wrong_f_path(self):
305 305 self.log_user()
306 306 rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
307 307 f_path = 'vcs/ERRORnodes.py'
308 308 response = self.app.get(url(controller='files', action='raw',
309 309 repo_name=HG_REPO,
310 310 revision=rev,
311 311 f_path=f_path))
312 312
313 313 assert "There is no file nor directory at the given path: %r at revision %r" % (f_path, rev[:12]) in response.session['flash'][0][1], 'No flash message'
General Comments 0
You need to be logged in to leave comments. Login now