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