##// END OF EJS Templates
linkify names on fork/create repos in tooltip messages
marcink -
r3547:b7f48971 beta
parent child Browse files
Show More
@@ -1,538 +1,540 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.controllers.admin.repos
4 4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 5
6 6 Repositories controller for RhodeCode
7 7
8 8 :created_on: Apr 7, 2010
9 9 :author: marcink
10 10 :copyright: (C) 2010-2012 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 logging
27 27 import traceback
28 28 import formencode
29 29 from formencode import htmlfill
30 30
31 31 from webob.exc import HTTPInternalServerError, HTTPForbidden
32 32 from pylons import request, session, tmpl_context as c, url
33 33 from pylons.controllers.util import redirect
34 34 from pylons.i18n.translation import _
35 35 from sqlalchemy.exc import IntegrityError
36 36
37 37 import rhodecode
38 38 from rhodecode.lib import helpers as h
39 39 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
40 40 HasPermissionAnyDecorator, HasRepoPermissionAllDecorator, NotAnonymous,\
41 41 HasPermissionAny, HasReposGroupPermissionAny
42 42 from rhodecode.lib.base import BaseRepoController, render
43 43 from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug
44 44 from rhodecode.lib.helpers import get_token
45 45 from rhodecode.model.meta import Session
46 46 from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup,\
47 47 RhodeCodeSetting, RepositoryField
48 48 from rhodecode.model.forms import RepoForm, RepoFieldForm
49 49 from rhodecode.model.scm import ScmModel, GroupList
50 50 from rhodecode.model.repo import RepoModel
51 51 from rhodecode.lib.compat import json
52 52 from sqlalchemy.sql.expression import func
53 53
54 54 log = logging.getLogger(__name__)
55 55
56 56
57 57 class ReposController(BaseRepoController):
58 58 """
59 59 REST Controller styled on the Atom Publishing Protocol"""
60 60 # To properly map this controller, ensure your config/routing.py
61 61 # file has a resource setup:
62 62 # map.resource('repo', 'repos')
63 63
64 64 @LoginRequired()
65 65 def __before__(self):
66 66 c.admin_user = session.get('admin_user')
67 67 c.admin_username = session.get('admin_username')
68 68 super(ReposController, self).__before__()
69 69
70 70 def __load_defaults(self):
71 71 acl_groups = GroupList(RepoGroup.query().all(),
72 72 perm_set=['group.write', 'group.admin'])
73 73 c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
74 74 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
75 75
76 76 repo_model = RepoModel()
77 77 c.users_array = repo_model.get_users_js()
78 78 c.users_groups_array = repo_model.get_users_groups_js()
79 79 choices, c.landing_revs = ScmModel().get_repo_landing_revs()
80 80 c.landing_revs_choices = choices
81 81
82 82 def __load_data(self, repo_name=None):
83 83 """
84 84 Load defaults settings for edit, and update
85 85
86 86 :param repo_name:
87 87 """
88 88 self.__load_defaults()
89 89
90 90 c.repo_info = db_repo = Repository.get_by_repo_name(repo_name)
91 91 repo = db_repo.scm_instance
92 92
93 93 if c.repo_info is None:
94 94 h.not_mapped_error(repo_name)
95 95 return redirect(url('repos'))
96 96
97 97 ##override defaults for exact repo info here git/hg etc
98 98 choices, c.landing_revs = ScmModel().get_repo_landing_revs(c.repo_info)
99 99 c.landing_revs_choices = choices
100 100
101 101 c.default_user_id = User.get_by_username('default').user_id
102 102 c.in_public_journal = UserFollowing.query()\
103 103 .filter(UserFollowing.user_id == c.default_user_id)\
104 104 .filter(UserFollowing.follows_repository == c.repo_info).scalar()
105 105
106 106 if c.repo_info.stats:
107 107 # this is on what revision we ended up so we add +1 for count
108 108 last_rev = c.repo_info.stats.stat_on_revision + 1
109 109 else:
110 110 last_rev = 0
111 111 c.stats_revision = last_rev
112 112
113 113 c.repo_last_rev = repo.count() if repo.revisions else 0
114 114
115 115 if last_rev == 0 or c.repo_last_rev == 0:
116 116 c.stats_percentage = 0
117 117 else:
118 118 c.stats_percentage = '%.2f' % ((float((last_rev)) /
119 119 c.repo_last_rev) * 100)
120 120
121 121 c.repo_fields = RepositoryField.query()\
122 122 .filter(RepositoryField.repository == db_repo).all()
123 123
124 124 defaults = RepoModel()._get_defaults(repo_name)
125 125
126 126 c.repos_list = [('', _('--REMOVE FORK--'))]
127 127 c.repos_list += [(x.repo_id, x.repo_name) for x in
128 128 Repository.query().order_by(Repository.repo_name).all()
129 129 if x.repo_id != c.repo_info.repo_id]
130 130
131 131 defaults['id_fork_of'] = db_repo.fork.repo_id if db_repo.fork else ''
132 132 return defaults
133 133
134 134 @HasPermissionAllDecorator('hg.admin')
135 135 def index(self, format='html'):
136 136 """GET /repos: All items in the collection"""
137 137 # url('repos')
138 138
139 139 c.repos_list = Repository.query()\
140 140 .order_by(func.lower(Repository.repo_name))\
141 141 .all()
142 142
143 143 repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
144 144 admin=True,
145 145 super_user_actions=True)
146 146 #json used to render the grid
147 147 c.data = json.dumps(repos_data)
148 148
149 149 return render('admin/repos/repos.html')
150 150
151 151 @NotAnonymous()
152 152 def create(self):
153 153 """
154 154 POST /repos: Create a new item"""
155 155 # url('repos')
156 156
157 157 self.__load_defaults()
158 158 form_result = {}
159 159 try:
160 160 form_result = RepoForm(repo_groups=c.repo_groups_choices,
161 161 landing_revs=c.landing_revs_choices)()\
162 162 .to_python(dict(request.POST))
163 163
164 164 new_repo = RepoModel().create(form_result,
165 165 self.rhodecode_user.user_id)
166 166 if form_result['clone_uri']:
167 167 h.flash(_('created repository %s from %s') \
168 168 % (form_result['repo_name'], form_result['clone_uri']),
169 169 category='success')
170 170 else:
171 h.flash(_('created repository %s') % form_result['repo_name'],
172 category='success')
171 repo_url = h.link_to(form_result['repo_name'],
172 h.url('summary_home', repo_name=form_result['repo_name']))
173 h.flash(h.literal(_('created repository %s') % repo_url),
174 category='success')
173 175
174 176 if request.POST.get('user_created'):
175 177 # created by regular non admin user
176 178 action_logger(self.rhodecode_user, 'user_created_repo',
177 179 form_result['repo_name_full'], self.ip_addr,
178 180 self.sa)
179 181 else:
180 182 action_logger(self.rhodecode_user, 'admin_created_repo',
181 183 form_result['repo_name_full'], self.ip_addr,
182 184 self.sa)
183 185 Session().commit()
184 186 except formencode.Invalid, errors:
185 187 return htmlfill.render(
186 188 render('admin/repos/repo_add.html'),
187 189 defaults=errors.value,
188 190 errors=errors.error_dict or {},
189 191 prefix_error=False,
190 192 encoding="UTF-8")
191 193
192 194 except Exception:
193 195 log.error(traceback.format_exc())
194 196 msg = _('error occurred during creation of repository %s') \
195 197 % form_result.get('repo_name')
196 198 h.flash(msg, category='error')
197 199 if c.rhodecode_user.is_admin:
198 200 return redirect(url('repos'))
199 201 return redirect(url('home'))
200 202 #redirect to our new repo !
201 203 return redirect(url('summary_home', repo_name=new_repo.repo_name))
202 204
203 205 @HasPermissionAllDecorator('hg.admin')
204 206 def new(self, format='html'):
205 207 """
206 208 WARNING: this function is depracated see settings.create_repo !!
207 209
208 210 GET /repos/new: Form to create a new item
209 211 """
210 212
211 213 parent_group = request.GET.get('parent_group')
212 214 self.__load_defaults()
213 215 ## apply the defaults from defaults page
214 216 defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True)
215 217 if parent_group:
216 218 defaults.update({'repo_group': parent_group})
217 219
218 220 return htmlfill.render(
219 221 render('admin/repos/repo_add.html'),
220 222 defaults=defaults,
221 223 errors={},
222 224 prefix_error=False,
223 225 encoding="UTF-8"
224 226 )
225 227
226 228 @HasPermissionAllDecorator('hg.admin')
227 229 def update(self, repo_name):
228 230 """
229 231 PUT /repos/repo_name: Update an existing item"""
230 232 # Forms posted to this method should contain a hidden field:
231 233 # <input type="hidden" name="_method" value="PUT" />
232 234 # Or using helpers:
233 235 # h.form(url('repo', repo_name=ID),
234 236 # method='put')
235 237 # url('repo', repo_name=ID)
236 238 self.__load_defaults()
237 239 repo_model = RepoModel()
238 240 changed_name = repo_name
239 241 #override the choices with extracted revisions !
240 242 choices, c.landing_revs = ScmModel().get_repo_landing_revs(repo_name)
241 243 c.landing_revs_choices = choices
242 244 repo = Repository.get_by_repo_name(repo_name)
243 245 _form = RepoForm(edit=True, old_data={'repo_name': repo_name,
244 246 'repo_group': repo.group.get_dict() \
245 247 if repo.group else {}},
246 248 repo_groups=c.repo_groups_choices,
247 249 landing_revs=c.landing_revs_choices)()
248 250 try:
249 251 form_result = _form.to_python(dict(request.POST))
250 252 repo = repo_model.update(repo_name, **form_result)
251 253 invalidate_cache('get_repo_cached_%s' % repo_name)
252 254 h.flash(_('Repository %s updated successfully') % repo_name,
253 255 category='success')
254 256 changed_name = repo.repo_name
255 257 action_logger(self.rhodecode_user, 'admin_updated_repo',
256 258 changed_name, self.ip_addr, self.sa)
257 259 Session().commit()
258 260 except formencode.Invalid, errors:
259 261 defaults = self.__load_data(repo_name)
260 262 defaults.update(errors.value)
261 263 return htmlfill.render(
262 264 render('admin/repos/repo_edit.html'),
263 265 defaults=defaults,
264 266 errors=errors.error_dict or {},
265 267 prefix_error=False,
266 268 encoding="UTF-8")
267 269
268 270 except Exception:
269 271 log.error(traceback.format_exc())
270 272 h.flash(_('error occurred during update of repository %s') \
271 273 % repo_name, category='error')
272 274 return redirect(url('edit_repo', repo_name=changed_name))
273 275
274 276 @HasPermissionAllDecorator('hg.admin')
275 277 def delete(self, repo_name):
276 278 """
277 279 DELETE /repos/repo_name: Delete an existing item"""
278 280 # Forms posted to this method should contain a hidden field:
279 281 # <input type="hidden" name="_method" value="DELETE" />
280 282 # Or using helpers:
281 283 # h.form(url('repo', repo_name=ID),
282 284 # method='delete')
283 285 # url('repo', repo_name=ID)
284 286
285 287 repo_model = RepoModel()
286 288 repo = repo_model.get_by_repo_name(repo_name)
287 289 if not repo:
288 290 h.not_mapped_error(repo_name)
289 291 return redirect(url('repos'))
290 292 try:
291 293 _forks = repo.forks.count()
292 294 if _forks and request.POST.get('forks'):
293 295 do = request.POST['forks']
294 296 if do == 'detach_forks':
295 297 for r in repo.forks:
296 298 log.debug('Detaching fork %s from repo %s' % (r, repo))
297 299 r.fork = None
298 300 Session().add(r)
299 301 h.flash(_('detached %s forks') % _forks, category='success')
300 302 elif do == 'delete_forks':
301 303 for r in repo.forks:
302 304 log.debug('Deleting fork %s of repo %s' % (r, repo))
303 305 repo_model.delete(r)
304 306 h.flash(_('deleted %s forks') % _forks, category='success')
305 307 action_logger(self.rhodecode_user, 'admin_deleted_repo',
306 308 repo_name, self.ip_addr, self.sa)
307 309 repo_model.delete(repo)
308 310 invalidate_cache('get_repo_cached_%s' % repo_name)
309 311 h.flash(_('deleted repository %s') % repo_name, category='success')
310 312 Session().commit()
311 313 except IntegrityError, e:
312 314 if e.message.find('repositories_fork_id_fkey') != -1:
313 315 log.error(traceback.format_exc())
314 316 h.flash(_('Cannot delete %s it still contains attached '
315 317 'forks') % repo_name,
316 318 category='warning')
317 319 else:
318 320 log.error(traceback.format_exc())
319 321 h.flash(_('An error occurred during '
320 322 'deletion of %s') % repo_name,
321 323 category='error')
322 324
323 325 except Exception, e:
324 326 log.error(traceback.format_exc())
325 327 h.flash(_('An error occurred during deletion of %s') % repo_name,
326 328 category='error')
327 329
328 330 return redirect(url('repos'))
329 331
330 332 @HasRepoPermissionAllDecorator('repository.admin')
331 333 def delete_perm_user(self, repo_name):
332 334 """
333 335 DELETE an existing repository permission user
334 336
335 337 :param repo_name:
336 338 """
337 339 try:
338 340 RepoModel().revoke_user_permission(repo=repo_name,
339 341 user=request.POST['user_id'])
340 342 Session().commit()
341 343 except Exception:
342 344 log.error(traceback.format_exc())
343 345 h.flash(_('An error occurred during deletion of repository user'),
344 346 category='error')
345 347 raise HTTPInternalServerError()
346 348
347 349 @HasRepoPermissionAllDecorator('repository.admin')
348 350 def delete_perm_users_group(self, repo_name):
349 351 """
350 352 DELETE an existing repository permission user group
351 353
352 354 :param repo_name:
353 355 """
354 356
355 357 try:
356 358 RepoModel().revoke_users_group_permission(
357 359 repo=repo_name, group_name=request.POST['users_group_id']
358 360 )
359 361 Session().commit()
360 362 except Exception:
361 363 log.error(traceback.format_exc())
362 364 h.flash(_('An error occurred during deletion of repository'
363 365 ' user groups'),
364 366 category='error')
365 367 raise HTTPInternalServerError()
366 368
367 369 @HasPermissionAllDecorator('hg.admin')
368 370 def repo_stats(self, repo_name):
369 371 """
370 372 DELETE an existing repository statistics
371 373
372 374 :param repo_name:
373 375 """
374 376
375 377 try:
376 378 RepoModel().delete_stats(repo_name)
377 379 Session().commit()
378 380 except Exception, e:
379 381 log.error(traceback.format_exc())
380 382 h.flash(_('An error occurred during deletion of repository stats'),
381 383 category='error')
382 384 return redirect(url('edit_repo', repo_name=repo_name))
383 385
384 386 @HasPermissionAllDecorator('hg.admin')
385 387 def repo_cache(self, repo_name):
386 388 """
387 389 INVALIDATE existing repository cache
388 390
389 391 :param repo_name:
390 392 """
391 393
392 394 try:
393 395 ScmModel().mark_for_invalidation(repo_name)
394 396 Session().commit()
395 397 except Exception, e:
396 398 log.error(traceback.format_exc())
397 399 h.flash(_('An error occurred during cache invalidation'),
398 400 category='error')
399 401 return redirect(url('edit_repo', repo_name=repo_name))
400 402
401 403 @HasPermissionAllDecorator('hg.admin')
402 404 def repo_locking(self, repo_name):
403 405 """
404 406 Unlock repository when it is locked !
405 407
406 408 :param repo_name:
407 409 """
408 410
409 411 try:
410 412 repo = Repository.get_by_repo_name(repo_name)
411 413 if request.POST.get('set_lock'):
412 414 Repository.lock(repo, c.rhodecode_user.user_id)
413 415 elif request.POST.get('set_unlock'):
414 416 Repository.unlock(repo)
415 417 except Exception, e:
416 418 log.error(traceback.format_exc())
417 419 h.flash(_('An error occurred during unlocking'),
418 420 category='error')
419 421 return redirect(url('edit_repo', repo_name=repo_name))
420 422
421 423 @HasPermissionAllDecorator('hg.admin')
422 424 def repo_public_journal(self, repo_name):
423 425 """
424 426 Set's this repository to be visible in public journal,
425 427 in other words assing default user to follow this repo
426 428
427 429 :param repo_name:
428 430 """
429 431
430 432 cur_token = request.POST.get('auth_token')
431 433 token = get_token()
432 434 if cur_token == token:
433 435 try:
434 436 repo_id = Repository.get_by_repo_name(repo_name).repo_id
435 437 user_id = User.get_by_username('default').user_id
436 438 self.scm_model.toggle_following_repo(repo_id, user_id)
437 439 h.flash(_('Updated repository visibility in public journal'),
438 440 category='success')
439 441 Session().commit()
440 442 except:
441 443 h.flash(_('An error occurred during setting this'
442 444 ' repository in public journal'),
443 445 category='error')
444 446
445 447 else:
446 448 h.flash(_('Token mismatch'), category='error')
447 449 return redirect(url('edit_repo', repo_name=repo_name))
448 450
449 451 @HasPermissionAllDecorator('hg.admin')
450 452 def repo_pull(self, repo_name):
451 453 """
452 454 Runs task to update given repository with remote changes,
453 455 ie. make pull on remote location
454 456
455 457 :param repo_name:
456 458 """
457 459 try:
458 460 ScmModel().pull_changes(repo_name, self.rhodecode_user.username)
459 461 h.flash(_('Pulled from remote location'), category='success')
460 462 except Exception, e:
461 463 h.flash(_('An error occurred during pull from remote location'),
462 464 category='error')
463 465
464 466 return redirect(url('edit_repo', repo_name=repo_name))
465 467
466 468 @HasPermissionAllDecorator('hg.admin')
467 469 def repo_as_fork(self, repo_name):
468 470 """
469 471 Mark given repository as a fork of another
470 472
471 473 :param repo_name:
472 474 """
473 475 try:
474 476 fork_id = request.POST.get('id_fork_of')
475 477 repo = ScmModel().mark_as_fork(repo_name, fork_id,
476 478 self.rhodecode_user.username)
477 479 fork = repo.fork.repo_name if repo.fork else _('Nothing')
478 480 Session().commit()
479 481 h.flash(_('Marked repo %s as fork of %s') % (repo_name, fork),
480 482 category='success')
481 483 except Exception, e:
482 484 log.error(traceback.format_exc())
483 485 h.flash(_('An error occurred during this operation'),
484 486 category='error')
485 487
486 488 return redirect(url('edit_repo', repo_name=repo_name))
487 489
488 490 @HasPermissionAllDecorator('hg.admin')
489 491 def show(self, repo_name, format='html'):
490 492 """GET /repos/repo_name: Show a specific item"""
491 493 # url('repo', repo_name=ID)
492 494
493 495 @HasPermissionAllDecorator('hg.admin')
494 496 def edit(self, repo_name, format='html'):
495 497 """GET /repos/repo_name/edit: Form to edit an existing item"""
496 498 # url('edit_repo', repo_name=ID)
497 499 defaults = self.__load_data(repo_name)
498 500
499 501 return htmlfill.render(
500 502 render('admin/repos/repo_edit.html'),
501 503 defaults=defaults,
502 504 encoding="UTF-8",
503 505 force_defaults=False
504 506 )
505 507
506 508 @HasPermissionAllDecorator('hg.admin')
507 509 def create_repo_field(self, repo_name):
508 510 try:
509 511 form_result = RepoFieldForm()().to_python(dict(request.POST))
510 512 new_field = RepositoryField()
511 513 new_field.repository = Repository.get_by_repo_name(repo_name)
512 514 new_field.field_key = form_result['new_field_key']
513 515 new_field.field_type = form_result['new_field_type'] # python type
514 516 new_field.field_value = form_result['new_field_value'] # set initial blank value
515 517 new_field.field_desc = form_result['new_field_desc']
516 518 new_field.field_label = form_result['new_field_label']
517 519 Session().add(new_field)
518 520 Session().commit()
519 521
520 522 except Exception, e:
521 523 log.error(traceback.format_exc())
522 524 msg = _('An error occurred during creation of field')
523 525 if isinstance(e, formencode.Invalid):
524 526 msg += ". " + e.msg
525 527 h.flash(msg, category='error')
526 528 return redirect(url('edit_repo', repo_name=repo_name))
527 529
528 530 @HasPermissionAllDecorator('hg.admin')
529 531 def delete_repo_field(self, repo_name, field_id):
530 532 field = RepositoryField.get_or_404(field_id)
531 533 try:
532 534 Session().delete(field)
533 535 Session().commit()
534 536 except Exception, e:
535 537 log.error(traceback.format_exc())
536 538 msg = _('An error occurred during removal of field')
537 539 h.flash(msg, category='error')
538 540 return redirect(url('edit_repo', repo_name=repo_name))
@@ -1,641 +1,641 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) 2010-2012 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 from __future__ import with_statement
26 26 import os
27 27 import logging
28 28 import traceback
29 29 import tempfile
30 30 import shutil
31 31
32 32 from pylons import request, response, tmpl_context as c, url
33 33 from pylons.i18n.translation import _
34 34 from pylons.controllers.util import redirect
35 35 from rhodecode.lib.utils import jsonify
36 36
37 37 from rhodecode.lib import diffs
38 38 from rhodecode.lib import helpers as h
39 39
40 40 from rhodecode.lib.compat import OrderedDict
41 41 from rhodecode.lib.utils2 import convert_line_endings, detect_mode, safe_str,\
42 42 str2bool
43 43 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
44 44 from rhodecode.lib.base import BaseRepoController, render
45 45 from rhodecode.lib.vcs.backends.base import EmptyChangeset
46 46 from rhodecode.lib.vcs.conf import settings
47 47 from rhodecode.lib.vcs.exceptions import RepositoryError, \
48 48 ChangesetDoesNotExistError, EmptyRepositoryError, \
49 49 ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError,\
50 50 NodeDoesNotExistError, ChangesetError, NodeError
51 51 from rhodecode.lib.vcs.nodes import FileNode
52 52
53 53 from rhodecode.model.repo import RepoModel
54 54 from rhodecode.model.scm import ScmModel
55 55 from rhodecode.model.db import Repository
56 56
57 57 from rhodecode.controllers.changeset import anchor_url, _ignorews_url,\
58 58 _context_url, get_line_ctx, get_ignore_ws
59 59
60 60
61 61 log = logging.getLogger(__name__)
62 62
63 63
64 64 class FilesController(BaseRepoController):
65 65
66 66 def __before__(self):
67 67 super(FilesController, self).__before__()
68 68 c.cut_off_limit = self.cut_off_limit
69 69
70 70 def __get_cs_or_redirect(self, rev, repo_name, redirect_after=True):
71 71 """
72 72 Safe way to get changeset if error occur it redirects to tip with
73 73 proper message
74 74
75 75 :param rev: revision to fetch
76 76 :param repo_name: repo name to redirect after
77 77 """
78 78
79 79 try:
80 80 return c.rhodecode_repo.get_changeset(rev)
81 81 except EmptyRepositoryError, e:
82 82 if not redirect_after:
83 83 return None
84 84 url_ = url('files_add_home',
85 85 repo_name=c.repo_name,
86 86 revision=0, f_path='')
87 add_new = '<a href="%s">[%s]</a>' % (url_, _('click here to add new file'))
87 add_new = h.link_to(_('click here to add new file'), url_)
88 88 h.flash(h.literal(_('There are no files yet %s') % add_new),
89 89 category='warning')
90 90 redirect(h.url('summary_home', repo_name=repo_name))
91 91
92 92 except RepositoryError, e:
93 93 h.flash(str(e), category='warning')
94 94 redirect(h.url('files_home', repo_name=repo_name, revision='tip'))
95 95
96 96 def __get_filenode_or_redirect(self, repo_name, cs, path):
97 97 """
98 98 Returns file_node, if error occurs or given path is directory,
99 99 it'll redirect to top level path
100 100
101 101 :param repo_name: repo_name
102 102 :param cs: given changeset
103 103 :param path: path to lookup
104 104 """
105 105
106 106 try:
107 107 file_node = cs.get_node(path)
108 108 if file_node.is_dir():
109 109 raise RepositoryError('given path is a directory')
110 110 except RepositoryError, e:
111 111 h.flash(str(e), category='warning')
112 112 redirect(h.url('files_home', repo_name=repo_name,
113 113 revision=cs.raw_id))
114 114
115 115 return file_node
116 116
117 117 @LoginRequired()
118 118 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
119 119 'repository.admin')
120 120 def index(self, repo_name, revision, f_path, annotate=False):
121 121 # redirect to given revision from form if given
122 122 post_revision = request.POST.get('at_rev', None)
123 123 if post_revision:
124 124 cs = self.__get_cs_or_redirect(post_revision, repo_name)
125 125 redirect(url('files_home', repo_name=c.repo_name,
126 126 revision=cs.raw_id, f_path=f_path))
127 127
128 128 c.changeset = self.__get_cs_or_redirect(revision, repo_name)
129 129 c.branch = request.GET.get('branch', None)
130 130 c.f_path = f_path
131 131 c.annotate = annotate
132 132 c.changeset = self.__get_cs_or_redirect(revision, repo_name)
133 133 cur_rev = c.changeset.revision
134 134
135 135 # prev link
136 136 try:
137 137 prev_rev = c.rhodecode_repo.get_changeset(cur_rev).prev(c.branch)
138 138 c.url_prev = url('files_home', repo_name=c.repo_name,
139 139 revision=prev_rev.raw_id, f_path=f_path)
140 140 if c.branch:
141 141 c.url_prev += '?branch=%s' % c.branch
142 142 except (ChangesetDoesNotExistError, VCSError):
143 143 c.url_prev = '#'
144 144
145 145 # next link
146 146 try:
147 147 next_rev = c.rhodecode_repo.get_changeset(cur_rev).next(c.branch)
148 148 c.url_next = url('files_home', repo_name=c.repo_name,
149 149 revision=next_rev.raw_id, f_path=f_path)
150 150 if c.branch:
151 151 c.url_next += '?branch=%s' % c.branch
152 152 except (ChangesetDoesNotExistError, VCSError):
153 153 c.url_next = '#'
154 154
155 155 # files or dirs
156 156 try:
157 157 c.file = c.changeset.get_node(f_path)
158 158
159 159 if c.file.is_file():
160 160 c.load_full_history = False
161 161 file_last_cs = c.file.last_changeset
162 162 c.file_changeset = (c.changeset
163 163 if c.changeset.revision < file_last_cs.revision
164 164 else file_last_cs)
165 165 #determine if we're on branch head
166 166 _branches = c.rhodecode_repo.branches
167 167 c.on_branch_head = revision in _branches.keys() + _branches.values()
168 168 _hist = []
169 169 c.file_history = []
170 170 if c.load_full_history:
171 171 c.file_history, _hist = self._get_node_history(c.changeset, f_path)
172 172
173 173 c.authors = []
174 174 for a in set([x.author for x in _hist]):
175 175 c.authors.append((h.email(a), h.person(a)))
176 176 else:
177 177 c.authors = c.file_history = []
178 178 except RepositoryError, e:
179 179 h.flash(str(e), category='warning')
180 180 redirect(h.url('files_home', repo_name=repo_name,
181 181 revision='tip'))
182 182
183 183 if request.environ.get('HTTP_X_PARTIAL_XHR'):
184 184 return render('files/files_ypjax.html')
185 185
186 186 return render('files/files.html')
187 187
188 188 def history(self, repo_name, revision, f_path, annotate=False):
189 189 if request.environ.get('HTTP_X_PARTIAL_XHR'):
190 190 c.changeset = self.__get_cs_or_redirect(revision, repo_name)
191 191 c.f_path = f_path
192 192 c.annotate = annotate
193 193 c.file = c.changeset.get_node(f_path)
194 194 if c.file.is_file():
195 195 file_last_cs = c.file.last_changeset
196 196 c.file_changeset = (c.changeset
197 197 if c.changeset.revision < file_last_cs.revision
198 198 else file_last_cs)
199 199 c.file_history, _hist = self._get_node_history(c.changeset, f_path)
200 200 c.authors = []
201 201 for a in set([x.author for x in _hist]):
202 202 c.authors.append((h.email(a), h.person(a)))
203 203 return render('files/files_history_box.html')
204 204
205 205 @LoginRequired()
206 206 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
207 207 'repository.admin')
208 208 def rawfile(self, repo_name, revision, f_path):
209 209 cs = self.__get_cs_or_redirect(revision, repo_name)
210 210 file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path)
211 211
212 212 response.content_disposition = 'attachment; filename=%s' % \
213 213 safe_str(f_path.split(Repository.url_sep())[-1])
214 214
215 215 response.content_type = file_node.mimetype
216 216 return file_node.content
217 217
218 218 @LoginRequired()
219 219 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
220 220 'repository.admin')
221 221 def raw(self, repo_name, revision, f_path):
222 222 cs = self.__get_cs_or_redirect(revision, repo_name)
223 223 file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path)
224 224
225 225 raw_mimetype_mapping = {
226 226 # map original mimetype to a mimetype used for "show as raw"
227 227 # you can also provide a content-disposition to override the
228 228 # default "attachment" disposition.
229 229 # orig_type: (new_type, new_dispo)
230 230
231 231 # show images inline:
232 232 'image/x-icon': ('image/x-icon', 'inline'),
233 233 'image/png': ('image/png', 'inline'),
234 234 'image/gif': ('image/gif', 'inline'),
235 235 'image/jpeg': ('image/jpeg', 'inline'),
236 236 'image/svg+xml': ('image/svg+xml', 'inline'),
237 237 }
238 238
239 239 mimetype = file_node.mimetype
240 240 try:
241 241 mimetype, dispo = raw_mimetype_mapping[mimetype]
242 242 except KeyError:
243 243 # we don't know anything special about this, handle it safely
244 244 if file_node.is_binary:
245 245 # do same as download raw for binary files
246 246 mimetype, dispo = 'application/octet-stream', 'attachment'
247 247 else:
248 248 # do not just use the original mimetype, but force text/plain,
249 249 # otherwise it would serve text/html and that might be unsafe.
250 250 # Note: underlying vcs library fakes text/plain mimetype if the
251 251 # mimetype can not be determined and it thinks it is not
252 252 # binary.This might lead to erroneous text display in some
253 253 # cases, but helps in other cases, like with text files
254 254 # without extension.
255 255 mimetype, dispo = 'text/plain', 'inline'
256 256
257 257 if dispo == 'attachment':
258 258 dispo = 'attachment; filename=%s' % \
259 259 safe_str(f_path.split(os.sep)[-1])
260 260
261 261 response.content_disposition = dispo
262 262 response.content_type = mimetype
263 263 return file_node.content
264 264
265 265 @LoginRequired()
266 266 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
267 267 def edit(self, repo_name, revision, f_path):
268 268 repo = c.rhodecode_db_repo
269 269 if repo.enable_locking and repo.locked[0]:
270 270 h.flash(_('This repository is has been locked by %s on %s')
271 271 % (h.person_by_id(repo.locked[0]),
272 272 h.fmt_date(h.time_to_datetime(repo.locked[1]))),
273 273 'warning')
274 274 return redirect(h.url('files_home',
275 275 repo_name=repo_name, revision='tip'))
276 276
277 277 # check if revision is a branch identifier- basically we cannot
278 278 # create multiple heads via file editing
279 279 _branches = repo.scm_instance.branches
280 280 # check if revision is a branch name or branch hash
281 281 if revision not in _branches.keys() + _branches.values():
282 282 h.flash(_('You can only edit files with revision '
283 283 'being a valid branch '), category='warning')
284 284 return redirect(h.url('files_home',
285 285 repo_name=repo_name, revision='tip',
286 286 f_path=f_path))
287 287
288 288 r_post = request.POST
289 289
290 290 c.cs = self.__get_cs_or_redirect(revision, repo_name)
291 291 c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
292 292
293 293 if c.file.is_binary:
294 294 return redirect(url('files_home', repo_name=c.repo_name,
295 295 revision=c.cs.raw_id, f_path=f_path))
296 296 c.default_message = _('Edited file %s via RhodeCode') % (f_path)
297 297 c.f_path = f_path
298 298
299 299 if r_post:
300 300
301 301 old_content = c.file.content
302 302 sl = old_content.splitlines(1)
303 303 first_line = sl[0] if sl else ''
304 304 # modes: 0 - Unix, 1 - Mac, 2 - DOS
305 305 mode = detect_mode(first_line, 0)
306 306 content = convert_line_endings(r_post.get('content'), mode)
307 307
308 308 message = r_post.get('message') or c.default_message
309 309 author = self.rhodecode_user.full_contact
310 310
311 311 if content == old_content:
312 312 h.flash(_('No changes'),
313 313 category='warning')
314 314 return redirect(url('changeset_home', repo_name=c.repo_name,
315 315 revision='tip'))
316 316 try:
317 317 self.scm_model.commit_change(repo=c.rhodecode_repo,
318 318 repo_name=repo_name, cs=c.cs,
319 319 user=self.rhodecode_user.user_id,
320 320 author=author, message=message,
321 321 content=content, f_path=f_path)
322 322 h.flash(_('Successfully committed to %s') % f_path,
323 323 category='success')
324 324
325 325 except Exception:
326 326 log.error(traceback.format_exc())
327 327 h.flash(_('Error occurred during commit'), category='error')
328 328 return redirect(url('changeset_home',
329 329 repo_name=c.repo_name, revision='tip'))
330 330
331 331 return render('files/files_edit.html')
332 332
333 333 @LoginRequired()
334 334 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
335 335 def add(self, repo_name, revision, f_path):
336 336
337 337 repo = Repository.get_by_repo_name(repo_name)
338 338 if repo.enable_locking and repo.locked[0]:
339 339 h.flash(_('This repository is has been locked by %s on %s')
340 340 % (h.person_by_id(repo.locked[0]),
341 341 h.fmt_date(h.time_to_datetime(repo.locked[1]))),
342 342 'warning')
343 343 return redirect(h.url('files_home',
344 344 repo_name=repo_name, revision='tip'))
345 345
346 346 r_post = request.POST
347 347 c.cs = self.__get_cs_or_redirect(revision, repo_name,
348 348 redirect_after=False)
349 349 if c.cs is None:
350 350 c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias)
351 351 c.default_message = (_('Added file via RhodeCode'))
352 352 c.f_path = f_path
353 353
354 354 if r_post:
355 355 unix_mode = 0
356 356 content = convert_line_endings(r_post.get('content'), unix_mode)
357 357
358 358 message = r_post.get('message') or c.default_message
359 359 location = r_post.get('location')
360 360 filename = r_post.get('filename')
361 361 file_obj = r_post.get('upload_file', None)
362 362
363 363 if file_obj is not None and hasattr(file_obj, 'filename'):
364 364 filename = file_obj.filename
365 365 content = file_obj.file
366 366
367 367 node_path = os.path.join(location, filename)
368 368 author = self.rhodecode_user.full_contact
369 369
370 370 if not content:
371 371 h.flash(_('No content'), category='warning')
372 372 return redirect(url('changeset_home', repo_name=c.repo_name,
373 373 revision='tip'))
374 374 if not filename:
375 375 h.flash(_('No filename'), category='warning')
376 376 return redirect(url('changeset_home', repo_name=c.repo_name,
377 377 revision='tip'))
378 378
379 379 try:
380 380 self.scm_model.create_node(repo=c.rhodecode_repo,
381 381 repo_name=repo_name, cs=c.cs,
382 382 user=self.rhodecode_user.user_id,
383 383 author=author, message=message,
384 384 content=content, f_path=node_path)
385 385 h.flash(_('Successfully committed to %s') % node_path,
386 386 category='success')
387 387 except NodeAlreadyExistsError, e:
388 388 h.flash(_(e), category='error')
389 389 except Exception:
390 390 log.error(traceback.format_exc())
391 391 h.flash(_('Error occurred during commit'), category='error')
392 392 return redirect(url('changeset_home',
393 393 repo_name=c.repo_name, revision='tip'))
394 394
395 395 return render('files/files_add.html')
396 396
397 397 @LoginRequired()
398 398 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
399 399 'repository.admin')
400 400 def archivefile(self, repo_name, fname):
401 401
402 402 fileformat = None
403 403 revision = None
404 404 ext = None
405 405 subrepos = request.GET.get('subrepos') == 'true'
406 406
407 407 for a_type, ext_data in settings.ARCHIVE_SPECS.items():
408 408 archive_spec = fname.split(ext_data[1])
409 409 if len(archive_spec) == 2 and archive_spec[1] == '':
410 410 fileformat = a_type or ext_data[1]
411 411 revision = archive_spec[0]
412 412 ext = ext_data[1]
413 413
414 414 try:
415 415 dbrepo = RepoModel().get_by_repo_name(repo_name)
416 416 if dbrepo.enable_downloads is False:
417 417 return _('downloads disabled')
418 418
419 419 if c.rhodecode_repo.alias == 'hg':
420 420 # patch and reset hooks section of UI config to not run any
421 421 # hooks on fetching archives with subrepos
422 422 for k, v in c.rhodecode_repo._repo.ui.configitems('hooks'):
423 423 c.rhodecode_repo._repo.ui.setconfig('hooks', k, None)
424 424
425 425 cs = c.rhodecode_repo.get_changeset(revision)
426 426 content_type = settings.ARCHIVE_SPECS[fileformat][0]
427 427 except ChangesetDoesNotExistError:
428 428 return _('Unknown revision %s') % revision
429 429 except EmptyRepositoryError:
430 430 return _('Empty repository')
431 431 except (ImproperArchiveTypeError, KeyError):
432 432 return _('Unknown archive type')
433 433 # archive cache
434 434 from rhodecode import CONFIG
435 435 rev_name = cs.raw_id[:12]
436 436 archive_name = '%s-%s%s' % (safe_str(repo_name.replace('/', '_')),
437 437 safe_str(rev_name), ext)
438 438
439 439 use_cached_archive = False # defines if we use cached version of archive
440 440 archive_cache_enabled = CONFIG.get('archive_cache_dir')
441 441 if not subrepos and archive_cache_enabled:
442 442 #check if we it's ok to write
443 443 if not os.path.isdir(CONFIG['archive_cache_dir']):
444 444 os.makedirs(CONFIG['archive_cache_dir'])
445 445 cached_archive_path = os.path.join(CONFIG['archive_cache_dir'], archive_name)
446 446 if os.path.isfile(cached_archive_path):
447 447 log.debug('Found cached archive in %s' % cached_archive_path)
448 448 fd, archive = None, cached_archive_path
449 449 use_cached_archive = True
450 450 else:
451 451 log.debug('Archive %s is not yet cached' % (archive_name))
452 452
453 453 if not use_cached_archive:
454 454 #generate new archive
455 455 try:
456 456 fd, archive = tempfile.mkstemp()
457 457 t = open(archive, 'wb')
458 458 log.debug('Creating new temp archive in %s' % archive)
459 459 cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
460 460 if archive_cache_enabled:
461 461 #if we generated the archive and use cache rename that
462 462 log.debug('Storing new archive in %s' % cached_archive_path)
463 463 shutil.move(archive, cached_archive_path)
464 464 archive = cached_archive_path
465 465 finally:
466 466 t.close()
467 467
468 468 def get_chunked_archive(archive):
469 469 stream = open(archive, 'rb')
470 470 while True:
471 471 data = stream.read(16 * 1024)
472 472 if not data:
473 473 stream.close()
474 474 if fd: # fd means we used temporary file
475 475 os.close(fd)
476 476 if not archive_cache_enabled:
477 477 log.debug('Destroing temp archive %s' % archive)
478 478 os.remove(archive)
479 479 break
480 480 yield data
481 481
482 482 response.content_disposition = str('attachment; filename=%s' % (archive_name))
483 483 response.content_type = str(content_type)
484 484 return get_chunked_archive(archive)
485 485
486 486 @LoginRequired()
487 487 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
488 488 'repository.admin')
489 489 def diff(self, repo_name, f_path):
490 490 ignore_whitespace = request.GET.get('ignorews') == '1'
491 491 line_context = request.GET.get('context', 3)
492 492 diff1 = request.GET.get('diff1', '')
493 493 diff2 = request.GET.get('diff2', '')
494 494 c.action = request.GET.get('diff')
495 495 c.no_changes = diff1 == diff2
496 496 c.f_path = f_path
497 497 c.big_diff = False
498 498 c.anchor_url = anchor_url
499 499 c.ignorews_url = _ignorews_url
500 500 c.context_url = _context_url
501 501 c.changes = OrderedDict()
502 502 c.changes[diff2] = []
503 503
504 504 #special case if we want a show rev only, it's impl here
505 505 #to reduce JS and callbacks
506 506
507 507 if request.GET.get('show_rev'):
508 508 if str2bool(request.GET.get('annotate', 'False')):
509 509 _url = url('files_annotate_home', repo_name=c.repo_name,
510 510 revision=diff1, f_path=c.f_path)
511 511 else:
512 512 _url = url('files_home', repo_name=c.repo_name,
513 513 revision=diff1, f_path=c.f_path)
514 514
515 515 return redirect(_url)
516 516 try:
517 517 if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]:
518 518 c.changeset_1 = c.rhodecode_repo.get_changeset(diff1)
519 519 try:
520 520 node1 = c.changeset_1.get_node(f_path)
521 521 if node1.is_dir():
522 522 raise NodeError('%s path is a %s not a file' % (node1, type(node1)))
523 523 except NodeDoesNotExistError:
524 524 c.changeset_1 = EmptyChangeset(cs=diff1,
525 525 revision=c.changeset_1.revision,
526 526 repo=c.rhodecode_repo)
527 527 node1 = FileNode(f_path, '', changeset=c.changeset_1)
528 528 else:
529 529 c.changeset_1 = EmptyChangeset(repo=c.rhodecode_repo)
530 530 node1 = FileNode(f_path, '', changeset=c.changeset_1)
531 531
532 532 if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]:
533 533 c.changeset_2 = c.rhodecode_repo.get_changeset(diff2)
534 534 try:
535 535 node2 = c.changeset_2.get_node(f_path)
536 536 raise NodeError('%s path is a %s not a file' % (node2, type(node2)))
537 537 except NodeDoesNotExistError:
538 538 c.changeset_2 = EmptyChangeset(cs=diff2,
539 539 revision=c.changeset_2.revision,
540 540 repo=c.rhodecode_repo)
541 541 node2 = FileNode(f_path, '', changeset=c.changeset_2)
542 542 else:
543 543 c.changeset_2 = EmptyChangeset(repo=c.rhodecode_repo)
544 544 node2 = FileNode(f_path, '', changeset=c.changeset_2)
545 545 except (RepositoryError, NodeError):
546 546 log.error(traceback.format_exc())
547 547 return redirect(url('files_home', repo_name=c.repo_name,
548 548 f_path=f_path))
549 549
550 550 if c.action == 'download':
551 551 _diff = diffs.get_gitdiff(node1, node2,
552 552 ignore_whitespace=ignore_whitespace,
553 553 context=line_context)
554 554 diff = diffs.DiffProcessor(_diff, format='gitdiff')
555 555
556 556 diff_name = '%s_vs_%s.diff' % (diff1, diff2)
557 557 response.content_type = 'text/plain'
558 558 response.content_disposition = (
559 559 'attachment; filename=%s' % diff_name
560 560 )
561 561 return diff.as_raw()
562 562
563 563 elif c.action == 'raw':
564 564 _diff = diffs.get_gitdiff(node1, node2,
565 565 ignore_whitespace=ignore_whitespace,
566 566 context=line_context)
567 567 diff = diffs.DiffProcessor(_diff, format='gitdiff')
568 568 response.content_type = 'text/plain'
569 569 return diff.as_raw()
570 570
571 571 else:
572 572 fid = h.FID(diff2, node2.path)
573 573 line_context_lcl = get_line_ctx(fid, request.GET)
574 574 ign_whitespace_lcl = get_ignore_ws(fid, request.GET)
575 575
576 576 lim = request.GET.get('fulldiff') or self.cut_off_limit
577 577 _, cs1, cs2, diff, st = diffs.wrapped_diff(filenode_old=node1,
578 578 filenode_new=node2,
579 579 cut_off_limit=lim,
580 580 ignore_whitespace=ign_whitespace_lcl,
581 581 line_context=line_context_lcl,
582 582 enable_comments=False)
583 583 op = ''
584 584 filename = node1.path
585 585 cs_changes = {
586 586 'fid': [cs1, cs2, op, filename, diff, st]
587 587 }
588 588 c.changes = cs_changes
589 589
590 590 return render('files/file_diff.html')
591 591
592 592 def _get_node_history(self, cs, f_path, changesets=None):
593 593 """
594 594 get changesets history for given node
595 595
596 596 :param cs: changeset to calculate history
597 597 :param f_path: path for node to calculate history for
598 598 :param changesets: if passed don't calculate history and take
599 599 changesets defined in this list
600 600 """
601 601 # calculate history based on tip
602 602 tip_cs = c.rhodecode_repo.get_changeset()
603 603 if changesets is None:
604 604 try:
605 605 changesets = tip_cs.get_file_history(f_path)
606 606 except (NodeDoesNotExistError, ChangesetError):
607 607 #this node is not present at tip !
608 608 changesets = cs.get_file_history(f_path)
609 609 hist_l = []
610 610
611 611 changesets_group = ([], _("Changesets"))
612 612 branches_group = ([], _("Branches"))
613 613 tags_group = ([], _("Tags"))
614 614 _hg = cs.repository.alias == 'hg'
615 615 for chs in changesets:
616 616 #_branch = '(%s)' % chs.branch if _hg else ''
617 617 _branch = chs.branch
618 618 n_desc = 'r%s:%s (%s)' % (chs.revision, chs.short_id, _branch)
619 619 changesets_group[0].append((chs.raw_id, n_desc,))
620 620 hist_l.append(changesets_group)
621 621
622 622 for name, chs in c.rhodecode_repo.branches.items():
623 623 branches_group[0].append((chs, name),)
624 624 hist_l.append(branches_group)
625 625
626 626 for name, chs in c.rhodecode_repo.tags.items():
627 627 tags_group[0].append((chs, name),)
628 628 hist_l.append(tags_group)
629 629
630 630 return hist_l, changesets
631 631
632 632 @LoginRequired()
633 633 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
634 634 'repository.admin')
635 635 @jsonify
636 636 def nodelist(self, repo_name, revision, f_path):
637 637 if request.environ.get('HTTP_X_PARTIAL_XHR'):
638 638 cs = self.__get_cs_or_redirect(revision, repo_name)
639 639 _d, _f = ScmModel().get_nodes(repo_name, cs.raw_id, f_path,
640 640 flat=False)
641 641 return {'nodes': _d + _f}
@@ -1,182 +1,185 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.controllers.forks
4 4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 5
6 6 forks controller for rhodecode
7 7
8 8 :created_on: Apr 23, 2011
9 9 :author: marcink
10 10 :copyright: (C) 2011-2012 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 import logging
26 26 import formencode
27 27 import traceback
28 28 from formencode import htmlfill
29 29
30 30 from pylons import tmpl_context as c, request, url
31 31 from pylons.controllers.util import redirect
32 32 from pylons.i18n.translation import _
33 33
34 34 import rhodecode.lib.helpers as h
35 35
36 36 from rhodecode.lib.helpers import Page
37 37 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator, \
38 38 NotAnonymous, HasRepoPermissionAny, HasPermissionAllDecorator,\
39 39 HasPermissionAnyDecorator
40 40 from rhodecode.lib.base import BaseRepoController, render
41 41 from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User
42 42 from rhodecode.model.repo import RepoModel
43 43 from rhodecode.model.forms import RepoForkForm
44 44 from rhodecode.model.scm import ScmModel, GroupList
45 45 from rhodecode.lib.utils2 import safe_int
46 46
47 47 log = logging.getLogger(__name__)
48 48
49 49
50 50 class ForksController(BaseRepoController):
51 51
52 52 @LoginRequired()
53 53 def __before__(self):
54 54 super(ForksController, self).__before__()
55 55
56 56 def __load_defaults(self):
57 57 acl_groups = GroupList(RepoGroup.query().all(),
58 58 perm_set=['group.write', 'group.admin'])
59 59 c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
60 60 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
61 61 choices, c.landing_revs = ScmModel().get_repo_landing_revs()
62 62 c.landing_revs_choices = choices
63 63
64 64 def __load_data(self, repo_name=None):
65 65 """
66 66 Load defaults settings for edit, and update
67 67
68 68 :param repo_name:
69 69 """
70 70 self.__load_defaults()
71 71
72 72 c.repo_info = db_repo = Repository.get_by_repo_name(repo_name)
73 73 repo = db_repo.scm_instance
74 74
75 75 if c.repo_info is None:
76 76 h.not_mapped_error(repo_name)
77 77 return redirect(url('repos'))
78 78
79 79 c.default_user_id = User.get_by_username('default').user_id
80 80 c.in_public_journal = UserFollowing.query()\
81 81 .filter(UserFollowing.user_id == c.default_user_id)\
82 82 .filter(UserFollowing.follows_repository == c.repo_info).scalar()
83 83
84 84 if c.repo_info.stats:
85 85 last_rev = c.repo_info.stats.stat_on_revision+1
86 86 else:
87 87 last_rev = 0
88 88 c.stats_revision = last_rev
89 89
90 90 c.repo_last_rev = repo.count() if repo.revisions else 0
91 91
92 92 if last_rev == 0 or c.repo_last_rev == 0:
93 93 c.stats_percentage = 0
94 94 else:
95 95 c.stats_percentage = '%.2f' % ((float((last_rev)) /
96 96 c.repo_last_rev) * 100)
97 97
98 98 defaults = RepoModel()._get_defaults(repo_name)
99 99 # alter the description to indicate a fork
100 100 defaults['description'] = ('fork of repository: %s \n%s'
101 101 % (defaults['repo_name'],
102 102 defaults['description']))
103 103 # add suffix to fork
104 104 defaults['repo_name'] = '%s-fork' % defaults['repo_name']
105 105
106 106 return defaults
107 107
108 108 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
109 109 'repository.admin')
110 110 def forks(self, repo_name):
111 111 p = safe_int(request.params.get('page', 1), 1)
112 112 repo_id = c.rhodecode_db_repo.repo_id
113 113 d = []
114 114 for r in Repository.get_repo_forks(repo_id):
115 115 if not HasRepoPermissionAny(
116 116 'repository.read', 'repository.write', 'repository.admin'
117 117 )(r.repo_name, 'get forks check'):
118 118 continue
119 119 d.append(r)
120 120 c.forks_pager = Page(d, page=p, items_per_page=20)
121 121
122 122 c.forks_data = render('/forks/forks_data.html')
123 123
124 124 if request.environ.get('HTTP_X_PARTIAL_XHR'):
125 125 return c.forks_data
126 126
127 127 return render('/forks/forks.html')
128 128
129 129 @NotAnonymous()
130 130 @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
131 131 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
132 132 'repository.admin')
133 133 def fork(self, repo_name):
134 134 c.repo_info = Repository.get_by_repo_name(repo_name)
135 135 if not c.repo_info:
136 136 h.not_mapped_error(repo_name)
137 137 return redirect(url('home'))
138 138
139 139 defaults = self.__load_data(repo_name)
140 140
141 141 return htmlfill.render(
142 142 render('forks/fork.html'),
143 143 defaults=defaults,
144 144 encoding="UTF-8",
145 145 force_defaults=False
146 146 )
147 147
148 148 @NotAnonymous()
149 149 @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
150 150 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
151 151 'repository.admin')
152 152 def fork_create(self, repo_name):
153 153 self.__load_defaults()
154 154 c.repo_info = Repository.get_by_repo_name(repo_name)
155 155 _form = RepoForkForm(old_data={'repo_type': c.repo_info.repo_type},
156 156 repo_groups=c.repo_groups_choices,
157 157 landing_revs=c.landing_revs_choices)()
158 158 form_result = {}
159 159 try:
160 160 form_result = _form.to_python(dict(request.POST))
161 161
162 162 # create fork is done sometimes async on celery, db transaction
163 163 # management is handled there.
164 164 RepoModel().create_fork(form_result, self.rhodecode_user.user_id)
165 h.flash(_('forked %s repository as %s') \
166 % (repo_name, form_result['repo_name']),
165 fork_url = h.link_to(form_result['repo_name'],
166 h.url('summary_home', repo_name=form_result['repo_name_full']))
167
168 h.flash(h.literal(_('forked repository %s as %s') \
169 % (repo_name, fork_url)),
167 170 category='success')
168 171 except formencode.Invalid, errors:
169 172 c.new_repo = errors.value['repo_name']
170 173
171 174 return htmlfill.render(
172 175 render('forks/fork.html'),
173 176 defaults=errors.value,
174 177 errors=errors.error_dict or {},
175 178 prefix_error=False,
176 179 encoding="UTF-8")
177 180 except Exception:
178 181 log.error(traceback.format_exc())
179 182 h.flash(_('An error occurred during repository forking %s') %
180 183 repo_name, category='error')
181 184
182 185 return redirect(url('home'))
@@ -1,4831 +1,4848 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 border: 0;
3 3 outline: 0;
4 4 font-size: 100%;
5 5 vertical-align: baseline;
6 6 background: transparent;
7 7 margin: 0;
8 8 padding: 0;
9 9 }
10 10
11 11 body {
12 12 line-height: 1;
13 13 height: 100%;
14 14 background: url("../images/background.png") repeat scroll 0 0 #B0B0B0;
15 15 font-family: Lucida Grande, Verdana, Lucida Sans Regular,
16 16 Lucida Sans Unicode, Arial, sans-serif; font-size : 12px;
17 17 color: #000;
18 18 margin: 0;
19 19 padding: 0;
20 20 font-size: 12px;
21 21 }
22 22
23 23 ol, ul {
24 24 list-style: none;
25 25 }
26 26
27 27 blockquote, q {
28 28 quotes: none;
29 29 }
30 30
31 31 blockquote:before, blockquote:after, q:before, q:after {
32 32 content: none;
33 33 }
34 34
35 35 :focus {
36 36 outline: 0;
37 37 }
38 38
39 39 del {
40 40 text-decoration: line-through;
41 41 }
42 42
43 43 table {
44 44 border-collapse: collapse;
45 45 border-spacing: 0;
46 46 }
47 47
48 48 html {
49 49 height: 100%;
50 50 }
51 51
52 52 a {
53 53 color: #003367;
54 54 text-decoration: none;
55 55 cursor: pointer;
56 56 }
57 57
58 58 a:hover {
59 59 color: #316293;
60 60 text-decoration: underline;
61 61 }
62 62
63 63 h1, h2, h3, h4, h5, h6,
64 64 div.h1, div.h2, div.h3, div.h4, div.h5, div.h6 {
65 65 color: #292929;
66 66 font-weight: 700;
67 67 }
68 68
69 69 h1, div.h1 {
70 70 font-size: 22px;
71 71 }
72 72
73 73 h2, div.h2 {
74 74 font-size: 20px;
75 75 }
76 76
77 77 h3, div.h3 {
78 78 font-size: 18px;
79 79 }
80 80
81 81 h4, div.h4 {
82 82 font-size: 16px;
83 83 }
84 84
85 85 h5, div.h5 {
86 86 font-size: 14px;
87 87 }
88 88
89 89 h6, div.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 border-top-left-radius: 8px;
164 164 }
165 165
166 166 .top-right-rounded-corner {
167 167 -webkit-border-top-right-radius: 8px;
168 168 -khtml-border-radius-topright: 8px;
169 169 border-top-right-radius: 8px;
170 170 }
171 171
172 172 .bottom-left-rounded-corner {
173 173 -webkit-border-bottom-left-radius: 8px;
174 174 -khtml-border-radius-bottomleft: 8px;
175 175 border-bottom-left-radius: 8px;
176 176 }
177 177
178 178 .bottom-right-rounded-corner {
179 179 -webkit-border-bottom-right-radius: 8px;
180 180 -khtml-border-radius-bottomright: 8px;
181 181 border-bottom-right-radius: 8px;
182 182 }
183 183
184 184 .top-left-rounded-corner-mid {
185 185 -webkit-border-top-left-radius: 4px;
186 186 -khtml-border-radius-topleft: 4px;
187 187 border-top-left-radius: 4px;
188 188 }
189 189
190 190 .top-right-rounded-corner-mid {
191 191 -webkit-border-top-right-radius: 4px;
192 192 -khtml-border-radius-topright: 4px;
193 193 border-top-right-radius: 4px;
194 194 }
195 195
196 196 .bottom-left-rounded-corner-mid {
197 197 -webkit-border-bottom-left-radius: 4px;
198 198 -khtml-border-radius-bottomleft: 4px;
199 199 border-bottom-left-radius: 4px;
200 200 }
201 201
202 202 .bottom-right-rounded-corner-mid {
203 203 -webkit-border-bottom-right-radius: 4px;
204 204 -khtml-border-radius-bottomright: 4px;
205 205 border-bottom-right-radius: 4px;
206 206 }
207 207
208 208 .help-block {
209 209 color: #999999;
210 210 display: block;
211 211 margin-bottom: 0;
212 212 margin-top: 5px;
213 213 }
214 214
215 215 .empty_data {
216 216 color: #B9B9B9;
217 217 }
218 218
219 219 a.permalink {
220 220 visibility: hidden;
221 221 }
222 222
223 223 a.permalink:hover {
224 224 text-decoration: none;
225 225 }
226 226
227 227 h1:hover > a.permalink,
228 228 h2:hover > a.permalink,
229 229 h3:hover > a.permalink,
230 230 h4:hover > a.permalink,
231 231 h5:hover > a.permalink,
232 232 h6:hover > a.permalink,
233 233 div:hover > a.permalink {
234 234 visibility: visible;
235 235 }
236 236
237 237 #header {
238 238 }
239 239 #header ul#logged-user {
240 240 margin-bottom: 5px !important;
241 241 -webkit-border-radius: 0px 0px 8px 8px;
242 242 -khtml-border-radius: 0px 0px 8px 8px;
243 243 border-radius: 0px 0px 8px 8px;
244 244 height: 37px;
245 245 background-color: #003B76;
246 246 background-repeat: repeat-x;
247 247 background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
248 248 background-image: -moz-linear-gradient(top, #003b76, #00376e);
249 249 background-image: -ms-linear-gradient(top, #003b76, #00376e);
250 250 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
251 251 background-image: -webkit-linear-gradient(top, #003b76, #00376e);
252 252 background-image: -o-linear-gradient(top, #003b76, #00376e);
253 253 background-image: linear-gradient(to bottom, #003b76, #00376e);
254 254 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 );
255 255 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
256 256 }
257 257
258 258 #header ul#logged-user li {
259 259 list-style: none;
260 260 float: left;
261 261 margin: 8px 0 0;
262 262 padding: 4px 12px;
263 263 border-left: 1px solid #316293;
264 264 }
265 265
266 266 #header ul#logged-user li.first {
267 267 border-left: none;
268 268 margin: 4px;
269 269 }
270 270
271 271 #header ul#logged-user li.first div.gravatar {
272 272 margin-top: -2px;
273 273 }
274 274
275 275 #header ul#logged-user li.first div.account {
276 276 padding-top: 4px;
277 277 float: left;
278 278 }
279 279
280 280 #header ul#logged-user li.last {
281 281 border-right: none;
282 282 }
283 283
284 284 #header ul#logged-user li a {
285 285 color: #fff;
286 286 font-weight: 700;
287 287 text-decoration: none;
288 288 }
289 289
290 290 #header ul#logged-user li a:hover {
291 291 text-decoration: underline;
292 292 }
293 293
294 294 #header ul#logged-user li.highlight a {
295 295 color: #fff;
296 296 }
297 297
298 298 #header ul#logged-user li.highlight a:hover {
299 299 color: #FFF;
300 300 }
301 301 #header-dd {
302 302 clear: both;
303 303 position: fixed !important;
304 304 background-color: #003B76;
305 305 opacity: 0.01;
306 306 cursor: pointer;
307 307 min-height: 10px;
308 308 width: 100% !important;
309 309 -webkit-border-radius: 0px 0px 4px 4px;
310 310 -khtml-border-radius: 0px 0px 4px 4px;
311 311 border-radius: 0px 0px 4px 4px;
312 312 }
313 313
314 314 #header-dd:hover {
315 315 opacity: 0.2;
316 316 -webkit-transition: opacity 0.5s ease-in-out;
317 317 -moz-transition: opacity 0.5s ease-in-out;
318 318 transition: opacity 0.5s ease-in-out;
319 319 }
320 320
321 321 #header #header-inner {
322 322 min-height: 44px;
323 323 clear: both;
324 324 position: relative;
325 325 background-color: #003B76;
326 326 background-repeat: repeat-x;
327 327 background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
328 328 background-image: -moz-linear-gradient(top, #003b76, #00376e);
329 329 background-image: -ms-linear-gradient(top, #003b76, #00376e);
330 330 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),color-stop(100%, #00376e) );
331 331 background-image: -webkit-linear-gradient(top, #003b76, #00376e);
332 332 background-image: -o-linear-gradient(top, #003b76, #00376e);
333 333 background-image: linear-gradient(to bottom, #003b76, #00376e);
334 334 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 );
335 335 margin: 0;
336 336 padding: 0;
337 337 display: block;
338 338 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
339 339 -webkit-border-radius: 0px 0px 4px 4px;
340 340 -khtml-border-radius: 0px 0px 4px 4px;
341 341 border-radius: 0px 0px 4px 4px;
342 342 }
343 343 #header #header-inner.hover {
344 344 width: 100% !important;
345 345 -webkit-border-radius: 0px 0px 0px 0px;
346 346 -khtml-border-radius: 0px 0px 0px 0px;
347 347 border-radius: 0px 0px 0px 0px;
348 348 position: fixed !important;
349 349 z-index: 10000;
350 350 }
351 351
352 352 .ie7 #header #header-inner.hover,
353 353 .ie8 #header #header-inner.hover,
354 354 .ie9 #header #header-inner.hover
355 355 {
356 356 z-index: auto !important;
357 357 }
358 358
359 359 .header-pos-fix, .anchor {
360 360 margin-top: -46px;
361 361 padding-top: 46px;
362 362 }
363 363
364 364 #header #header-inner #home a {
365 365 height: 40px;
366 366 width: 46px;
367 367 display: block;
368 368 background: url("../images/button_home.png");
369 369 background-position: 0 0;
370 370 margin: 0;
371 371 padding: 0;
372 372 }
373 373
374 374 #header #header-inner #home a:hover {
375 375 background-position: 0 -40px;
376 376 }
377 377
378 378 #header #header-inner #logo {
379 379 float: left;
380 380 position: absolute;
381 381 }
382 382
383 383 #header #header-inner #logo h1 {
384 384 color: #FFF;
385 385 font-size: 20px;
386 386 margin: 12px 0 0 13px;
387 387 padding: 0;
388 388 }
389 389
390 390 #header #header-inner #logo a {
391 391 color: #fff;
392 392 text-decoration: none;
393 393 }
394 394
395 395 #header #header-inner #logo a:hover {
396 396 color: #bfe3ff;
397 397 }
398 398
399 399 #header #header-inner #quick {
400 400 position: relative;
401 401 float: right;
402 402 list-style-type: none;
403 403 list-style-position: outside;
404 404 margin: 4px 8px 0 0;
405 405 padding: 0;
406 406 border-radius: 4px;
407 407 }
408 408
409 409 #header #header-inner #quick li span.short {
410 410 padding: 9px 6px 8px 6px;
411 411 }
412 412
413 413 #header #header-inner #quick li span {
414 414 display: inline;
415 415 margin: 0;
416 416 }
417 417
418 418 #header #header-inner #quick li span.normal {
419 419 border: none;
420 420 padding: 10px 12px 8px;
421 421 }
422 422
423 423 #header #header-inner #quick li span.icon {
424 424
425 425 border-left: none;
426 426 padding-left: 10px ;
427 427 }
428 428
429 429 #header #header-inner #quick li span.icon_short {
430 430 top: 0;
431 431 left: 0;
432 432 border-left: none;
433 433 border-right: 1px solid #2e5c89;
434 434 padding: 8px 6px 4px;
435 435 }
436 436
437 437 #header #header-inner #quick li span.icon img, #header #header-inner #quick li span.icon_short img {
438 438 vertical-align: middle;
439 439 margin-bottom: 2px;
440 440 }
441 441
442 442 #header #header-inner #quick ul.repo_switcher {
443 443 max-height: 275px;
444 444 overflow-x: hidden;
445 445 overflow-y: auto;
446 446 }
447 447
448 448 #header #header-inner #quick ul.repo_switcher li.qfilter_rs {
449 449 padding: 2px 3px;
450 450 padding-right: 17px;
451 451 }
452 452
453 453 #header #header-inner #quick ul.repo_switcher li.qfilter_rs input {
454 454 width: 100%;
455 455 border-radius: 10px;
456 456 padding: 2px 7px;
457 457 }
458 458
459 459 #header #header-inner #quick .repo_switcher_type {
460 460 position: absolute;
461 461 left: 0;
462 462 top: 9px;
463 463 margin: 0px 2px 0px 2px;
464 464 }
465 465
466 466 #header #header-inner #quick li ul li a.journal, #header #header-inner #quick li ul li a.journal:hover {
467 467 background-image: url("../images/icons/book.png");
468 468 }
469 469
470 470 #header #header-inner #quick li ul li a.private_repo, #header #header-inner #quick li ul li a.private_repo:hover {
471 471 background-image: url("../images/icons/lock.png")
472 472 }
473 473
474 474 #header #header-inner #quick li ul li a.public_repo, #header #header-inner #quick li ul li a.public_repo:hover {
475 475 background-image: url("../images/icons/lock_open.png");
476 476 }
477 477
478 478 #header #header-inner #quick li ul li a.hg, #header #header-inner #quick li ul li a.hg:hover {
479 479 background-image: url("../images/icons/hgicon.png");
480 480 padding-left: 42px;
481 481 background-position: 20px 9px;
482 482 }
483 483
484 484 #header #header-inner #quick li ul li a.git, #header #header-inner #quick li ul li a.git:hover {
485 485 background-image: url("../images/icons/giticon.png");
486 486 padding-left: 42px;
487 487 background-position: 20px 9px;
488 488 }
489 489
490 490 #header #header-inner #quick li ul li a.repos, #header #header-inner #quick li ul li a.repos:hover {
491 491 background-image: url("../images/icons/database_edit.png");
492 492 }
493 493
494 494 #header #header-inner #quick li ul li a.repos_groups, #header #header-inner #quick li ul li a.repos_groups:hover {
495 495 background-image: url("../images/icons/database_link.png");
496 496 }
497 497
498 498 #header #header-inner #quick li ul li a.users, #header #header-inner #quick li ul li a.users:hover {
499 499 background-image: url("../images/icons/user_edit.png");
500 500 }
501 501
502 502 #header #header-inner #quick li ul li a.groups, #header #header-inner #quick li ul li a.groups:hover {
503 503 background-image: url("../images/icons/group_edit.png");
504 504 }
505 505
506 506 #header #header-inner #quick li ul li a.defaults, #header #header-inner #quick li ul li a.defaults:hover {
507 507 background-image: url("../images/icons/wrench.png");
508 508 }
509 509
510 510 #header #header-inner #quick li ul li a.settings, #header #header-inner #quick li ul li a.settings:hover {
511 511 background-image: url("../images/icons/cog.png");
512 512 }
513 513
514 514 #header #header-inner #quick li ul li a.permissions, #header #header-inner #quick li ul li a.permissions:hover {
515 515 background-image: url("../images/icons/key.png");
516 516 }
517 517
518 518 #header #header-inner #quick li ul li a.ldap, #header #header-inner #quick li ul li a.ldap:hover {
519 519 background-image: url("../images/icons/server_key.png");
520 520 }
521 521
522 522 #header #header-inner #quick li ul li a.fork, #header #header-inner #quick li ul li a.fork:hover {
523 523 background-image: url("../images/icons/arrow_divide.png");
524 524 }
525 525
526 526 #header #header-inner #quick li ul li a.locking_add, #header #header-inner #quick li ul li a.locking_add:hover {
527 527 background-image: url("../images/icons/lock_add.png");
528 528 }
529 529
530 530 #header #header-inner #quick li ul li a.locking_del, #header #header-inner #quick li ul li a.locking_del:hover {
531 531 background-image: url("../images/icons/lock_delete.png");
532 532 }
533 533
534 534 #header #header-inner #quick li ul li a.pull_request, #header #header-inner #quick li ul li a.pull_request:hover {
535 535 background-image: url("../images/icons/arrow_join.png") ;
536 536 }
537 537
538 538 #header #header-inner #quick li ul li a.compare_request, #header #header-inner #quick li ul li a.compare_request:hover {
539 539 background-image: url("../images/icons/arrow_inout.png");
540 540 }
541 541
542 542 #header #header-inner #quick li ul li a.search, #header #header-inner #quick li ul li a.search:hover {
543 543 background-image: url("../images/icons/search_16.png");
544 544 }
545 545
546 546 #header #header-inner #quick li ul li a.shortlog, #header #header-inner #quick li ul li a.shortlog:hover {
547 547 background-image: url("../images/icons/clock_16.png");
548 548 }
549 549
550 550 #header #header-inner #quick li ul li a.delete, #header #header-inner #quick li ul li a.delete:hover {
551 551 background-image: url("../images/icons/delete.png");
552 552 }
553 553
554 554 #header #header-inner #quick li ul li a.branches, #header #header-inner #quick li ul li a.branches:hover {
555 555 background-image: url("../images/icons/arrow_branch.png");
556 556 }
557 557
558 558 #header #header-inner #quick li ul li a.tags,
559 559 #header #header-inner #quick li ul li a.tags:hover {
560 560 background: #FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
561 561 width: 167px;
562 562 margin: 0;
563 563 padding: 12px 9px 7px 24px;
564 564 }
565 565
566 566 #header #header-inner #quick li ul li a.bookmarks,
567 567 #header #header-inner #quick li ul li a.bookmarks:hover {
568 568 background: #FFF url("../images/icons/tag_green.png") no-repeat 4px 9px;
569 569 width: 167px;
570 570 margin: 0;
571 571 padding: 12px 9px 7px 24px;
572 572 }
573 573
574 574 #header #header-inner #quick li ul li a.admin,
575 575 #header #header-inner #quick li ul li a.admin:hover {
576 576 background: #FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
577 577 width: 167px;
578 578 margin: 0;
579 579 padding: 12px 9px 7px 24px;
580 580 }
581 581
582 582 .groups_breadcrumbs a {
583 583 color: #fff;
584 584 }
585 585
586 586 .groups_breadcrumbs a:hover {
587 587 color: #bfe3ff;
588 588 text-decoration: none;
589 589 }
590 590
591 591 td.quick_repo_menu {
592 592 background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important;
593 593 cursor: pointer;
594 594 width: 8px;
595 595 border: 1px solid transparent;
596 596 }
597 597
598 598 td.quick_repo_menu.active {
599 599 background: url("../images/dt-arrow-dn.png") no-repeat scroll 5px 50% #FFFFFF !important;
600 600 border: 1px solid #003367;
601 601 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
602 602 cursor: pointer;
603 603 }
604 604
605 605 td.quick_repo_menu .menu_items {
606 606 margin-top: 10px;
607 607 margin-left: -6px;
608 608 width: 150px;
609 609 position: absolute;
610 610 background-color: #FFF;
611 611 background: none repeat scroll 0 0 #FFFFFF;
612 612 border-color: #003367 #666666 #666666;
613 613 border-right: 1px solid #666666;
614 614 border-style: solid;
615 615 border-width: 1px;
616 616 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
617 617 border-top-style: none;
618 618 }
619 619
620 620 td.quick_repo_menu .menu_items li {
621 621 padding: 0 !important;
622 622 }
623 623
624 624 td.quick_repo_menu .menu_items a {
625 625 display: block;
626 626 padding: 4px 12px 4px 8px;
627 627 }
628 628
629 629 td.quick_repo_menu .menu_items a:hover {
630 630 background-color: #EEE;
631 631 text-decoration: none;
632 632 }
633 633
634 634 td.quick_repo_menu .menu_items .icon img {
635 635 margin-bottom: -2px;
636 636 }
637 637
638 638 td.quick_repo_menu .menu_items.hidden {
639 639 display: none;
640 640 }
641 641
642 642 .yui-dt-first th {
643 643 text-align: left;
644 644 }
645 645
646 646 /*
647 647 Copyright (c) 2011, Yahoo! Inc. All rights reserved.
648 648 Code licensed under the BSD License:
649 649 http://developer.yahoo.com/yui/license.html
650 650 version: 2.9.0
651 651 */
652 652 .yui-skin-sam .yui-dt-mask {
653 653 position: absolute;
654 654 z-index: 9500;
655 655 }
656 656 .yui-dt-tmp {
657 657 position: absolute;
658 658 left: -9000px;
659 659 }
660 660 .yui-dt-scrollable .yui-dt-bd { overflow: auto }
661 661 .yui-dt-scrollable .yui-dt-hd {
662 662 overflow: hidden;
663 663 position: relative;
664 664 }
665 665 .yui-dt-scrollable .yui-dt-bd thead tr,
666 666 .yui-dt-scrollable .yui-dt-bd thead th {
667 667 position: absolute;
668 668 left: -1500px;
669 669 }
670 670 .yui-dt-scrollable tbody { -moz-outline: 0 }
671 671 .yui-skin-sam thead .yui-dt-sortable { cursor: pointer }
672 672 .yui-skin-sam thead .yui-dt-draggable { cursor: move }
673 673 .yui-dt-coltarget {
674 674 position: absolute;
675 675 z-index: 999;
676 676 }
677 677 .yui-dt-hd { zoom: 1 }
678 678 th.yui-dt-resizeable .yui-dt-resizerliner { position: relative }
679 679 .yui-dt-resizer {
680 680 position: absolute;
681 681 right: 0;
682 682 bottom: 0;
683 683 height: 100%;
684 684 cursor: e-resize;
685 685 cursor: col-resize;
686 686 background-color: #CCC;
687 687 opacity: 0;
688 688 filter: alpha(opacity=0);
689 689 }
690 690 .yui-dt-resizerproxy {
691 691 visibility: hidden;
692 692 position: absolute;
693 693 z-index: 9000;
694 694 background-color: #CCC;
695 695 opacity: 0;
696 696 filter: alpha(opacity=0);
697 697 }
698 698 th.yui-dt-hidden .yui-dt-liner,
699 699 td.yui-dt-hidden .yui-dt-liner,
700 700 th.yui-dt-hidden .yui-dt-resizer { display: none }
701 701 .yui-dt-editor,
702 702 .yui-dt-editor-shim {
703 703 position: absolute;
704 704 z-index: 9000;
705 705 }
706 706 .yui-skin-sam .yui-dt table {
707 707 margin: 0;
708 708 padding: 0;
709 709 font-family: arial;
710 710 font-size: inherit;
711 711 border-collapse: separate;
712 712 *border-collapse: collapse;
713 713 border-spacing: 0;
714 714 border: 1px solid #7f7f7f;
715 715 }
716 716 .yui-skin-sam .yui-dt thead { border-spacing: 0 }
717 717 .yui-skin-sam .yui-dt caption {
718 718 color: #000;
719 719 font-size: 85%;
720 720 font-weight: normal;
721 721 font-style: italic;
722 722 line-height: 1;
723 723 padding: 1em 0;
724 724 text-align: center;
725 725 }
726 726 .yui-skin-sam .yui-dt th { background: #d8d8da url(../images/sprite.png) repeat-x 0 0 }
727 727 .yui-skin-sam .yui-dt th,
728 728 .yui-skin-sam .yui-dt th a {
729 729 font-weight: normal;
730 730 text-decoration: none;
731 731 color: #000;
732 732 vertical-align: bottom;
733 733 }
734 734 .yui-skin-sam .yui-dt th {
735 735 margin: 0;
736 736 padding: 0;
737 737 border: 0;
738 738 border-right: 1px solid #cbcbcb;
739 739 }
740 740 .yui-skin-sam .yui-dt tr.yui-dt-first td { border-top: 1px solid #7f7f7f }
741 741 .yui-skin-sam .yui-dt th .yui-dt-liner { white-space: nowrap }
742 742 .yui-skin-sam .yui-dt-liner {
743 743 margin: 0;
744 744 padding: 0;
745 745 }
746 746 .yui-skin-sam .yui-dt-coltarget {
747 747 width: 5px;
748 748 background-color: red;
749 749 }
750 750 .yui-skin-sam .yui-dt td {
751 751 margin: 0;
752 752 padding: 0;
753 753 border: 0;
754 754 border-right: 1px solid #cbcbcb;
755 755 text-align: left;
756 756 }
757 757 .yui-skin-sam .yui-dt-list td { border-right: 0 }
758 758 .yui-skin-sam .yui-dt-resizer { width: 6px }
759 759 .yui-skin-sam .yui-dt-mask {
760 760 background-color: #000;
761 761 opacity: .25;
762 762 filter: alpha(opacity=25);
763 763 }
764 764 .yui-skin-sam .yui-dt-message { background-color: #FFF }
765 765 .yui-skin-sam .yui-dt-scrollable table { border: 0 }
766 766 .yui-skin-sam .yui-dt-scrollable .yui-dt-hd {
767 767 border-left: 1px solid #7f7f7f;
768 768 border-top: 1px solid #7f7f7f;
769 769 border-right: 1px solid #7f7f7f;
770 770 }
771 771 .yui-skin-sam .yui-dt-scrollable .yui-dt-bd {
772 772 border-left: 1px solid #7f7f7f;
773 773 border-bottom: 1px solid #7f7f7f;
774 774 border-right: 1px solid #7f7f7f;
775 775 background-color: #FFF;
776 776 }
777 777 .yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td { border-bottom: 1px solid #7f7f7f }
778 778 .yui-skin-sam th.yui-dt-asc,
779 779 .yui-skin-sam th.yui-dt-desc { background: url(../images/sprite.png) repeat-x 0 -100px }
780 780 .yui-skin-sam th.yui-dt-sortable .yui-dt-label { margin-right: 10px }
781 781 .yui-skin-sam th.yui-dt-asc .yui-dt-liner { background: url(../images/dt-arrow-up.png) no-repeat right }
782 782 .yui-skin-sam th.yui-dt-desc .yui-dt-liner { background: url(../images/dt-arrow-dn.png) no-repeat right }
783 783 tbody .yui-dt-editable { cursor: pointer }
784 784 .yui-dt-editor {
785 785 text-align: left;
786 786 background-color: #f2f2f2;
787 787 border: 1px solid #808080;
788 788 padding: 6px;
789 789 }
790 790 .yui-dt-editor label {
791 791 padding-left: 4px;
792 792 padding-right: 6px;
793 793 }
794 794 .yui-dt-editor .yui-dt-button {
795 795 padding-top: 6px;
796 796 text-align: right;
797 797 }
798 798 .yui-dt-editor .yui-dt-button button {
799 799 background: url(../images/sprite.png) repeat-x 0 0;
800 800 border: 1px solid #999;
801 801 width: 4em;
802 802 height: 1.8em;
803 803 margin-left: 6px;
804 804 }
805 805 .yui-dt-editor .yui-dt-button button.yui-dt-default {
806 806 background: url(../images/sprite.png) repeat-x 0 -1400px;
807 807 background-color: #5584e0;
808 808 border: 1px solid #304369;
809 809 color: #FFF;
810 810 }
811 811 .yui-dt-editor .yui-dt-button button:hover {
812 812 background: url(../images/sprite.png) repeat-x 0 -1300px;
813 813 color: #000;
814 814 }
815 815 .yui-dt-editor .yui-dt-button button:active {
816 816 background: url(../images/sprite.png) repeat-x 0 -1700px;
817 817 color: #000;
818 818 }
819 819 .yui-skin-sam tr.yui-dt-even { background-color: #FFF }
820 820 .yui-skin-sam tr.yui-dt-odd { background-color: #edf5ff }
821 821 .yui-skin-sam tr.yui-dt-even td.yui-dt-asc,
822 822 .yui-skin-sam tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
823 823 .yui-skin-sam tr.yui-dt-odd td.yui-dt-asc,
824 824 .yui-skin-sam tr.yui-dt-odd td.yui-dt-desc { background-color: #dbeaff }
825 825 .yui-skin-sam .yui-dt-list tr.yui-dt-even { background-color: #FFF }
826 826 .yui-skin-sam .yui-dt-list tr.yui-dt-odd { background-color: #FFF }
827 827 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,
828 828 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
829 829 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,
830 830 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc { background-color: #edf5ff }
831 831 .yui-skin-sam th.yui-dt-highlighted,
832 832 .yui-skin-sam th.yui-dt-highlighted a { background-color: #b2d2ff }
833 833 .yui-skin-sam tr.yui-dt-highlighted,
834 834 .yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,
835 835 .yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,
836 836 .yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,
837 837 .yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted {
838 838 cursor: pointer;
839 839 background-color: #b2d2ff;
840 840 }
841 841 .yui-skin-sam .yui-dt-list th.yui-dt-highlighted,
842 842 .yui-skin-sam .yui-dt-list th.yui-dt-highlighted a { background-color: #b2d2ff }
843 843 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,
844 844 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,
845 845 .yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,
846 846 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,
847 847 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted {
848 848 cursor: pointer;
849 849 background-color: #b2d2ff;
850 850 }
851 851 .yui-skin-sam th.yui-dt-selected,
852 852 .yui-skin-sam th.yui-dt-selected a { background-color: #446cd7 }
853 853 .yui-skin-sam tr.yui-dt-selected td,
854 854 .yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,
855 855 .yui-skin-sam tr.yui-dt-selected td.yui-dt-desc {
856 856 background-color: #426fd9;
857 857 color: #FFF;
858 858 }
859 859 .yui-skin-sam tr.yui-dt-even td.yui-dt-selected,
860 860 .yui-skin-sam tr.yui-dt-odd td.yui-dt-selected {
861 861 background-color: #446cd7;
862 862 color: #FFF;
863 863 }
864 864 .yui-skin-sam .yui-dt-list th.yui-dt-selected,
865 865 .yui-skin-sam .yui-dt-list th.yui-dt-selected a { background-color: #446cd7 }
866 866 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td,
867 867 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,
868 868 .yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc {
869 869 background-color: #426fd9;
870 870 color: #FFF;
871 871 }
872 872 .yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,
873 873 .yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected {
874 874 background-color: #446cd7;
875 875 color: #FFF;
876 876 }
877 877 .yui-skin-sam .yui-dt-paginator {
878 878 display: block;
879 879 margin: 6px 0;
880 880 white-space: nowrap;
881 881 }
882 882 .yui-skin-sam .yui-dt-paginator .yui-dt-first,
883 883 .yui-skin-sam .yui-dt-paginator .yui-dt-last,
884 884 .yui-skin-sam .yui-dt-paginator .yui-dt-selected { padding: 2px 6px }
885 885 .yui-skin-sam .yui-dt-paginator a.yui-dt-first,
886 886 .yui-skin-sam .yui-dt-paginator a.yui-dt-last { text-decoration: none }
887 887 .yui-skin-sam .yui-dt-paginator .yui-dt-previous,
888 888 .yui-skin-sam .yui-dt-paginator .yui-dt-next { display: none }
889 889 .yui-skin-sam a.yui-dt-page {
890 890 border: 1px solid #cbcbcb;
891 891 padding: 2px 6px;
892 892 text-decoration: none;
893 893 background-color: #fff;
894 894 }
895 895 .yui-skin-sam .yui-dt-selected {
896 896 border: 1px solid #fff;
897 897 background-color: #fff;
898 898 }
899 899
900 900 #content #left {
901 901 left: 0;
902 902 width: 280px;
903 903 position: absolute;
904 904 }
905 905
906 906 #content #right {
907 907 margin: 0 60px 10px 290px;
908 908 }
909 909
910 910 #content div.box {
911 911 clear: both;
912 912 background: #fff;
913 913 margin: 0 0 10px;
914 914 padding: 0 0 10px;
915 915 -webkit-border-radius: 4px 4px 4px 4px;
916 916 -khtml-border-radius: 4px 4px 4px 4px;
917 917 border-radius: 4px 4px 4px 4px;
918 918 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
919 919 }
920 920
921 921 #content div.box-left {
922 922 width: 49%;
923 923 clear: none;
924 924 float: left;
925 925 margin: 0 0 10px;
926 926 }
927 927
928 928 #content div.box-right {
929 929 width: 49%;
930 930 clear: none;
931 931 float: right;
932 932 margin: 0 0 10px;
933 933 }
934 934
935 935 #content div.box div.title {
936 936 clear: both;
937 937 overflow: hidden;
938 938 background-color: #003B76;
939 939 background-repeat: repeat-x;
940 940 background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
941 941 background-image: -moz-linear-gradient(top, #003b76, #00376e);
942 942 background-image: -ms-linear-gradient(top, #003b76, #00376e);
943 943 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
944 944 background-image: -webkit-linear-gradient(top, #003b76, #00376e);
945 945 background-image: -o-linear-gradient(top, #003b76, #00376e);
946 946 background-image: linear-gradient(to bottom, #003b76, #00376e);
947 947 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 );
948 948 margin: 0 0 20px;
949 949 padding: 0;
950 950 border-radius: 4px 4px 0 0;
951 951 }
952 952
953 953 #content div.box div.title h5 {
954 954 float: left;
955 955 border: none;
956 956 color: #fff;
957 957 text-transform: uppercase;
958 958 margin: 0;
959 959 padding: 11px 0 11px 10px;
960 960 }
961 961
962 962 #content div.box div.title .link-white {
963 963 color: #FFFFFF;
964 964 }
965 965
966 966 #content div.box div.title .link-white.current {
967 967 color: #BFE3FF;
968 968 }
969 969
970 970 #content div.box div.title ul.links li {
971 971 list-style: none;
972 972 float: left;
973 973 margin: 0;
974 974 padding: 0;
975 975 }
976 976
977 977 #content div.box div.title ul.links li a {
978 978 border-left: 1px solid #316293;
979 979 color: #FFFFFF;
980 980 display: block;
981 981 float: left;
982 982 font-size: 13px;
983 983 font-weight: 700;
984 984 height: 1%;
985 985 margin: 0;
986 986 padding: 11px 22px 12px;
987 987 text-decoration: none;
988 988 }
989 989
990 990 #content div.box h1, #content div.box h2, #content div.box h3, #content div.box h4, #content div.box h5, #content div.box h6,
991 991 #content div.box div.h1, #content div.box div.h2, #content div.box div.h3, #content div.box div.h4, #content div.box div.h5, #content div.box div.h6 {
992 992 clear: both;
993 993 overflow: hidden;
994 994 border-bottom: 1px solid #DDD;
995 995 margin: 10px 20px;
996 996 padding: 0 0 15px;
997 997 }
998 998
999 999 #content div.box p {
1000 1000 color: #5f5f5f;
1001 1001 font-size: 12px;
1002 1002 line-height: 150%;
1003 1003 margin: 0 24px 10px;
1004 1004 padding: 0;
1005 1005 }
1006 1006
1007 1007 #content div.box blockquote {
1008 1008 border-left: 4px solid #DDD;
1009 1009 color: #5f5f5f;
1010 1010 font-size: 11px;
1011 1011 line-height: 150%;
1012 1012 margin: 0 34px;
1013 1013 padding: 0 0 0 14px;
1014 1014 }
1015 1015
1016 1016 #content div.box blockquote p {
1017 1017 margin: 10px 0;
1018 1018 padding: 0;
1019 1019 }
1020 1020
1021 1021 #content div.box dl {
1022 1022 margin: 10px 0px;
1023 1023 }
1024 1024
1025 1025 #content div.box dt {
1026 1026 font-size: 12px;
1027 1027 margin: 0;
1028 1028 }
1029 1029
1030 1030 #content div.box dd {
1031 1031 font-size: 12px;
1032 1032 margin: 0;
1033 1033 padding: 8px 0 8px 15px;
1034 1034 }
1035 1035
1036 1036 #content div.box li {
1037 1037 font-size: 12px;
1038 1038 padding: 4px 0;
1039 1039 }
1040 1040
1041 1041 #content div.box ul.disc, #content div.box ul.circle {
1042 1042 margin: 10px 24px 10px 38px;
1043 1043 }
1044 1044
1045 1045 #content div.box ul.square {
1046 1046 margin: 10px 24px 10px 40px;
1047 1047 }
1048 1048
1049 1049 #content div.box img.left {
1050 1050 border: none;
1051 1051 float: left;
1052 1052 margin: 10px 10px 10px 0;
1053 1053 }
1054 1054
1055 1055 #content div.box img.right {
1056 1056 border: none;
1057 1057 float: right;
1058 1058 margin: 10px 0 10px 10px;
1059 1059 }
1060 1060
1061 1061 #content div.box div.messages {
1062 1062 clear: both;
1063 1063 overflow: hidden;
1064 1064 margin: 0 20px;
1065 1065 padding: 0;
1066 1066 }
1067 1067
1068 1068 #content div.box div.message {
1069 1069 clear: both;
1070 1070 overflow: hidden;
1071 1071 margin: 0;
1072 1072 padding: 5px 0;
1073 1073 white-space: pre-wrap;
1074 1074 }
1075 1075 #content div.box div.expand {
1076 1076 width: 110%;
1077 1077 height: 14px;
1078 1078 font-size: 10px;
1079 1079 text-align: center;
1080 1080 cursor: pointer;
1081 1081 color: #666;
1082 1082
1083 1083 background: -webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,rgba(255,255,255,0)),color-stop(100%,rgba(64,96,128,0.1)));
1084 1084 background: -webkit-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
1085 1085 background: -moz-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
1086 1086 background: -o-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
1087 1087 background: -ms-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
1088 1088 background: linear-gradient(to bottom,rgba(255,255,255,0),rgba(64,96,128,0.1));
1089 1089
1090 1090 display: none;
1091 1091 overflow: hidden;
1092 1092 }
1093 1093 #content div.box div.expand .expandtext {
1094 1094 background-color: #ffffff;
1095 1095 padding: 2px;
1096 1096 border-radius: 2px;
1097 1097 }
1098 1098
1099 1099 #content div.box div.message a {
1100 1100 font-weight: 400 !important;
1101 1101 }
1102 1102
1103 1103 #content div.box div.message div.image {
1104 1104 float: left;
1105 1105 margin: 9px 0 0 5px;
1106 1106 padding: 6px;
1107 1107 }
1108 1108
1109 1109 #content div.box div.message div.image img {
1110 1110 vertical-align: middle;
1111 1111 margin: 0;
1112 1112 }
1113 1113
1114 1114 #content div.box div.message div.text {
1115 1115 float: left;
1116 1116 margin: 0;
1117 1117 padding: 9px 6px;
1118 1118 }
1119 1119
1120 1120 #content div.box div.message div.dismiss a {
1121 1121 height: 16px;
1122 1122 width: 16px;
1123 1123 display: block;
1124 1124 background: url("../images/icons/cross.png") no-repeat;
1125 1125 margin: 15px 14px 0 0;
1126 1126 padding: 0;
1127 1127 }
1128 1128
1129 1129 #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 {
1130 1130 border: none;
1131 1131 margin: 0;
1132 1132 padding: 0;
1133 1133 }
1134 1134
1135 1135 #content div.box div.message div.text span {
1136 1136 height: 1%;
1137 1137 display: block;
1138 1138 margin: 0;
1139 1139 padding: 5px 0 0;
1140 1140 }
1141 1141
1142 1142 #content div.box div.message-error {
1143 1143 height: 1%;
1144 1144 clear: both;
1145 1145 overflow: hidden;
1146 1146 background: #FBE3E4;
1147 1147 border: 1px solid #FBC2C4;
1148 1148 color: #860006;
1149 1149 }
1150 1150
1151 1151 #content div.box div.message-error h6 {
1152 1152 color: #860006;
1153 1153 }
1154 1154
1155 1155 #content div.box div.message-warning {
1156 1156 height: 1%;
1157 1157 clear: both;
1158 1158 overflow: hidden;
1159 1159 background: #FFF6BF;
1160 1160 border: 1px solid #FFD324;
1161 1161 color: #5f5200;
1162 1162 }
1163 1163
1164 1164 #content div.box div.message-warning h6 {
1165 1165 color: #5f5200;
1166 1166 }
1167 1167
1168 1168 #content div.box div.message-notice {
1169 1169 height: 1%;
1170 1170 clear: both;
1171 1171 overflow: hidden;
1172 1172 background: #8FBDE0;
1173 1173 border: 1px solid #6BACDE;
1174 1174 color: #003863;
1175 1175 }
1176 1176
1177 1177 #content div.box div.message-notice h6 {
1178 1178 color: #003863;
1179 1179 }
1180 1180
1181 1181 #content div.box div.message-success {
1182 1182 height: 1%;
1183 1183 clear: both;
1184 1184 overflow: hidden;
1185 1185 background: #E6EFC2;
1186 1186 border: 1px solid #C6D880;
1187 1187 color: #4e6100;
1188 1188 }
1189 1189
1190 1190 #content div.box div.message-success h6 {
1191 1191 color: #4e6100;
1192 1192 }
1193 1193
1194 1194 #content div.box div.form div.fields div.field {
1195 1195 height: 1%;
1196 1196 min-height: 12px;
1197 1197 border-bottom: 1px solid #DDD;
1198 1198 clear: both;
1199 1199 margin: 0;
1200 1200 padding: 10px 0;
1201 1201 }
1202 1202
1203 1203 #content div.box div.form div.fields div.field-first {
1204 1204 padding: 0 0 10px;
1205 1205 }
1206 1206
1207 1207 #content div.box div.form div.fields div.field-noborder {
1208 1208 border-bottom: 0 !important;
1209 1209 }
1210 1210
1211 1211 #content div.box div.form div.fields div.field span.error-message {
1212 1212 height: 1%;
1213 1213 display: inline-block;
1214 1214 color: red;
1215 1215 margin: 8px 0 0 4px;
1216 1216 padding: 0;
1217 1217 }
1218 1218
1219 1219 #content div.box div.form div.fields div.field span.success {
1220 1220 height: 1%;
1221 1221 display: block;
1222 1222 color: #316309;
1223 1223 margin: 8px 0 0;
1224 1224 padding: 0;
1225 1225 }
1226 1226
1227 1227 #content div.box div.form div.fields div.field div.label {
1228 1228 left: 70px;
1229 1229 width: 155px;
1230 1230 position: absolute;
1231 1231 margin: 0;
1232 1232 padding: 5px 0 0 0px;
1233 1233 }
1234 1234
1235 1235 #content div.box div.form div.fields div.field div.label-summary {
1236 1236 left: 30px;
1237 1237 width: 155px;
1238 1238 position: absolute;
1239 1239 margin: 0;
1240 1240 padding: 0px 0 0 0px;
1241 1241 }
1242 1242
1243 1243 #content div.box-left div.form div.fields div.field div.label,
1244 1244 #content div.box-right div.form div.fields div.field div.label,
1245 1245 #content div.box-left div.form div.fields div.field div.label,
1246 1246 #content div.box-left div.form div.fields div.field div.label-summary,
1247 1247 #content div.box-right div.form div.fields div.field div.label-summary,
1248 1248 #content div.box-left div.form div.fields div.field div.label-summary {
1249 1249 clear: both;
1250 1250 overflow: hidden;
1251 1251 left: 0;
1252 1252 width: auto;
1253 1253 position: relative;
1254 1254 margin: 0;
1255 1255 padding: 0 0 8px;
1256 1256 }
1257 1257
1258 1258 #content div.box div.form div.fields div.field div.label-select {
1259 1259 padding: 5px 0 0 5px;
1260 1260 }
1261 1261
1262 1262 #content div.box-left div.form div.fields div.field div.label-select,
1263 1263 #content div.box-right div.form div.fields div.field div.label-select {
1264 1264 padding: 0 0 8px;
1265 1265 }
1266 1266
1267 1267 #content div.box-left div.form div.fields div.field div.label-textarea,
1268 1268 #content div.box-right div.form div.fields div.field div.label-textarea {
1269 1269 padding: 0 0 8px !important;
1270 1270 }
1271 1271
1272 1272 #content div.box div.form div.fields div.field div.label label, div.label label {
1273 1273 color: #393939;
1274 1274 font-weight: 700;
1275 1275 }
1276 1276 #content div.box div.form div.fields div.field div.label label, div.label-summary label {
1277 1277 color: #393939;
1278 1278 font-weight: 700;
1279 1279 }
1280 1280 #content div.box div.form div.fields div.field div.input {
1281 1281 margin: 0 0 0 200px;
1282 1282 }
1283 1283
1284 1284 #content div.box div.form div.fields div.field div.input.summary {
1285 1285 margin: 0 0 0 110px;
1286 1286 }
1287 1287 #content div.box div.form div.fields div.field div.input.summary-short {
1288 1288 margin: 0 0 0 110px;
1289 1289 }
1290 1290 #content div.box div.form div.fields div.field div.file {
1291 1291 margin: 0 0 0 200px;
1292 1292 }
1293 1293
1294 1294 #content div.box-left div.form div.fields div.field div.input, #content div.box-right div.form div.fields div.field div.input {
1295 1295 margin: 0 0 0 0px;
1296 1296 }
1297 1297
1298 1298 #content div.box div.form div.fields div.field div.input input,
1299 1299 .reviewer_ac input {
1300 1300 background: #FFF;
1301 1301 border-top: 1px solid #b3b3b3;
1302 1302 border-left: 1px solid #b3b3b3;
1303 1303 border-right: 1px solid #eaeaea;
1304 1304 border-bottom: 1px solid #eaeaea;
1305 1305 color: #000;
1306 1306 font-size: 11px;
1307 1307 margin: 0;
1308 1308 padding: 7px 7px 6px;
1309 1309 }
1310 1310
1311 1311 #content div.box div.form div.fields div.field div.input input#clone_url,
1312 1312 #content div.box div.form div.fields div.field div.input input#clone_url_id
1313 1313 {
1314 1314 font-size: 16px;
1315 1315 padding: 2px;
1316 1316 }
1317 1317
1318 1318 #content div.box div.form div.fields div.field div.file input {
1319 1319 background: none repeat scroll 0 0 #FFFFFF;
1320 1320 border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
1321 1321 border-style: solid;
1322 1322 border-width: 1px;
1323 1323 color: #000000;
1324 1324 font-size: 11px;
1325 1325 margin: 0;
1326 1326 padding: 7px 7px 6px;
1327 1327 }
1328 1328
1329 1329 input.disabled {
1330 1330 background-color: #F5F5F5 !important;
1331 1331 }
1332 1332 #content div.box div.form div.fields div.field div.input input.small {
1333 1333 width: 30%;
1334 1334 }
1335 1335
1336 1336 #content div.box div.form div.fields div.field div.input input.medium {
1337 1337 width: 55%;
1338 1338 }
1339 1339
1340 1340 #content div.box div.form div.fields div.field div.input input.large {
1341 1341 width: 85%;
1342 1342 }
1343 1343
1344 1344 #content div.box div.form div.fields div.field div.input input.date {
1345 1345 width: 177px;
1346 1346 }
1347 1347
1348 1348 #content div.box div.form div.fields div.field div.input input.button {
1349 1349 background: #D4D0C8;
1350 1350 border-top: 1px solid #FFF;
1351 1351 border-left: 1px solid #FFF;
1352 1352 border-right: 1px solid #404040;
1353 1353 border-bottom: 1px solid #404040;
1354 1354 color: #000;
1355 1355 margin: 0;
1356 1356 padding: 4px 8px;
1357 1357 }
1358 1358
1359 1359 #content div.box div.form div.fields div.field div.textarea {
1360 1360 border-top: 1px solid #b3b3b3;
1361 1361 border-left: 1px solid #b3b3b3;
1362 1362 border-right: 1px solid #eaeaea;
1363 1363 border-bottom: 1px solid #eaeaea;
1364 1364 margin: 0 0 0 200px;
1365 1365 padding: 10px;
1366 1366 }
1367 1367
1368 1368 #content div.box div.form div.fields div.field div.textarea-editor {
1369 1369 border: 1px solid #ddd;
1370 1370 padding: 0;
1371 1371 }
1372 1372
1373 1373 #content div.box div.form div.fields div.field div.textarea textarea {
1374 1374 width: 100%;
1375 1375 height: 220px;
1376 1376 overflow: hidden;
1377 1377 background: #FFF;
1378 1378 color: #000;
1379 1379 font-size: 11px;
1380 1380 outline: none;
1381 1381 border-width: 0;
1382 1382 margin: 0;
1383 1383 padding: 0;
1384 1384 }
1385 1385
1386 1386 #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 {
1387 1387 width: 100%;
1388 1388 height: 100px;
1389 1389 }
1390 1390
1391 1391 #content div.box div.form div.fields div.field div.textarea table {
1392 1392 width: 100%;
1393 1393 border: none;
1394 1394 margin: 0;
1395 1395 padding: 0;
1396 1396 }
1397 1397
1398 1398 #content div.box div.form div.fields div.field div.textarea table td {
1399 1399 background: #DDD;
1400 1400 border: none;
1401 1401 padding: 0;
1402 1402 }
1403 1403
1404 1404 #content div.box div.form div.fields div.field div.textarea table td table {
1405 1405 width: auto;
1406 1406 border: none;
1407 1407 margin: 0;
1408 1408 padding: 0;
1409 1409 }
1410 1410
1411 1411 #content div.box div.form div.fields div.field div.textarea table td table td {
1412 1412 font-size: 11px;
1413 1413 padding: 5px 5px 5px 0;
1414 1414 }
1415 1415
1416 1416 #content div.box div.form div.fields div.field input[type=text]:focus,
1417 1417 #content div.box div.form div.fields div.field input[type=password]:focus,
1418 1418 #content div.box div.form div.fields div.field input[type=file]:focus,
1419 1419 #content div.box div.form div.fields div.field textarea:focus,
1420 1420 #content div.box div.form div.fields div.field select:focus,
1421 1421 .reviewer_ac input:focus {
1422 1422 background: #f6f6f6;
1423 1423 border-color: #666;
1424 1424 }
1425 1425
1426 1426 .reviewer_ac {
1427 1427 padding: 10px
1428 1428 }
1429 1429
1430 1430 div.form div.fields div.field div.button {
1431 1431 margin: 0;
1432 1432 padding: 0 0 0 8px;
1433 1433 }
1434 1434 #content div.box table.noborder {
1435 1435 border: 1px solid transparent;
1436 1436 }
1437 1437
1438 1438 #content div.box table {
1439 1439 width: 100%;
1440 1440 border-collapse: separate;
1441 1441 margin: 0;
1442 1442 padding: 0;
1443 1443 border: 1px solid #eee;
1444 1444 -webkit-border-radius: 4px;
1445 1445 border-radius: 4px;
1446 1446 }
1447 1447
1448 1448 #content div.box table th {
1449 1449 background: #eee;
1450 1450 border-bottom: 1px solid #ddd;
1451 1451 padding: 5px 0px 5px 5px;
1452 1452 text-align: left;
1453 1453 }
1454 1454
1455 1455 #content div.box table th.left {
1456 1456 text-align: left;
1457 1457 }
1458 1458
1459 1459 #content div.box table th.right {
1460 1460 text-align: right;
1461 1461 }
1462 1462
1463 1463 #content div.box table th.center {
1464 1464 text-align: center;
1465 1465 }
1466 1466
1467 1467 #content div.box table th.selected {
1468 1468 vertical-align: middle;
1469 1469 padding: 0;
1470 1470 }
1471 1471
1472 1472 #content div.box table td {
1473 1473 background: #fff;
1474 1474 border-bottom: 1px solid #cdcdcd;
1475 1475 vertical-align: middle;
1476 1476 padding: 5px;
1477 1477 }
1478 1478
1479 1479 #content div.box table tr.selected td {
1480 1480 background: #FFC;
1481 1481 }
1482 1482
1483 1483 #content div.box table td.selected {
1484 1484 width: 3%;
1485 1485 text-align: center;
1486 1486 vertical-align: middle;
1487 1487 padding: 0;
1488 1488 }
1489 1489
1490 1490 #content div.box table td.action {
1491 1491 width: 45%;
1492 1492 text-align: left;
1493 1493 }
1494 1494
1495 1495 #content div.box table td.date {
1496 1496 width: 33%;
1497 1497 text-align: center;
1498 1498 }
1499 1499
1500 1500 #content div.box div.action {
1501 1501 float: right;
1502 1502 background: #FFF;
1503 1503 text-align: right;
1504 1504 margin: 10px 0 0;
1505 1505 padding: 0;
1506 1506 }
1507 1507
1508 1508 #content div.box div.action select {
1509 1509 font-size: 11px;
1510 1510 margin: 0;
1511 1511 }
1512 1512
1513 1513 #content div.box div.action .ui-selectmenu {
1514 1514 margin: 0;
1515 1515 padding: 0;
1516 1516 }
1517 1517
1518 1518 #content div.box div.pagination {
1519 1519 height: 1%;
1520 1520 clear: both;
1521 1521 overflow: hidden;
1522 1522 margin: 10px 0 0;
1523 1523 padding: 0;
1524 1524 }
1525 1525
1526 1526 #content div.box div.pagination ul.pager {
1527 1527 float: right;
1528 1528 text-align: right;
1529 1529 margin: 0;
1530 1530 padding: 0;
1531 1531 }
1532 1532
1533 1533 #content div.box div.pagination ul.pager li {
1534 1534 height: 1%;
1535 1535 float: left;
1536 1536 list-style: none;
1537 1537 background: #ebebeb url("../images/pager.png") repeat-x;
1538 1538 border-top: 1px solid #dedede;
1539 1539 border-left: 1px solid #cfcfcf;
1540 1540 border-right: 1px solid #c4c4c4;
1541 1541 border-bottom: 1px solid #c4c4c4;
1542 1542 color: #4A4A4A;
1543 1543 font-weight: 700;
1544 1544 margin: 0 0 0 4px;
1545 1545 padding: 0;
1546 1546 }
1547 1547
1548 1548 #content div.box div.pagination ul.pager li.separator {
1549 1549 padding: 6px;
1550 1550 }
1551 1551
1552 1552 #content div.box div.pagination ul.pager li.current {
1553 1553 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1554 1554 border-top: 1px solid #ccc;
1555 1555 border-left: 1px solid #bebebe;
1556 1556 border-right: 1px solid #b1b1b1;
1557 1557 border-bottom: 1px solid #afafaf;
1558 1558 color: #515151;
1559 1559 padding: 6px;
1560 1560 }
1561 1561
1562 1562 #content div.box div.pagination ul.pager li a {
1563 1563 height: 1%;
1564 1564 display: block;
1565 1565 float: left;
1566 1566 color: #515151;
1567 1567 text-decoration: none;
1568 1568 margin: 0;
1569 1569 padding: 6px;
1570 1570 }
1571 1571
1572 1572 #content div.box div.pagination ul.pager li a:hover, #content div.box div.pagination ul.pager li a:active {
1573 1573 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1574 1574 border-top: 1px solid #ccc;
1575 1575 border-left: 1px solid #bebebe;
1576 1576 border-right: 1px solid #b1b1b1;
1577 1577 border-bottom: 1px solid #afafaf;
1578 1578 margin: -1px;
1579 1579 }
1580 1580
1581 1581 #content div.box div.pagination-wh {
1582 1582 height: 1%;
1583 1583 clear: both;
1584 1584 overflow: hidden;
1585 1585 text-align: right;
1586 1586 margin: 10px 0 0;
1587 1587 padding: 0;
1588 1588 }
1589 1589
1590 1590 #content div.box div.pagination-right {
1591 1591 float: right;
1592 1592 }
1593 1593
1594 1594 #content div.box div.pagination-wh a,
1595 1595 #content div.box div.pagination-wh span.pager_dotdot,
1596 1596 #content div.box div.pagination-wh span.yui-pg-previous,
1597 1597 #content div.box div.pagination-wh span.yui-pg-last,
1598 1598 #content div.box div.pagination-wh span.yui-pg-next,
1599 1599 #content div.box div.pagination-wh span.yui-pg-first {
1600 1600 height: 1%;
1601 1601 float: left;
1602 1602 background: #ebebeb url("../images/pager.png") repeat-x;
1603 1603 border-top: 1px solid #dedede;
1604 1604 border-left: 1px solid #cfcfcf;
1605 1605 border-right: 1px solid #c4c4c4;
1606 1606 border-bottom: 1px solid #c4c4c4;
1607 1607 color: #4A4A4A;
1608 1608 font-weight: 700;
1609 1609 margin: 0 0 0 4px;
1610 1610 padding: 6px;
1611 1611 }
1612 1612
1613 1613 #content div.box div.pagination-wh span.pager_curpage {
1614 1614 height: 1%;
1615 1615 float: left;
1616 1616 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1617 1617 border-top: 1px solid #ccc;
1618 1618 border-left: 1px solid #bebebe;
1619 1619 border-right: 1px solid #b1b1b1;
1620 1620 border-bottom: 1px solid #afafaf;
1621 1621 color: #515151;
1622 1622 font-weight: 700;
1623 1623 margin: 0 0 0 4px;
1624 1624 padding: 6px;
1625 1625 }
1626 1626
1627 1627 #content div.box div.pagination-wh a:hover, #content div.box div.pagination-wh a:active {
1628 1628 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1629 1629 border-top: 1px solid #ccc;
1630 1630 border-left: 1px solid #bebebe;
1631 1631 border-right: 1px solid #b1b1b1;
1632 1632 border-bottom: 1px solid #afafaf;
1633 1633 text-decoration: none;
1634 1634 }
1635 1635
1636 1636 #content div.box div.traffic div.legend {
1637 1637 clear: both;
1638 1638 overflow: hidden;
1639 1639 border-bottom: 1px solid #ddd;
1640 1640 margin: 0 0 10px;
1641 1641 padding: 0 0 10px;
1642 1642 }
1643 1643
1644 1644 #content div.box div.traffic div.legend h6 {
1645 1645 float: left;
1646 1646 border: none;
1647 1647 margin: 0;
1648 1648 padding: 0;
1649 1649 }
1650 1650
1651 1651 #content div.box div.traffic div.legend li {
1652 1652 list-style: none;
1653 1653 float: left;
1654 1654 font-size: 11px;
1655 1655 margin: 0;
1656 1656 padding: 0 8px 0 4px;
1657 1657 }
1658 1658
1659 1659 #content div.box div.traffic div.legend li.visits {
1660 1660 border-left: 12px solid #edc240;
1661 1661 }
1662 1662
1663 1663 #content div.box div.traffic div.legend li.pageviews {
1664 1664 border-left: 12px solid #afd8f8;
1665 1665 }
1666 1666
1667 1667 #content div.box div.traffic table {
1668 1668 width: auto;
1669 1669 }
1670 1670
1671 1671 #content div.box div.traffic table td {
1672 1672 background: transparent;
1673 1673 border: none;
1674 1674 padding: 2px 3px 3px;
1675 1675 }
1676 1676
1677 1677 #content div.box div.traffic table td.legendLabel {
1678 1678 padding: 0 3px 2px;
1679 1679 }
1680 1680
1681 1681 #content div.box #summary {
1682 1682 margin-right: 200px;
1683 1683 }
1684 1684
1685 1685 #summary-menu-stats {
1686 1686 float: left;
1687 1687 width: 180px;
1688 1688 position: absolute;
1689 1689 top: 0;
1690 1690 right: 0;
1691 1691 }
1692 1692
1693 1693 #summary-menu-stats ul {
1694 1694 margin: 0 10px;
1695 1695 display: block;
1696 1696 background-color: #f9f9f9;
1697 1697 border: 1px solid #d1d1d1;
1698 1698 border-radius: 4px;
1699 1699 }
1700 1700
1701 1701 #content #summary-menu-stats li {
1702 1702 border-top: 1px solid #d1d1d1;
1703 1703 padding: 0;
1704 1704 }
1705 1705
1706 1706 #content #summary-menu-stats li:hover {
1707 1707 background: #f0f0f0;
1708 1708 }
1709 1709
1710 1710 #content #summary-menu-stats li:first-child {
1711 1711 border-top: none;
1712 1712 }
1713 1713
1714 1714 #summary-menu-stats a.followers { background-image: url('../images/icons/heart.png')}
1715 1715 #summary-menu-stats a.forks { background-image: url('../images/icons/arrow_divide.png')}
1716 1716 #summary-menu-stats a.settings { background-image: url('../images/icons/cog_edit.png')}
1717 1717 #summary-menu-stats a.feed { background-image: url('../images/icons/rss_16.png')}
1718 1718 #summary-menu-stats a.repo-size { background-image: url('../images/icons/server.png')}
1719 1719
1720 1720 #summary-menu-stats a {
1721 1721 display: block;
1722 1722 padding: 12px 30px;
1723 1723 background-repeat: no-repeat;
1724 1724 background-position: 10px 50%;
1725 1725 padding-right: 10px;
1726 1726 }
1727 1727
1728 1728
1729 1729 #repo_size_2 {
1730 1730 margin-left: 30px;
1731 1731 display: block;
1732 1732 padding-right: 10px;
1733 1733 padding-bottom: 7px;
1734 1734 }
1735 1735
1736 1736 #summary-menu-stats a:hover {
1737 1737 text-decoration: none;
1738 1738 }
1739 1739
1740 1740 #summary-menu-stats a span {
1741 1741 background-color: #DEDEDE;
1742 1742 color: 888 !important;
1743 1743 border-radius: 4px;
1744 1744 padding: 2px 4px;
1745 1745 font-size: 10px;
1746 1746 }
1747 1747
1748 1748 #summary .metatag {
1749 1749 display: inline-block;
1750 1750 padding: 3px 5px;
1751 1751 margin-bottom: 3px;
1752 1752 margin-right: 1px;
1753 1753 border-radius: 5px;
1754 1754 }
1755 1755
1756 1756 #content div.box #summary p {
1757 1757 margin-bottom: -5px;
1758 1758 width: 600px;
1759 1759 white-space: pre-wrap;
1760 1760 }
1761 1761
1762 1762 #content div.box #summary p:last-child {
1763 1763 margin-bottom: 9px;
1764 1764 }
1765 1765
1766 1766 #content div.box #summary p:first-of-type {
1767 1767 margin-top: 9px;
1768 1768 }
1769 1769
1770 1770 .metatag {
1771 1771 display: inline-block;
1772 1772 margin-right: 1px;
1773 1773 -webkit-border-radius: 4px 4px 4px 4px;
1774 1774 -khtml-border-radius: 4px 4px 4px 4px;
1775 1775 border-radius: 4px 4px 4px 4px;
1776 1776
1777 1777 border: solid 1px #9CF;
1778 1778 padding: 2px 3px 2px 3px !important;
1779 1779 background-color: #DEF;
1780 1780 }
1781 1781
1782 1782 .metatag[tag="dead"] {
1783 1783 background-color: #E44;
1784 1784 }
1785 1785
1786 1786 .metatag[tag="stale"] {
1787 1787 background-color: #EA4;
1788 1788 }
1789 1789
1790 1790 .metatag[tag="featured"] {
1791 1791 background-color: #AEA;
1792 1792 }
1793 1793
1794 1794 .metatag[tag="requires"] {
1795 1795 background-color: #9CF;
1796 1796 }
1797 1797
1798 1798 .metatag[tag="recommends"] {
1799 1799 background-color: #BDF;
1800 1800 }
1801 1801
1802 1802 .metatag[tag="lang"] {
1803 1803 background-color: #FAF474;
1804 1804 }
1805 1805
1806 1806 .metatag[tag="license"] {
1807 1807 border: solid 1px #9CF;
1808 1808 background-color: #DEF;
1809 1809 target-new: tab !important;
1810 1810 }
1811 1811 .metatag[tag="see"] {
1812 1812 border: solid 1px #CBD;
1813 1813 background-color: #EDF;
1814 1814 }
1815 1815
1816 1816 a.metatag[tag="license"]:hover {
1817 1817 background-color: #003367;
1818 1818 color: #FFF;
1819 1819 text-decoration: none;
1820 1820 }
1821 1821
1822 1822 #summary .desc {
1823 1823 white-space: pre;
1824 1824 width: 100%;
1825 1825 }
1826 1826
1827 1827 #summary .repo_name {
1828 1828 font-size: 1.6em;
1829 1829 font-weight: bold;
1830 1830 vertical-align: baseline;
1831 1831 clear: right
1832 1832 }
1833 1833
1834 1834 #footer {
1835 1835 clear: both;
1836 1836 overflow: hidden;
1837 1837 text-align: right;
1838 1838 margin: 0;
1839 1839 padding: 0 10px 4px;
1840 1840 margin: -10px 0 0;
1841 1841 }
1842 1842
1843 1843 #footer div#footer-inner {
1844 1844 background-color: #003B76;
1845 1845 background-repeat: repeat-x;
1846 1846 background-image: -khtml-gradient( linear, left top, left bottom, from(#003B76), to(#00376E));
1847 1847 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1848 1848 background-image: -ms-linear-gradient( top, #003b76, #00376e);
1849 1849 background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1850 1850 background-image: -webkit-linear-gradient( top, #003b76, #00376e));
1851 1851 background-image: -o-linear-gradient( top, #003b76, #00376e));
1852 1852 background-image: linear-gradient(to bottom, #003b76, #00376e);
1853 1853 filter: progid : DXImageTransform.Microsoft.gradient ( startColorstr = '#003b76', endColorstr = '#00376e', GradientType = 0);
1854 1854 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1855 1855 -webkit-border-radius: 4px 4px 4px 4px;
1856 1856 -khtml-border-radius: 4px 4px 4px 4px;
1857 1857 border-radius: 4px 4px 4px 4px;
1858 1858 }
1859 1859
1860 1860 #footer div#footer-inner p {
1861 1861 padding: 15px 25px 15px 0;
1862 1862 color: #FFF;
1863 1863 font-weight: 700;
1864 1864 }
1865 1865
1866 1866 #footer div#footer-inner .footer-link {
1867 1867 float: left;
1868 1868 padding-left: 10px;
1869 1869 }
1870 1870
1871 1871 #footer div#footer-inner .footer-link a, #footer div#footer-inner .footer-link-right a {
1872 1872 color: #FFF;
1873 1873 }
1874 1874
1875 1875 #login div.title {
1876 1876 clear: both;
1877 1877 overflow: hidden;
1878 1878 position: relative;
1879 1879 background-color: #003B76;
1880 1880 background-repeat: repeat-x;
1881 1881 background-image: -khtml-gradient( linear, left top, left bottom, from(#003B76), to(#00376E));
1882 1882 background-image: -moz-linear-gradient( top, #003b76, #00376e);
1883 1883 background-image: -ms-linear-gradient( top, #003b76, #00376e);
1884 1884 background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1885 1885 background-image: -webkit-linear-gradient( top, #003b76, #00376e));
1886 1886 background-image: -o-linear-gradient( top, #003b76, #00376e));
1887 1887 background-image: linear-gradient(to bottom, #003b76, #00376e);
1888 1888 filter: progid : DXImageTransform.Microsoft.gradient ( startColorstr = '#003b76', endColorstr = '#00376e', GradientType = 0);
1889 1889 margin: 0 auto;
1890 1890 padding: 0;
1891 1891 }
1892 1892
1893 1893 #login div.inner {
1894 1894 background: #FFF url("../images/login.png") no-repeat top left;
1895 1895 border-top: none;
1896 1896 border-bottom: none;
1897 1897 margin: 0 auto;
1898 1898 padding: 20px;
1899 1899 }
1900 1900
1901 1901 #login div.form div.fields div.field div.label {
1902 1902 width: 173px;
1903 1903 float: left;
1904 1904 text-align: right;
1905 1905 margin: 2px 10px 0 0;
1906 1906 padding: 5px 0 0 5px;
1907 1907 }
1908 1908
1909 1909 #login div.form div.fields div.field div.input input {
1910 1910 background: #FFF;
1911 1911 border-top: 1px solid #b3b3b3;
1912 1912 border-left: 1px solid #b3b3b3;
1913 1913 border-right: 1px solid #eaeaea;
1914 1914 border-bottom: 1px solid #eaeaea;
1915 1915 color: #000;
1916 1916 font-size: 11px;
1917 1917 margin: 0;
1918 1918 padding: 7px 7px 6px;
1919 1919 }
1920 1920
1921 1921 #login div.form div.fields div.buttons {
1922 1922 clear: both;
1923 1923 overflow: hidden;
1924 1924 border-top: 1px solid #DDD;
1925 1925 text-align: right;
1926 1926 margin: 0;
1927 1927 padding: 10px 0 0;
1928 1928 }
1929 1929
1930 1930 #login div.form div.links {
1931 1931 clear: both;
1932 1932 overflow: hidden;
1933 1933 margin: 10px 0 0;
1934 1934 padding: 0 0 2px;
1935 1935 }
1936 1936
1937 1937 .user-menu {
1938 1938 margin: 0px !important;
1939 1939 float: left;
1940 1940 }
1941 1941
1942 1942 .user-menu .container {
1943 1943 padding: 0px 4px 0px 4px;
1944 1944 margin: 0px 0px 0px 0px;
1945 1945 }
1946 1946
1947 1947 .user-menu .gravatar {
1948 1948 margin: 0px 0px 0px 0px;
1949 1949 cursor: pointer;
1950 1950 }
1951 1951 .user-menu .gravatar.enabled {
1952 1952 background-color: #FDF784 !important;
1953 1953 }
1954 1954 .user-menu .gravatar:hover {
1955 1955 background-color: #FDF784 !important;
1956 1956 }
1957 1957 #quick_login {
1958 1958 min-height: 80px;
1959 1959 padding: 4px;
1960 1960 position: absolute;
1961 1961 right: 0;
1962 1962 width: 278px;
1963 1963 background-color: #003B76;
1964 1964 background-repeat: repeat-x;
1965 1965 background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
1966 1966 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1967 1967 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1968 1968 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
1969 1969 background-image: -webkit-linear-gradient(top, #003b76, #00376e);
1970 1970 background-image: -o-linear-gradient(top, #003b76, #00376e);
1971 1971 background-image: linear-gradient(to bottom, #003b76, #00376e);
1972 1972 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 );
1973 1973
1974 1974 z-index: 999;
1975 1975 -webkit-border-radius: 0px 0px 4px 4px;
1976 1976 -khtml-border-radius: 0px 0px 4px 4px;
1977 1977 border-radius: 0px 0px 4px 4px;
1978 1978 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1979 1979 }
1980 1980 #quick_login h4 {
1981 1981 color: #fff;
1982 1982 padding: 5px 0px 5px 14px;
1983 1983 }
1984 1984
1985 1985 #quick_login .password_forgoten {
1986 1986 padding-right: 0px;
1987 1987 padding-top: 0px;
1988 1988 text-align: left;
1989 1989 }
1990 1990
1991 1991 #quick_login .password_forgoten a {
1992 1992 font-size: 10px;
1993 1993 color: #fff;
1994 1994 padding: 0px !important;
1995 1995 line-height: 20px !important;
1996 1996 }
1997 1997
1998 1998 #quick_login .register {
1999 1999 padding-right: 10px;
2000 2000 padding-top: 5px;
2001 2001 text-align: left;
2002 2002 }
2003 2003
2004 2004 #quick_login .register a {
2005 2005 font-size: 10px;
2006 2006 color: #fff;
2007 2007 padding: 0px !important;
2008 2008 line-height: 20px !important;
2009 2009 }
2010 2010
2011 2011 #quick_login .submit {
2012 2012 margin: -20px 0 0 0px;
2013 2013 position: absolute;
2014 2014 right: 15px;
2015 2015 }
2016 2016
2017 2017 #quick_login .links_left {
2018 2018 float: left;
2019 2019 }
2020 2020 #quick_login .links_right {
2021 2021 float: right;
2022 2022 }
2023 2023 #quick_login .full_name {
2024 2024 color: #FFFFFF;
2025 2025 font-weight: bold;
2026 2026 padding: 3px 3px 3px 6px;
2027 2027 }
2028 2028 #quick_login .big_gravatar {
2029 2029 padding: 4px 0px 0px 6px;
2030 2030 }
2031 2031 #quick_login .notifications {
2032 2032 padding: 2px 0px 0px 6px;
2033 2033 color: #FFFFFF;
2034 2034 font-weight: bold;
2035 2035 line-height: 10px !important;
2036 2036 }
2037 2037 #quick_login .notifications a,
2038 2038 #quick_login .unread a {
2039 2039 color: #FFFFFF;
2040 2040 display: block;
2041 2041 padding: 0px !important;
2042 2042 }
2043 2043 #quick_login .notifications a:hover,
2044 2044 #quick_login .unread a:hover {
2045 2045 background-color: inherit !important;
2046 2046 }
2047 2047 #quick_login .email, #quick_login .unread {
2048 2048 color: #FFFFFF;
2049 2049 padding: 3px 3px 3px 6px;
2050 2050 }
2051 2051 #quick_login .links .logout {
2052 2052 }
2053 2053
2054 2054 #quick_login div.form div.fields {
2055 2055 padding-top: 2px;
2056 2056 padding-left: 10px;
2057 2057 }
2058 2058
2059 2059 #quick_login div.form div.fields div.field {
2060 2060 padding: 5px;
2061 2061 }
2062 2062
2063 2063 #quick_login div.form div.fields div.field div.label label {
2064 2064 color: #fff;
2065 2065 padding-bottom: 3px;
2066 2066 }
2067 2067
2068 2068 #quick_login div.form div.fields div.field div.input input {
2069 2069 width: 236px;
2070 2070 background: #FFF;
2071 2071 border-top: 1px solid #b3b3b3;
2072 2072 border-left: 1px solid #b3b3b3;
2073 2073 border-right: 1px solid #eaeaea;
2074 2074 border-bottom: 1px solid #eaeaea;
2075 2075 color: #000;
2076 2076 font-size: 11px;
2077 2077 margin: 0;
2078 2078 padding: 5px 7px 4px;
2079 2079 }
2080 2080
2081 2081 #quick_login div.form div.fields div.buttons {
2082 2082 clear: both;
2083 2083 overflow: hidden;
2084 2084 text-align: right;
2085 2085 margin: 0;
2086 2086 padding: 5px 14px 0px 5px;
2087 2087 }
2088 2088
2089 2089 #quick_login div.form div.links {
2090 2090 clear: both;
2091 2091 overflow: hidden;
2092 2092 margin: 10px 0 0;
2093 2093 padding: 0 0 2px;
2094 2094 }
2095 2095
2096 2096 #quick_login ol.links {
2097 2097 display: block;
2098 2098 font-weight: bold;
2099 2099 list-style: none outside none;
2100 2100 text-align: right;
2101 2101 }
2102 2102 #quick_login ol.links li {
2103 2103 line-height: 27px;
2104 2104 margin: 0;
2105 2105 padding: 0;
2106 2106 color: #fff;
2107 2107 display: block;
2108 2108 float: none !important;
2109 2109 }
2110 2110
2111 2111 #quick_login ol.links li a {
2112 2112 color: #fff;
2113 2113 display: block;
2114 2114 padding: 2px;
2115 2115 }
2116 2116 #quick_login ol.links li a:HOVER {
2117 2117 background-color: inherit !important;
2118 2118 }
2119 2119
2120 2120 #register div.title {
2121 2121 clear: both;
2122 2122 overflow: hidden;
2123 2123 position: relative;
2124 2124 background-color: #003B76;
2125 2125 background-repeat: repeat-x;
2126 2126 background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
2127 2127 background-image: -moz-linear-gradient(top, #003b76, #00376e);
2128 2128 background-image: -ms-linear-gradient(top, #003b76, #00376e);
2129 2129 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
2130 2130 background-image: -webkit-linear-gradient(top, #003b76, #00376e);
2131 2131 background-image: -o-linear-gradient(top, #003b76, #00376e);
2132 2132 background-image: linear-gradient(to bottom, #003b76, #00376e);
2133 2133 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
2134 2134 endColorstr='#00376e', GradientType=0 );
2135 2135 margin: 0 auto;
2136 2136 padding: 0;
2137 2137 }
2138 2138
2139 2139 #register div.inner {
2140 2140 background: #FFF;
2141 2141 border-top: none;
2142 2142 border-bottom: none;
2143 2143 margin: 0 auto;
2144 2144 padding: 20px;
2145 2145 }
2146 2146
2147 2147 #register div.form div.fields div.field div.label {
2148 2148 width: 135px;
2149 2149 float: left;
2150 2150 text-align: right;
2151 2151 margin: 2px 10px 0 0;
2152 2152 padding: 5px 0 0 5px;
2153 2153 }
2154 2154
2155 2155 #register div.form div.fields div.field div.input input {
2156 2156 width: 300px;
2157 2157 background: #FFF;
2158 2158 border-top: 1px solid #b3b3b3;
2159 2159 border-left: 1px solid #b3b3b3;
2160 2160 border-right: 1px solid #eaeaea;
2161 2161 border-bottom: 1px solid #eaeaea;
2162 2162 color: #000;
2163 2163 font-size: 11px;
2164 2164 margin: 0;
2165 2165 padding: 7px 7px 6px;
2166 2166 }
2167 2167
2168 2168 #register div.form div.fields div.buttons {
2169 2169 clear: both;
2170 2170 overflow: hidden;
2171 2171 border-top: 1px solid #DDD;
2172 2172 text-align: left;
2173 2173 margin: 0;
2174 2174 padding: 10px 0 0 150px;
2175 2175 }
2176 2176
2177 2177 #register div.form div.activation_msg {
2178 2178 padding-top: 4px;
2179 2179 padding-bottom: 4px;
2180 2180 }
2181 2181
2182 2182 #journal .journal_day {
2183 2183 font-size: 20px;
2184 2184 padding: 10px 0px;
2185 2185 border-bottom: 2px solid #DDD;
2186 2186 margin-left: 10px;
2187 2187 margin-right: 10px;
2188 2188 }
2189 2189
2190 2190 #journal .journal_container {
2191 2191 padding: 5px;
2192 2192 clear: both;
2193 2193 margin: 0px 5px 0px 10px;
2194 2194 }
2195 2195
2196 2196 #journal .journal_action_container {
2197 2197 padding-left: 38px;
2198 2198 }
2199 2199
2200 2200 #journal .journal_user {
2201 2201 color: #747474;
2202 2202 font-size: 14px;
2203 2203 font-weight: bold;
2204 2204 height: 30px;
2205 2205 }
2206 2206
2207 2207 #journal .journal_user.deleted {
2208 2208 color: #747474;
2209 2209 font-size: 14px;
2210 2210 font-weight: normal;
2211 2211 height: 30px;
2212 2212 font-style: italic;
2213 2213 }
2214 2214
2215 2215
2216 2216 #journal .journal_icon {
2217 2217 clear: both;
2218 2218 float: left;
2219 2219 padding-right: 4px;
2220 2220 padding-top: 3px;
2221 2221 }
2222 2222
2223 2223 #journal .journal_action {
2224 2224 padding-top: 4px;
2225 2225 min-height: 2px;
2226 2226 float: left
2227 2227 }
2228 2228
2229 2229 #journal .journal_action_params {
2230 2230 clear: left;
2231 2231 padding-left: 22px;
2232 2232 }
2233 2233
2234 2234 #journal .journal_repo {
2235 2235 float: left;
2236 2236 margin-left: 6px;
2237 2237 padding-top: 3px;
2238 2238 }
2239 2239
2240 2240 #journal .date {
2241 2241 clear: both;
2242 2242 color: #777777;
2243 2243 font-size: 11px;
2244 2244 padding-left: 22px;
2245 2245 }
2246 2246
2247 2247 #journal .journal_repo .journal_repo_name {
2248 2248 font-weight: bold;
2249 2249 font-size: 1.1em;
2250 2250 }
2251 2251
2252 2252 #journal .compare_view {
2253 2253 padding: 5px 0px 5px 0px;
2254 2254 width: 95px;
2255 2255 }
2256 2256
2257 2257 .journal_highlight {
2258 2258 font-weight: bold;
2259 2259 padding: 0 2px;
2260 2260 vertical-align: bottom;
2261 2261 }
2262 2262
2263 2263 .trending_language_tbl, .trending_language_tbl td {
2264 2264 border: 0 !important;
2265 2265 margin: 0 !important;
2266 2266 padding: 0 !important;
2267 2267 }
2268 2268
2269 2269 .trending_language_tbl, .trending_language_tbl tr {
2270 2270 border-spacing: 1px;
2271 2271 }
2272 2272
2273 2273 .trending_language {
2274 2274 background-color: #003367;
2275 2275 color: #FFF;
2276 2276 display: block;
2277 2277 min-width: 20px;
2278 2278 text-decoration: none;
2279 2279 height: 12px;
2280 2280 margin-bottom: 0px;
2281 2281 margin-left: 5px;
2282 2282 white-space: pre;
2283 2283 padding: 3px;
2284 2284 }
2285 2285
2286 2286 h3.files_location {
2287 2287 font-size: 1.8em;
2288 2288 font-weight: 700;
2289 2289 border-bottom: none !important;
2290 2290 margin: 10px 0 !important;
2291 2291 }
2292 2292
2293 2293 #files_data dl dt {
2294 2294 float: left;
2295 2295 width: 60px;
2296 2296 margin: 0 !important;
2297 2297 padding: 5px;
2298 2298 }
2299 2299
2300 2300 #files_data dl dd {
2301 2301 margin: 0 !important;
2302 2302 padding: 5px !important;
2303 2303 }
2304 2304
2305 2305 .file_history {
2306 2306 padding-top: 10px;
2307 2307 font-size: 16px;
2308 2308 }
2309 2309 .file_author {
2310 2310 float: left;
2311 2311 }
2312 2312
2313 2313 .file_author .item {
2314 2314 float: left;
2315 2315 padding: 5px;
2316 2316 color: #888;
2317 2317 }
2318 2318
2319 2319 .tablerow0 {
2320 2320 background-color: #F8F8F8;
2321 2321 }
2322 2322
2323 2323 .tablerow1 {
2324 2324 background-color: #FFFFFF;
2325 2325 }
2326 2326
2327 2327 .changeset_id {
2328 2328 font-family: monospace;
2329 2329 color: #666666;
2330 2330 }
2331 2331
2332 2332 .changeset_hash {
2333 2333 color: #000000;
2334 2334 }
2335 2335
2336 2336 #changeset_content {
2337 2337 border-left: 1px solid #CCC;
2338 2338 border-right: 1px solid #CCC;
2339 2339 border-bottom: 1px solid #CCC;
2340 2340 padding: 5px;
2341 2341 }
2342 2342
2343 2343 #changeset_compare_view_content {
2344 2344 border: 1px solid #CCC;
2345 2345 padding: 5px;
2346 2346 }
2347 2347
2348 2348 #changeset_content .container {
2349 2349 min-height: 100px;
2350 2350 font-size: 1.2em;
2351 2351 overflow: hidden;
2352 2352 }
2353 2353
2354 2354 #changeset_compare_view_content .compare_view_commits {
2355 2355 width: auto !important;
2356 2356 }
2357 2357
2358 2358 #changeset_compare_view_content .compare_view_commits td {
2359 2359 padding: 0px 0px 0px 12px !important;
2360 2360 }
2361 2361
2362 2362 #changeset_content .container .right {
2363 2363 float: right;
2364 2364 width: 20%;
2365 2365 text-align: right;
2366 2366 }
2367 2367
2368 2368 #changeset_content .container .message {
2369 2369 white-space: pre-wrap;
2370 2370 }
2371 2371 #changeset_content .container .message a:hover {
2372 2372 text-decoration: none;
2373 2373 }
2374 2374 .cs_files .cur_cs {
2375 2375 margin: 10px 2px;
2376 2376 font-weight: bold;
2377 2377 }
2378 2378
2379 2379 .cs_files .node {
2380 2380 float: left;
2381 2381 }
2382 2382
2383 2383 .cs_files .changes {
2384 2384 float: right;
2385 2385 color: #003367;
2386 2386 }
2387 2387
2388 2388 .cs_files .changes .added {
2389 2389 background-color: #BBFFBB;
2390 2390 float: left;
2391 2391 text-align: center;
2392 2392 font-size: 9px;
2393 2393 padding: 2px 0px 2px 0px;
2394 2394 }
2395 2395
2396 2396 .cs_files .changes .deleted {
2397 2397 background-color: #FF8888;
2398 2398 float: left;
2399 2399 text-align: center;
2400 2400 font-size: 9px;
2401 2401 padding: 2px 0px 2px 0px;
2402 2402 }
2403 2403 /*new binary*/
2404 2404 .cs_files .changes .bin1 {
2405 2405 background-color: #BBFFBB;
2406 2406 float: left;
2407 2407 text-align: center;
2408 2408 font-size: 9px;
2409 2409 padding: 2px 0px 2px 0px;
2410 2410 }
2411 2411
2412 2412 /*deleted binary*/
2413 2413 .cs_files .changes .bin2 {
2414 2414 background-color: #FF8888;
2415 2415 float: left;
2416 2416 text-align: center;
2417 2417 font-size: 9px;
2418 2418 padding: 2px 0px 2px 0px;
2419 2419 }
2420 2420
2421 2421 /*mod binary*/
2422 2422 .cs_files .changes .bin3 {
2423 2423 background-color: #DDDDDD;
2424 2424 float: left;
2425 2425 text-align: center;
2426 2426 font-size: 9px;
2427 2427 padding: 2px 0px 2px 0px;
2428 2428 }
2429 2429
2430 2430 /*rename file*/
2431 2431 .cs_files .changes .bin4 {
2432 2432 background-color: #6D99FF;
2433 2433 float: left;
2434 2434 text-align: center;
2435 2435 font-size: 9px;
2436 2436 padding: 2px 0px 2px 0px;
2437 2437 }
2438 2438
2439 2439
2440 2440 .cs_files .cs_added, .cs_files .cs_A {
2441 2441 background: url("../images/icons/page_white_add.png") no-repeat scroll
2442 2442 3px;
2443 2443 height: 16px;
2444 2444 padding-left: 20px;
2445 2445 margin-top: 7px;
2446 2446 text-align: left;
2447 2447 }
2448 2448
2449 2449 .cs_files .cs_changed, .cs_files .cs_M {
2450 2450 background: url("../images/icons/page_white_edit.png") no-repeat scroll
2451 2451 3px;
2452 2452 height: 16px;
2453 2453 padding-left: 20px;
2454 2454 margin-top: 7px;
2455 2455 text-align: left;
2456 2456 }
2457 2457
2458 2458 .cs_files .cs_removed, .cs_files .cs_D {
2459 2459 background: url("../images/icons/page_white_delete.png") no-repeat
2460 2460 scroll 3px;
2461 2461 height: 16px;
2462 2462 padding-left: 20px;
2463 2463 margin-top: 7px;
2464 2464 text-align: left;
2465 2465 }
2466 2466
2467 2467 .table {
2468 2468 position: relative;
2469 2469 }
2470 2470
2471 2471 #graph {
2472 2472 position: relative;
2473 2473 overflow: hidden;
2474 2474 }
2475 2475
2476 2476 #graph_nodes {
2477 2477 position: absolute;
2478 2478 }
2479 2479
2480 2480 #graph_content,
2481 2481 #graph .info_box,
2482 2482 #graph .container_header {
2483 2483 margin-left: 100px;
2484 2484 }
2485 2485
2486 2486 #graph_content {
2487 2487 position: relative;
2488 2488 }
2489 2489
2490 2490 #graph .container_header {
2491 2491 padding: 10px;
2492 2492 height: 25px;
2493 2493 }
2494 2494
2495 2495 #graph_content #rev_range_container {
2496 2496 float: left;
2497 2497 margin: 0px 0px 0px 3px;
2498 2498 }
2499 2499
2500 2500 #graph_content #rev_range_clear {
2501 2501 float: left;
2502 2502 margin: 0px 0px 0px 3px;
2503 2503 }
2504 2504
2505 2505 #graph_content #changesets {
2506 2506 table-layout: fixed;
2507 2507 border-collapse: collapse;
2508 2508 border-left: none;
2509 2509 border-right: none;
2510 2510 border-color: #cdcdcd;
2511 2511 }
2512 2512
2513 2513 #graph_content .container {
2514 2514
2515 2515 }
2516 2516
2517 2517 #graph_content #changesets td {
2518 2518 overflow: hidden;
2519 2519 text-overflow: ellipsis;
2520 2520 white-space: nowrap;
2521 2521 height: 31px;
2522 2522 border-color: #cdcdcd;
2523 2523 text-align: left;
2524 2524 }
2525 2525
2526 2526 #graph_content .container .author {
2527 2527 width: 105px;
2528 2528 }
2529 2529
2530 2530 #graph_content .container .hash {
2531 2531 width: 85px;
2532 2532 font-size: 0.85em;
2533 2533 }
2534 2534
2535 2535 #graph_content #changesets .container .date {
2536 2536 width: 76px;
2537 2537 color: #666;
2538 2538 font-size: 10px;
2539 2539 }
2540 2540
2541 2541 #graph_content #changesets .container .right {
2542 2542 width: 120px;
2543 2543 padding-right: 0px;
2544 2544 overflow: visible;
2545 2545 position: relative;
2546 2546 }
2547 2547
2548 2548 #graph_content .container .mid {
2549 2549 padding: 0;
2550 2550 }
2551 2551
2552 2552 #graph_content .log-container {
2553 2553 position: relative;
2554 2554 }
2555 2555
2556 2556 #graph_content #changesets td.checkbox {
2557 2557 width: 20px;
2558 2558 }
2559 2559
2560 2560 #graph_content .container .changeset_range {
2561 2561 float: left;
2562 2562 margin: 6px 3px;
2563 2563 }
2564 2564
2565 2565 #graph_content .container .author img {
2566 2566 vertical-align: middle;
2567 2567 }
2568 2568
2569 2569 #graph_content .container .author .user {
2570 2570 color: #444444;
2571 2571 }
2572 2572
2573 2573 #graph_content .container .mid .message {
2574 2574 white-space: pre-wrap;
2575 2575 padding: 0;
2576 2576 overflow: hidden;
2577 2577 height: 1.1em;
2578 2578 }
2579 2579
2580 2580 #graph_content .container .extra-container {
2581 2581 display: block;
2582 2582 position: absolute;
2583 2583 top: -15px;
2584 2584 right: 0;
2585 2585 padding-left: 5px;
2586 2586 background: #FFFFFF;
2587 2587 height: 41px;
2588 2588 }
2589 2589
2590 2590 #graph_content .comments-container,
2591 2591 #graph_content .logtags {
2592 2592 display: block;
2593 2593 float: left;
2594 2594 overflow: hidden;
2595 2595 padding: 0;
2596 2596 margin: 0;
2597 2597 }
2598 2598
2599 2599 #graph_content .comments-container {
2600 2600 margin: 0.8em 0;
2601 2601 margin-right: 0.5em;
2602 2602 }
2603 2603
2604 2604 #graph_content .tagcontainer {
2605 2605 width: 80px;
2606 2606 position: relative;
2607 2607 float: right;
2608 2608 height: 100%;
2609 2609 top: 7px;
2610 2610 margin-left: 0.5em;
2611 2611 }
2612 2612
2613 2613 #graph_content .logtags {
2614 2614 min-width: 80px;
2615 2615 height: 1.1em;
2616 2616 position: absolute;
2617 2617 left: 0px;
2618 2618 width: auto;
2619 2619 top: 0px;
2620 2620 }
2621 2621
2622 2622 #graph_content .logtags.tags {
2623 2623 top: 14px;
2624 2624 }
2625 2625
2626 2626 #graph_content .logtags:hover {
2627 2627 overflow: visible;
2628 2628 position: absolute;
2629 2629 width: auto;
2630 2630 right: 0;
2631 2631 left: initial;
2632 2632 }
2633 2633
2634 2634 #graph_content .logtags .bookbook,
2635 2635 #graph_content .logtags .tagtag {
2636 2636 float: left;
2637 2637 line-height: 1em;
2638 2638 margin-bottom: 1px;
2639 2639 margin-right: 1px;
2640 2640 padding: 1px 3px;
2641 2641 font-size: 10px;
2642 2642 }
2643 2643
2644 2644 #graph_content .container .mid .message a:hover {
2645 2645 text-decoration: none;
2646 2646 }
2647 2647
2648 2648 .revision-link {
2649 2649 color: #3F6F9F;
2650 2650 font-weight: bold !important;
2651 2651 }
2652 2652
2653 2653 .issue-tracker-link {
2654 2654 color: #3F6F9F;
2655 2655 font-weight: bold !important;
2656 2656 }
2657 2657
2658 2658 .changeset-status-container {
2659 2659 padding-right: 5px;
2660 2660 margin-top: 1px;
2661 2661 float: right;
2662 2662 height: 14px;
2663 2663 }
2664 2664 .code-header .changeset-status-container {
2665 2665 float: left;
2666 2666 padding: 2px 0px 0px 2px;
2667 2667 }
2668 2668 .changeset-status-container .changeset-status-lbl {
2669 2669 color: rgb(136, 136, 136);
2670 2670 float: left;
2671 2671 padding: 3px 4px 0px 0px
2672 2672 }
2673 2673 .code-header .changeset-status-container .changeset-status-lbl {
2674 2674 float: left;
2675 2675 padding: 0px 4px 0px 0px;
2676 2676 }
2677 2677 .changeset-status-container .changeset-status-ico {
2678 2678 float: left;
2679 2679 }
2680 2680 .code-header .changeset-status-container .changeset-status-ico, .container .changeset-status-ico {
2681 2681 float: left;
2682 2682 }
2683 2683
2684 2684 #graph_content .comments-cnt {
2685 2685 color: rgb(136, 136, 136);
2686 2686 padding: 5px 0;
2687 2687 }
2688 2688
2689 2689 #graph_content .comments-cnt a {
2690 2690 background-image: url('../images/icons/comments.png');
2691 2691 background-repeat: no-repeat;
2692 2692 background-position: 100% 50%;
2693 2693 padding: 5px 0;
2694 2694 padding-right: 20px;
2695 2695 }
2696 2696
2697 2697 .right .changes {
2698 2698 clear: both;
2699 2699 }
2700 2700
2701 2701 .right .changes .changed_total {
2702 2702 display: block;
2703 2703 float: right;
2704 2704 text-align: center;
2705 2705 min-width: 45px;
2706 2706 cursor: pointer;
2707 2707 color: #444444;
2708 2708 background: #FEA;
2709 2709 -webkit-border-radius: 0px 0px 0px 6px;
2710 2710 border-radius: 0px 0px 0px 6px;
2711 2711 padding: 1px;
2712 2712 }
2713 2713
2714 2714 .right .changes .added, .changed, .removed {
2715 2715 display: block;
2716 2716 padding: 1px;
2717 2717 color: #444444;
2718 2718 float: right;
2719 2719 text-align: center;
2720 2720 min-width: 15px;
2721 2721 }
2722 2722
2723 2723 .right .changes .added {
2724 2724 background: #CFC;
2725 2725 }
2726 2726
2727 2727 .right .changes .changed {
2728 2728 background: #FEA;
2729 2729 }
2730 2730
2731 2731 .right .changes .removed {
2732 2732 background: #FAA;
2733 2733 }
2734 2734
2735 2735 .right .merge {
2736 2736 padding: 1px 3px 1px 3px;
2737 2737 background-color: #fca062;
2738 2738 font-size: 10px;
2739 2739 color: #ffffff;
2740 2740 text-transform: uppercase;
2741 2741 white-space: nowrap;
2742 2742 -webkit-border-radius: 3px;
2743 2743 border-radius: 3px;
2744 2744 margin-right: 2px;
2745 2745 }
2746 2746
2747 2747 .right .parent {
2748 2748 color: #666666;
2749 2749 clear: both;
2750 2750 }
2751 2751 .right .logtags {
2752 2752 line-height: 2.2em;
2753 2753 }
2754 2754 .branchtag, .logtags .tagtag, .logtags .booktag {
2755 2755 margin: 0px 2px;
2756 2756 }
2757 2757
2758 2758 .branchtag,
2759 2759 .tagtag,
2760 2760 .bookbook,
2761 2761 .spantag {
2762 2762 padding: 1px 3px 1px 3px;
2763 2763 font-size: 10px;
2764 2764 color: #336699;
2765 2765 white-space: nowrap;
2766 2766 -webkit-border-radius: 4px;
2767 2767 border-radius: 4px;
2768 2768 border: 1px solid #d9e8f8;
2769 2769 line-height: 1.5em;
2770 2770 }
2771 2771
2772 2772 #graph_content .branchtag,
2773 2773 #graph_content .tagtag,
2774 2774 #graph_content .bookbook {
2775 2775 margin: 1.1em 0;
2776 2776 margin-right: 0.5em;
2777 2777 }
2778 2778
2779 2779 .branchtag,
2780 2780 .tagtag,
2781 2781 .bookbook {
2782 2782 float: left;
2783 2783 }
2784 2784
2785 2785 .right .logtags .branchtag,
2786 2786 .logtags .tagtag,
2787 2787 .right .merge {
2788 2788 float: right;
2789 2789 line-height: 1em;
2790 2790 margin: 1px 1px !important;
2791 2791 display: block;
2792 2792 }
2793 2793
2794 2794 .bookbook {
2795 2795 border-color: #46A546;
2796 2796 color: #46A546;
2797 2797 }
2798 2798
2799 2799 .tagtag {
2800 2800 border-color: #62cffc;
2801 2801 color: #62cffc;
2802 2802 }
2803 2803
2804 2804 .logtags .branchtag a:hover,
2805 2805 .logtags .branchtag a,
2806 2806 .branchtag a,
2807 2807 .branchtag a:hover {
2808 2808 text-decoration: none;
2809 2809 color: inherit;
2810 2810 }
2811 2811 .logtags .tagtag {
2812 2812 padding: 1px 3px 1px 3px;
2813 2813 background-color: #62cffc;
2814 2814 font-size: 10px;
2815 2815 color: #ffffff;
2816 2816 white-space: nowrap;
2817 2817 -webkit-border-radius: 3px;
2818 2818 border-radius: 3px;
2819 2819 }
2820 2820
2821 2821 .tagtag a,
2822 2822 .tagtag a:hover,
2823 2823 .logtags .tagtag a,
2824 2824 .logtags .tagtag a:hover {
2825 2825 text-decoration: none;
2826 2826 color: inherit;
2827 2827 }
2828 2828 .logbooks .bookbook, .logbooks .bookbook, .logtags .bookbook, .logtags .bookbook {
2829 2829 padding: 1px 3px 1px 3px;
2830 2830 background-color: #46A546;
2831 2831 font-size: 10px;
2832 2832 color: #ffffff;
2833 2833 white-space: nowrap;
2834 2834 -webkit-border-radius: 3px;
2835 2835 border-radius: 3px;
2836 2836 }
2837 2837 .logbooks .bookbook, .logbooks .bookbook a, .right .logtags .bookbook, .logtags .bookbook a {
2838 2838 color: #ffffff;
2839 2839 }
2840 2840
2841 2841 .logbooks .bookbook, .logbooks .bookbook a:hover,
2842 2842 .logtags .bookbook, .logtags .bookbook a:hover,
2843 2843 .bookbook a,
2844 2844 .bookbook a:hover {
2845 2845 text-decoration: none;
2846 2846 color: inherit;
2847 2847 }
2848 2848 div.browserblock {
2849 2849 overflow: hidden;
2850 2850 border: 1px solid #ccc;
2851 2851 background: #f8f8f8;
2852 2852 font-size: 100%;
2853 2853 line-height: 125%;
2854 2854 padding: 0;
2855 2855 -webkit-border-radius: 6px 6px 0px 0px;
2856 2856 border-radius: 6px 6px 0px 0px;
2857 2857 }
2858 2858
2859 2859 div.browserblock .browser-header {
2860 2860 background: #FFF;
2861 2861 padding: 10px 0px 15px 0px;
2862 2862 width: 100%;
2863 2863 }
2864 2864
2865 2865 div.browserblock .browser-nav {
2866 2866 float: left
2867 2867 }
2868 2868
2869 2869 div.browserblock .browser-branch {
2870 2870 float: left;
2871 2871 }
2872 2872
2873 2873 div.browserblock .browser-branch label {
2874 2874 color: #4A4A4A;
2875 2875 vertical-align: text-top;
2876 2876 }
2877 2877
2878 2878 div.browserblock .browser-header span {
2879 2879 margin-left: 5px;
2880 2880 font-weight: 700;
2881 2881 }
2882 2882
2883 2883 div.browserblock .browser-search {
2884 2884 clear: both;
2885 2885 padding: 8px 8px 0px 5px;
2886 2886 height: 20px;
2887 2887 }
2888 2888
2889 2889 div.browserblock #node_filter_box {
2890 2890 }
2891 2891
2892 2892 div.browserblock .search_activate {
2893 2893 float: left
2894 2894 }
2895 2895
2896 2896 div.browserblock .add_node {
2897 2897 float: left;
2898 2898 padding-left: 5px;
2899 2899 }
2900 2900
2901 2901 div.browserblock .search_activate a:hover, div.browserblock .add_node a:hover {
2902 2902 text-decoration: none !important;
2903 2903 }
2904 2904
2905 2905 div.browserblock .browser-body {
2906 2906 background: #EEE;
2907 2907 border-top: 1px solid #CCC;
2908 2908 }
2909 2909
2910 2910 table.code-browser {
2911 2911 border-collapse: collapse;
2912 2912 width: 100%;
2913 2913 }
2914 2914
2915 2915 table.code-browser tr {
2916 2916 margin: 3px;
2917 2917 }
2918 2918
2919 2919 table.code-browser thead th {
2920 2920 background-color: #EEE;
2921 2921 height: 20px;
2922 2922 font-size: 1.1em;
2923 2923 font-weight: 700;
2924 2924 text-align: left;
2925 2925 padding-left: 10px;
2926 2926 }
2927 2927
2928 2928 table.code-browser tbody td {
2929 2929 padding-left: 10px;
2930 2930 height: 20px;
2931 2931 }
2932 2932
2933 2933 table.code-browser .browser-file {
2934 2934 background: url("../images/icons/document_16.png") no-repeat scroll 3px;
2935 2935 height: 16px;
2936 2936 padding-left: 20px;
2937 2937 text-align: left;
2938 2938 }
2939 2939 .diffblock .changeset_header {
2940 2940 height: 16px;
2941 2941 }
2942 2942 .diffblock .changeset_file {
2943 2943 background: url("../images/icons/file.png") no-repeat scroll 3px;
2944 2944 text-align: left;
2945 2945 float: left;
2946 2946 padding: 2px 0px 2px 22px;
2947 2947 }
2948 2948 .diffblock .diff-menu-wrapper {
2949 2949 float: left;
2950 2950 }
2951 2951
2952 2952 .diffblock .diff-menu {
2953 2953 position: absolute;
2954 2954 background: none repeat scroll 0 0 #FFFFFF;
2955 2955 border-color: #003367 #666666 #666666;
2956 2956 border-right: 1px solid #666666;
2957 2957 border-style: solid solid solid;
2958 2958 border-width: 1px;
2959 2959 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
2960 2960 margin-top: 5px;
2961 2961 margin-left: 1px;
2962 2962
2963 2963 }
2964 2964 .diffblock .diff-actions {
2965 2965 padding: 2px 0px 0px 2px;
2966 2966 float: left;
2967 2967 }
2968 2968 .diffblock .diff-menu ul li {
2969 2969 padding: 0px 0px 0px 0px !important;
2970 2970 }
2971 2971 .diffblock .diff-menu ul li a {
2972 2972 display: block;
2973 2973 padding: 3px 8px 3px 8px !important;
2974 2974 }
2975 2975 .diffblock .diff-menu ul li a:hover {
2976 2976 text-decoration: none;
2977 2977 background-color: #EEEEEE;
2978 2978 }
2979 2979 table.code-browser .browser-dir {
2980 2980 background: url("../images/icons/folder_16.png") no-repeat scroll 3px;
2981 2981 height: 16px;
2982 2982 padding-left: 20px;
2983 2983 text-align: left;
2984 2984 }
2985 2985
2986 2986 table.code-browser .submodule-dir {
2987 2987 background: url("../images/icons/disconnect.png") no-repeat scroll 3px;
2988 2988 height: 16px;
2989 2989 padding-left: 20px;
2990 2990 text-align: left;
2991 2991 }
2992 2992
2993 2993
2994 2994 .box .search {
2995 2995 clear: both;
2996 2996 overflow: hidden;
2997 2997 margin: 0;
2998 2998 padding: 0 20px 10px;
2999 2999 }
3000 3000
3001 3001 .box .search div.search_path {
3002 3002 background: none repeat scroll 0 0 #EEE;
3003 3003 border: 1px solid #CCC;
3004 3004 color: blue;
3005 3005 margin-bottom: 10px;
3006 3006 padding: 10px 0;
3007 3007 }
3008 3008
3009 3009 .box .search div.search_path div.link {
3010 3010 font-weight: 700;
3011 3011 margin-left: 25px;
3012 3012 }
3013 3013
3014 3014 .box .search div.search_path div.link a {
3015 3015 color: #003367;
3016 3016 cursor: pointer;
3017 3017 text-decoration: none;
3018 3018 }
3019 3019
3020 3020 #path_unlock {
3021 3021 color: red;
3022 3022 font-size: 1.2em;
3023 3023 padding-left: 4px;
3024 3024 }
3025 3025
3026 3026 .info_box span {
3027 3027 margin-left: 3px;
3028 3028 margin-right: 3px;
3029 3029 }
3030 3030
3031 3031 .info_box .rev {
3032 3032 color: #003367;
3033 3033 font-size: 1.6em;
3034 3034 font-weight: bold;
3035 3035 vertical-align: sub;
3036 3036 }
3037 3037
3038 3038 .info_box input#at_rev, .info_box input#size {
3039 3039 background: #FFF;
3040 3040 border-top: 1px solid #b3b3b3;
3041 3041 border-left: 1px solid #b3b3b3;
3042 3042 border-right: 1px solid #eaeaea;
3043 3043 border-bottom: 1px solid #eaeaea;
3044 3044 color: #000;
3045 3045 font-size: 12px;
3046 3046 margin: 0;
3047 3047 padding: 1px 5px 1px;
3048 3048 }
3049 3049
3050 3050 .info_box input#view {
3051 3051 text-align: center;
3052 3052 padding: 4px 3px 2px 2px;
3053 3053 }
3054 3054
3055 3055 .yui-overlay, .yui-panel-container {
3056 3056 visibility: hidden;
3057 3057 position: absolute;
3058 3058 z-index: 2;
3059 3059 }
3060 3060
3061 3061 #tip-box {
3062 3062 position: absolute;
3063 3063
3064 3064 background-color: #FFF;
3065 3065 border: 2px solid #003367;
3066 3066 font: 100% sans-serif;
3067 3067 width: auto;
3068 3068 opacity: 1;
3069 3069 padding: 8px;
3070 3070
3071 3071 white-space: pre-wrap;
3072 3072 -webkit-border-radius: 8px 8px 8px 8px;
3073 3073 -khtml-border-radius: 8px 8px 8px 8px;
3074 3074 border-radius: 8px 8px 8px 8px;
3075 3075 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
3076 3076 -webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
3077 3077 }
3078 3078
3079 3079 .hl-tip-box {
3080 3080 visibility: hidden;
3081 3081 position: absolute;
3082 3082 color: #666;
3083 3083 background-color: #FFF;
3084 3084 border: 2px solid #003367;
3085 3085 font: 100% sans-serif;
3086 3086 width: auto;
3087 3087 opacity: 1;
3088 3088 padding: 8px;
3089 3089 white-space: pre-wrap;
3090 3090 -webkit-border-radius: 8px 8px 8px 8px;
3091 3091 -khtml-border-radius: 8px 8px 8px 8px;
3092 3092 border-radius: 8px 8px 8px 8px;
3093 3093 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
3094 3094 }
3095 3095
3096 3096
3097 3097 .mentions-container {
3098 3098 width: 90% !important;
3099 3099 }
3100 3100 .mentions-container .yui-ac-content {
3101 3101 width: 100% !important;
3102 3102 }
3103 3103
3104 3104 .ac {
3105 3105 vertical-align: top;
3106 3106 }
3107 3107
3108 3108 .ac .yui-ac {
3109 3109 position: inherit;
3110 3110 font-size: 100%;
3111 3111 }
3112 3112
3113 3113 .ac .perm_ac {
3114 3114 width: 20em;
3115 3115 }
3116 3116
3117 3117 .ac .yui-ac-input {
3118 3118 width: 100%;
3119 3119 }
3120 3120
3121 3121 .ac .yui-ac-container {
3122 3122 position: absolute;
3123 3123 top: 1.6em;
3124 3124 width: auto;
3125 3125 }
3126 3126
3127 3127 .ac .yui-ac-content {
3128 3128 position: absolute;
3129 3129 border: 1px solid gray;
3130 3130 background: #fff;
3131 3131 z-index: 9050;
3132 3132 }
3133 3133
3134 3134 .ac .yui-ac-shadow {
3135 3135 position: absolute;
3136 3136 width: 100%;
3137 3137 background: #000;
3138 3138 opacity: .10;
3139 3139 filter: alpha(opacity = 10);
3140 3140 z-index: 9049;
3141 3141 margin: .3em;
3142 3142 }
3143 3143
3144 3144 .ac .yui-ac-content ul {
3145 3145 width: 100%;
3146 3146 margin: 0;
3147 3147 padding: 0;
3148 3148 z-index: 9050;
3149 3149 }
3150 3150
3151 3151 .ac .yui-ac-content li {
3152 3152 cursor: default;
3153 3153 white-space: nowrap;
3154 3154 margin: 0;
3155 3155 padding: 2px 5px;
3156 3156 height: 18px;
3157 3157 z-index: 9050;
3158 3158 display: block;
3159 3159 width: auto !important;
3160 3160 }
3161 3161
3162 3162 .ac .yui-ac-content li .ac-container-wrap {
3163 3163 width: auto;
3164 3164 }
3165 3165
3166 3166 .ac .yui-ac-content li.yui-ac-prehighlight {
3167 3167 background: #B3D4FF;
3168 3168 z-index: 9050;
3169 3169 }
3170 3170
3171 3171 .ac .yui-ac-content li.yui-ac-highlight {
3172 3172 background: #556CB5;
3173 3173 color: #FFF;
3174 3174 z-index: 9050;
3175 3175 }
3176 3176 .ac .yui-ac-bd {
3177 3177 z-index: 9050;
3178 3178 }
3179 3179
3180 3180 .follow {
3181 3181 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
3182 3182 height: 16px;
3183 3183 width: 20px;
3184 3184 cursor: pointer;
3185 3185 display: block;
3186 3186 float: right;
3187 3187 margin-top: 2px;
3188 3188 }
3189 3189
3190 3190 .following {
3191 3191 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
3192 3192 height: 16px;
3193 3193 width: 20px;
3194 3194 cursor: pointer;
3195 3195 display: block;
3196 3196 float: right;
3197 3197 margin-top: 2px;
3198 3198 }
3199 3199
3200 3200 .reposize {
3201 3201 background: url("../images/icons/server.png") no-repeat scroll 3px;
3202 3202 height: 16px;
3203 3203 width: 20px;
3204 3204 cursor: pointer;
3205 3205 display: block;
3206 3206 float: right;
3207 3207 margin-top: 2px;
3208 3208 }
3209 3209
3210 3210 #repo_size {
3211 3211 display: block;
3212 3212 margin-top: 4px;
3213 3213 color: #666;
3214 3214 float: right;
3215 3215 }
3216 3216
3217 3217 .locking_locked {
3218 3218 background: #FFF url("../images/icons/block_16.png") no-repeat scroll 3px;
3219 3219 height: 16px;
3220 3220 width: 20px;
3221 3221 cursor: pointer;
3222 3222 display: block;
3223 3223 float: right;
3224 3224 margin-top: 2px;
3225 3225 }
3226 3226
3227 3227 .locking_unlocked {
3228 3228 background: #FFF url("../images/icons/accept.png") no-repeat scroll 3px;
3229 3229 height: 16px;
3230 3230 width: 20px;
3231 3231 cursor: pointer;
3232 3232 display: block;
3233 3233 float: right;
3234 3234 margin-top: 2px;
3235 3235 }
3236 3236
3237 3237 .currently_following {
3238 3238 padding-left: 10px;
3239 3239 padding-bottom: 5px;
3240 3240 }
3241 3241
3242 3242 .add_icon {
3243 3243 background: url("../images/icons/add.png") no-repeat scroll 3px;
3244 3244 padding-left: 20px;
3245 3245 padding-top: 0px;
3246 3246 text-align: left;
3247 3247 }
3248 3248
3249 3249 .accept_icon {
3250 3250 background: url("../images/icons/accept.png") no-repeat scroll 3px;
3251 3251 padding-left: 20px;
3252 3252 padding-top: 0px;
3253 3253 text-align: left;
3254 3254 }
3255 3255
3256 3256 .edit_icon {
3257 3257 background: url("../images/icons/application_form_edit.png") no-repeat scroll 3px;
3258 3258 padding-left: 20px;
3259 3259 padding-top: 0px;
3260 3260 text-align: left;
3261 3261 }
3262 3262
3263 3263 .delete_icon {
3264 3264 background: url("../images/icons/delete.png") no-repeat scroll 3px;
3265 3265 padding-left: 20px;
3266 3266 padding-top: 0px;
3267 3267 text-align: left;
3268 3268 }
3269 3269
3270 3270 .refresh_icon {
3271 3271 background: url("../images/icons/arrow_refresh.png") no-repeat scroll
3272 3272 3px;
3273 3273 padding-left: 20px;
3274 3274 padding-top: 0px;
3275 3275 text-align: left;
3276 3276 }
3277 3277
3278 3278 .pull_icon {
3279 3279 background: url("../images/icons/connect.png") no-repeat scroll 3px;
3280 3280 padding-left: 20px;
3281 3281 padding-top: 0px;
3282 3282 text-align: left;
3283 3283 }
3284 3284
3285 3285 .rss_icon {
3286 3286 background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
3287 3287 padding-left: 20px;
3288 3288 padding-top: 4px;
3289 3289 text-align: left;
3290 3290 font-size: 8px
3291 3291 }
3292 3292
3293 3293 .atom_icon {
3294 3294 background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
3295 3295 padding-left: 20px;
3296 3296 padding-top: 4px;
3297 3297 text-align: left;
3298 3298 font-size: 8px
3299 3299 }
3300 3300
3301 3301 .archive_icon {
3302 3302 background: url("../images/icons/compress.png") no-repeat scroll 3px;
3303 3303 padding-left: 20px;
3304 3304 text-align: left;
3305 3305 padding-top: 1px;
3306 3306 }
3307 3307
3308 3308 .start_following_icon {
3309 3309 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
3310 3310 padding-left: 20px;
3311 3311 text-align: left;
3312 3312 padding-top: 0px;
3313 3313 }
3314 3314
3315 3315 .stop_following_icon {
3316 3316 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
3317 3317 padding-left: 20px;
3318 3318 text-align: left;
3319 3319 padding-top: 0px;
3320 3320 }
3321 3321
3322 3322 .action_button {
3323 3323 border: 0;
3324 3324 display: inline;
3325 3325 }
3326 3326
3327 3327 .action_button:hover {
3328 3328 border: 0;
3329 3329 text-decoration: underline;
3330 3330 cursor: pointer;
3331 3331 }
3332 3332
3333 3333 #switch_repos {
3334 3334 position: absolute;
3335 3335 height: 25px;
3336 3336 z-index: 1;
3337 3337 }
3338 3338
3339 3339 #switch_repos select {
3340 3340 min-width: 150px;
3341 3341 max-height: 250px;
3342 3342 z-index: 1;
3343 3343 }
3344 3344
3345 3345 .breadcrumbs {
3346 3346 border: medium none;
3347 3347 color: #FFF;
3348 3348 float: left;
3349 3349 font-weight: 700;
3350 3350 font-size: 14px;
3351 3351 margin: 0;
3352 3352 padding: 11px 0 11px 10px;
3353 3353 }
3354 3354
3355 3355 .breadcrumbs .hash {
3356 3356 text-transform: none;
3357 3357 color: #fff;
3358 3358 }
3359 3359
3360 3360 .breadcrumbs a {
3361 3361 color: #FFF;
3362 3362 }
3363 3363
3364 3364 .flash_msg {
3365 3365 }
3366 3366
3367 3367 .flash_msg ul {
3368 3368 }
3369 3369
3370 3370 .error_red {
3371 3371 color: red;
3372 3372 }
3373 3373
3374 3374 .error_msg {
3375 3375 background-color: #c43c35;
3376 3376 background-repeat: repeat-x;
3377 3377 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35) );
3378 3378 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
3379 3379 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
3380 3380 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35) );
3381 3381 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
3382 3382 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
3383 3383 background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
3384 3384 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#c43c35', GradientType=0 );
3385 3385 border-color: #c43c35 #c43c35 #882a25;
3386 3386 }
3387 3387
3388 .error_msg a {
3389 text-decoration: underline;
3390 }
3391
3388 3392 .warning_msg {
3389 3393 color: #404040 !important;
3390 3394 background-color: #eedc94;
3391 3395 background-repeat: repeat-x;
3392 3396 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94) );
3393 3397 background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
3394 3398 background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
3395 3399 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94) );
3396 3400 background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
3397 3401 background-image: -o-linear-gradient(top, #fceec1, #eedc94);
3398 3402 background-image: linear-gradient(to bottom, #fceec1, #eedc94);
3399 3403 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0 );
3400 3404 border-color: #eedc94 #eedc94 #e4c652;
3401 3405 }
3402 3406
3407 .warning_msg a {
3408 text-decoration: underline;
3409 }
3410
3403 3411 .success_msg {
3404 3412 background-color: #57a957;
3405 3413 background-repeat: repeat-x !important;
3406 3414 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957) );
3407 3415 background-image: -moz-linear-gradient(top, #62c462, #57a957);
3408 3416 background-image: -ms-linear-gradient(top, #62c462, #57a957);
3409 3417 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957) );
3410 3418 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
3411 3419 background-image: -o-linear-gradient(top, #62c462, #57a957);
3412 3420 background-image: linear-gradient(to bottom, #62c462, #57a957);
3413 3421 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0 );
3414 3422 border-color: #57a957 #57a957 #3d773d;
3415 3423 }
3416 3424
3425 .success_msg a {
3426 text-decoration: underline;
3427 color: #FFF !important;
3428 }
3429
3417 3430 .notice_msg {
3418 3431 background-color: #339bb9;
3419 3432 background-repeat: repeat-x;
3420 3433 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9) );
3421 3434 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
3422 3435 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
3423 3436 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9) );
3424 3437 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
3425 3438 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
3426 3439 background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
3427 3440 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0 );
3428 3441 border-color: #339bb9 #339bb9 #22697d;
3429 3442 }
3430 3443
3444 .notice_msg a {
3445 text-decoration: underline;
3446 }
3447
3431 3448 .success_msg, .error_msg, .notice_msg, .warning_msg {
3432 3449 font-size: 12px;
3433 3450 font-weight: 700;
3434 3451 min-height: 14px;
3435 3452 line-height: 14px;
3436 3453 margin-bottom: 10px;
3437 3454 margin-top: 0;
3438 3455 display: block;
3439 3456 overflow: auto;
3440 3457 padding: 6px 10px 6px 10px;
3441 3458 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
3442 3459 position: relative;
3443 3460 color: #FFF;
3444 3461 border-width: 1px;
3445 3462 border-style: solid;
3446 3463 -webkit-border-radius: 4px;
3447 3464 border-radius: 4px;
3448 3465 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
3449 3466 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
3450 3467 }
3451 3468
3452 3469 #msg_close {
3453 3470 background: transparent url("../icons/cross_grey_small.png") no-repeat scroll 0 0;
3454 3471 cursor: pointer;
3455 3472 height: 16px;
3456 3473 position: absolute;
3457 3474 right: 5px;
3458 3475 top: 5px;
3459 3476 width: 16px;
3460 3477 }
3461 3478 div#legend_data {
3462 3479 padding-left: 10px;
3463 3480 }
3464 3481 div#legend_container table {
3465 3482 border: none !important;
3466 3483 }
3467 3484 div#legend_container table, div#legend_choices table {
3468 3485 width: auto !important;
3469 3486 }
3470 3487
3471 3488 table#permissions_manage {
3472 3489 width: 0 !important;
3473 3490 }
3474 3491
3475 3492 table#permissions_manage span.private_repo_msg {
3476 3493 font-size: 0.8em;
3477 3494 opacity: 0.6;
3478 3495 }
3479 3496
3480 3497 table#permissions_manage td.private_repo_msg {
3481 3498 font-size: 0.8em;
3482 3499 }
3483 3500
3484 3501 table#permissions_manage tr#add_perm_input td {
3485 3502 vertical-align: middle;
3486 3503 }
3487 3504
3488 3505 div.gravatar {
3489 3506 background-color: #FFF;
3490 3507 float: left;
3491 3508 margin-right: 0.7em;
3492 3509 padding: 1px 1px 1px 1px;
3493 3510 line-height: 0;
3494 3511 -webkit-border-radius: 3px;
3495 3512 -khtml-border-radius: 3px;
3496 3513 border-radius: 3px;
3497 3514 }
3498 3515
3499 3516 div.gravatar img {
3500 3517 -webkit-border-radius: 2px;
3501 3518 -khtml-border-radius: 2px;
3502 3519 border-radius: 2px;
3503 3520 }
3504 3521
3505 3522 #header, #content, #footer {
3506 3523 min-width: 978px;
3507 3524 }
3508 3525
3509 3526 #content {
3510 3527 clear: both;
3511 3528 padding: 10px 10px 14px 10px;
3512 3529 }
3513 3530
3514 3531 #content.hover {
3515 3532 padding: 55px 10px 14px 10px !important;
3516 3533 }
3517 3534
3518 3535 #content div.box div.title div.search {
3519 3536 border-left: 1px solid #316293;
3520 3537 }
3521 3538
3522 3539 #content div.box div.title div.search div.input input {
3523 3540 border: 1px solid #316293;
3524 3541 }
3525 3542
3526 3543 .ui-btn {
3527 3544 color: #515151;
3528 3545 background-color: #DADADA;
3529 3546 background-repeat: repeat-x;
3530 3547 background-image: -khtml-gradient(linear, left top, left bottom, from(#F4F4F4),to(#DADADA) );
3531 3548 background-image: -moz-linear-gradient(top, #F4F4F4, #DADADA);
3532 3549 background-image: -ms-linear-gradient(top, #F4F4F4, #DADADA);
3533 3550 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F4F4F4),color-stop(100%, #DADADA) );
3534 3551 background-image: -webkit-linear-gradient(top, #F4F4F4, #DADADA) );
3535 3552 background-image: -o-linear-gradient(top, #F4F4F4, #DADADA) );
3536 3553 background-image: linear-gradient(to bottom, #F4F4F4, #DADADA);
3537 3554 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F4F4F4', endColorstr='#DADADA', GradientType=0);
3538 3555
3539 3556 border-top: 1px solid #DDD;
3540 3557 border-left: 1px solid #c6c6c6;
3541 3558 border-right: 1px solid #DDD;
3542 3559 border-bottom: 1px solid #c6c6c6;
3543 3560 color: #515151;
3544 3561 outline: none;
3545 3562 margin: 0px 3px 3px 0px;
3546 3563 -webkit-border-radius: 4px 4px 4px 4px !important;
3547 3564 -khtml-border-radius: 4px 4px 4px 4px !important;
3548 3565 border-radius: 4px 4px 4px 4px !important;
3549 3566 cursor: pointer !important;
3550 3567 padding: 3px 3px 3px 3px;
3551 3568 background-position: 0 -15px;
3552 3569
3553 3570 }
3554 3571
3555 3572 .ui-btn.disabled {
3556 3573 color: #999;
3557 3574 }
3558 3575
3559 3576 .ui-btn.xsmall {
3560 3577 padding: 1px 2px 1px 1px;
3561 3578 }
3562 3579
3563 3580 .ui-btn.large {
3564 3581 padding: 6px 12px;
3565 3582 }
3566 3583
3567 3584 .ui-btn.clone {
3568 3585 padding: 5px 2px 6px 1px;
3569 3586 margin: 0px 0px 3px -4px;
3570 3587 -webkit-border-radius: 0px 4px 4px 0px !important;
3571 3588 -khtml-border-radius: 0px 4px 4px 0px !important;
3572 3589 border-radius: 0px 4px 4px 0px !important;
3573 3590 width: 100px;
3574 3591 text-align: center;
3575 3592 display: inline-block;
3576 3593 position: relative;
3577 3594 top: -2px;
3578 3595 }
3579 3596 .ui-btn:focus {
3580 3597 outline: none;
3581 3598 }
3582 3599 .ui-btn:hover {
3583 3600 background-position: 0 -15px;
3584 3601 text-decoration: none;
3585 3602 color: #515151;
3586 3603 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 3px #FFFFFF !important;
3587 3604 }
3588 3605
3589 3606 .ui-btn.disabled:hover {
3590 3607 background-position: 0;
3591 3608 color: #999;
3592 3609 text-decoration: none;
3593 3610 box-shadow: none !important;
3594 3611 }
3595 3612
3596 3613 .ui-btn.red {
3597 3614 color: #fff;
3598 3615 background-color: #c43c35;
3599 3616 background-repeat: repeat-x;
3600 3617 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
3601 3618 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
3602 3619 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
3603 3620 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
3604 3621 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
3605 3622 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
3606 3623 background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
3607 3624 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
3608 3625 border-color: #c43c35 #c43c35 #882a25;
3609 3626 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
3610 3627 }
3611 3628
3612 3629
3613 3630 .ui-btn.blue {
3614 3631 color: #fff;
3615 3632 background-color: #339bb9;
3616 3633 background-repeat: repeat-x;
3617 3634 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));
3618 3635 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
3619 3636 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
3620 3637 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));
3621 3638 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
3622 3639 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
3623 3640 background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
3624 3641 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
3625 3642 border-color: #339bb9 #339bb9 #22697d;
3626 3643 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
3627 3644 }
3628 3645
3629 3646 .ui-btn.green {
3630 3647 background-color: #57a957;
3631 3648 background-repeat: repeat-x;
3632 3649 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));
3633 3650 background-image: -moz-linear-gradient(top, #62c462, #57a957);
3634 3651 background-image: -ms-linear-gradient(top, #62c462, #57a957);
3635 3652 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));
3636 3653 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
3637 3654 background-image: -o-linear-gradient(top, #62c462, #57a957);
3638 3655 background-image: linear-gradient(to bottom, #62c462, #57a957);
3639 3656 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
3640 3657 border-color: #57a957 #57a957 #3d773d;
3641 3658 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
3642 3659 }
3643 3660
3644 3661 .ui-btn.blue.hidden {
3645 3662 display: none;
3646 3663 }
3647 3664
3648 3665 .ui-btn.active {
3649 3666 font-weight: bold;
3650 3667 }
3651 3668
3652 3669 ins, div.options a:hover {
3653 3670 text-decoration: none;
3654 3671 }
3655 3672
3656 3673 img,
3657 3674 #header #header-inner #quick li a:hover span.normal,
3658 3675 #content div.box div.form div.fields div.field div.textarea table td table td a,
3659 3676 #clone_url,
3660 3677 #clone_url_id
3661 3678 {
3662 3679 border: none;
3663 3680 }
3664 3681
3665 3682 img.icon, .right .merge img {
3666 3683 vertical-align: bottom;
3667 3684 }
3668 3685
3669 3686 #header ul#logged-user, #content div.box div.title ul.links,
3670 3687 #content div.box div.message div.dismiss,
3671 3688 #content div.box div.traffic div.legend ul {
3672 3689 float: right;
3673 3690 margin: 0;
3674 3691 padding: 0;
3675 3692 }
3676 3693
3677 3694 #header #header-inner #home, #header #header-inner #logo,
3678 3695 #content div.box ul.left, #content div.box ol.left,
3679 3696 #content div.box div.pagination-left, div#commit_history,
3680 3697 div#legend_data, div#legend_container, div#legend_choices {
3681 3698 float: left;
3682 3699 }
3683 3700
3684 3701 #header #header-inner #quick li #quick_login,
3685 3702 #header #header-inner #quick li:hover ul ul,
3686 3703 #header #header-inner #quick li:hover ul ul ul,
3687 3704 #header #header-inner #quick li:hover ul ul ul ul,
3688 3705 #content #left #menu ul.closed, #content #left #menu li ul.collapsed, .yui-tt-shadow {
3689 3706 display: none;
3690 3707 }
3691 3708
3692 3709 #header #header-inner #quick li:hover #quick_login,
3693 3710 #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 {
3694 3711 display: block;
3695 3712 }
3696 3713
3697 3714 #content div.graph {
3698 3715 padding: 0 10px 10px;
3699 3716 }
3700 3717
3701 3718 #content div.box div.title ul.links li a:hover,
3702 3719 #content div.box div.title ul.links li.ui-tabs-selected a {
3703 3720
3704 3721 background: #6388ad; /* Old browsers */
3705 3722 background: -moz-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* FF3.6+ */
3706 3723 background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0))); /* Chrome,Safari4+ */
3707 3724 background: -webkit-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Chrome10+,Safari5.1+ */
3708 3725 background: -o-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Opera 11.10+ */
3709 3726 background: -ms-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* IE10+ */
3710 3727 background: linear-gradient(to bottom, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* W3C */
3711 3728 /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#88bfe8', endColorstr='#70b0e0',GradientType=0 ); /* IE6-9 */*/
3712 3729 }
3713 3730
3714 3731 #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 {
3715 3732 margin: 10px 24px 10px 44px;
3716 3733 }
3717 3734
3718 3735 #content div.box div.form, #content div.box div.table, #content div.box div.traffic {
3719 3736 position: relative;
3720 3737 clear: both;
3721 3738 overflow: hidden;
3722 3739 margin: 0;
3723 3740 padding: 0 20px 10px;
3724 3741 }
3725 3742
3726 3743 #content div.box div.form div.fields, #login div.form, #login div.form div.fields, #register div.form, #register div.form div.fields {
3727 3744 clear: both;
3728 3745 overflow: hidden;
3729 3746 margin: 0;
3730 3747 padding: 0;
3731 3748 }
3732 3749
3733 3750 #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 {
3734 3751 height: 1%;
3735 3752 display: block;
3736 3753 color: #363636;
3737 3754 margin: 0;
3738 3755 padding: 2px 0 0;
3739 3756 }
3740 3757
3741 3758 #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 {
3742 3759 background: #FBE3E4;
3743 3760 border-top: 1px solid #e1b2b3;
3744 3761 border-left: 1px solid #e1b2b3;
3745 3762 border-right: 1px solid #FBC2C4;
3746 3763 border-bottom: 1px solid #FBC2C4;
3747 3764 }
3748 3765
3749 3766 #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 {
3750 3767 background: #E6EFC2;
3751 3768 border-top: 1px solid #cebb98;
3752 3769 border-left: 1px solid #cebb98;
3753 3770 border-right: 1px solid #c6d880;
3754 3771 border-bottom: 1px solid #c6d880;
3755 3772 }
3756 3773
3757 3774 #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 {
3758 3775 margin: 0;
3759 3776 }
3760 3777
3761 3778 #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 {
3762 3779 margin: 0 0 0 0px !important;
3763 3780 padding: 0;
3764 3781 }
3765 3782
3766 3783 #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 {
3767 3784 margin: 0 0 0 200px;
3768 3785 padding: 0;
3769 3786 }
3770 3787
3771 3788 #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 {
3772 3789 color: #000;
3773 3790 text-decoration: none;
3774 3791 }
3775 3792
3776 3793 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus, #content div.box div.action a.ui-selectmenu-focus {
3777 3794 border: 1px solid #666;
3778 3795 }
3779 3796
3780 3797 #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 {
3781 3798 clear: both;
3782 3799 overflow: hidden;
3783 3800 margin: 0;
3784 3801 padding: 8px 0 2px;
3785 3802 }
3786 3803
3787 3804 #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 {
3788 3805 float: left;
3789 3806 margin: 0;
3790 3807 }
3791 3808
3792 3809 #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 {
3793 3810 height: 1%;
3794 3811 display: block;
3795 3812 float: left;
3796 3813 margin: 2px 0 0 4px;
3797 3814 }
3798 3815
3799 3816 div.form div.fields div.field div.button input,
3800 3817 #content div.box div.form div.fields div.buttons input
3801 3818 div.form div.fields div.buttons input,
3802 3819 #content div.box div.action div.button input {
3803 3820 font-size: 11px;
3804 3821 font-weight: 700;
3805 3822 margin: 0;
3806 3823 }
3807 3824
3808 3825 input.ui-button {
3809 3826 background: #e5e3e3 url("../images/button.png") repeat-x;
3810 3827 border-top: 1px solid #DDD;
3811 3828 border-left: 1px solid #c6c6c6;
3812 3829 border-right: 1px solid #DDD;
3813 3830 border-bottom: 1px solid #c6c6c6;
3814 3831 color: #515151 !important;
3815 3832 outline: none;
3816 3833 margin: 0;
3817 3834 padding: 6px 12px;
3818 3835 -webkit-border-radius: 4px 4px 4px 4px;
3819 3836 -khtml-border-radius: 4px 4px 4px 4px;
3820 3837 border-radius: 4px 4px 4px 4px;
3821 3838 box-shadow: 0 1px 0 #ececec;
3822 3839 cursor: pointer;
3823 3840 }
3824 3841
3825 3842 input.ui-button:hover {
3826 3843 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
3827 3844 border-top: 1px solid #ccc;
3828 3845 border-left: 1px solid #bebebe;
3829 3846 border-right: 1px solid #b1b1b1;
3830 3847 border-bottom: 1px solid #afafaf;
3831 3848 }
3832 3849
3833 3850 div.form div.fields div.field div.highlight, #content div.box div.form div.fields div.buttons div.highlight {
3834 3851 display: inline;
3835 3852 }
3836 3853
3837 3854 #content div.box div.form div.fields div.buttons, div.form div.fields div.buttons {
3838 3855 margin: 10px 0 0 200px;
3839 3856 padding: 0;
3840 3857 }
3841 3858
3842 3859 #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 {
3843 3860 margin: 10px 0 0;
3844 3861 }
3845 3862
3846 3863 #content div.box table td.user, #content div.box table td.address {
3847 3864 width: 10%;
3848 3865 text-align: center;
3849 3866 }
3850 3867
3851 3868 #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 {
3852 3869 text-align: right;
3853 3870 margin: 6px 0 0;
3854 3871 padding: 0;
3855 3872 }
3856 3873
3857 3874 #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 {
3858 3875 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
3859 3876 border-top: 1px solid #ccc;
3860 3877 border-left: 1px solid #bebebe;
3861 3878 border-right: 1px solid #b1b1b1;
3862 3879 border-bottom: 1px solid #afafaf;
3863 3880 color: #515151;
3864 3881 margin: 0;
3865 3882 padding: 6px 12px;
3866 3883 }
3867 3884
3868 3885 #content div.box div.pagination div.results, #content div.box div.pagination-wh div.results {
3869 3886 text-align: left;
3870 3887 float: left;
3871 3888 margin: 0;
3872 3889 padding: 0;
3873 3890 }
3874 3891
3875 3892 #content div.box div.pagination div.results span, #content div.box div.pagination-wh div.results span {
3876 3893 height: 1%;
3877 3894 display: block;
3878 3895 float: left;
3879 3896 background: #ebebeb url("../images/pager.png") repeat-x;
3880 3897 border-top: 1px solid #dedede;
3881 3898 border-left: 1px solid #cfcfcf;
3882 3899 border-right: 1px solid #c4c4c4;
3883 3900 border-bottom: 1px solid #c4c4c4;
3884 3901 color: #4A4A4A;
3885 3902 font-weight: 700;
3886 3903 margin: 0;
3887 3904 padding: 6px 8px;
3888 3905 }
3889 3906
3890 3907 #content div.box div.pagination ul.pager li.disabled, #content div.box div.pagination-wh a.disabled {
3891 3908 color: #B4B4B4;
3892 3909 padding: 6px;
3893 3910 }
3894 3911
3895 3912 #login, #register {
3896 3913 width: 520px;
3897 3914 margin: 10% auto 0;
3898 3915 padding: 0;
3899 3916 }
3900 3917
3901 3918 #login div.color, #register div.color {
3902 3919 clear: both;
3903 3920 overflow: hidden;
3904 3921 background: #FFF;
3905 3922 margin: 10px auto 0;
3906 3923 padding: 3px 3px 3px 0;
3907 3924 }
3908 3925
3909 3926 #login div.color a, #register div.color a {
3910 3927 width: 20px;
3911 3928 height: 20px;
3912 3929 display: block;
3913 3930 float: left;
3914 3931 margin: 0 0 0 3px;
3915 3932 padding: 0;
3916 3933 }
3917 3934
3918 3935 #login div.title h5, #register div.title h5 {
3919 3936 color: #fff;
3920 3937 margin: 10px;
3921 3938 padding: 0;
3922 3939 }
3923 3940
3924 3941 #login div.form div.fields div.field, #register div.form div.fields div.field {
3925 3942 clear: both;
3926 3943 overflow: hidden;
3927 3944 margin: 0;
3928 3945 padding: 0 0 10px;
3929 3946 }
3930 3947
3931 3948 #login div.form div.fields div.field span.error-message, #register div.form div.fields div.field span.error-message {
3932 3949 height: 1%;
3933 3950 display: block;
3934 3951 color: red;
3935 3952 margin: 8px 0 0;
3936 3953 padding: 0;
3937 3954 max-width: 320px;
3938 3955 }
3939 3956
3940 3957 #login div.form div.fields div.field div.label label, #register div.form div.fields div.field div.label label {
3941 3958 color: #000;
3942 3959 font-weight: 700;
3943 3960 }
3944 3961
3945 3962 #login div.form div.fields div.field div.input, #register div.form div.fields div.field div.input {
3946 3963 float: left;
3947 3964 margin: 0;
3948 3965 padding: 0;
3949 3966 }
3950 3967
3951 3968 #login div.form div.fields div.field div.input input.large {
3952 3969 width: 250px;
3953 3970 }
3954 3971
3955 3972 #login div.form div.fields div.field div.checkbox, #register div.form div.fields div.field div.checkbox {
3956 3973 margin: 0 0 0 184px;
3957 3974 padding: 0;
3958 3975 }
3959 3976
3960 3977 #login div.form div.fields div.field div.checkbox label, #register div.form div.fields div.field div.checkbox label {
3961 3978 color: #565656;
3962 3979 font-weight: 700;
3963 3980 }
3964 3981
3965 3982 #login div.form div.fields div.buttons input, #register div.form div.fields div.buttons input {
3966 3983 color: #000;
3967 3984 font-size: 1em;
3968 3985 font-weight: 700;
3969 3986 margin: 0;
3970 3987 }
3971 3988
3972 3989 #changeset_content .container .wrapper, #graph_content .container .wrapper {
3973 3990 width: 600px;
3974 3991 }
3975 3992
3976 3993 #changeset_content .container .date, .ac .match {
3977 3994 font-weight: 700;
3978 3995 padding-top: 5px;
3979 3996 padding-bottom: 5px;
3980 3997 }
3981 3998
3982 3999 div#legend_container table td, div#legend_choices table td {
3983 4000 border: none !important;
3984 4001 height: 20px !important;
3985 4002 padding: 0 !important;
3986 4003 }
3987 4004
3988 4005 .q_filter_box {
3989 4006 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3990 4007 -webkit-border-radius: 4px;
3991 4008 border-radius: 4px;
3992 4009 border: 0 none;
3993 4010 color: #AAAAAA;
3994 4011 margin-bottom: -4px;
3995 4012 margin-top: -4px;
3996 4013 padding-left: 3px;
3997 4014 }
3998 4015
3999 4016 #node_filter {
4000 4017 border: 0px solid #545454;
4001 4018 color: #AAAAAA;
4002 4019 padding-left: 3px;
4003 4020 }
4004 4021
4005 4022
4006 4023 .group_members_wrap {
4007 4024 min-height: 85px;
4008 4025 padding-left: 20px;
4009 4026 }
4010 4027
4011 4028 .group_members .group_member {
4012 4029 height: 30px;
4013 4030 padding: 0px 0px 0px 0px;
4014 4031 }
4015 4032
4016 4033 .reviewers_member {
4017 4034 height: 15px;
4018 4035 padding: 0px 0px 0px 10px;
4019 4036 }
4020 4037
4021 4038 .emails_wrap {
4022 4039 padding: 0px 20px;
4023 4040 }
4024 4041
4025 4042 .emails_wrap .email_entry {
4026 4043 height: 30px;
4027 4044 padding: 0px 0px 0px 10px;
4028 4045 }
4029 4046 .emails_wrap .email_entry .email {
4030 4047 float: left
4031 4048 }
4032 4049 .emails_wrap .email_entry .email_action {
4033 4050 float: left
4034 4051 }
4035 4052
4036 4053 .ips_wrap {
4037 4054 padding: 0px 20px;
4038 4055 }
4039 4056
4040 4057 .ips_wrap .ip_entry {
4041 4058 height: 30px;
4042 4059 padding: 0px 0px 0px 10px;
4043 4060 }
4044 4061 .ips_wrap .ip_entry .ip {
4045 4062 float: left
4046 4063 }
4047 4064 .ips_wrap .ip_entry .ip_action {
4048 4065 float: left
4049 4066 }
4050 4067
4051 4068
4052 4069 /*README STYLE*/
4053 4070
4054 4071 div.readme {
4055 4072 padding: 0px;
4056 4073 }
4057 4074
4058 4075 div.readme h2 {
4059 4076 font-weight: normal;
4060 4077 }
4061 4078
4062 4079 div.readme .readme_box {
4063 4080 background-color: #fafafa;
4064 4081 }
4065 4082
4066 4083 div.readme .readme_box {
4067 4084 clear: both;
4068 4085 overflow: hidden;
4069 4086 margin: 0;
4070 4087 padding: 0 20px 10px;
4071 4088 }
4072 4089
4073 4090 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 {
4074 4091 border-bottom: 0 !important;
4075 4092 margin: 0 !important;
4076 4093 padding: 0 !important;
4077 4094 line-height: 1.5em !important;
4078 4095 }
4079 4096
4080 4097
4081 4098 div.readme .readme_box h1:first-child {
4082 4099 padding-top: .25em !important;
4083 4100 }
4084 4101
4085 4102 div.readme .readme_box h2, div.readme .readme_box h3 {
4086 4103 margin: 1em 0 !important;
4087 4104 }
4088 4105
4089 4106 div.readme .readme_box h2 {
4090 4107 margin-top: 1.5em !important;
4091 4108 border-top: 4px solid #e0e0e0 !important;
4092 4109 padding-top: .5em !important;
4093 4110 }
4094 4111
4095 4112 div.readme .readme_box p {
4096 4113 color: black !important;
4097 4114 margin: 1em 0 !important;
4098 4115 line-height: 1.5em !important;
4099 4116 }
4100 4117
4101 4118 div.readme .readme_box ul {
4102 4119 list-style: disc !important;
4103 4120 margin: 1em 0 1em 2em !important;
4104 4121 }
4105 4122
4106 4123 div.readme .readme_box ol {
4107 4124 list-style: decimal;
4108 4125 margin: 1em 0 1em 2em !important;
4109 4126 }
4110 4127
4111 4128 div.readme .readme_box pre, code {
4112 4129 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
4113 4130 }
4114 4131
4115 4132 div.readme .readme_box code {
4116 4133 font-size: 12px !important;
4117 4134 background-color: ghostWhite !important;
4118 4135 color: #444 !important;
4119 4136 padding: 0 .2em !important;
4120 4137 border: 1px solid #dedede !important;
4121 4138 }
4122 4139
4123 4140 div.readme .readme_box pre code {
4124 4141 padding: 0 !important;
4125 4142 font-size: 12px !important;
4126 4143 background-color: #eee !important;
4127 4144 border: none !important;
4128 4145 }
4129 4146
4130 4147 div.readme .readme_box pre {
4131 4148 margin: 1em 0;
4132 4149 font-size: 12px;
4133 4150 background-color: #eee;
4134 4151 border: 1px solid #ddd;
4135 4152 padding: 5px;
4136 4153 color: #444;
4137 4154 overflow: auto;
4138 4155 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
4139 4156 -webkit-border-radius: 3px;
4140 4157 border-radius: 3px;
4141 4158 }
4142 4159
4143 4160 div.readme .readme_box table {
4144 4161 display: table;
4145 4162 border-collapse: separate;
4146 4163 border-spacing: 2px;
4147 4164 border-color: gray;
4148 4165 width: auto !important;
4149 4166 }
4150 4167
4151 4168
4152 4169 /** RST STYLE **/
4153 4170
4154 4171
4155 4172 div.rst-block {
4156 4173 padding: 0px;
4157 4174 }
4158 4175
4159 4176 div.rst-block h2 {
4160 4177 font-weight: normal;
4161 4178 }
4162 4179
4163 4180 div.rst-block {
4164 4181 background-color: #fafafa;
4165 4182 }
4166 4183
4167 4184 div.rst-block {
4168 4185 clear: both;
4169 4186 overflow: hidden;
4170 4187 margin: 0;
4171 4188 padding: 0 20px 10px;
4172 4189 }
4173 4190
4174 4191 div.rst-block h1, div.rst-block h2, div.rst-block h3, div.rst-block h4, div.rst-block h5, div.rst-block h6 {
4175 4192 border-bottom: 0 !important;
4176 4193 margin: 0 !important;
4177 4194 padding: 0 !important;
4178 4195 line-height: 1.5em !important;
4179 4196 }
4180 4197
4181 4198
4182 4199 div.rst-block h1:first-child {
4183 4200 padding-top: .25em !important;
4184 4201 }
4185 4202
4186 4203 div.rst-block h2, div.rst-block h3 {
4187 4204 margin: 1em 0 !important;
4188 4205 }
4189 4206
4190 4207 div.rst-block h2 {
4191 4208 margin-top: 1.5em !important;
4192 4209 border-top: 4px solid #e0e0e0 !important;
4193 4210 padding-top: .5em !important;
4194 4211 }
4195 4212
4196 4213 div.rst-block p {
4197 4214 color: black !important;
4198 4215 margin: 1em 0 !important;
4199 4216 line-height: 1.5em !important;
4200 4217 }
4201 4218
4202 4219 div.rst-block ul {
4203 4220 list-style: disc !important;
4204 4221 margin: 1em 0 1em 2em !important;
4205 4222 }
4206 4223
4207 4224 div.rst-block ol {
4208 4225 list-style: decimal;
4209 4226 margin: 1em 0 1em 2em !important;
4210 4227 }
4211 4228
4212 4229 div.rst-block pre, code {
4213 4230 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
4214 4231 }
4215 4232
4216 4233 div.rst-block code {
4217 4234 font-size: 12px !important;
4218 4235 background-color: ghostWhite !important;
4219 4236 color: #444 !important;
4220 4237 padding: 0 .2em !important;
4221 4238 border: 1px solid #dedede !important;
4222 4239 }
4223 4240
4224 4241 div.rst-block pre code {
4225 4242 padding: 0 !important;
4226 4243 font-size: 12px !important;
4227 4244 background-color: #eee !important;
4228 4245 border: none !important;
4229 4246 }
4230 4247
4231 4248 div.rst-block pre {
4232 4249 margin: 1em 0;
4233 4250 font-size: 12px;
4234 4251 background-color: #eee;
4235 4252 border: 1px solid #ddd;
4236 4253 padding: 5px;
4237 4254 color: #444;
4238 4255 overflow: auto;
4239 4256 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
4240 4257 -webkit-border-radius: 3px;
4241 4258 border-radius: 3px;
4242 4259 }
4243 4260
4244 4261
4245 4262 /** comment main **/
4246 4263 .comments {
4247 4264 padding: 10px 20px;
4248 4265 }
4249 4266
4250 4267 .comments .comment {
4251 4268 border: 1px solid #ddd;
4252 4269 margin-top: 10px;
4253 4270 -webkit-border-radius: 4px;
4254 4271 border-radius: 4px;
4255 4272 }
4256 4273
4257 4274 .comments .comment .meta {
4258 4275 background: #f8f8f8;
4259 4276 padding: 4px;
4260 4277 border-bottom: 1px solid #ddd;
4261 4278 height: 18px;
4262 4279 }
4263 4280
4264 4281 .comments .comment .meta img {
4265 4282 vertical-align: middle;
4266 4283 }
4267 4284
4268 4285 .comments .comment .meta .user {
4269 4286 font-weight: bold;
4270 4287 float: left;
4271 4288 padding: 4px 2px 2px 2px;
4272 4289 }
4273 4290
4274 4291 .comments .comment .meta .date {
4275 4292 float: left;
4276 4293 padding: 4px 4px 0px 4px;
4277 4294 }
4278 4295
4279 4296 .comments .comment .text {
4280 4297 background-color: #FAFAFA;
4281 4298 }
4282 4299 .comment .text div.rst-block p {
4283 4300 margin: 0.5em 0px !important;
4284 4301 }
4285 4302
4286 4303 .comments .comments-number {
4287 4304 padding: 0px 0px 10px 0px;
4288 4305 font-weight: bold;
4289 4306 color: #666;
4290 4307 font-size: 16px;
4291 4308 }
4292 4309
4293 4310 /** comment form **/
4294 4311
4295 4312 .status-block {
4296 4313 min-height: 80px;
4297 4314 clear: both
4298 4315 }
4299 4316
4300 4317 .comment-form .clearfix {
4301 4318 background: #EEE;
4302 4319 -webkit-border-radius: 4px;
4303 4320 border-radius: 4px;
4304 4321 padding: 10px;
4305 4322 }
4306 4323
4307 4324 div.comment-form {
4308 4325 margin-top: 20px;
4309 4326 }
4310 4327
4311 4328 .comment-form strong {
4312 4329 display: block;
4313 4330 margin-bottom: 15px;
4314 4331 }
4315 4332
4316 4333 .comment-form textarea {
4317 4334 width: 100%;
4318 4335 height: 100px;
4319 4336 font-family: 'Monaco', 'Courier', 'Courier New', monospace;
4320 4337 }
4321 4338
4322 4339 form.comment-form {
4323 4340 margin-top: 10px;
4324 4341 margin-left: 10px;
4325 4342 }
4326 4343
4327 4344 .comment-form-submit {
4328 4345 margin-top: 5px;
4329 4346 margin-left: 525px;
4330 4347 }
4331 4348
4332 4349 .file-comments {
4333 4350 display: none;
4334 4351 }
4335 4352
4336 4353 .comment-form .comment {
4337 4354 margin-left: 10px;
4338 4355 }
4339 4356
4340 4357 .comment-form .comment-help {
4341 4358 padding: 0px 0px 5px 0px;
4342 4359 color: #666;
4343 4360 }
4344 4361
4345 4362 .comment-form .comment-button {
4346 4363 padding-top: 5px;
4347 4364 }
4348 4365
4349 4366 .add-another-button {
4350 4367 margin-left: 10px;
4351 4368 margin-top: 10px;
4352 4369 margin-bottom: 10px;
4353 4370 }
4354 4371
4355 4372 .comment .buttons {
4356 4373 float: right;
4357 4374 padding: 2px 2px 0px 0px;
4358 4375 }
4359 4376
4360 4377
4361 4378 .show-inline-comments {
4362 4379 position: relative;
4363 4380 top: 1px
4364 4381 }
4365 4382
4366 4383 /** comment inline form **/
4367 4384 .comment-inline-form .overlay {
4368 4385 display: none;
4369 4386 }
4370 4387 .comment-inline-form .overlay.submitting {
4371 4388 display: block;
4372 4389 background: none repeat scroll 0 0 white;
4373 4390 font-size: 16px;
4374 4391 opacity: 0.5;
4375 4392 position: absolute;
4376 4393 text-align: center;
4377 4394 vertical-align: top;
4378 4395
4379 4396 }
4380 4397 .comment-inline-form .overlay.submitting .overlay-text {
4381 4398 width: 100%;
4382 4399 margin-top: 5%;
4383 4400 }
4384 4401
4385 4402 .comment-inline-form .clearfix {
4386 4403 background: #EEE;
4387 4404 -webkit-border-radius: 4px;
4388 4405 border-radius: 4px;
4389 4406 padding: 5px;
4390 4407 }
4391 4408
4392 4409 div.comment-inline-form {
4393 4410 padding: 4px 0px 6px 0px;
4394 4411 }
4395 4412
4396 4413 .comment-inline-form strong {
4397 4414 display: block;
4398 4415 margin-bottom: 15px;
4399 4416 }
4400 4417
4401 4418 .comment-inline-form textarea {
4402 4419 width: 100%;
4403 4420 height: 100px;
4404 4421 font-family: 'Monaco', 'Courier', 'Courier New', monospace;
4405 4422 }
4406 4423
4407 4424 form.comment-inline-form {
4408 4425 margin-top: 10px;
4409 4426 margin-left: 10px;
4410 4427 }
4411 4428
4412 4429 .comment-inline-form-submit {
4413 4430 margin-top: 5px;
4414 4431 margin-left: 525px;
4415 4432 }
4416 4433
4417 4434 .file-comments {
4418 4435 display: none;
4419 4436 }
4420 4437
4421 4438 .comment-inline-form .comment {
4422 4439 margin-left: 10px;
4423 4440 }
4424 4441
4425 4442 .comment-inline-form .comment-help {
4426 4443 padding: 0px 0px 2px 0px;
4427 4444 color: #666666;
4428 4445 font-size: 10px;
4429 4446 }
4430 4447
4431 4448 .comment-inline-form .comment-button {
4432 4449 padding-top: 5px;
4433 4450 }
4434 4451
4435 4452 /** comment inline **/
4436 4453 .inline-comments {
4437 4454 padding: 10px 20px;
4438 4455 }
4439 4456
4440 4457 .inline-comments div.rst-block {
4441 4458 clear: both;
4442 4459 overflow: hidden;
4443 4460 margin: 0;
4444 4461 padding: 0 20px 0px;
4445 4462 }
4446 4463 .inline-comments .comment {
4447 4464 border: 1px solid #ddd;
4448 4465 -webkit-border-radius: 4px;
4449 4466 border-radius: 4px;
4450 4467 margin: 3px 3px 5px 5px;
4451 4468 background-color: #FAFAFA;
4452 4469 }
4453 4470 .inline-comments .add-comment {
4454 4471 padding: 2px 4px 8px 5px;
4455 4472 }
4456 4473
4457 4474 .inline-comments .comment-wrapp {
4458 4475 padding: 1px;
4459 4476 }
4460 4477 .inline-comments .comment .meta {
4461 4478 background: #f8f8f8;
4462 4479 padding: 4px;
4463 4480 border-bottom: 1px solid #ddd;
4464 4481 height: 20px;
4465 4482 }
4466 4483
4467 4484 .inline-comments .comment .meta img {
4468 4485 vertical-align: middle;
4469 4486 }
4470 4487
4471 4488 .inline-comments .comment .meta .user {
4472 4489 font-weight: bold;
4473 4490 float: left;
4474 4491 padding: 3px;
4475 4492 }
4476 4493
4477 4494 .inline-comments .comment .meta .date {
4478 4495 float: left;
4479 4496 padding: 3px;
4480 4497 }
4481 4498
4482 4499 .inline-comments .comment .text {
4483 4500 background-color: #FAFAFA;
4484 4501 }
4485 4502
4486 4503 .inline-comments .comments-number {
4487 4504 padding: 0px 0px 10px 0px;
4488 4505 font-weight: bold;
4489 4506 color: #666;
4490 4507 font-size: 16px;
4491 4508 }
4492 4509 .inline-comments-button .add-comment {
4493 4510 margin: 2px 0px 8px 5px !important
4494 4511 }
4495 4512
4496 4513 .notification-paginator {
4497 4514 padding: 0px 0px 4px 16px;
4498 4515 float: left;
4499 4516 }
4500 4517
4501 4518 #context-pages .pull-request span,
4502 4519 .menu_link_notifications {
4503 4520 padding: 4px 4px !important;
4504 4521 text-align: center;
4505 4522 color: #888 !important;
4506 4523 background-color: #DEDEDE !important;
4507 4524 border-radius: 4px !important;
4508 4525 -webkit-border-radius: 4px !important;
4509 4526 }
4510 4527
4511 4528 .notification-header {
4512 4529 padding-top: 6px;
4513 4530 }
4514 4531 .notification-header .desc {
4515 4532 font-size: 16px;
4516 4533 height: 24px;
4517 4534 float: left
4518 4535 }
4519 4536 .notification-list .container.unread {
4520 4537 background: none repeat scroll 0 0 rgba(255, 255, 180, 0.6);
4521 4538 }
4522 4539 .notification-header .gravatar {
4523 4540 background: none repeat scroll 0 0 transparent;
4524 4541 padding: 0px 0px 0px 8px;
4525 4542 }
4526 4543 .notification-list .container .notification-header .desc {
4527 4544 font-weight: bold;
4528 4545 font-size: 17px;
4529 4546 }
4530 4547 .notification-table {
4531 4548 border: 1px solid #ccc;
4532 4549 -webkit-border-radius: 6px 6px 6px 6px;
4533 4550 border-radius: 6px 6px 6px 6px;
4534 4551 clear: both;
4535 4552 margin: 0px 20px 0px 20px;
4536 4553 }
4537 4554 .notification-header .delete-notifications {
4538 4555 float: right;
4539 4556 padding-top: 8px;
4540 4557 cursor: pointer;
4541 4558 }
4542 4559 .notification-header .read-notifications {
4543 4560 float: right;
4544 4561 padding-top: 8px;
4545 4562 cursor: pointer;
4546 4563 }
4547 4564 .notification-subject {
4548 4565 clear: both;
4549 4566 border-bottom: 1px solid #eee;
4550 4567 padding: 5px 0px 5px 38px;
4551 4568 }
4552 4569
4553 4570 .notification-body {
4554 4571 clear: both;
4555 4572 margin: 34px 2px 2px 8px
4556 4573 }
4557 4574
4558 4575 /****
4559 4576 PULL REQUESTS
4560 4577 *****/
4561 4578 .pullrequests_section_head {
4562 4579 padding: 10px 10px 10px 0px;
4563 4580 font-size: 16px;
4564 4581 font-weight: bold;
4565 4582 }
4566 4583
4567 4584 /****
4568 4585 PERMS
4569 4586 *****/
4570 4587 #perms .perms_section_head {
4571 4588 padding: 10px 10px 10px 0px;
4572 4589 font-size: 16px;
4573 4590 font-weight: bold;
4574 4591 }
4575 4592
4576 4593 #perms .perm_tag {
4577 4594 padding: 1px 3px 1px 3px;
4578 4595 font-size: 10px;
4579 4596 font-weight: bold;
4580 4597 text-transform: uppercase;
4581 4598 white-space: nowrap;
4582 4599 -webkit-border-radius: 3px;
4583 4600 border-radius: 3px;
4584 4601 }
4585 4602
4586 4603 #perms .perm_tag.admin {
4587 4604 background-color: #B94A48;
4588 4605 color: #ffffff;
4589 4606 }
4590 4607
4591 4608 #perms .perm_tag.write {
4592 4609 background-color: #DB7525;
4593 4610 color: #ffffff;
4594 4611 }
4595 4612
4596 4613 #perms .perm_tag.read {
4597 4614 background-color: #468847;
4598 4615 color: #ffffff;
4599 4616 }
4600 4617
4601 4618 #perms .perm_tag.none {
4602 4619 background-color: #bfbfbf;
4603 4620 color: #ffffff;
4604 4621 }
4605 4622
4606 4623 .perm-gravatar {
4607 4624 vertical-align: middle;
4608 4625 padding: 2px;
4609 4626 }
4610 4627 .perm-gravatar-ac {
4611 4628 vertical-align: middle;
4612 4629 padding: 2px;
4613 4630 width: 14px;
4614 4631 height: 14px;
4615 4632 }
4616 4633
4617 4634 /*****************************************************************************
4618 4635 DIFFS CSS
4619 4636 ******************************************************************************/
4620 4637 .diff-collapse {
4621 4638 text-align: center;
4622 4639 margin-bottom: -15px;
4623 4640 }
4624 4641 .diff-collapse-button {
4625 4642 cursor: pointer;
4626 4643 color: #666;
4627 4644 font-size: 16px;
4628 4645 }
4629 4646 .diff-container {
4630 4647
4631 4648 }
4632 4649
4633 4650 .diff-container.hidden {
4634 4651 display: none;
4635 4652 overflow: hidden;
4636 4653 }
4637 4654
4638 4655
4639 4656 div.diffblock {
4640 4657 overflow: auto;
4641 4658 padding: 0px;
4642 4659 border: 1px solid #ccc;
4643 4660 background: #f8f8f8;
4644 4661 font-size: 100%;
4645 4662 line-height: 100%;
4646 4663 /* new */
4647 4664 line-height: 125%;
4648 4665 -webkit-border-radius: 6px 6px 0px 0px;
4649 4666 border-radius: 6px 6px 0px 0px;
4650 4667 }
4651 4668 div.diffblock.margined {
4652 4669 margin: 0px 20px 0px 20px;
4653 4670 }
4654 4671 div.diffblock .code-header {
4655 4672 border-bottom: 1px solid #CCCCCC;
4656 4673 background: #EEEEEE;
4657 4674 padding: 10px 0 10px 0;
4658 4675 height: 14px;
4659 4676 }
4660 4677
4661 4678 div.diffblock .code-header.banner {
4662 4679 border-bottom: 1px solid #CCCCCC;
4663 4680 background: #EEEEEE;
4664 4681 height: 14px;
4665 4682 margin: 0px 95px 0px 95px;
4666 4683 padding: 3px 3px 11px 3px;
4667 4684 }
4668 4685
4669 4686 div.diffblock .code-header.cv {
4670 4687 height: 34px;
4671 4688 }
4672 4689 div.diffblock .code-header-title {
4673 4690 padding: 0px 0px 10px 5px !important;
4674 4691 margin: 0 !important;
4675 4692 }
4676 4693 div.diffblock .code-header .hash {
4677 4694 float: left;
4678 4695 padding: 2px 0 0 2px;
4679 4696 }
4680 4697 div.diffblock .code-header .date {
4681 4698 float: left;
4682 4699 text-transform: uppercase;
4683 4700 padding: 2px 0px 0px 2px;
4684 4701 }
4685 4702 div.diffblock .code-header div {
4686 4703 margin-left: 4px;
4687 4704 font-weight: bold;
4688 4705 font-size: 14px;
4689 4706 }
4690 4707
4691 4708 div.diffblock .parents {
4692 4709 float: left;
4693 4710 height: 26px;
4694 4711 width: 100px;
4695 4712 font-size: 10px;
4696 4713 font-weight: 400;
4697 4714 vertical-align: middle;
4698 4715 padding: 0px 2px 2px 2px;
4699 4716 background-color: #eeeeee;
4700 4717 border-bottom: 1px solid #CCCCCC;
4701 4718 }
4702 4719
4703 4720 div.diffblock .children {
4704 4721 float: right;
4705 4722 height: 26px;
4706 4723 width: 100px;
4707 4724 font-size: 10px;
4708 4725 font-weight: 400;
4709 4726 vertical-align: middle;
4710 4727 text-align: right;
4711 4728 padding: 0px 2px 2px 2px;
4712 4729 background-color: #eeeeee;
4713 4730 border-bottom: 1px solid #CCCCCC;
4714 4731 }
4715 4732
4716 4733 div.diffblock .code-body {
4717 4734 background: #FFFFFF;
4718 4735 }
4719 4736 div.diffblock pre.raw {
4720 4737 background: #FFFFFF;
4721 4738 color: #000000;
4722 4739 }
4723 4740 table.code-difftable {
4724 4741 border-collapse: collapse;
4725 4742 width: 99%;
4726 4743 border-radius: 0px !important;
4727 4744 }
4728 4745 table.code-difftable td {
4729 4746 padding: 0 !important;
4730 4747 background: none !important;
4731 4748 border: 0 !important;
4732 4749 vertical-align: baseline !important
4733 4750 }
4734 4751 table.code-difftable .context {
4735 4752 background: none repeat scroll 0 0 #DDE7EF;
4736 4753 }
4737 4754 table.code-difftable .add {
4738 4755 background: none repeat scroll 0 0 #DDFFDD;
4739 4756 }
4740 4757 table.code-difftable .add ins {
4741 4758 background: none repeat scroll 0 0 #AAFFAA;
4742 4759 text-decoration: none;
4743 4760 }
4744 4761 table.code-difftable .del {
4745 4762 background: none repeat scroll 0 0 #FFDDDD;
4746 4763 }
4747 4764 table.code-difftable .del del {
4748 4765 background: none repeat scroll 0 0 #FFAAAA;
4749 4766 text-decoration: none;
4750 4767 }
4751 4768
4752 4769 /** LINE NUMBERS **/
4753 4770 table.code-difftable .lineno {
4754 4771
4755 4772 padding-left: 2px;
4756 4773 padding-right: 2px;
4757 4774 text-align: right;
4758 4775 width: 32px;
4759 4776 -moz-user-select: none;
4760 4777 -webkit-user-select: none;
4761 4778 border-right: 1px solid #CCC !important;
4762 4779 border-left: 0px solid #CCC !important;
4763 4780 border-top: 0px solid #CCC !important;
4764 4781 border-bottom: none !important;
4765 4782 vertical-align: middle !important;
4766 4783
4767 4784 }
4768 4785 table.code-difftable .lineno.new {
4769 4786 }
4770 4787 table.code-difftable .lineno.old {
4771 4788 }
4772 4789 table.code-difftable .lineno a {
4773 4790 color: #747474 !important;
4774 4791 font: 11px "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace !important;
4775 4792 letter-spacing: -1px;
4776 4793 text-align: right;
4777 4794 padding-right: 2px;
4778 4795 cursor: pointer;
4779 4796 display: block;
4780 4797 width: 32px;
4781 4798 }
4782 4799
4783 4800 table.code-difftable .lineno-inline {
4784 4801 background: none repeat scroll 0 0 #FFF !important;
4785 4802 padding-left: 2px;
4786 4803 padding-right: 2px;
4787 4804 text-align: right;
4788 4805 width: 30px;
4789 4806 -moz-user-select: none;
4790 4807 -webkit-user-select: none;
4791 4808 }
4792 4809
4793 4810 /** CODE **/
4794 4811 table.code-difftable .code {
4795 4812 display: block;
4796 4813 width: 100%;
4797 4814 }
4798 4815 table.code-difftable .code td {
4799 4816 margin: 0;
4800 4817 padding: 0;
4801 4818 }
4802 4819 table.code-difftable .code pre {
4803 4820 margin: 0;
4804 4821 padding: 0;
4805 4822 height: 17px;
4806 4823 line-height: 17px;
4807 4824 }
4808 4825
4809 4826
4810 4827 .diffblock.margined.comm .line .code:hover {
4811 4828 background-color: #FFFFCC !important;
4812 4829 cursor: pointer !important;
4813 4830 background-image: url("../images/icons/comment_add.png") !important;
4814 4831 background-repeat: no-repeat !important;
4815 4832 background-position: right !important;
4816 4833 background-position: 0% 50% !important;
4817 4834 }
4818 4835 .diffblock.margined.comm .line .code.no-comment:hover {
4819 4836 background-image: none !important;
4820 4837 cursor: auto !important;
4821 4838 background-color: inherit !important;
4822 4839 }
4823 4840
4824 4841 div.comment:target>.comment-wrapp {
4825 4842 border: solid 2px #ee0 !important;
4826 4843 }
4827 4844
4828 4845 .lineno:target a {
4829 4846 border: solid 2px #ee0 !important;
4830 4847 margin: -2px;
4831 4848 } No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now