##// END OF EJS Templates
fixed deletion of repository on filesystem, works based on scm type for git and hg....
marcink -
r668:dff6d5cb beta
parent child Browse files
Show More
@@ -1,445 +1,447 b''
1 1 """Helper functions
2 2
3 3 Consists of functions to typically be used within templates, but also
4 4 available to Controllers. This module is available to both as 'h'.
5 5 """
6 6 from pygments.formatters import HtmlFormatter
7 7 from pygments import highlight as code_highlight
8 8 from pylons import url, app_globals as g
9 9 from pylons.i18n.translation import _, ungettext
10 10 from vcs.utils.annotate import annotate_highlight
11 11 from webhelpers.html import literal, HTML, escape
12 12 from webhelpers.html.tools import *
13 13 from webhelpers.html.builder import make_tag
14 14 from webhelpers.html.tags import auto_discovery_link, checkbox, css_classes, \
15 15 end_form, file, form, hidden, image, javascript_link, link_to, link_to_if, \
16 16 link_to_unless, ol, required_legend, select, stylesheet_link, submit, text, \
17 17 password, textarea, title, ul, xml_declaration, radio
18 18 from webhelpers.html.tools import auto_link, button_to, highlight, js_obfuscate, \
19 19 mail_to, strip_links, strip_tags, tag_re
20 20 from webhelpers.number import format_byte_size, format_bit_size
21 21 from webhelpers.pylonslib import Flash as _Flash
22 22 from webhelpers.pylonslib.secure_form import secure_form
23 23 from webhelpers.text import chop_at, collapse, convert_accented_entities, \
24 24 convert_misc_entities, lchop, plural, rchop, remove_formatting, \
25 25 replace_whitespace, urlify, truncate, wrap_paragraphs
26 26 from webhelpers.date import time_ago_in_words
27 27
28 28 #Custom helpers here :)
29 29 class _Link(object):
30 30 '''
31 31 Make a url based on label and url with help of url_for
32 32 :param label:name of link if not defined url is used
33 33 :param url: the url for link
34 34 '''
35 35
36 36 def __call__(self, label='', *url_, **urlargs):
37 37 if label is None or '':
38 38 label = url
39 39 link_fn = link_to(label, url(*url_, **urlargs))
40 40 return link_fn
41 41
42 42 link = _Link()
43 43
44 44 class _GetError(object):
45 45
46 46 def __call__(self, field_name, form_errors):
47 47 tmpl = """<span class="error_msg">%s</span>"""
48 48 if form_errors and form_errors.has_key(field_name):
49 49 return literal(tmpl % form_errors.get(field_name))
50 50
51 51 get_error = _GetError()
52 52
53 53 def recursive_replace(str, replace=' '):
54 54 """
55 55 Recursive replace of given sign to just one instance
56 56 :param str: given string
57 57 :param replace:char to find and replace multiple instances
58 58
59 59 Examples::
60 60 >>> recursive_replace("Mighty---Mighty-Bo--sstones",'-')
61 61 'Mighty-Mighty-Bo-sstones'
62 62 """
63 63
64 64 if str.find(replace * 2) == -1:
65 65 return str
66 66 else:
67 67 str = str.replace(replace * 2, replace)
68 68 return recursive_replace(str, replace)
69 69
70 70 class _ToolTip(object):
71 71
72 72 def __call__(self, tooltip_title, trim_at=50):
73 73 """
74 74 Special function just to wrap our text into nice formatted autowrapped
75 75 text
76 76 :param tooltip_title:
77 77 """
78 78
79 79 return wrap_paragraphs(escape(tooltip_title), trim_at)\
80 80 .replace('\n', '<br/>')
81 81
82 82 def activate(self):
83 83 """
84 84 Adds tooltip mechanism to the given Html all tooltips have to have
85 85 set class tooltip and set attribute tooltip_title.
86 86 Then a tooltip will be generated based on that
87 87 All with yui js tooltip
88 88 """
89 89
90 90 js = '''
91 91 YAHOO.util.Event.onDOMReady(function(){
92 92 function toolTipsId(){
93 93 var ids = [];
94 94 var tts = YAHOO.util.Dom.getElementsByClassName('tooltip');
95 95
96 96 for (var i = 0; i < tts.length; i++) {
97 //if element doesn not have and id autgenerate one for tooltip
97 //if element doesn't not have and id autgenerate one for tooltip
98 98
99 99 if (!tts[i].id){
100 100 tts[i].id='tt'+i*100;
101 101 }
102 102 ids.push(tts[i].id);
103 103 }
104 104 return ids
105 105 };
106 106 var myToolTips = new YAHOO.widget.Tooltip("tooltip", {
107 107 context: toolTipsId(),
108 108 monitorresize:false,
109 109 xyoffset :[0,0],
110 110 autodismissdelay:300000,
111 111 hidedelay:5,
112 112 showdelay:20,
113 113 });
114 114
115 //Mouse Over event disabled for new repositories since they dont
115 //Mouse Over event disabled for new repositories since they don't
116 116 //have last commit message
117 117 myToolTips.contextMouseOverEvent.subscribe(
118 118 function(type, args) {
119 119 var context = args[0];
120 120 var txt = context.getAttribute('tooltip_title');
121 121 if(txt){
122 122 return true;
123 123 }
124 124 else{
125 125 return false;
126 126 }
127 127 });
128 128
129 129
130 130 // Set the text for the tooltip just before we display it. Lazy method
131 131 myToolTips.contextTriggerEvent.subscribe(
132 132 function(type, args) {
133 133
134 134
135 135 var context = args[0];
136 136
137 137 var txt = context.getAttribute('tooltip_title');
138 138 this.cfg.setProperty("text", txt);
139 139
140 140
141 141 // positioning of tooltip
142 142 var tt_w = this.element.clientWidth;
143 143 var tt_h = this.element.clientHeight;
144 144
145 145 var context_w = context.offsetWidth;
146 146 var context_h = context.offsetHeight;
147 147
148 148 var pos_x = YAHOO.util.Dom.getX(context);
149 149 var pos_y = YAHOO.util.Dom.getY(context);
150 150
151 151 var display_strategy = 'top';
152 152 var xy_pos = [0,0];
153 153 switch (display_strategy){
154 154
155 155 case 'top':
156 156 var cur_x = (pos_x+context_w/2)-(tt_w/2);
157 157 var cur_y = pos_y-tt_h-4;
158 158 xy_pos = [cur_x,cur_y];
159 159 break;
160 160 case 'bottom':
161 161 var cur_x = (pos_x+context_w/2)-(tt_w/2);
162 162 var cur_y = pos_y+context_h+4;
163 163 xy_pos = [cur_x,cur_y];
164 164 break;
165 165 case 'left':
166 166 var cur_x = (pos_x-tt_w-4);
167 167 var cur_y = pos_y-((tt_h/2)-context_h/2);
168 168 xy_pos = [cur_x,cur_y];
169 169 break;
170 170 case 'right':
171 171 var cur_x = (pos_x+context_w+4);
172 172 var cur_y = pos_y-((tt_h/2)-context_h/2);
173 173 xy_pos = [cur_x,cur_y];
174 174 break;
175 175 default:
176 176 var cur_x = (pos_x+context_w/2)-(tt_w/2);
177 177 var cur_y = pos_y-tt_h-4;
178 178 xy_pos = [cur_x,cur_y];
179 179 break;
180 180
181 181 }
182 182
183 183 this.cfg.setProperty("xy",xy_pos);
184 184
185 185 });
186 186
187 187 //Mouse out
188 188 myToolTips.contextMouseOutEvent.subscribe(
189 189 function(type, args) {
190 190 var context = args[0];
191 191
192 192 });
193 193 });
194 194 '''
195 195 return literal(js)
196 196
197 197 tooltip = _ToolTip()
198 198
199 199 class _FilesBreadCrumbs(object):
200 200
201 201 def __call__(self, repo_name, rev, paths):
202 202 url_l = [link_to(repo_name, url('files_home',
203 203 repo_name=repo_name,
204 204 revision=rev, f_path=''))]
205 205 paths_l = paths.split('/')
206 206
207 207 for cnt, p in enumerate(paths_l, 1):
208 208 if p != '':
209 209 url_l.append(link_to(p, url('files_home',
210 210 repo_name=repo_name,
211 211 revision=rev,
212 212 f_path='/'.join(paths_l[:cnt]))))
213 213
214 214 return literal('/'.join(url_l))
215 215
216 216 files_breadcrumbs = _FilesBreadCrumbs()
217 217 class CodeHtmlFormatter(HtmlFormatter):
218 218
219 219 def wrap(self, source, outfile):
220 220 return self._wrap_div(self._wrap_pre(self._wrap_code(source)))
221 221
222 222 def _wrap_code(self, source):
223 223 for cnt, it in enumerate(source, 1):
224 224 i, t = it
225 225 t = '<div id="#S-%s">%s</div>' % (cnt, t)
226 226 yield i, t
227 227 def pygmentize(filenode, **kwargs):
228 228 """
229 229 pygmentize function using pygments
230 230 :param filenode:
231 231 """
232 232 return literal(code_highlight(filenode.content,
233 233 filenode.lexer, CodeHtmlFormatter(**kwargs)))
234 234
235 235 def pygmentize_annotation(filenode, **kwargs):
236 236 """
237 237 pygmentize function for annotation
238 238 :param filenode:
239 239 """
240 240
241 241 color_dict = {}
242 242 def gen_color():
243 243 """generator for getting 10k of evenly distibuted colors using hsv color
244 244 and golden ratio.
245 245 """
246 246 import colorsys
247 247 n = 10000
248 248 golden_ratio = 0.618033988749895
249 249 h = 0.22717784590367374
250 250 #generate 10k nice web friendly colors in the same order
251 251 for c in xrange(n):
252 252 h += golden_ratio
253 253 h %= 1
254 254 HSV_tuple = [h, 0.95, 0.95]
255 255 RGB_tuple = colorsys.hsv_to_rgb(*HSV_tuple)
256 256 yield map(lambda x:str(int(x * 256)), RGB_tuple)
257 257
258 258 cgenerator = gen_color()
259 259
260 260 def get_color_string(cs):
261 261 if color_dict.has_key(cs):
262 262 col = color_dict[cs]
263 263 else:
264 264 col = color_dict[cs] = cgenerator.next()
265 265 return "color: rgb(%s)! important;" % (', '.join(col))
266 266
267 267 def url_func(changeset):
268 268 tooltip_html = "<div style='font-size:0.8em'><b>Author:</b>" + \
269 269 " %s<br/><b>Date:</b> %s</b><br/><b>Message:</b> %s<br/></div>"
270 270
271 271 tooltip_html = tooltip_html % (changeset.author,
272 272 changeset.date,
273 273 tooltip(changeset.message))
274 274 lnk_format = '%5s:%s' % ('r%s' % changeset.revision,
275 275 short_id(changeset.raw_id))
276 276 uri = link_to(
277 277 lnk_format,
278 278 url('changeset_home', repo_name=changeset.repository.name,
279 279 revision=changeset.raw_id),
280 280 style=get_color_string(changeset.raw_id),
281 281 class_='tooltip',
282 282 tooltip_title=tooltip_html
283 283 )
284 284
285 285 uri += '\n'
286 286 return uri
287 287 return literal(annotate_highlight(filenode, url_func, **kwargs))
288 288
289 289 def repo_name_slug(value):
290 290 """Return slug of name of repository
291 291 This function is called on each creation/modification
292 292 of repository to prevent bad names in repo
293 293 """
294 294 slug = remove_formatting(value)
295 295 slug = strip_tags(slug)
296 296
297 297 for c in """=[]\;'"<>,/~!@#$%^&*()+{}|: """:
298 298 slug = slug.replace(c, '-')
299 299 slug = recursive_replace(slug, '-')
300 300 slug = collapse(slug, '-')
301 301 return slug
302 302
303 303 def get_changeset_safe(repo, rev):
304 304 from vcs.backends.base import BaseRepository
305 305 from vcs.exceptions import RepositoryError
306 306 if not isinstance(repo, BaseRepository):
307 307 raise Exception('You must pass an Repository '
308 308 'object as first argument got %s', type(repo))
309 309
310 310 try:
311 311 cs = repo.get_changeset(rev)
312 312 except RepositoryError:
313 313 from rhodecode.lib.utils import EmptyChangeset
314 314 cs = EmptyChangeset()
315 315 return cs
316 316
317 317
318 318 flash = _Flash()
319 319
320 320
321 321 #==============================================================================
322 322 # MERCURIAL FILTERS available via h.
323 323 #==============================================================================
324 324 from mercurial import util
325 325 from mercurial.templatefilters import person as _person
326 326
327 327
328 328
329 329 def _age(curdate):
330 330 """turns a datetime into an age string."""
331 331
332 332 if not curdate:
333 333 return ''
334 334
335 335 from datetime import timedelta, datetime
336 336
337 337 agescales = [("year", 3600 * 24 * 365),
338 338 ("month", 3600 * 24 * 30),
339 339 ("day", 3600 * 24),
340 340 ("hour", 3600),
341 341 ("minute", 60),
342 342 ("second", 1), ]
343 343
344 344 age = datetime.now() - curdate
345 345 age_seconds = (age.days * agescales[2][1]) + age.seconds
346 346 pos = 1
347 347 for scale in agescales:
348 348 if scale[1] <= age_seconds:
349 349 if pos == 6:pos = 5
350 return time_ago_in_words(curdate, agescales[pos][0])
350 return time_ago_in_words(curdate, agescales[pos][0]) + ' ' + _('ago')
351 351 pos += 1
352 352
353 return _('just now')
354
353 355 age = lambda x:_age(x)
354 356 capitalize = lambda x: x.capitalize()
355 357 email = util.email
356 358 email_or_none = lambda x: util.email(x) if util.email(x) != x else None
357 359 person = lambda x: _person(x)
358 360 short_id = lambda x: x[:12]
359 361
360 362
361 363 def action_parser(user_log):
362 364 """
363 365 This helper will map the specified string action into translated
364 366 fancy names with icons and links
365 367
366 368 @param action:
367 369 """
368 370 action = user_log.action
369 371 action_params = None
370 372 cs_links = ''
371 373
372 374 x = action.split(':')
373 375
374 376 if len(x) > 1:
375 377 action, action_params = x
376 378
377 379 if action == 'push':
378 380 revs_limit = 5
379 381 revs = action_params.split(',')
380 382 cs_links = " " + ', '.join ([link(rev,
381 383 url('changeset_home',
382 384 repo_name=user_log.repository.repo_name,
383 385 revision=rev)) for rev in revs[:revs_limit] ])
384 386 if len(revs) > revs_limit:
385 387 html_tmpl = '<span title="%s"> %s </span>'
386 388 cs_links += html_tmpl % (', '.join(r for r in revs[revs_limit:]),
387 389 _('and %s more revisions') % (len(revs) - revs_limit))
388 390
389 391 map = {'user_deleted_repo':_('User deleted repository'),
390 392 'user_created_repo':_('User created repository'),
391 393 'user_forked_repo':_('User forked repository'),
392 394 'user_updated_repo':_('User updated repository'),
393 395 'admin_deleted_repo':_('Admin delete repository'),
394 396 'admin_created_repo':_('Admin created repository'),
395 397 'admin_forked_repo':_('Admin forked repository'),
396 398 'admin_updated_repo':_('Admin updated repository'),
397 399 'push':_('Pushed') + literal(cs_links),
398 400 'pull':_('Pulled'), }
399 401
400 402 print action, action_params
401 403 return map.get(action, action)
402 404
403 405
404 406 #==============================================================================
405 407 # PERMS
406 408 #==============================================================================
407 409 from rhodecode.lib.auth import HasPermissionAny, HasPermissionAll, \
408 410 HasRepoPermissionAny, HasRepoPermissionAll
409 411
410 412 #==============================================================================
411 413 # GRAVATAR URL
412 414 #==============================================================================
413 415 import hashlib
414 416 import urllib
415 417 from pylons import request
416 418
417 419 def gravatar_url(email_address, size=30):
418 420 ssl_enabled = 'https' == request.environ.get('HTTP_X_URL_SCHEME')
419 421 default = 'identicon'
420 422 baseurl_nossl = "http://www.gravatar.com/avatar/"
421 423 baseurl_ssl = "https://secure.gravatar.com/avatar/"
422 424 baseurl = baseurl_ssl if ssl_enabled else baseurl_nossl
423 425
424 426
425 427 # construct the url
426 428 gravatar_url = baseurl + hashlib.md5(email_address.lower()).hexdigest() + "?"
427 429 gravatar_url += urllib.urlencode({'d':default, 's':str(size)})
428 430
429 431 return gravatar_url
430 432
431 433 def safe_unicode(str):
432 434 """safe unicode function. In case of UnicodeDecode error we try to return
433 435 unicode with errors replace, if this failes we return unicode with
434 436 string_escape decoding """
435 437
436 438 try:
437 439 u_str = unicode(str)
438 440 except UnicodeDecodeError:
439 441 try:
440 442 u_str = unicode(str, 'utf-8', 'replace')
441 443 except UnicodeDecodeError:
442 444 #incase we have a decode error just represent as byte string
443 445 u_str = unicode(str(str).encode('string_escape'))
444 446
445 447 return u_str
@@ -1,210 +1,212 b''
1 1 #!/usr/bin/env python
2 2 # encoding: utf-8
3 3 # model for handling repositories actions
4 4 # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
5 5 # This program is free software; you can redistribute it and/or
6 6 # modify it under the terms of the GNU General Public License
7 7 # as published by the Free Software Foundation; version 2
8 8 # of the License or (at your opinion) any later version of the license.
9 9 #
10 10 # This program is distributed in the hope that it will be useful,
11 11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 # GNU General Public License for more details.
14 14 #
15 15 # You should have received a copy of the GNU General Public License
16 16 # along with this program; if not, write to the Free Software
17 17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18 18 # MA 02110-1301, USA.
19 19 """
20 20 Created on Jun 5, 2010
21 21 model for handling repositories actions
22 22 :author: marcink
23 23 """
24 24 from vcs.backends import get_repo, get_backend
25 25 from datetime import datetime
26 26 from pylons import app_globals as g
27 27 from rhodecode.model.db import Repository, RepoToPerm, User, Permission
28 28 from rhodecode.model.meta import Session
29 29 from rhodecode.model.user import UserModel
30 30 from rhodecode.model.caching_query import FromCache
31 31 import logging
32 32 import os
33 33 import shutil
34 34 import traceback
35 35 log = logging.getLogger(__name__)
36 36
37 37 class RepoModel(object):
38 38
39 39 def __init__(self, sa=None):
40 40 if not sa:
41 41 self.sa = Session()
42 42 else:
43 43 self.sa = sa
44 44
45 45 def get(self, repo_id, cache=False):
46 46 repo = self.sa.query(Repository)\
47 47 .filter(Repository.repo_name == repo_id)
48 48
49 49 if cache:
50 50 repo = repo.options(FromCache("sql_cache_short",
51 51 "get_repo_%s" % repo))
52 52 return repo.scalar()
53 53
54 54 def get_users_js(self):
55 55
56 56 users = self.sa.query(User).filter(User.active == True).all()
57 57 u_tmpl = '''{id:%s, fname:"%s", lname:"%s", nname:"%s"},'''
58 58 users_array = '[%s];' % '\n'.join([u_tmpl % (u.user_id, u.name,
59 59 u.lastname, u.username)
60 60 for u in users])
61 61 return users_array
62 62
63 63
64 64 def update(self, repo_name, form_data):
65 65 try:
66 66
67 67 #update permissions
68 68 for username, perm in form_data['perms_updates']:
69 69 r2p = self.sa.query(RepoToPerm)\
70 70 .filter(RepoToPerm.user == UserModel(self.sa).get_by_username(username, cache=False))\
71 71 .filter(RepoToPerm.repository == self.get(repo_name))\
72 72 .one()
73 73
74 74 r2p.permission_id = self.sa.query(Permission).filter(
75 75 Permission.permission_name ==
76 76 perm).one().permission_id
77 77 self.sa.add(r2p)
78 78
79 79 #set new permissions
80 80 for username, perm in form_data['perms_new']:
81 81 r2p = RepoToPerm()
82 82 r2p.repository = self.get(repo_name)
83 83 r2p.user = UserModel(self.sa).get_by_username(username, cache=False)
84 84
85 85 r2p.permission_id = self.sa.query(Permission).filter(
86 86 Permission.permission_name == perm)\
87 87 .one().permission_id
88 88 self.sa.add(r2p)
89 89
90 90 #update current repo
91 91 cur_repo = self.get(repo_name, cache=False)
92 92
93 93 for k, v in form_data.items():
94 94 if k == 'user':
95 95 cur_repo.user_id = v
96 96 else:
97 97 setattr(cur_repo, k, v)
98 98
99 99 self.sa.add(cur_repo)
100 100
101 101 if repo_name != form_data['repo_name']:
102 102 #rename our data
103 103 self.__rename_repo(repo_name, form_data['repo_name'])
104 104
105 105 self.sa.commit()
106 106 except:
107 107 log.error(traceback.format_exc())
108 108 self.sa.rollback()
109 109 raise
110 110
111 111 def create(self, form_data, cur_user, just_db=False, fork=False):
112 112 try:
113 113 if fork:
114 114 #force str since hg doesn't go with unicode
115 115 repo_name = str(form_data['fork_name'])
116 116 org_name = str(form_data['repo_name'])
117 117
118 118 else:
119 119 org_name = repo_name = str(form_data['repo_name'])
120 120 new_repo = Repository()
121 121 for k, v in form_data.items():
122 122 if k == 'repo_name':
123 123 v = repo_name
124 124 setattr(new_repo, k, v)
125 125
126 126 if fork:
127 127 parent_repo = self.sa.query(Repository)\
128 128 .filter(Repository.repo_name == org_name).scalar()
129 129 new_repo.fork = parent_repo
130 130
131 131 new_repo.user_id = cur_user.user_id
132 132 self.sa.add(new_repo)
133 133
134 134 #create default permission
135 135 repo_to_perm = RepoToPerm()
136 136 default = 'repository.read'
137 137 for p in UserModel(self.sa).get_by_username('default', cache=False).user_perms:
138 138 if p.permission.permission_name.startswith('repository.'):
139 139 default = p.permission.permission_name
140 140 break
141 141
142 142 default_perm = 'repository.none' if form_data['private'] else default
143 143
144 144 repo_to_perm.permission_id = self.sa.query(Permission)\
145 145 .filter(Permission.permission_name == default_perm)\
146 146 .one().permission_id
147 147
148 148 repo_to_perm.repository_id = new_repo.repo_id
149 149 repo_to_perm.user_id = UserModel(self.sa).get_by_username('default', cache=False).user_id
150 150
151 151 self.sa.add(repo_to_perm)
152 152 self.sa.commit()
153 153 if not just_db:
154 154 self.__create_repo(repo_name, form_data['repo_type'])
155 155 except:
156 156 log.error(traceback.format_exc())
157 157 self.sa.rollback()
158 158 raise
159 159
160 160 def create_fork(self, form_data, cur_user):
161 161 from rhodecode.lib.celerylib import tasks, run_task
162 162 run_task(tasks.create_repo_fork, form_data, cur_user)
163 163
164 164 def delete(self, repo):
165 165 try:
166 166 self.sa.delete(repo)
167 self.__delete_repo(repo)
167 168 self.sa.commit()
168 self.__delete_repo(repo.repo_name)
169 169 except:
170 170 log.error(traceback.format_exc())
171 171 self.sa.rollback()
172 172 raise
173 173
174 174 def delete_perm_user(self, form_data, repo_name):
175 175 try:
176 176 self.sa.query(RepoToPerm)\
177 177 .filter(RepoToPerm.repository == self.get(repo_name))\
178 178 .filter(RepoToPerm.user_id == form_data['user_id']).delete()
179 179 self.sa.commit()
180 180 except:
181 181 log.error(traceback.format_exc())
182 182 self.sa.rollback()
183 183 raise
184 184
185 185 def __create_repo(self, repo_name, alias):
186 186 from rhodecode.lib.utils import check_repo
187 187 repo_path = os.path.join(g.base_path, repo_name)
188 188 if check_repo(repo_name, g.base_path):
189 189 log.info('creating repo %s in %s', repo_name, repo_path)
190 190 backend = get_backend(alias)
191 191 backend(repo_path, create=True)
192 192
193 193 def __rename_repo(self, old, new):
194 194 log.info('renaming repo from %s to %s', old, new)
195 195
196 196 old_path = os.path.join(g.base_path, old)
197 197 new_path = os.path.join(g.base_path, new)
198 198 if os.path.isdir(new_path):
199 199 raise Exception('Was trying to rename to already existing dir %s',
200 200 new_path)
201 201 shutil.move(old_path, new_path)
202 202
203 def __delete_repo(self, name):
204 rm_path = os.path.join(g.base_path, name)
203 def __delete_repo(self, repo):
204 rm_path = os.path.join(g.base_path, repo.repo_name)
205 205 log.info("Removing %s", rm_path)
206 #disable hg
207 shutil.move(os.path.join(rm_path, '.hg'), os.path.join(rm_path, 'rm__.hg'))
206 #disable hg/git
207 alias = repo.repo_type
208 shutil.move(os.path.join(rm_path, '.%s' % alias),
209 os.path.join(rm_path, 'rm__.%s' % alias))
208 210 #disable repo
209 211 shutil.move(rm_path, os.path.join(g.base_path, 'rm__%s__%s' \
210 % (datetime.today(), name)))
212 % (datetime.today(), repo.repo_name)))
@@ -1,2323 +1,2321 b''
1 1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
2 2 border:0;
3 3 outline:0;
4 4 font-size:100%;
5 5 vertical-align:baseline;
6 6 background:transparent;
7 7 margin:0;
8 8 padding:0;
9 9 }
10 10
11 11 body {
12 12 line-height:1;
13 13 height:100%;
14 14 background:url("../images/background.png") repeat scroll 0 0 #B0B0B0;
15 15 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
16 16 font-size:12px;
17 17 color:#000;
18 18 margin:0;
19 19 padding:0;
20 20 }
21 21
22 22 ol,ul {
23 23 list-style:none;
24 24 }
25 25
26 26 blockquote,q {
27 27 quotes:none;
28 28 }
29 29
30 30 blockquote:before,blockquote:after,q:before,q:after {
31 31 content:none;
32 32 }
33 33
34 34 :focus {
35 35 outline:0;
36 36 }
37 37
38 38 del {
39 39 text-decoration:line-through;
40 40 }
41 41
42 42 table {
43 43 border-collapse:collapse;
44 44 border-spacing:0;
45 45 }
46 46
47 47 html {
48 48 height:100%;
49 49 }
50 50
51 51 a {
52 52 color:#003367;
53 53 text-decoration:none;
54 54 cursor:pointer;
55 55 font-weight:700;
56 56 }
57 57
58 58 a:hover {
59 59 color:#316293;
60 60 text-decoration:underline;
61 61 }
62 62
63 63 h1,h2,h3,h4,h5,h6 {
64 64 color:#292929;
65 65 font-weight:700;
66 66 }
67 67
68 68 h1 {
69 69 font-size:22px;
70 70 }
71 71
72 72 h2 {
73 73 font-size:20px;
74 74 }
75 75
76 76 h3 {
77 77 font-size:18px;
78 78 }
79 79
80 80 h4 {
81 81 font-size:16px;
82 82 }
83 83
84 84 h5 {
85 85 font-size:14px;
86 86 }
87 87
88 88 h6 {
89 89 font-size:11px;
90 90 }
91 91
92 92 ul.circle {
93 93 list-style-type:circle;
94 94 }
95 95
96 96 ul.disc {
97 97 list-style-type:disc;
98 98 }
99 99
100 100 ul.square {
101 101 list-style-type:square;
102 102 }
103 103
104 104 ol.lower-roman {
105 105 list-style-type:lower-roman;
106 106 }
107 107
108 108 ol.upper-roman {
109 109 list-style-type:upper-roman;
110 110 }
111 111
112 112 ol.lower-alpha {
113 113 list-style-type:lower-alpha;
114 114 }
115 115
116 116 ol.upper-alpha {
117 117 list-style-type:upper-alpha;
118 118 }
119 119
120 120 ol.decimal {
121 121 list-style-type:decimal;
122 122 }
123 123
124 124 div.color {
125 125 clear:both;
126 126 overflow:hidden;
127 127 position:absolute;
128 128 background:#FFF;
129 129 margin:7px 0 0 60px;
130 130 padding:1px 1px 1px 0;
131 131 }
132 132
133 133 div.color a {
134 134 width:15px;
135 135 height:15px;
136 136 display:block;
137 137 float:left;
138 138 margin:0 0 0 1px;
139 139 padding:0;
140 140 }
141 141
142 142 div.options {
143 143 clear:both;
144 144 overflow:hidden;
145 145 position:absolute;
146 146 background:#FFF;
147 147 margin:7px 0 0 162px;
148 148 padding:0;
149 149 }
150 150
151 151 div.options a {
152 152 height:1%;
153 153 display:block;
154 154 text-decoration:none;
155 155 margin:0;
156 156 padding:3px 8px;
157 157 }
158 158
159 159 .top-left-rounded-corner {
160 160 -webkit-border-top-left-radius: 8px;
161 161 -khtml-border-radius-topleft: 8px;
162 162 -moz-border-radius-topleft: 8px;
163 163 border-top-left-radius: 8px;
164 164 }
165 165
166 166 .top-right-rounded-corner {
167 167 -webkit-border-top-right-radius: 8px;
168 168 -khtml-border-radius-topright: 8px;
169 169 -moz-border-radius-topright: 8px;
170 170 border-top-right-radius: 8px;
171 171 }
172 172
173 173 .bottom-left-rounded-corner {
174 174 -webkit-border-bottom-left-radius: 8px;
175 175 -khtml-border-radius-bottomleft: 8px;
176 176 -moz-border-radius-bottomleft: 8px;
177 177 border-bottom-left-radius: 8px;
178 178 }
179 179
180 180 .bottom-right-rounded-corner {
181 181 -webkit-border-bottom-right-radius: 8px;
182 182 -khtml-border-radius-bottomright: 8px;
183 183 -moz-border-radius-bottomright: 8px;
184 184 border-bottom-right-radius: 8px;
185 185 }
186 186
187 187
188 188 #header {
189 189 margin:0;
190 190 padding:0 30px;
191 191 }
192 192
193 193 #header ul#logged-user li {
194 194 list-style:none;
195 195 float:left;
196 196 border-left:1px solid #bbb;
197 197 border-right:1px solid #a5a5a5;
198 198 margin:-2px 0 0;
199 199 padding:10px 12px;
200 200 }
201 201
202 202 #header ul#logged-user li.first {
203 203 border-left:none;
204 204 margin:-6px;
205 205 }
206 206
207 207 #header ul#logged-user li.first div.account {
208 208 padding-top:4px;
209 209 float:left;
210 210 }
211 211
212 212 #header ul#logged-user li.last {
213 213 border-right:none;
214 214 }
215 215
216 216 #header ul#logged-user li a {
217 217 color:#4e4e4e;
218 218 font-weight:700;
219 219 text-decoration:none;
220 220 }
221 221
222 222 #header ul#logged-user li a:hover {
223 223 color:#376ea6;
224 224 text-decoration:underline;
225 225 }
226 226
227 227 #header ul#logged-user li.highlight a {
228 228 color:#fff;
229 229 }
230 230
231 231 #header ul#logged-user li.highlight a:hover {
232 232 color:#376ea6;
233 233 }
234 234
235 235 #header #header-inner {
236 236 height:40px;
237 237 clear:both;
238 238 position:relative;
239 239 background:#003367 url("../images/header_inner.png") repeat-x;
240 240 border-bottom:2px solid #fff;
241 241 margin:0;
242 242 padding:0;
243 243 }
244 244
245 245 #header #header-inner #home a {
246 246 height:40px;
247 247 width:46px;
248 248 display:block;
249 249 background:url("../images/button_home.png");
250 250 background-position:0 0;
251 251 margin:0;
252 252 padding:0;
253 253 }
254 254
255 255 #header #header-inner #home a:hover {
256 256 background-position:0 -40px;
257 257 }
258 258
259 259 #header #header-inner #logo h1 {
260 260 color:#FFF;
261 261 font-size:14px;
262 text-transform:uppercase;
263 262 margin:13px 0 0 13px;
264 263 padding:0;
265 264 }
266 265
267 266 #header #header-inner #logo a {
268 267 color:#fff;
269 268 text-decoration:none;
270 269 }
271 270
272 271 #header #header-inner #logo a:hover {
273 272 color:#bfe3ff;
274 273 }
275 274
276 275 #header #header-inner #quick,#header #header-inner #quick ul {
277 276 position:relative;
278 277 float:right;
279 278 list-style-type:none;
280 279 list-style-position:outside;
281 280 margin:10px 5px 0 0;
282 281 padding:0;
283 282 }
284 283
285 284 #header #header-inner #quick li {
286 285 position:relative;
287 286 float:left;
288 287 margin:0 5px 0 0;
289 288 padding:0;
290 289 }
291 290
292 291 #header #header-inner #quick li a {
293 292 top:0;
294 293 left:0;
295 294 height:1%;
296 295 display:block;
297 296 clear:both;
298 297 overflow:hidden;
299 298 color:#FFF;
300 299 font-weight:700;
301 300 text-decoration:none;
302 301 background:#369 url("../../images/quick_l.png") no-repeat top left;
303 302 padding:0;
304 303 }
305 304
306 305 #header #header-inner #quick li span {
307 306 top:0;
308 307 right:0;
309 308 height:1%;
310 309 display:block;
311 310 float:left;
312 311 background:url("../../images/quick_r.png") no-repeat top right;
313 312 border-left:1px solid #3f6f9f;
314 313 margin:0;
315 314 padding:10px 12px 8px 10px;
316 315 }
317 316
318 317 #header #header-inner #quick li span.normal {
319 318 border:none;
320 319 padding:10px 12px 8px;
321 320 }
322 321
323 322 #header #header-inner #quick li span.icon {
324 323 top:0;
325 324 left:0;
326 325 border-left:none;
327 326 background:url("../../images/quick_l.png") no-repeat top left;
328 327 border-right:1px solid #2e5c89;
329 328 padding:8px 8px 4px;
330 329 }
331 330
332 331 #header #header-inner #quick li a:hover {
333 332 background:#4e4e4e url("../../images/quick_l_selected.png") no-repeat top left;
334 333 }
335 334
336 335 #header #header-inner #quick li a:hover span {
337 336 border-left:1px solid #545454;
338 337 background:url("../../images/quick_r_selected.png") no-repeat top right;
339 338 }
340 339
341 340 #header #header-inner #quick li a:hover span.icon {
342 341 border-left:none;
343 342 border-right:1px solid #464646;
344 343 background:url("../../images/quick_l_selected.png") no-repeat top left;
345 344 }
346 345
347 346 #header #header-inner #quick ul {
348 347 top:29px;
349 348 right:0;
350 349 min-width:200px;
351 350 display:none;
352 351 position:absolute;
353 352 background:#FFF;
354 353 border:1px solid #666;
355 354 border-top:1px solid #003367;
356 355 z-index:100;
357 356 margin:0;
358 357 padding:0;
359 358 }
360 359
361 360 #header #header-inner #quick ul.repo_switcher {
362 361 max-height:275px;
363 362 overflow-x:hidden;
364 363 overflow-y:auto;
365 364 }
366 365
367 366 #header #header-inner #quick li ul li {
368 367 border-bottom:1px solid #ddd;
369 368 }
370 369
371 370 #header #header-inner #quick li ul li a {
372 371 width:182px;
373 372 height:auto;
374 373 display:block;
375 374 float:left;
376 375 background:#FFF;
377 376 color:#003367;
378 377 font-weight:400;
379 378 margin:0;
380 379 padding:7px 9px;
381 380 }
382 381
383 382 #header #header-inner #quick li ul li a:hover {
384 383 color:#000;
385 384 background:#FFF;
386 385 }
387 386
388 387 #header #header-inner #quick ul ul {
389 388 top:auto;
390 389 }
391 390
392 391 #header #header-inner #quick li ul ul {
393 392 right:200px;
394 393 max-height:275px;
395 394 overflow:auto;
396 395 overflow-x:hidden;
397 396 white-space:nowrap;
398 397 }
399 398
400 399 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
401 400 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
402 401 width:167px;
403 402 margin:0;
404 403 padding:12px 9px 7px 24px;
405 404 }
406 405
407 406 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
408 407 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
409 408 min-width:167px;
410 409 margin:0;
411 410 padding:12px 9px 7px 24px;
412 411 }
413 412
414 413 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
415 414 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
416 415 min-width:167px;
417 416 margin:0;
418 417 padding:12px 9px 7px 24px;
419 418 }
420 419
421 420 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
422 background:url("../images/icons/folder_edit.png") no-repeat scroll 4px 9px #FFF;
421 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
423 422 width:167px;
424 423 margin:0;
425 424 padding:12px 9px 7px 24px;
426 425 }
427 426
428 427 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
429 428 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
430 429 width:167px;
431 430 margin:0;
432 431 padding:12px 9px 7px 24px;
433 432 }
434 433
435 434 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover {
436 435 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
437 436 width:167px;
438 437 margin:0;
439 438 padding:12px 9px 7px 24px;
440 439 }
441 440
442 441 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
443 442 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
444 443 width:167px;
445 444 margin:0;
446 445 padding:12px 9px 7px 24px;
447 446 }
448 447
449 448 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
450 449 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
451 450 width:167px;
452 451 margin:0;
453 452 padding:12px 9px 7px 24px;
454 453 }
455 454
456 455 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
457 456 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
458 457 width:167px;
459 458 margin:0;
460 459 padding:12px 9px 7px 24px;
461 460 }
462 461
463 462 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
464 463 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
465 464 width:167px;
466 465 margin:0;
467 466 padding:12px 9px 7px 24px;
468 467 }
469 468
470 469 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
471 470 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
472 471 width:167px;
473 472 margin:0;
474 473 padding:12px 9px 7px 24px;
475 474 }
476 475
477 476 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
478 477 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
479 478 width:167px;
480 479 margin:0;
481 480 padding:12px 9px 7px 24px;
482 481 }
483 482
484 483 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
485 484 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
486 485 width:167px;
487 486 margin:0;
488 487 padding:12px 9px 7px 24px;
489 488 }
490 489
491 490 #content #left {
492 491 left:0;
493 492 width:280px;
494 493 position:absolute;
495 494 }
496 495
497 496 #content #right {
498 497 margin:0 60px 10px 290px;
499 498 }
500 499
501 500 #content div.box {
502 501 clear:both;
503 502 overflow:hidden;
504 503 background:#fff;
505 504 margin:0 0 10px;
506 505 padding:0 0 10px;
507 506 }
508 507
509 508 #content div.box-left {
510 509 width:49%;
511 510 clear:none;
512 511 float:left;
513 512 margin:0 0 10px;
514 513 }
515 514
516 515 #content div.box-right {
517 516 width:49%;
518 517 clear:none;
519 518 float:right;
520 519 margin:0 0 10px;
521 520 }
522 521
523 522 #content div.box div.title {
524 523 clear:both;
525 524 overflow:hidden;
526 525 background:#369 url("../images/header_inner.png") repeat-x;
527 526 margin:0 0 20px;
528 527 padding:0;
529 528 }
530 529
531 530 #content div.box div.title h5 {
532 531 float:left;
533 532 border:none;
534 533 color:#fff;
535 534 text-transform:uppercase;
536 535 margin:0;
537 536 padding:11px 0 11px 10px;
538 537 }
539 538
540 539 #content div.box div.title ul.links li {
541 540 list-style:none;
542 541 float:left;
543 542 margin:0;
544 543 padding:0;
545 544 }
546 545
547 546 #content div.box div.title ul.links li a {
548 547 height:1%;
549 548 display:block;
550 549 float:left;
551 550 border-left:1px solid #316293;
552 551 color:#fff;
553 552 font-size:11px;
554 553 font-weight:700;
555 554 text-decoration:none;
556 555 margin:0;
557 556 padding:13px 16px 12px;
558 557 }
559 558
560 559 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
561 560 clear:both;
562 561 overflow:hidden;
563 562 border-bottom:1px solid #DDD;
564 563 margin:10px 20px;
565 564 padding:0 0 15px;
566 565 }
567 566
568 567 #content div.box p {
569 568 color:#5f5f5f;
570 569 font-size:12px;
571 570 line-height:150%;
572 571 margin:0 24px 10px;
573 572 padding:0;
574 573 }
575 574
576 575 #content div.box blockquote {
577 576 border-left:4px solid #DDD;
578 577 color:#5f5f5f;
579 578 font-size:11px;
580 579 line-height:150%;
581 580 margin:0 34px;
582 581 padding:0 0 0 14px;
583 582 }
584 583
585 584 #content div.box blockquote p {
586 585 margin:10px 0;
587 586 padding:0;
588 587 }
589 588
590 589 #content div.box dl {
591 590 margin:10px 24px;
592 591 }
593 592
594 593 #content div.box dt {
595 594 font-size:12px;
596 595 margin:0;
597 596 }
598 597
599 598 #content div.box dd {
600 599 font-size:12px;
601 600 margin:0;
602 601 padding:8px 0 8px 15px;
603 602 }
604 603
605 604 #content div.box li {
606 605 font-size:12px;
607 606 padding:4px 0;
608 607 }
609 608
610 609 #content div.box ul.disc,#content div.box ul.circle {
611 610 margin:10px 24px 10px 38px;
612 611 }
613 612
614 613 #content div.box ul.square {
615 614 margin:10px 24px 10px 40px;
616 615 }
617 616
618 617 #content div.box img.left {
619 618 border:none;
620 619 float:left;
621 620 margin:10px 10px 10px 0;
622 621 }
623 622
624 623 #content div.box img.right {
625 624 border:none;
626 625 float:right;
627 626 margin:10px 0 10px 10px;
628 627 }
629 628
630 629 #content div.box div.messages {
631 630 clear:both;
632 631 overflow:hidden;
633 632 margin:0 20px;
634 633 padding:0;
635 634 }
636 635
637 636 #content div.box div.message {
638 637 clear:both;
639 638 overflow:hidden;
640 639 margin:0;
641 640 padding:10px 0;
642 641 }
643 642
644 643 #content div.box div.message a {
645 644 font-weight:400 !important;
646 645 }
647 646
648 647 #content div.box div.message div.image {
649 648 float:left;
650 649 margin:9px 0 0 5px;
651 650 padding:6px;
652 651 }
653 652
654 653 #content div.box div.message div.image img {
655 654 vertical-align:middle;
656 655 margin:0;
657 656 }
658 657
659 658 #content div.box div.message div.text {
660 659 float:left;
661 660 margin:0;
662 661 padding:9px 6px;
663 662 }
664 663
665 664 #content div.box div.message div.dismiss a {
666 665 height:16px;
667 666 width:16px;
668 667 display:block;
669 668 background:url("../images/icons/cross.png") no-repeat;
670 669 margin:15px 14px 0 0;
671 670 padding:0;
672 671 }
673 672
674 673 #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 {
675 674 border:none;
676 675 margin:0;
677 676 padding:0;
678 677 }
679 678
680 679 #content div.box div.message div.text span {
681 680 height:1%;
682 681 display:block;
683 682 margin:0;
684 683 padding:5px 0 0;
685 684 }
686 685
687 686 #content div.box div.message-error {
688 687 height:1%;
689 688 clear:both;
690 689 overflow:hidden;
691 690 background:#FBE3E4;
692 691 border:1px solid #FBC2C4;
693 692 color:#860006;
694 693 }
695 694
696 695 #content div.box div.message-error h6 {
697 696 color:#860006;
698 697 }
699 698
700 699 #content div.box div.message-warning {
701 700 height:1%;
702 701 clear:both;
703 702 overflow:hidden;
704 703 background:#FFF6BF;
705 704 border:1px solid #FFD324;
706 705 color:#5f5200;
707 706 }
708 707
709 708 #content div.box div.message-warning h6 {
710 709 color:#5f5200;
711 710 }
712 711
713 712 #content div.box div.message-notice {
714 713 height:1%;
715 714 clear:both;
716 715 overflow:hidden;
717 716 background:#8FBDE0;
718 717 border:1px solid #6BACDE;
719 718 color:#003863;
720 719 }
721 720
722 721 #content div.box div.message-notice h6 {
723 722 color:#003863;
724 723 }
725 724
726 725 #content div.box div.message-success {
727 726 height:1%;
728 727 clear:both;
729 728 overflow:hidden;
730 729 background:#E6EFC2;
731 730 border:1px solid #C6D880;
732 731 color:#4e6100;
733 732 }
734 733
735 734 #content div.box div.message-success h6 {
736 735 color:#4e6100;
737 736 }
738 737
739 738 #content div.box div.form div.fields div.field {
740 739 height:1%;
741 740 border-bottom:1px solid #DDD;
742 741 clear:both;
743 742 margin:0;
744 743 padding:10px 0;
745 744 }
746 745
747 746 #content div.box div.form div.fields div.field-first {
748 747 padding:0 0 10px;
749 748 }
750 749
751 750 #content div.box div.form div.fields div.field-noborder {
752 751 border-bottom:0 !important;
753 752 }
754 753
755 754 #content div.box div.form div.fields div.field span.error-message {
756 755 height:1%;
757 756 display:inline-block;
758 757 color:red;
759 758 margin:8px 0 0 4px;
760 759 padding:0;
761 760 }
762 761
763 762 #content div.box div.form div.fields div.field span.success {
764 763 height:1%;
765 764 display:block;
766 765 color:#316309;
767 766 margin:8px 0 0;
768 767 padding:0;
769 768 }
770 769
771 770 #content div.box div.form div.fields div.field div.label {
772 771 left:80px;
773 772 width:auto;
774 773 position:absolute;
775 774 margin:0;
776 775 padding:8px 0 0 5px;
777 776 }
778 777
779 778 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
780 779 clear:both;
781 780 overflow:hidden;
782 781 left:0;
783 782 width:auto;
784 783 position:relative;
785 784 margin:0;
786 785 padding:0 0 8px;
787 786 }
788 787
789 788 #content div.box div.form div.fields div.field div.label-select {
790 789 padding:2px 0 0 5px;
791 790 }
792 791
793 792 #content div.box-left div.form div.fields div.field div.label-select,#content div.box-right div.form div.fields div.field div.label-select {
794 793 padding:0 0 8px;
795 794 }
796 795
797 796 #content div.box-left div.form div.fields div.field div.label-textarea,#content div.box-right div.form div.fields div.field div.label-textarea {
798 797 padding:0 0 8px !important;
799 798 }
800 799
801 800 #content div.box div.form div.fields div.field div.label label {
802 801 color:#393939;
803 802 font-weight:700;
804 803 }
805 804
806 805 #content div.box div.form div.fields div.field div.input {
807 806 margin:0 0 0 200px;
808 807 }
809 808
810 809 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
811 810 clear:both;
812 811 overflow:hidden;
813 812 border-top:1px solid #b3b3b3;
814 813 border-left:1px solid #b3b3b3;
815 814 border-right:1px solid #eaeaea;
816 815 border-bottom:1px solid #eaeaea;
817 816 margin:0;
818 817 padding:7px 7px 6px;
819 818 }
820 819
821 820 #content div.box div.form div.fields div.field div.input input {
822 821 background:#FFF;
823 822 border-top:1px solid #b3b3b3;
824 823 border-left:1px solid #b3b3b3;
825 824 border-right:1px solid #eaeaea;
826 825 border-bottom:1px solid #eaeaea;
827 826 color:#000;
828 827 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
829 828 font-size:11px;
830 829 margin:0;
831 830 padding:7px 7px 6px;
832 831 }
833 832
834 833 #content div.box-left div.form div.fields div.field div.input input,#content div.box-right div.form div.fields div.field div.input input {
835 834 width:100%;
836 835 border:none;
837 836 padding:0;
838 837 }
839 838
840 839 #content div.box div.form div.fields div.field div.input input.small {
841 840 width:30%;
842 841 }
843 842
844 843 #content div.box div.form div.fields div.field div.input input.medium {
845 844 width:55%;
846 845 }
847 846
848 847 #content div.box div.form div.fields div.field div.input input.large {
849 848 width:85%;
850 849 }
851 850
852 851 #content div.box div.form div.fields div.field div.input input.date {
853 852 width:177px;
854 853 }
855 854
856 855 #content div.box div.form div.fields div.field div.input input.button {
857 856 background:#D4D0C8;
858 857 border-top:1px solid #FFF;
859 858 border-left:1px solid #FFF;
860 859 border-right:1px solid #404040;
861 860 border-bottom:1px solid #404040;
862 861 color:#000;
863 862 margin:0;
864 863 padding:4px 8px;
865 864 }
866 865
867 866 #content div.box div.form div.fields div.field div.input a.ui-input-file {
868 867 width:28px;
869 868 height:28px;
870 869 display:inline;
871 870 position:absolute;
872 871 overflow:hidden;
873 872 cursor:pointer;
874 873 background:#e5e3e3 url("../images/button_browse.png") no-repeat;
875 874 border:none;
876 875 text-decoration:none;
877 876 margin:0 0 0 6px;
878 877 padding:0;
879 878 }
880 879
881 880 #content div.box div.form div.fields div.field div.textarea {
882 881 border-top:1px solid #b3b3b3;
883 882 border-left:1px solid #b3b3b3;
884 883 border-right:1px solid #eaeaea;
885 884 border-bottom:1px solid #eaeaea;
886 885 margin:0 0 0 200px;
887 886 padding:10px;
888 887 }
889 888
890 889 #content div.box div.form div.fields div.field div.textarea-editor {
891 890 border:1px solid #ddd;
892 891 padding:0;
893 892 }
894 893
895 894 #content div.box div.form div.fields div.field div.textarea textarea {
896 895 width:100%;
897 896 height:220px;
898 897 overflow:hidden;
899 898 background:#FFF;
900 899 color:#000;
901 900 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
902 901 font-size:11px;
903 902 outline:none;
904 903 border-width:0;
905 904 margin:0;
906 905 padding:0;
907 906 }
908 907
909 908 #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 {
910 909 width:100%;
911 910 height:100px;
912 911 }
913 912
914 913 #content div.box div.form div.fields div.field div.textarea table {
915 914 width:100%;
916 915 border:none;
917 916 margin:0;
918 917 padding:0;
919 918 }
920 919
921 920 #content div.box div.form div.fields div.field div.textarea table td {
922 921 background:#DDD;
923 922 border:none;
924 923 padding:0;
925 924 }
926 925
927 926 #content div.box div.form div.fields div.field div.textarea table td table {
928 927 width:auto;
929 928 border:none;
930 929 margin:0;
931 930 padding:0;
932 931 }
933 932
934 933 #content div.box div.form div.fields div.field div.textarea table td table td {
935 934 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
936 935 font-size:11px;
937 936 padding:5px 5px 5px 0;
938 937 }
939 938
940 939 #content div.box div.form div.fields div.field div.textarea table td table td a.mceButtonActive {
941 940 background:#b1b1b1;
942 941 }
943 942
944 943 #content div.box div.form div.fields div.field div.select a.ui-selectmenu {
945 944 color:#565656;
946 945 text-decoration:none;
947 946 }
948 947
949 948 #content div.box div.form div.fields div.field input[type=text]:focus,#content div.box div.form div.fields div.field input[type=password]:focus,#content div.box div.form div.fields div.field input[type=file]:focus,#content div.box div.form div.fields div.field textarea:focus,#content div.box div.form div.fields div.field select:focus {
950 949 background:#f6f6f6;
951 950 border-color:#666;
952 951 }
953 952
954 953 div.form div.fields div.field div.button {
955 954 margin:0;
956 955 padding:0 0 0 8px;
957 956 }
958 957
959 958 div.form div.fields div.field div.highlight .ui-state-default {
960 959 background:#4e85bb url("../images/button_highlight.png") repeat-x;
961 960 border-top:1px solid #5c91a4;
962 961 border-left:1px solid #2a6f89;
963 962 border-right:1px solid #2b7089;
964 963 border-bottom:1px solid #1a6480;
965 964 color:#FFF;
966 965 margin:0;
967 966 padding:6px 12px;
968 967 }
969 968
970 969 div.form div.fields div.field div.highlight .ui-state-hover {
971 970 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
972 971 border-top:1px solid #78acbf;
973 972 border-left:1px solid #34819e;
974 973 border-right:1px solid #35829f;
975 974 border-bottom:1px solid #257897;
976 975 color:#FFF;
977 976 margin:0;
978 977 padding:6px 12px;
979 978 }
980 979
981 980 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-default {
982 981 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
983 982 border-top:1px solid #5c91a4;
984 983 border-left:1px solid #2a6f89;
985 984 border-right:1px solid #2b7089;
986 985 border-bottom:1px solid #1a6480;
987 986 color:#fff;
988 987 margin:0;
989 988 padding:6px 12px;
990 989 }
991 990
992 991 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-hover {
993 992 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
994 993 border-top:1px solid #78acbf;
995 994 border-left:1px solid #34819e;
996 995 border-right:1px solid #35829f;
997 996 border-bottom:1px solid #257897;
998 997 color:#fff;
999 998 margin:0;
1000 999 padding:6px 12px;
1001 1000 }
1002 1001
1003 1002 #content div.box table {
1004 1003 width:100%;
1005 1004 border-collapse:collapse;
1006 1005 margin:0;
1007 1006 padding:0;
1008 1007 }
1009 1008
1010 1009 #content div.box table th {
1011 1010 background:#eee;
1012 1011 border-bottom:1px solid #ddd;
1013 1012 padding:5px 0px 5px 5px;
1014 1013 }
1015 1014
1016 1015 #content div.box table th.left {
1017 1016 text-align:left;
1018 1017 }
1019 1018
1020 1019 #content div.box table th.right {
1021 1020 text-align:right;
1022 1021 }
1023 1022
1024 1023 #content div.box table th.center {
1025 1024 text-align:center;
1026 1025 }
1027 1026
1028 1027 #content div.box table th.selected {
1029 1028 vertical-align:middle;
1030 1029 padding:0;
1031 1030 }
1032 1031
1033 1032 #content div.box table td {
1034 1033 background:#fff;
1035 1034 border-bottom:1px solid #cdcdcd;
1036 1035 vertical-align:middle;
1037 1036 padding:5px;
1038 1037 }
1039 1038
1040 1039 #content div.box table tr.selected td {
1041 1040 background:#FFC;
1042 1041 }
1043 1042
1044 1043 #content div.box table td.selected {
1045 1044 width:3%;
1046 1045 text-align:center;
1047 1046 vertical-align:middle;
1048 1047 padding:0;
1049 1048 }
1050 1049
1051 1050 #content div.box table td.action {
1052 1051 width:45%;
1053 1052 text-align:left;
1054 1053 }
1055 1054
1056 1055 #content div.box table td.date {
1057 1056 width:33%;
1058 1057 text-align:center;
1059 1058 }
1060 1059
1061 1060 #content div.box div.action {
1062 1061 float:right;
1063 1062 background:#FFF;
1064 1063 text-align:right;
1065 1064 margin:10px 0 0;
1066 1065 padding:0;
1067 1066 }
1068 1067
1069 1068 #content div.box div.action select {
1070 1069 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1071 1070 font-size:11px;
1072 1071 margin:0;
1073 1072 }
1074 1073
1075 1074 #content div.box div.action .ui-selectmenu {
1076 1075 margin:0;
1077 1076 padding:0;
1078 1077 }
1079 1078
1080 1079 #content div.box div.pagination {
1081 1080 height:1%;
1082 1081 clear:both;
1083 1082 overflow:hidden;
1084 1083 margin:10px 0 0;
1085 1084 padding:0;
1086 1085 }
1087 1086
1088 1087 #content div.box div.pagination ul.pager {
1089 1088 float:right;
1090 1089 text-align:right;
1091 1090 margin:0;
1092 1091 padding:0;
1093 1092 }
1094 1093
1095 1094 #content div.box div.pagination ul.pager li {
1096 1095 height:1%;
1097 1096 float:left;
1098 1097 list-style:none;
1099 1098 background:#ebebeb url("../images/pager.png") repeat-x;
1100 1099 border-top:1px solid #dedede;
1101 1100 border-left:1px solid #cfcfcf;
1102 1101 border-right:1px solid #c4c4c4;
1103 1102 border-bottom:1px solid #c4c4c4;
1104 1103 color:#4A4A4A;
1105 1104 font-weight:700;
1106 1105 margin:0 0 0 4px;
1107 1106 padding:0;
1108 1107 }
1109 1108
1110 1109 #content div.box div.pagination ul.pager li.separator {
1111 1110 padding:6px;
1112 1111 }
1113 1112
1114 1113 #content div.box div.pagination ul.pager li.current {
1115 1114 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1116 1115 border-top:1px solid #ccc;
1117 1116 border-left:1px solid #bebebe;
1118 1117 border-right:1px solid #b1b1b1;
1119 1118 border-bottom:1px solid #afafaf;
1120 1119 color:#515151;
1121 1120 padding:6px;
1122 1121 }
1123 1122
1124 1123 #content div.box div.pagination ul.pager li a {
1125 1124 height:1%;
1126 1125 display:block;
1127 1126 float:left;
1128 1127 color:#515151;
1129 1128 text-decoration:none;
1130 1129 margin:0;
1131 1130 padding:6px;
1132 1131 }
1133 1132
1134 1133 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1135 1134 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1136 1135 border-top:1px solid #ccc;
1137 1136 border-left:1px solid #bebebe;
1138 1137 border-right:1px solid #b1b1b1;
1139 1138 border-bottom:1px solid #afafaf;
1140 1139 margin:-1px;
1141 1140 }
1142 1141
1143 1142 #content div.box div.pagination-wh {
1144 1143 height:1%;
1145 1144 clear:both;
1146 1145 overflow:hidden;
1147 1146 text-align:right;
1148 1147 margin:10px 0 0;
1149 1148 padding:0;
1150 1149 }
1151 1150
1152 1151 #content div.box div.pagination-right {
1153 1152 float:right;
1154 1153 }
1155 1154
1156 1155 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1157 1156 height:1%;
1158 1157 float:left;
1159 1158 background:#ebebeb url("../images/pager.png") repeat-x;
1160 1159 border-top:1px solid #dedede;
1161 1160 border-left:1px solid #cfcfcf;
1162 1161 border-right:1px solid #c4c4c4;
1163 1162 border-bottom:1px solid #c4c4c4;
1164 1163 color:#4A4A4A;
1165 1164 font-weight:700;
1166 1165 margin:0 0 0 4px;
1167 1166 padding:6px;
1168 1167 }
1169 1168
1170 1169 #content div.box div.pagination-wh span.pager_curpage {
1171 1170 height:1%;
1172 1171 float:left;
1173 1172 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1174 1173 border-top:1px solid #ccc;
1175 1174 border-left:1px solid #bebebe;
1176 1175 border-right:1px solid #b1b1b1;
1177 1176 border-bottom:1px solid #afafaf;
1178 1177 color:#515151;
1179 1178 font-weight:700;
1180 1179 margin:0 0 0 4px;
1181 1180 padding:6px;
1182 1181 }
1183 1182
1184 1183 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1185 1184 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1186 1185 border-top:1px solid #ccc;
1187 1186 border-left:1px solid #bebebe;
1188 1187 border-right:1px solid #b1b1b1;
1189 1188 border-bottom:1px solid #afafaf;
1190 1189 text-decoration:none;
1191 1190 }
1192 1191
1193 1192 #content div.box div.traffic div.legend {
1194 1193 clear:both;
1195 1194 overflow:hidden;
1196 1195 border-bottom:1px solid #ddd;
1197 1196 margin:0 0 10px;
1198 1197 padding:0 0 10px;
1199 1198 }
1200 1199
1201 1200 #content div.box div.traffic div.legend h6 {
1202 1201 float:left;
1203 1202 border:none;
1204 1203 margin:0;
1205 1204 padding:0;
1206 1205 }
1207 1206
1208 1207 #content div.box div.traffic div.legend li {
1209 1208 list-style:none;
1210 1209 float:left;
1211 1210 font-size:11px;
1212 1211 margin:0;
1213 1212 padding:0 8px 0 4px;
1214 1213 }
1215 1214
1216 1215 #content div.box div.traffic div.legend li.visits {
1217 1216 border-left:12px solid #edc240;
1218 1217 }
1219 1218
1220 1219 #content div.box div.traffic div.legend li.pageviews {
1221 1220 border-left:12px solid #afd8f8;
1222 1221 }
1223 1222
1224 1223 #content div.box div.traffic table {
1225 1224 width:auto;
1226 1225 }
1227 1226
1228 1227 #content div.box div.traffic table td {
1229 1228 background:transparent;
1230 1229 border:none;
1231 1230 padding:2px 3px 3px;
1232 1231 }
1233 1232
1234 1233 #content div.box div.traffic table td.legendLabel {
1235 1234 padding:0 3px 2px;
1236 1235 }
1237 1236
1238 1237 #footer {
1239 1238 clear:both;
1240 1239 overflow:hidden;
1241 1240 text-align:right;
1242 1241 margin:0;
1243 1242 padding:0 30px 4px;
1244 1243 margin:-10px 0 0;
1245 1244 }
1246 1245
1247 1246 #footer div#footer-inner {
1248 1247 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1249 1248 border-top:2px solid #FFFFFF;
1250 1249 }
1251 1250
1252 1251 #footer div#footer-inner p {
1253 1252 padding:15px 25px 15px 0;
1254 1253 color:#FFF;
1255 1254 font-weight:700;
1256 1255 }
1257 1256 #footer div#footer-inner .footer-link {
1258 1257 float:left;
1259 1258 padding-left:10px;
1260 1259 }
1261 1260 #footer div#footer-inner .footer-link a {
1262 1261 color:#FFF;
1263 1262 }
1264 1263
1265 1264 #login div.title {
1266 1265 width:420px;
1267 1266 clear:both;
1268 1267 overflow:hidden;
1269 1268 position:relative;
1270 1269 background:#003367 url("../../images/header_inner.png") repeat-x;
1271 1270 margin:0 auto;
1272 1271 padding:0;
1273 1272 }
1274 1273
1275 1274 #login div.inner {
1276 1275 width:380px;
1277 1276 background:#FFF url("../images/login.png") no-repeat top left;
1278 1277 border-top:none;
1279 1278 border-bottom:none;
1280 1279 margin:0 auto;
1281 1280 padding:20px;
1282 1281 }
1283 1282
1284 1283 #login div.form div.fields div.field div.label {
1285 1284 width:173px;
1286 1285 float:left;
1287 1286 text-align:right;
1288 1287 margin:2px 10px 0 0;
1289 1288 padding:5px 0 0 5px;
1290 1289 }
1291 1290
1292 1291 #login div.form div.fields div.field div.input input {
1293 1292 width:176px;
1294 1293 background:#FFF;
1295 1294 border-top:1px solid #b3b3b3;
1296 1295 border-left:1px solid #b3b3b3;
1297 1296 border-right:1px solid #eaeaea;
1298 1297 border-bottom:1px solid #eaeaea;
1299 1298 color:#000;
1300 1299 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1301 1300 font-size:11px;
1302 1301 margin:0;
1303 1302 padding:7px 7px 6px;
1304 1303 }
1305 1304
1306 1305 #login div.form div.fields div.buttons {
1307 1306 clear:both;
1308 1307 overflow:hidden;
1309 1308 border-top:1px solid #DDD;
1310 1309 text-align:right;
1311 1310 margin:0;
1312 1311 padding:10px 0 0;
1313 1312 }
1314 1313
1315 1314 #login div.form div.links {
1316 1315 clear:both;
1317 1316 overflow:hidden;
1318 1317 margin:10px 0 0;
1319 1318 padding:0 0 2px;
1320 1319 }
1321 1320
1322 1321 #register div.title {
1323 1322 width:420px;
1324 1323 clear:both;
1325 1324 overflow:hidden;
1326 1325 position:relative;
1327 1326 background:#003367 url("../images/header_inner.png") repeat-x;
1328 1327 margin:0 auto;
1329 1328 padding:0;
1330 1329 }
1331 1330
1332 1331 #register div.inner {
1333 1332 width:380px;
1334 1333 background:#FFF;
1335 1334 border-top:none;
1336 1335 border-bottom:none;
1337 1336 margin:0 auto;
1338 1337 padding:20px;
1339 1338 }
1340 1339
1341 1340 #register div.form div.fields div.field div.label {
1342 1341 width:100px;
1343 1342 float:left;
1344 1343 text-align:right;
1345 1344 margin:2px 10px 0 0;
1346 1345 padding:5px 0 0 5px;
1347 1346 }
1348 1347
1349 1348 #register div.form div.fields div.field div.input input {
1350 1349 width:245px;
1351 1350 background:#FFF;
1352 1351 border-top:1px solid #b3b3b3;
1353 1352 border-left:1px solid #b3b3b3;
1354 1353 border-right:1px solid #eaeaea;
1355 1354 border-bottom:1px solid #eaeaea;
1356 1355 color:#000;
1357 1356 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1358 1357 font-size:11px;
1359 1358 margin:0;
1360 1359 padding:7px 7px 6px;
1361 1360 }
1362 1361
1363 1362 #register div.form div.fields div.buttons {
1364 1363 clear:both;
1365 1364 overflow:hidden;
1366 1365 border-top:1px solid #DDD;
1367 1366 text-align:left;
1368 1367 margin:0;
1369 1368 padding:10px 0 0 114px;
1370 1369 }
1371 1370
1372 1371 #register div.form div.fields div.buttons div.highlight input.ui-state-default {
1373 1372 background:url("../images/button_highlight.png") repeat-x scroll 0 0 #4E85BB;
1374 1373 color:#FFF;
1375 1374 border-color:#5C91A4 #2B7089 #1A6480 #2A6F89;
1376 1375 border-style:solid;
1377 1376 border-width:1px;
1378 1377 }
1379 1378
1380 1379 #register div.form div.activation_msg {
1381 1380 padding-top:4px;
1382 1381 padding-bottom:4px;
1383 1382 }
1384 1383
1385 1384 .trending_language_tbl,.trending_language_tbl td {
1386 1385 border:0 !important;
1387 1386 margin:0 !important;
1388 1387 padding:0 !important;
1389 1388 }
1390 1389
1391 1390 .trending_language {
1392 1391 background-color:#003367;
1393 1392 color:#FFF;
1394 1393 display:block;
1395 1394 min-width:20px;
1396 max-width:400px;
1397 1395 text-decoration:none;
1398 1396 height:12px;
1399 1397 margin-bottom:4px;
1400 1398 margin-left:5px;
1401 1399 white-space:pre;
1402 1400 padding:3px;
1403 1401 }
1404 1402
1405 1403 h3.files_location {
1406 1404 font-size:1.8em;
1407 1405 font-weight:700;
1408 1406 border-bottom:none !important;
1409 1407 margin:10px 0 !important;
1410 1408 }
1411 1409
1412 1410 #files_data dl dt {
1413 1411 float:left;
1414 1412 width:115px;
1415 1413 margin:0 !important;
1416 1414 padding:5px;
1417 1415 }
1418 1416
1419 1417 #files_data dl dd {
1420 1418 margin:0 !important;
1421 1419 padding:5px !important;
1422 1420 }
1423 1421
1424 1422 #changeset_content {
1425 1423 border:1px solid #CCC;
1426 1424 padding:5px;
1427 1425 }
1428 1426
1429 1427 #changeset_content .container {
1430 1428 min-height:120px;
1431 1429 font-size:1.2em;
1432 1430 overflow:hidden;
1433 1431 }
1434 1432
1435 1433 #changeset_content .container .right {
1436 1434 float:right;
1437 1435 width:25%;
1438 1436 text-align:right;
1439 1437 }
1440 1438
1441 1439 #changeset_content .container .left .message {
1442 1440 font-style:italic;
1443 1441 color:#556CB5;
1444 1442 white-space:pre-wrap;
1445 1443 }
1446 1444
1447 1445 .cs_files .cs_added {
1448 1446 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1449 1447 height:16px;
1450 1448 padding-left:20px;
1451 1449 margin-top:7px;
1452 1450 text-align:left;
1453 1451 }
1454 1452
1455 1453 .cs_files .cs_changed {
1456 1454 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1457 1455 height:16px;
1458 1456 padding-left:20px;
1459 1457 margin-top:7px;
1460 1458 text-align:left;
1461 1459 }
1462 1460
1463 1461 .cs_files .cs_removed {
1464 1462 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1465 1463 height:16px;
1466 1464 padding-left:20px;
1467 1465 margin-top:7px;
1468 1466 text-align:left;
1469 1467 }
1470 1468
1471 1469 #graph {
1472 1470 overflow:hidden;
1473 1471 }
1474 1472
1475 1473 #graph_nodes {
1476 1474 width:160px;
1477 1475 float:left;
1478 1476 margin-left:-50px;
1479 1477 margin-top:5px;
1480 1478 }
1481 1479
1482 1480 #graph_content {
1483 1481 width:800px;
1484 1482 float:left;
1485 1483 }
1486 1484
1487 1485 #graph_content .container_header {
1488 1486 border:1px solid #CCC;
1489 1487 padding:10px;
1490 1488 }
1491 1489
1492 1490 #graph_content .container {
1493 1491 border-bottom:1px solid #CCC;
1494 1492 border-left:1px solid #CCC;
1495 1493 border-right:1px solid #CCC;
1496 1494 min-height:80px;
1497 1495 overflow:hidden;
1498 1496 font-size:1.2em;
1499 1497 }
1500 1498
1501 1499 #graph_content .container .right {
1502 1500 float:right;
1503 1501 width:28%;
1504 1502 text-align:right;
1505 1503 padding-bottom:5px;
1506 1504 }
1507 1505
1508 1506 #graph_content .container .left .date {
1509 1507 font-weight:700;
1510 1508 padding-bottom:5px;
1511 1509 }
1512 1510
1513 1511 #graph_content .container .left .message {
1514 1512 font-size:100%;
1515 1513 padding-top:3px;
1516 1514 white-space:pre-wrap;
1517 1515 }
1518 1516
1519 1517 .right div {
1520 1518 clear:both;
1521 1519 }
1522 1520
1523 1521 .right .changes .added,.changed,.removed {
1524 1522 border:1px solid #DDD;
1525 1523 display:block;
1526 1524 float:right;
1527 1525 text-align:center;
1528 1526 min-width:15px;
1529 1527 }
1530 1528
1531 1529 .right .changes .added {
1532 1530 background:#BFB;
1533 1531 }
1534 1532
1535 1533 .right .changes .changed {
1536 1534 background:#FD8;
1537 1535 }
1538 1536
1539 1537 .right .changes .removed {
1540 1538 background:#F88;
1541 1539 }
1542 1540
1543 1541 .right .merge {
1544 1542 vertical-align:top;
1545 1543 font-size:0.75em;
1546 1544 font-weight:700;
1547 1545 }
1548 1546
1549 1547 .right .parent {
1550 1548 font-size:90%;
1551 1549 font-family:monospace;
1552 1550 }
1553 1551
1554 1552 .right .logtags .branchtag {
1555 1553 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1556 1554 display:block;
1557 1555 font-size:0.8em;
1558 1556 padding:11px 16px 0 0;
1559 1557 }
1560 1558
1561 1559 .right .logtags .tagtag {
1562 1560 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1563 1561 display:block;
1564 1562 font-size:0.8em;
1565 1563 padding:11px 16px 0 0;
1566 1564 }
1567 1565
1568 1566 div.browserblock {
1569 1567 overflow:hidden;
1570 1568 border:1px solid #ccc;
1571 1569 background:#f8f8f8;
1572 1570 font-size:100%;
1573 1571 line-height:125%;
1574 1572 padding:0;
1575 1573 }
1576 1574
1577 1575 div.browserblock .browser-header {
1578 1576 border-bottom:1px solid #CCC;
1579 1577 background:#FFF;
1580 1578 color:blue;
1581 1579 padding:10px 0;
1582 1580 }
1583 1581
1584 1582 div.browserblock .browser-header span {
1585 1583 margin-left:25px;
1586 1584 font-weight:700;
1587 1585 }
1588 1586
1589 1587 div.browserblock .browser-body {
1590 1588 background:#EEE;
1591 1589 }
1592 1590
1593 1591 table.code-browser {
1594 1592 border-collapse:collapse;
1595 1593 width:100%;
1596 1594 }
1597 1595
1598 1596 table.code-browser tr {
1599 1597 margin:3px;
1600 1598 }
1601 1599
1602 1600 table.code-browser thead th {
1603 1601 background-color:#EEE;
1604 1602 height:20px;
1605 1603 font-size:1.1em;
1606 1604 font-weight:700;
1607 1605 text-align:left;
1608 1606 padding-left:10px;
1609 1607 }
1610 1608
1611 1609 table.code-browser tbody td {
1612 1610 padding-left:10px;
1613 1611 height:20px;
1614 1612 }
1615 1613
1616 1614 table.code-browser .browser-file {
1617 1615 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1618 1616 height:16px;
1619 1617 padding-left:20px;
1620 1618 text-align:left;
1621 1619 }
1622 1620
1623 1621 table.code-browser .browser-dir {
1624 1622 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1625 1623 height:16px;
1626 1624 padding-left:20px;
1627 1625 text-align:left;
1628 1626 }
1629 1627
1630 1628 .box .search {
1631 1629 clear:both;
1632 1630 overflow:hidden;
1633 1631 margin:0;
1634 1632 padding:0 20px 10px;
1635 1633 }
1636 1634
1637 1635 .box .search div.search_path {
1638 1636 background:none repeat scroll 0 0 #EEE;
1639 1637 border:1px solid #CCC;
1640 1638 color:blue;
1641 1639 margin-bottom:10px;
1642 1640 padding:10px 0;
1643 1641 }
1644 1642
1645 1643 .box .search div.search_path div.link {
1646 1644 font-weight:700;
1647 1645 margin-left:25px;
1648 1646 }
1649 1647
1650 1648 .box .search div.search_path div.link a {
1651 1649 color:#003367;
1652 1650 cursor:pointer;
1653 1651 text-decoration:none;
1654 1652 }
1655 1653
1656 1654 #path_unlock {
1657 1655 color:red;
1658 1656 font-size:1.2em;
1659 1657 padding-left:4px;
1660 1658 }
1661 1659
1662 1660 .info_box * {
1663 1661 background:url("../../images/pager.png") repeat-x scroll 0 0 #EBEBEB;
1664 1662 color:#4A4A4A;
1665 1663 font-weight:700;
1666 1664 height:1%;
1667 1665 display:inline;
1668 1666 border-color:#DEDEDE #C4C4C4 #C4C4C4 #CFCFCF;
1669 1667 border-style:solid;
1670 1668 border-width:1px;
1671 1669 padding:4px 6px;
1672 1670 }
1673 1671
1674 1672 .info_box span {
1675 1673 margin-left:3px;
1676 1674 margin-right:3px;
1677 1675 }
1678 1676
1679 1677 .info_box input#at_rev {
1680 1678 text-align:center;
1681 1679 padding:5px 3px 3px 2px;
1682 1680 }
1683 1681
1684 1682 .info_box input#view {
1685 1683 text-align:center;
1686 1684 padding:4px 3px 2px 2px;
1687 1685 }
1688 1686
1689 1687 .yui-overlay,.yui-panel-container {
1690 1688 visibility:hidden;
1691 1689 position:absolute;
1692 1690 z-index:2;
1693 1691 }
1694 1692
1695 1693 .yui-tt {
1696 1694 visibility:hidden;
1697 1695 position:absolute;
1698 1696 color:#666;
1699 1697 background-color:#FFF;
1700 1698 font-family:arial, helvetica, verdana, sans-serif;
1701 1699 border:2px solid #003367;
1702 1700 font:100% sans-serif;
1703 1701 width:auto;
1704 1702 opacity:1px;
1705 1703 padding:8px;
1706 1704 white-space: pre;
1707 1705 }
1708 1706
1709 1707 .ac {
1710 1708 vertical-align:top;
1711 1709 }
1712 1710
1713 1711 .ac .yui-ac {
1714 1712 position:relative;
1715 1713 font-family:arial;
1716 1714 font-size:100%;
1717 1715 }
1718 1716
1719 1717 .ac .perm_ac {
1720 1718 width:15em;
1721 1719 }
1722 1720
1723 1721 .ac .yui-ac-input {
1724 1722 width:100%;
1725 1723 }
1726 1724
1727 1725 .ac .yui-ac-container {
1728 1726 position:absolute;
1729 1727 top:1.6em;
1730 1728 width:100%;
1731 1729 }
1732 1730
1733 1731 .ac .yui-ac-content {
1734 1732 position:absolute;
1735 1733 width:100%;
1736 1734 border:1px solid gray;
1737 1735 background:#fff;
1738 1736 overflow:hidden;
1739 1737 z-index:9050;
1740 1738 }
1741 1739
1742 1740 .ac .yui-ac-shadow {
1743 1741 position:absolute;
1744 1742 width:100%;
1745 1743 background:#000;
1746 1744 -moz-opacity:0.1px;
1747 1745 opacity:.10;
1748 1746 filter:alpha(opacity = 10);
1749 1747 z-index:9049;
1750 1748 margin:.3em;
1751 1749 }
1752 1750
1753 1751 .ac .yui-ac-content ul {
1754 1752 width:100%;
1755 1753 margin:0;
1756 1754 padding:0;
1757 1755 }
1758 1756
1759 1757 .ac .yui-ac-content li {
1760 1758 cursor:default;
1761 1759 white-space:nowrap;
1762 1760 margin:0;
1763 1761 padding:2px 5px;
1764 1762 }
1765 1763
1766 1764 .ac .yui-ac-content li.yui-ac-prehighlight {
1767 1765 background:#B3D4FF;
1768 1766 }
1769 1767
1770 1768 .ac .yui-ac-content li.yui-ac-highlight {
1771 1769 background:#556CB5;
1772 1770 color:#FFF;
1773 1771 }
1774 1772
1775 1773 .add_icon {
1776 1774 background:url("../images/icons/add.png") no-repeat scroll 3px;
1777 1775 height:16px;
1778 1776 padding-left:20px;
1779 1777 padding-top:1px;
1780 1778 text-align:left;
1781 1779 }
1782 1780
1783 1781 .edit_icon {
1784 1782 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
1785 1783 height:16px;
1786 1784 padding-left:20px;
1787 1785 padding-top:1px;
1788 1786 text-align:left;
1789 1787 }
1790 1788
1791 1789 .delete_icon {
1792 1790 background:url("../images/icons/delete.png") no-repeat scroll 3px;
1793 1791 height:16px;
1794 1792 padding-left:20px;
1795 1793 padding-top:1px;
1796 1794 text-align:left;
1797 1795 }
1798 1796
1799 1797 .rss_icon {
1800 1798 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
1801 1799 height:16px;
1802 1800 padding-left:20px;
1803 1801 padding-top:1px;
1804 1802 text-align:left;
1805 1803 }
1806 1804
1807 1805 .atom_icon {
1808 1806 background:url("../images/icons/atom.png") no-repeat scroll 3px;
1809 1807 height:16px;
1810 1808 padding-left:20px;
1811 1809 padding-top:1px;
1812 1810 text-align:left;
1813 1811 }
1814 1812
1815 1813 .archive_icon {
1816 1814 background:url("../images/icons/compress.png") no-repeat scroll 3px;
1817 1815 height:16px;
1818 1816 padding-left:20px;
1819 1817 text-align:left;
1820 1818 padding-top:1px;
1821 1819 }
1822 1820
1823 1821 .action_button {
1824 1822 border:0;
1825 1823 display:block;
1826 1824 }
1827 1825
1828 1826 .action_button:hover {
1829 1827 border:0;
1830 1828 text-decoration:underline;
1831 1829 cursor:pointer;
1832 1830 }
1833 1831
1834 1832 #switch_repos {
1835 1833 position:absolute;
1836 1834 height:25px;
1837 1835 z-index:1;
1838 1836 }
1839 1837
1840 1838 #switch_repos select {
1841 1839 min-width:150px;
1842 1840 max-height:250px;
1843 1841 z-index:1;
1844 1842 }
1845 1843
1846 1844 .breadcrumbs {
1847 1845 border:medium none;
1848 1846 color:#FFF;
1849 1847 float:left;
1850 1848 text-transform:uppercase;
1851 1849 font-weight:700;
1852 1850 font-size:14px;
1853 1851 margin:0;
1854 1852 padding:11px 0 11px 10px;
1855 1853 }
1856 1854
1857 1855 .breadcrumbs a {
1858 1856 color:#FFF;
1859 1857 }
1860 1858
1861 1859 .flash_msg ul {
1862 1860 margin:0;
1863 1861 padding:0 0 10px;
1864 1862 }
1865 1863
1866 1864 .error_msg {
1867 1865 background-color:#FFCFCF;
1868 1866 background-image:url("../../images/icons/error_msg.png");
1869 1867 border:1px solid #FF9595;
1870 1868 color:#C30;
1871 1869 }
1872 1870
1873 1871 .warning_msg {
1874 1872 background-color:#FFFBCC;
1875 1873 background-image:url("../../images/icons/warning_msg.png");
1876 1874 border:1px solid #FFF35E;
1877 1875 color:#C69E00;
1878 1876 }
1879 1877
1880 1878 .success_msg {
1881 1879 background-color:#D5FFCF;
1882 1880 background-image:url("../../images/icons/success_msg.png");
1883 1881 border:1px solid #97FF88;
1884 1882 color:#090;
1885 1883 }
1886 1884
1887 1885 .notice_msg {
1888 1886 background-color:#DCE3FF;
1889 1887 background-image:url("../../images/icons/notice_msg.png");
1890 1888 border:1px solid #93A8FF;
1891 1889 color:#556CB5;
1892 1890 }
1893 1891
1894 1892 .success_msg,.error_msg,.notice_msg,.warning_msg {
1895 1893 background-position:10px center;
1896 1894 background-repeat:no-repeat;
1897 1895 font-size:12px;
1898 1896 font-weight:700;
1899 1897 min-height:14px;
1900 1898 line-height:14px;
1901 1899 margin-bottom:0;
1902 1900 margin-top:0;
1903 1901 display:block;
1904 1902 overflow:auto;
1905 1903 padding:6px 10px 6px 40px;
1906 1904 }
1907 1905
1908 1906 #msg_close {
1909 1907 background:transparent url("../../icons/cross_grey_small.png") no-repeat scroll 0 0;
1910 1908 cursor:pointer;
1911 1909 height:16px;
1912 1910 position:absolute;
1913 1911 right:5px;
1914 1912 top:5px;
1915 1913 width:16px;
1916 1914 }
1917 1915
1918 1916 div#legend_container table,div#legend_choices table {
1919 1917 width:auto !important;
1920 1918 }
1921 1919
1922 1920 table#permissions_manage {
1923 1921 width:0 !important;
1924 1922 }
1925 1923
1926 1924 table#permissions_manage span.private_repo_msg {
1927 1925 font-size:0.8em;
1928 1926 opacity:0.6px;
1929 1927 }
1930 1928
1931 1929 table#permissions_manage td.private_repo_msg {
1932 1930 font-size:0.8em;
1933 1931 }
1934 1932
1935 1933 table#permissions_manage tr#add_perm_input td {
1936 1934 vertical-align:middle;
1937 1935 }
1938 1936
1939 1937 div.gravatar {
1940 1938 background-color:#FFF;
1941 1939 border:1px solid #D0D0D0;
1942 1940 float:left;
1943 1941 margin-right:0.7em;
1944 1942 padding:2px 2px 0;
1945 1943 }
1946 1944
1947 1945 #header,#content,#footer {
1948 1946 min-width:1024px;
1949 1947 }
1950 1948
1951 1949 #content {
1952 1950 min-height:100%;
1953 1951 clear:both;
1954 1952 overflow:hidden;
1955 1953 padding:14px 30px;
1956 1954 }
1957 1955
1958 1956 #content div.box div.title div.search {
1959 1957 background:url("../../images/title_link.png") no-repeat top left;
1960 1958 border-left:1px solid #316293;
1961 1959 }
1962 1960
1963 1961 #content div.box div.title div.search div.input input {
1964 1962 border:1px solid #316293;
1965 1963 }
1966 1964
1967 1965 #content div.box div.title div.search div.button input.ui-state-default {
1968 1966 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
1969 1967 border:1px solid #316293;
1970 1968 border-left:none;
1971 1969 color:#FFF;
1972 1970 }
1973 1971
1974 1972 #content div.box div.title div.search div.button input.ui-state-hover {
1975 1973 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
1976 1974 border:1px solid #316293;
1977 1975 border-left:none;
1978 1976 color:#FFF;
1979 1977 }
1980 1978
1981 1979 #content div.box div.form div.fields div.field div.highlight .ui-state-default {
1982 1980 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
1983 1981 border-top:1px solid #5c91a4;
1984 1982 border-left:1px solid #2a6f89;
1985 1983 border-right:1px solid #2b7089;
1986 1984 border-bottom:1px solid #1a6480;
1987 1985 color:#fff;
1988 1986 }
1989 1987
1990 1988 #content div.box div.form div.fields div.field div.highlight .ui-state-hover {
1991 1989 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
1992 1990 border-top:1px solid #78acbf;
1993 1991 border-left:1px solid #34819e;
1994 1992 border-right:1px solid #35829f;
1995 1993 border-bottom:1px solid #257897;
1996 1994 color:#fff;
1997 1995 }
1998 1996
1999 1997 ins,div.options a:hover {
2000 1998 text-decoration:none;
2001 1999 }
2002 2000
2003 2001 img,#header #header-inner #quick li a:hover span.normal,#header #header-inner #quick li ul li.last,#content div.box div.form div.fields div.field div.textarea table td table td a,#clone_url {
2004 2002 border:none;
2005 2003 }
2006 2004
2007 2005 img.icon,.right .merge img {
2008 2006 vertical-align:bottom;
2009 2007 }
2010 2008
2011 2009 #header ul#logged-user,#content div.box div.title ul.links,#content div.box div.message div.dismiss,#content div.box div.traffic div.legend ul {
2012 2010 float:right;
2013 2011 margin:0;
2014 2012 padding:0;
2015 2013 }
2016 2014
2017 2015 #header #header-inner #home,#header #header-inner #logo,#content div.box ul.left,#content div.box ol.left,#content div.box div.pagination-left,div#commit_history,div#legend_data,div#legend_container,div#legend_choices {
2018 2016 float:left;
2019 2017 }
2020 2018
2021 2019 #header #header-inner #quick li:hover ul ul,#header #header-inner #quick li:hover ul ul ul,#header #header-inner #quick li:hover ul ul ul ul,#content #left #menu ul.closed,#content #left #menu li ul.collapsed,.yui-tt-shadow {
2022 2020 display:none;
2023 2021 }
2024 2022
2025 2023 #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 {
2026 2024 display:block;
2027 2025 }
2028 2026
2029 2027 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2030 2028 color:#bfe3ff;
2031 2029 }
2032 2030
2033 2031 #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 {
2034 2032 margin:10px 24px 10px 44px;
2035 2033 }
2036 2034
2037 2035 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2038 2036 clear:both;
2039 2037 overflow:hidden;
2040 2038 margin:0;
2041 2039 padding:0 20px 10px;
2042 2040 }
2043 2041
2044 2042 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2045 2043 clear:both;
2046 2044 overflow:hidden;
2047 2045 margin:0;
2048 2046 padding:0;
2049 2047 }
2050 2048
2051 2049 #content div.box div.form div.fields div.field div.label-checkbox,#content div.box div.form div.fields div.field div.label-radio,#content div.box div.form div.fields div.field div.label-textarea {
2052 2050 padding:0 0 0 5px !important;
2053 2051 }
2054 2052
2055 2053 #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 {
2056 2054 height:1%;
2057 2055 display:block;
2058 2056 color:#363636;
2059 2057 margin:0;
2060 2058 padding:2px 0 0;
2061 2059 }
2062 2060
2063 2061 #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 {
2064 2062 background:#FBE3E4;
2065 2063 border-top:1px solid #e1b2b3;
2066 2064 border-left:1px solid #e1b2b3;
2067 2065 border-right:1px solid #FBC2C4;
2068 2066 border-bottom:1px solid #FBC2C4;
2069 2067 }
2070 2068
2071 2069 #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 {
2072 2070 background:#E6EFC2;
2073 2071 border-top:1px solid #cebb98;
2074 2072 border-left:1px solid #cebb98;
2075 2073 border-right:1px solid #c6d880;
2076 2074 border-bottom:1px solid #c6d880;
2077 2075 }
2078 2076
2079 2077 #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 {
2080 2078 margin:0;
2081 2079 }
2082 2080
2083 2081 #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 {
2084 2082 margin:0 0 0 200px;
2085 2083 padding:0;
2086 2084 }
2087 2085
2088 2086 #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 {
2089 2087 color:#000;
2090 2088 text-decoration:none;
2091 2089 }
2092 2090
2093 2091 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2094 2092 border:1px solid #666;
2095 2093 }
2096 2094
2097 2095 #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 {
2098 2096 clear:both;
2099 2097 overflow:hidden;
2100 2098 margin:0;
2101 2099 padding:2px 0;
2102 2100 }
2103 2101
2104 2102 #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 {
2105 2103 float:left;
2106 2104 margin:0;
2107 2105 }
2108 2106
2109 2107 #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 {
2110 2108 height:1%;
2111 2109 display:block;
2112 2110 float:left;
2113 2111 margin:3px 0 0 4px;
2114 2112 }
2115 2113
2116 2114 div.form div.fields div.field div.button input,#content div.box div.form div.fields div.buttons input,div.form div.fields div.buttons input,#content div.box div.action div.button input {
2117 2115 color:#000;
2118 2116 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2119 2117 font-size:11px;
2120 2118 font-weight:700;
2121 2119 margin:0;
2122 2120 }
2123 2121
2124 2122 div.form div.fields div.field div.button .ui-state-default,#content div.box div.form div.fields div.buttons input.ui-state-default {
2125 2123 background:#e5e3e3 url("../images/button.png") repeat-x;
2126 2124 border-top:1px solid #DDD;
2127 2125 border-left:1px solid #c6c6c6;
2128 2126 border-right:1px solid #DDD;
2129 2127 border-bottom:1px solid #c6c6c6;
2130 2128 color:#515151;
2131 2129 outline:none;
2132 2130 margin:0;
2133 2131 padding:6px 12px;
2134 2132 }
2135 2133
2136 2134 div.form div.fields div.field div.button .ui-state-hover,#content div.box div.form div.fields div.buttons input.ui-state-hover {
2137 2135 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2138 2136 border-top:1px solid #ccc;
2139 2137 border-left:1px solid #bebebe;
2140 2138 border-right:1px solid #b1b1b1;
2141 2139 border-bottom:1px solid #afafaf;
2142 2140 color:#515151;
2143 2141 outline:none;
2144 2142 margin:0;
2145 2143 padding:6px 12px;
2146 2144 }
2147 2145
2148 2146 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2149 2147 display:inline;
2150 2148 }
2151 2149
2152 2150 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2153 2151 margin:10px 0 0 200px;
2154 2152 padding:0;
2155 2153 }
2156 2154
2157 2155 #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 {
2158 2156 margin:10px 0 0;
2159 2157 }
2160 2158
2161 2159 #content div.box table td.user,#content div.box table td.address {
2162 2160 width:10%;
2163 2161 text-align:center;
2164 2162 }
2165 2163
2166 2164 #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 {
2167 2165 text-align:right;
2168 2166 margin:6px 0 0;
2169 2167 padding:0;
2170 2168 }
2171 2169
2172 2170 #content div.box div.action div.button input.ui-state-default,#login div.form div.fields div.buttons input.ui-state-default,#register div.form div.fields div.buttons input.ui-state-default {
2173 2171 background:#e5e3e3 url("../images/button.png") repeat-x;
2174 2172 border-top:1px solid #DDD;
2175 2173 border-left:1px solid #c6c6c6;
2176 2174 border-right:1px solid #DDD;
2177 2175 border-bottom:1px solid #c6c6c6;
2178 2176 color:#515151;
2179 2177 margin:0;
2180 2178 padding:6px 12px;
2181 2179 }
2182 2180
2183 2181 #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 {
2184 2182 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2185 2183 border-top:1px solid #ccc;
2186 2184 border-left:1px solid #bebebe;
2187 2185 border-right:1px solid #b1b1b1;
2188 2186 border-bottom:1px solid #afafaf;
2189 2187 color:#515151;
2190 2188 margin:0;
2191 2189 padding:6px 12px;
2192 2190 }
2193 2191
2194 2192 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2195 2193 text-align:left;
2196 2194 float:left;
2197 2195 margin:0;
2198 2196 padding:0;
2199 2197 }
2200 2198
2201 2199 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2202 2200 height:1%;
2203 2201 display:block;
2204 2202 float:left;
2205 2203 background:#ebebeb url("../images/pager.png") repeat-x;
2206 2204 border-top:1px solid #dedede;
2207 2205 border-left:1px solid #cfcfcf;
2208 2206 border-right:1px solid #c4c4c4;
2209 2207 border-bottom:1px solid #c4c4c4;
2210 2208 color:#4A4A4A;
2211 2209 font-weight:700;
2212 2210 margin:0;
2213 2211 padding:6px 8px;
2214 2212 }
2215 2213
2216 2214 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2217 2215 color:#B4B4B4;
2218 2216 padding:6px;
2219 2217 }
2220 2218
2221 2219 #login,#register {
2222 2220 width:420px;
2223 2221 margin:10% auto 0;
2224 2222 padding:0;
2225 2223 }
2226 2224
2227 2225 #login div.color,#register div.color {
2228 2226 clear:both;
2229 2227 overflow:hidden;
2230 2228 background:#FFF;
2231 2229 margin:10px auto 0;
2232 2230 padding:3px 3px 3px 0;
2233 2231 }
2234 2232
2235 2233 #login div.color a,#register div.color a {
2236 2234 width:20px;
2237 2235 height:20px;
2238 2236 display:block;
2239 2237 float:left;
2240 2238 margin:0 0 0 3px;
2241 2239 padding:0;
2242 2240 }
2243 2241
2244 2242 #login div.title h5,#register div.title h5 {
2245 2243 color:#fff;
2246 2244 margin:10px;
2247 2245 padding:0;
2248 2246 }
2249 2247
2250 2248 #login div.form div.fields div.field,#register div.form div.fields div.field {
2251 2249 clear:both;
2252 2250 overflow:hidden;
2253 2251 margin:0;
2254 2252 padding:0 0 10px;
2255 2253 }
2256 2254
2257 2255 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2258 2256 height:1%;
2259 2257 display:block;
2260 2258 color:red;
2261 2259 margin:8px 0 0;
2262 2260 padding:0;
2263 2261 }
2264 2262
2265 2263 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2266 2264 color:#000;
2267 2265 font-weight:700;
2268 2266 }
2269 2267
2270 2268 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2271 2269 float:left;
2272 2270 margin:0;
2273 2271 padding:0;
2274 2272 }
2275 2273
2276 2274 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2277 2275 margin:0 0 0 184px;
2278 2276 padding:0;
2279 2277 }
2280 2278
2281 2279 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2282 2280 color:#565656;
2283 2281 font-weight:700;
2284 2282 }
2285 2283
2286 2284 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2287 2285 color:#000;
2288 2286 font-size:1em;
2289 2287 font-weight:700;
2290 2288 font-family:Verdana, Helvetica, Sans-Serif;
2291 2289 margin:0;
2292 2290 }
2293 2291
2294 2292 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2295 2293 width:600px;
2296 2294 }
2297 2295
2298 2296 #changeset_content .container .left,#graph_content .container .left {
2299 2297 float:left;
2300 2298 width:70%;
2301 2299 padding-left:5px;
2302 2300 }
2303 2301
2304 2302 #changeset_content .container .left .date,.ac .match {
2305 2303 font-weight:700;
2306 2304 padding-top: 5px;
2307 2305 padding-bottom:5px;
2308 2306 }
2309 2307
2310 2308 div#legend_container table td,div#legend_choices table td {
2311 2309 border:none !important;
2312 2310 height:20px !important;
2313 2311 padding:0 !important;
2314 2312 }
2315 2313
2316 2314 #q_filter{
2317 2315 border:0 none;
2318 2316 color:#AAAAAA;
2319 2317 margin-bottom:-4px;
2320 2318 margin-top:-4px;
2321 2319 padding-left:3px;
2322 2320 }
2323 2321
@@ -1,80 +1,80 b''
1 1 <%def name="file_class(node)">
2 2 %if node.is_file():
3 3 <%return "browser-file" %>
4 4 %else:
5 5 <%return "browser-dir"%>
6 6 %endif
7 7 </%def>
8 8 <div id="body" class="browserblock">
9 9 <div class="browser-header">
10 10 ${h.form(h.url.current())}
11 11 <div class="info_box">
12 12 <span >${_('view')}@rev</span>
13 13 <a href="${c.url_prev}" title="${_('previous revision')}">&laquo;</a>
14 14 ${h.text('at_rev',value=c.changeset.revision,size=3)}
15 15 <a href="${c.url_next}" title="${_('next revision')}">&raquo;</a>
16 16 ${h.submit('view','view')}
17 17 </div>
18 18 ${h.end_form()}
19 19 </div>
20 20 <div class="browser-body">
21 21 <table class="code-browser">
22 22 <thead>
23 23 <tr>
24 24 <th>${_('Name')}</th>
25 25 <th>${_('Size')}</th>
26 26 <th>${_('Mimetype')}</th>
27 27 <th>${_('Revision')}</th>
28 28 <th>${_('Last modified')}</th>
29 29 <th>${_('Last commiter')}</th>
30 30 </tr>
31 31 </thead>
32 32
33 33 %if c.files_list.parent:
34 34 <tr class="parity0">
35 35 <td>
36 36 ${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.files_list.parent.path),class_="browser-dir")}
37 37 </td>
38 38 <td></td>
39 39 <td></td>
40 40 <td></td>
41 41 <td></td>
42 42 <td></td>
43 43 </tr>
44 44 %endif
45 45
46 46 %for cnt,node in enumerate(c.files_list,1):
47 47 <tr class="parity${cnt%2}">
48 48 <td>
49 49 ${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=node.path),class_=file_class(node))}
50 50 </td>
51 51 <td>
52 52 %if node.is_file():
53 53 ${h.format_byte_size(node.size,binary=True)}
54 54 %endif
55 55 </td>
56 56 <td>
57 57 %if node.is_file():
58 58 ${node.mimetype}
59 59 %endif
60 60 </td>
61 61 <td>
62 62 %if node.is_file():
63 63 <span class="tooltip" tooltip_title="${node.last_changeset.raw_id}">${node.last_changeset.revision}</span>
64 64 %endif
65 65 </td>
66 66 <td>
67 67 %if node.is_file():
68 ${node.last_changeset.date} - ${h.age(node.last_changeset.date)} ${_('ago')}
68 ${node.last_changeset.date} - ${h.age(node.last_changeset.date)}
69 69 %endif
70 70 </td>
71 71 <td>
72 72 %if node.is_file():
73 73 ${node.last_changeset.author}
74 74 %endif
75 75 </td>
76 76 </tr>
77 77 %endfor
78 78 </table>
79 79 </div>
80 80 </div> No newline at end of file
@@ -1,165 +1,166 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="base/base.html"/>
3 3 <%def name="title()">
4 4 ${_('Dashboard')} - ${c.rhodecode_name}
5 5 </%def>
6 6 <%def name="breadcrumbs()">
7 7 ${c.rhodecode_name}
8 8 </%def>
9 9 <%def name="page_nav()">
10 10 ${self.menu('home')}
11 11 </%def>
12 12 <%def name="main()">
13 13 <%def name="get_sort(name)">
14 14 <%name_slug = name.lower().replace(' ','_') %>
15 15
16 16 %if name_slug == c.sort_slug:
17 17 %if c.sort_by.startswith('-'):
18 18 <a href="?sort=${name_slug}">${name}&uarr;</a>
19 19 %else:
20 20 <a href="?sort=-${name_slug}">${name}&darr;</a>
21 21 %endif:
22 22 %else:
23 23 <a href="?sort=${name_slug}">${name}</a>
24 24 %endif
25 25 </%def>
26 26
27 27 <div class="box">
28 28 <!-- box / title -->
29 29 <div class="title">
30 30 <h5>${_('Dashboard')}
31 31 <input class="top-right-rounded-corner top-left-rounded-corner bottom-left-rounded-corner bottom-right-rounded-corner" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/>
32 32 </h5>
33 33 %if h.HasPermissionAny('hg.admin','hg.create.repository')():
34 34 <ul class="links">
35 35 <li>
36 36 <span>${h.link_to(_('ADD NEW REPOSITORY'),h.url('admin_settings_create_repository'))}</span>
37 37 </li>
38 38 </ul>
39 39 %endif
40 40 </div>
41 41 <!-- end box / title -->
42 42 <div class="table">
43 43 <table>
44 44 <thead>
45 45 <tr>
46 46 <th class="left">${get_sort(_('Name'))}</th>
47 47 <th class="left">${get_sort(_('Description'))}</th>
48 48 <th class="left">${get_sort(_('Last change'))}</th>
49 49 <th class="left">${get_sort(_('Tip'))}</th>
50 50 <th class="left">${get_sort(_('Owner'))}</th>
51 51 <th class="left">${_('RSS')}</th>
52 52 <th class="left">${_('Atom')}</th>
53 53 </tr>
54 54 </thead>
55 55 <tbody>
56 56 %for cnt,repo in enumerate(c.repos_list):
57 %if h.HasRepoPermissionAny('repository.write','repository.read','repository.admin')(repo['name'],'main page check'):
58 57 <tr class="parity${cnt%2}">
59 58 <td>
59 <div style="white-space: nowrap">
60 60 ## TYPE OF REPO
61 61 %if repo['repo'].dbrepo.repo_type =='hg':
62 62 <img class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="/images/icons/hgicon.png"/>
63 63 %elif repo['repo'].dbrepo.repo_type =='git':
64 64 <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="/images/icons/giticon.png"/>
65 65 %else:
66 66
67 67 %endif
68 68
69 69 ##PRIVATE/PUBLIC
70 70 %if repo['repo'].dbrepo.private:
71 71 <img class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="/images/icons/lock.png"/>
72 72 %else:
73 73 <img class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="/images/icons/lock_open.png"/>
74 74 %endif
75 75
76 76 ##NAME
77 77 ${h.link_to(repo['name'],
78 78 h.url('summary_home',repo_name=repo['name']),class_="repo_name")}
79 79 %if repo['repo'].dbrepo.fork:
80 80 <a href="${h.url('summary_home',repo_name=repo['repo'].dbrepo.fork.repo_name)}">
81 81 <img class="icon" alt="${_('fork')}"
82 82 title="${_('Fork of')} ${repo['repo'].dbrepo.fork.repo_name}"
83 83 src="/images/icons/arrow_divide.png"/></a>
84 84 %endif
85 </div>
85 86 </td>
86 87 ##DESCRIPTION
87 88 <td><span class="tooltip" tooltip_title="${repo['description']}">
88 89 ${h.truncate(repo['description'],60)}</span>
89 90 </td>
90 91 ##LAST CHANGE
91 92 <td>
92 <span>${repo['last_change']} - ${h.age(repo['last_change'])} </span>
93 <span class="tooltip" tooltip_title="${h.age(repo['last_change'])}">
94 ${repo['last_change']}</span>
93 95 </td>
94 96 <td>
95 97 %if repo['rev']>=0:
96 98 ${h.link_to('r%s:%s' % (repo['rev'],h.short_id(repo['tip'])),
97 99 h.url('changeset_home',repo_name=repo['name'],revision=repo['tip']),
98 100 class_="tooltip",
99 101 tooltip_title=h.tooltip(repo['last_msg']))}
100 102 %else:
101 103 ${_('No changesets yet')}
102 104 %endif
103 105 </td>
104 106 <td title="${repo['contact']}">${h.person(repo['contact'])}</td>
105 107 <td>
106 108 <a title="${_('Subscribe to %s rss feed')%repo['name']}" class="rss_icon" href="${h.url('rss_feed_home',repo_name=repo['name'])}"></a>
107 109 </td>
108 110 <td>
109 111 <a title="${_('Subscribe to %s atom feed')%repo['name']}" class="atom_icon" href="${h.url('atom_feed_home',repo_name=repo['name'])}"></a>
110 112 </td>
111 113 </tr>
112 %endif
113 114 %endfor
114 115 </tbody>
115 116 </table>
116 117 </div>
117 118 </div>
118 119
119 120
120 121 <script type="text/javascript">
121 122 var D = YAHOO.util.Dom;
122 123 var E = YAHOO.util.Event;
123 124 var S = YAHOO.util.Selector;
124 125
125 126 var q_filter = D.get('q_filter');
126 127 var F = YAHOO.namespace('q_filter');
127 128
128 129 E.on(q_filter,'click',function(){
129 130 q_filter.value = '';
130 131 });
131 132
132 133 F.filterTimeout = null;
133 134
134 135 F.updateFilter = function() {
135 136 // Reset timeout
136 137 F.filterTimeout = null;
137 138
138 139 var obsolete = [];
139 var nodes = S.query('div.table tr td a.repo_name');
140 var nodes = S.query('div.table tr td div a.repo_name');
140 141 var req = D.get('q_filter').value;
141 142 for (n in nodes){
142 D.setStyle(nodes[n].parentNode.parentNode,'display','')
143 D.setStyle(nodes[n].parentNode.parentNode.parentNode,'display','')
143 144 }
144 145 if (req){
145 146 for (n in nodes){
146 147 if (nodes[n].innerHTML.toLowerCase().indexOf(req) == -1) {
147 148 obsolete.push(nodes[n]);
148 149 }
149 150 }
150 151 if(obsolete){
151 152 for (n in obsolete){
152 D.setStyle(obsolete[n].parentNode.parentNode,'display','none');
153 D.setStyle(obsolete[n].parentNode.parentNode.parentNode,'display','none');
153 154 }
154 155 }
155 156 }
156 157 }
157 158
158 159 E.on(q_filter,'keyup',function(e){
159 160 clearTimeout(F.filterTimeout);
160 161 setTimeout(F.updateFilter,600);
161 162 });
162 163
163 164 </script>
164 165
165 166 </%def>
General Comments 0
You need to be logged in to leave comments. Login now