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