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