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