##// END OF EJS Templates
Implemented fancier top menu for logged and anonymous users...
marcink -
r784:30d3161c beta
parent child Browse files
Show More
@@ -1,51 +1,52 b''
1 """The base Controller API
1 """The base Controller API
2
2
3 Provides the BaseController class for subclassing.
3 Provides the BaseController class for subclassing.
4 """
4 """
5 from pylons import config, tmpl_context as c, request, session
5 from pylons import config, tmpl_context as c, request, session
6 from pylons.controllers import WSGIController
6 from pylons.controllers import WSGIController
7 from pylons.templating import render_mako as render
7 from pylons.templating import render_mako as render
8 from rhodecode import __version__
8 from rhodecode import __version__
9 from rhodecode.lib import auth
9 from rhodecode.lib import auth
10 from rhodecode.lib.utils import get_repo_slug
10 from rhodecode.lib.utils import get_repo_slug
11 from rhodecode.model import meta
11 from rhodecode.model import meta
12 from rhodecode.model.scm import ScmModel
12 from rhodecode.model.scm import ScmModel
13 from rhodecode import BACKENDS
13 from rhodecode import BACKENDS
14
14
15 class BaseController(WSGIController):
15 class BaseController(WSGIController):
16
16
17 def __before__(self):
17 def __before__(self):
18 c.rhodecode_version = __version__
18 c.rhodecode_version = __version__
19 c.rhodecode_name = config['rhodecode_title']
19 c.rhodecode_name = config['rhodecode_title']
20 c.repo_name = get_repo_slug(request)
20 c.repo_name = get_repo_slug(request)
21 c.cached_repo_list = ScmModel().get_repos()
21 c.cached_repo_list = ScmModel().get_repos()
22 c.backends = BACKENDS.keys()
22 c.backends = BACKENDS.keys()
23
23
24 self.sa = meta.Session()
25 scm_model = ScmModel(self.sa)
26 #c.unread_journal = scm_model.get_unread_journal()
27
24 if c.repo_name:
28 if c.repo_name:
25 scm_model = ScmModel()
26 cached_repo = scm_model.get(c.repo_name)
29 cached_repo = scm_model.get(c.repo_name)
27
28 if cached_repo:
30 if cached_repo:
29 c.repository_tags = cached_repo.tags
31 c.repository_tags = cached_repo.tags
30 c.repository_branches = cached_repo.branches
32 c.repository_branches = cached_repo.branches
31 c.repository_followers = scm_model.get_followers(cached_repo.dbrepo.repo_id)
33 c.repository_followers = scm_model.get_followers(cached_repo.dbrepo.repo_id)
32 c.repository_forks = scm_model.get_forks(cached_repo.dbrepo.repo_id)
34 c.repository_forks = scm_model.get_forks(cached_repo.dbrepo.repo_id)
33 else:
35 else:
34 c.repository_tags = {}
36 c.repository_tags = {}
35 c.repository_branches = {}
37 c.repository_branches = {}
36 c.repository_followers = 0
38 c.repository_followers = 0
37 c.repository_forks = 0
39 c.repository_forks = 0
38
40
39 self.sa = meta.Session()
40
41
41 def __call__(self, environ, start_response):
42 def __call__(self, environ, start_response):
42 """Invoke the Controller"""
43 """Invoke the Controller"""
43 # WSGIController.__call__ dispatches to the Controller method
44 # WSGIController.__call__ dispatches to the Controller method
44 # the request is routed to. This routing information is
45 # the request is routed to. This routing information is
45 # available in environ['pylons.routes_dict']
46 # available in environ['pylons.routes_dict']
46 try:
47 try:
47 #putting this here makes sure that we update permissions every time
48 #putting this here makes sure that we update permissions every time
48 self.rhodecode_user = c.rhodecode_user = auth.get_user(session)
49 self.rhodecode_user = c.rhodecode_user = auth.get_user(session)
49 return WSGIController.__call__(self, environ, start_response)
50 return WSGIController.__call__(self, environ, start_response)
50 finally:
51 finally:
51 meta.Session.remove()
52 meta.Session.remove()
@@ -1,276 +1,276 b''
1 """caching_query.py
1 """caching_query.py
2
2
3 Represent persistence structures which allow the usage of
3 Represent persistence structures which allow the usage of
4 Beaker caching with SQLAlchemy.
4 Beaker caching with SQLAlchemy.
5
5
6 The three new concepts introduced here are:
6 The three new concepts introduced here are:
7
7
8 * CachingQuery - a Query subclass that caches and
8 * CachingQuery - a Query subclass that caches and
9 retrieves results in/from Beaker.
9 retrieves results in/from Beaker.
10 * FromCache - a query option that establishes caching
10 * FromCache - a query option that establishes caching
11 parameters on a Query
11 parameters on a Query
12 * RelationshipCache - a variant of FromCache which is specific
12 * RelationshipCache - a variant of FromCache which is specific
13 to a query invoked during a lazy load.
13 to a query invoked during a lazy load.
14 * _params_from_query - extracts value parameters from
14 * _params_from_query - extracts value parameters from
15 a Query.
15 a Query.
16
16
17 The rest of what's here are standard SQLAlchemy and
17 The rest of what's here are standard SQLAlchemy and
18 Beaker constructs.
18 Beaker constructs.
19
19
20 """
20 """
21 from beaker.exceptions import BeakerException
21 from beaker.exceptions import BeakerException
22 from sqlalchemy.orm.interfaces import MapperOption
22 from sqlalchemy.orm.interfaces import MapperOption
23 from sqlalchemy.orm.query import Query
23 from sqlalchemy.orm.query import Query
24 from sqlalchemy.sql import visitors
24 from sqlalchemy.sql import visitors
25 import beaker
25 import beaker
26
26
27 class CachingQuery(Query):
27 class CachingQuery(Query):
28 """A Query subclass which optionally loads full results from a Beaker
28 """A Query subclass which optionally loads full results from a Beaker
29 cache region.
29 cache region.
30
30
31 The CachingQuery stores additional state that allows it to consult
31 The CachingQuery stores additional state that allows it to consult
32 a Beaker cache before accessing the database:
32 a Beaker cache before accessing the database:
33
33
34 * A "region", which is a cache region argument passed to a
34 * A "region", which is a cache region argument passed to a
35 Beaker CacheManager, specifies a particular cache configuration
35 Beaker CacheManager, specifies a particular cache configuration
36 (including backend implementation, expiration times, etc.)
36 (including backend implementation, expiration times, etc.)
37 * A "namespace", which is a qualifying name that identifies a
37 * A "namespace", which is a qualifying name that identifies a
38 group of keys within the cache. A query that filters on a name
38 group of keys within the cache. A query that filters on a name
39 might use the name "by_name", a query that filters on a date range
39 might use the name "by_name", a query that filters on a date range
40 to a joined table might use the name "related_date_range".
40 to a joined table might use the name "related_date_range".
41
41
42 When the above state is present, a Beaker cache is retrieved.
42 When the above state is present, a Beaker cache is retrieved.
43
43
44 The "namespace" name is first concatenated with
44 The "namespace" name is first concatenated with
45 a string composed of the individual entities and columns the Query
45 a string composed of the individual entities and columns the Query
46 requests, i.e. such as ``Query(User.id, User.name)``.
46 requests, i.e. such as ``Query(User.id, User.name)``.
47
47
48 The Beaker cache is then loaded from the cache manager based
48 The Beaker cache is then loaded from the cache manager based
49 on the region and composed namespace. The key within the cache
49 on the region and composed namespace. The key within the cache
50 itself is then constructed against the bind parameters specified
50 itself is then constructed against the bind parameters specified
51 by this query, which are usually literals defined in the
51 by this query, which are usually literals defined in the
52 WHERE clause.
52 WHERE clause.
53
53
54 The FromCache and RelationshipCache mapper options below represent
54 The FromCache and RelationshipCache mapper options below represent
55 the "public" method of configuring this state upon the CachingQuery.
55 the "public" method of configuring this state upon the CachingQuery.
56
56
57 """
57 """
58
58
59 def __init__(self, manager, *args, **kw):
59 def __init__(self, manager, *args, **kw):
60 self.cache_manager = manager
60 self.cache_manager = manager
61 Query.__init__(self, *args, **kw)
61 Query.__init__(self, *args, **kw)
62
62
63 def __iter__(self):
63 def __iter__(self):
64 """override __iter__ to pull results from Beaker
64 """override __iter__ to pull results from Beaker
65 if particular attributes have been configured.
65 if particular attributes have been configured.
66
66
67 Note that this approach does *not* detach the loaded objects from
67 Note that this approach does *not* detach the loaded objects from
68 the current session. If the cache backend is an in-process cache
68 the current session. If the cache backend is an in-process cache
69 (like "memory") and lives beyond the scope of the current session's
69 (like "memory") and lives beyond the scope of the current session's
70 transaction, those objects may be expired. The method here can be
70 transaction, those objects may be expired. The method here can be
71 modified to first expunge() each loaded item from the current
71 modified to first expunge() each loaded item from the current
72 session before returning the list of items, so that the items
72 session before returning the list of items, so that the items
73 in the cache are not the same ones in the current Session.
73 in the cache are not the same ones in the current Session.
74
74
75 """
75 """
76 if hasattr(self, '_cache_parameters'):
76 if hasattr(self, '_cache_parameters'):
77 return self.get_value(createfunc=lambda: list(Query.__iter__(self)))
77 return self.get_value(createfunc=lambda: list(Query.__iter__(self)))
78 else:
78 else:
79 return Query.__iter__(self)
79 return Query.__iter__(self)
80
80
81 def invalidate(self):
81 def invalidate(self):
82 """Invalidate the value represented by this Query."""
82 """Invalidate the value represented by this Query."""
83
83
84 cache, cache_key = _get_cache_parameters(self)
84 cache, cache_key = _get_cache_parameters(self)
85 cache.remove(cache_key)
85 cache.remove(cache_key)
86
86
87 def get_value(self, merge=True, createfunc=None):
87 def get_value(self, merge=True, createfunc=None):
88 """Return the value from the cache for this query.
88 """Return the value from the cache for this query.
89
89
90 Raise KeyError if no value present and no
90 Raise KeyError if no value present and no
91 createfunc specified.
91 createfunc specified.
92
92
93 """
93 """
94 cache, cache_key = _get_cache_parameters(self)
94 cache, cache_key = _get_cache_parameters(self)
95 ret = cache.get_value(cache_key, createfunc=createfunc)
95 ret = cache.get_value(cache_key, createfunc=createfunc)
96 if merge:
96 if merge:
97 ret = self.merge_result(ret, load=False)
97 ret = self.merge_result(ret, load=False)
98 return ret
98 return ret
99
99
100 def set_value(self, value):
100 def set_value(self, value):
101 """Set the value in the cache for this query."""
101 """Set the value in the cache for this query."""
102
102
103 cache, cache_key = _get_cache_parameters(self)
103 cache, cache_key = _get_cache_parameters(self)
104 cache.put(cache_key, value)
104 cache.put(cache_key, value)
105
105
106 def query_callable(manager):
106 def query_callable(manager):
107 def query(*arg, **kw):
107 def query(*arg, **kw):
108 return CachingQuery(manager, *arg, **kw)
108 return CachingQuery(manager, *arg, **kw)
109 return query
109 return query
110
110
111 def get_cache_region(name, region):
111 def get_cache_region(name, region):
112 if region not in beaker.cache.cache_regions:
112 if region not in beaker.cache.cache_regions:
113 raise BeakerException('Cache region not configured: %s'
113 raise BeakerException('Cache region `%s` not configured '
114 'Check if proper cache settings are in the .ini files' % region)
114 'Check if proper cache settings are in the .ini files' % region)
115 kw = beaker.cache.cache_regions[region]
115 kw = beaker.cache.cache_regions[region]
116 return beaker.cache.Cache._get_cache(name, kw)
116 return beaker.cache.Cache._get_cache(name, kw)
117
117
118 def _get_cache_parameters(query):
118 def _get_cache_parameters(query):
119 """For a query with cache_region and cache_namespace configured,
119 """For a query with cache_region and cache_namespace configured,
120 return the correspoinding Cache instance and cache key, based
120 return the correspoinding Cache instance and cache key, based
121 on this query's current criterion and parameter values.
121 on this query's current criterion and parameter values.
122
122
123 """
123 """
124 if not hasattr(query, '_cache_parameters'):
124 if not hasattr(query, '_cache_parameters'):
125 raise ValueError("This Query does not have caching parameters configured.")
125 raise ValueError("This Query does not have caching parameters configured.")
126
126
127 region, namespace, cache_key = query._cache_parameters
127 region, namespace, cache_key = query._cache_parameters
128
128
129 namespace = _namespace_from_query(namespace, query)
129 namespace = _namespace_from_query(namespace, query)
130
130
131 if cache_key is None:
131 if cache_key is None:
132 # cache key - the value arguments from this query's parameters.
132 # cache key - the value arguments from this query's parameters.
133 args = _params_from_query(query)
133 args = _params_from_query(query)
134 cache_key = " ".join([str(x) for x in args])
134 cache_key = " ".join([str(x) for x in args])
135
135
136 # get cache
136 # get cache
137 #cache = query.cache_manager.get_cache_region(namespace, region)
137 #cache = query.cache_manager.get_cache_region(namespace, region)
138 cache = get_cache_region(namespace, region)
138 cache = get_cache_region(namespace, region)
139 # optional - hash the cache_key too for consistent length
139 # optional - hash the cache_key too for consistent length
140 # import uuid
140 # import uuid
141 # cache_key= str(uuid.uuid5(uuid.NAMESPACE_DNS, cache_key))
141 # cache_key= str(uuid.uuid5(uuid.NAMESPACE_DNS, cache_key))
142
142
143 return cache, cache_key
143 return cache, cache_key
144
144
145 def _namespace_from_query(namespace, query):
145 def _namespace_from_query(namespace, query):
146 # cache namespace - the token handed in by the
146 # cache namespace - the token handed in by the
147 # option + class we're querying against
147 # option + class we're querying against
148 namespace = " ".join([namespace] + [str(x) for x in query._entities])
148 namespace = " ".join([namespace] + [str(x) for x in query._entities])
149
149
150 # memcached wants this
150 # memcached wants this
151 namespace = namespace.replace(' ', '_')
151 namespace = namespace.replace(' ', '_')
152
152
153 return namespace
153 return namespace
154
154
155 def _set_cache_parameters(query, region, namespace, cache_key):
155 def _set_cache_parameters(query, region, namespace, cache_key):
156
156
157 if hasattr(query, '_cache_parameters'):
157 if hasattr(query, '_cache_parameters'):
158 region, namespace, cache_key = query._cache_parameters
158 region, namespace, cache_key = query._cache_parameters
159 raise ValueError("This query is already configured "
159 raise ValueError("This query is already configured "
160 "for region %r namespace %r" %
160 "for region %r namespace %r" %
161 (region, namespace)
161 (region, namespace)
162 )
162 )
163 query._cache_parameters = region, namespace, cache_key
163 query._cache_parameters = region, namespace, cache_key
164
164
165 class FromCache(MapperOption):
165 class FromCache(MapperOption):
166 """Specifies that a Query should load results from a cache."""
166 """Specifies that a Query should load results from a cache."""
167
167
168 propagate_to_loaders = False
168 propagate_to_loaders = False
169
169
170 def __init__(self, region, namespace, cache_key=None):
170 def __init__(self, region, namespace, cache_key=None):
171 """Construct a new FromCache.
171 """Construct a new FromCache.
172
172
173 :param region: the cache region. Should be a
173 :param region: the cache region. Should be a
174 region configured in the Beaker CacheManager.
174 region configured in the Beaker CacheManager.
175
175
176 :param namespace: the cache namespace. Should
176 :param namespace: the cache namespace. Should
177 be a name uniquely describing the target Query's
177 be a name uniquely describing the target Query's
178 lexical structure.
178 lexical structure.
179
179
180 :param cache_key: optional. A string cache key
180 :param cache_key: optional. A string cache key
181 that will serve as the key to the query. Use this
181 that will serve as the key to the query. Use this
182 if your query has a huge amount of parameters (such
182 if your query has a huge amount of parameters (such
183 as when using in_()) which correspond more simply to
183 as when using in_()) which correspond more simply to
184 some other identifier.
184 some other identifier.
185
185
186 """
186 """
187 self.region = region
187 self.region = region
188 self.namespace = namespace
188 self.namespace = namespace
189 self.cache_key = cache_key
189 self.cache_key = cache_key
190
190
191 def process_query(self, query):
191 def process_query(self, query):
192 """Process a Query during normal loading operation."""
192 """Process a Query during normal loading operation."""
193
193
194 _set_cache_parameters(query, self.region, self.namespace, self.cache_key)
194 _set_cache_parameters(query, self.region, self.namespace, self.cache_key)
195
195
196 class RelationshipCache(MapperOption):
196 class RelationshipCache(MapperOption):
197 """Specifies that a Query as called within a "lazy load"
197 """Specifies that a Query as called within a "lazy load"
198 should load results from a cache."""
198 should load results from a cache."""
199
199
200 propagate_to_loaders = True
200 propagate_to_loaders = True
201
201
202 def __init__(self, region, namespace, attribute):
202 def __init__(self, region, namespace, attribute):
203 """Construct a new RelationshipCache.
203 """Construct a new RelationshipCache.
204
204
205 :param region: the cache region. Should be a
205 :param region: the cache region. Should be a
206 region configured in the Beaker CacheManager.
206 region configured in the Beaker CacheManager.
207
207
208 :param namespace: the cache namespace. Should
208 :param namespace: the cache namespace. Should
209 be a name uniquely describing the target Query's
209 be a name uniquely describing the target Query's
210 lexical structure.
210 lexical structure.
211
211
212 :param attribute: A Class.attribute which
212 :param attribute: A Class.attribute which
213 indicates a particular class relationship() whose
213 indicates a particular class relationship() whose
214 lazy loader should be pulled from the cache.
214 lazy loader should be pulled from the cache.
215
215
216 """
216 """
217 self.region = region
217 self.region = region
218 self.namespace = namespace
218 self.namespace = namespace
219 self._relationship_options = {
219 self._relationship_options = {
220 (attribute.property.parent.class_, attribute.property.key) : self
220 (attribute.property.parent.class_, attribute.property.key) : self
221 }
221 }
222
222
223 def process_query_conditionally(self, query):
223 def process_query_conditionally(self, query):
224 """Process a Query that is used within a lazy loader.
224 """Process a Query that is used within a lazy loader.
225
225
226 (the process_query_conditionally() method is a SQLAlchemy
226 (the process_query_conditionally() method is a SQLAlchemy
227 hook invoked only within lazyload.)
227 hook invoked only within lazyload.)
228
228
229 """
229 """
230 if query._current_path:
230 if query._current_path:
231 mapper, key = query._current_path[-2:]
231 mapper, key = query._current_path[-2:]
232
232
233 for cls in mapper.class_.__mro__:
233 for cls in mapper.class_.__mro__:
234 if (cls, key) in self._relationship_options:
234 if (cls, key) in self._relationship_options:
235 relationship_option = self._relationship_options[(cls, key)]
235 relationship_option = self._relationship_options[(cls, key)]
236 _set_cache_parameters(
236 _set_cache_parameters(
237 query,
237 query,
238 relationship_option.region,
238 relationship_option.region,
239 relationship_option.namespace,
239 relationship_option.namespace,
240 None)
240 None)
241
241
242 def and_(self, option):
242 def and_(self, option):
243 """Chain another RelationshipCache option to this one.
243 """Chain another RelationshipCache option to this one.
244
244
245 While many RelationshipCache objects can be specified on a single
245 While many RelationshipCache objects can be specified on a single
246 Query separately, chaining them together allows for a more efficient
246 Query separately, chaining them together allows for a more efficient
247 lookup during load.
247 lookup during load.
248
248
249 """
249 """
250 self._relationship_options.update(option._relationship_options)
250 self._relationship_options.update(option._relationship_options)
251 return self
251 return self
252
252
253
253
254 def _params_from_query(query):
254 def _params_from_query(query):
255 """Pull the bind parameter values from a query.
255 """Pull the bind parameter values from a query.
256
256
257 This takes into account any scalar attribute bindparam set up.
257 This takes into account any scalar attribute bindparam set up.
258
258
259 E.g. params_from_query(query.filter(Cls.foo==5).filter(Cls.bar==7)))
259 E.g. params_from_query(query.filter(Cls.foo==5).filter(Cls.bar==7)))
260 would return [5, 7].
260 would return [5, 7].
261
261
262 """
262 """
263 v = []
263 v = []
264 def visit_bindparam(bind):
264 def visit_bindparam(bind):
265 value = query._params.get(bind.key, bind.value)
265 value = query._params.get(bind.key, bind.value)
266
266
267 # lazyloader may dig a callable in here, intended
267 # lazyloader may dig a callable in here, intended
268 # to late-evaluate params after autoflush is called.
268 # to late-evaluate params after autoflush is called.
269 # convert to a scalar value.
269 # convert to a scalar value.
270 if callable(value):
270 if callable(value):
271 value = value()
271 value = value()
272
272
273 v.append(value)
273 v.append(value)
274 if query._criterion is not None:
274 if query._criterion is not None:
275 visitors.traverse(query._criterion, {}, {'bindparam':visit_bindparam})
275 visitors.traverse(query._criterion, {}, {'bindparam':visit_bindparam})
276 return v
276 return v
@@ -1,365 +1,370 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 package.rhodecode.model.scm
3 package.rhodecode.model.scm
4 ~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~
5
5
6 scm model for RhodeCode
6 scm model for RhodeCode
7 :created_on: Apr 9, 2010
7 :created_on: Apr 9, 2010
8 :author: marcink
8 :author: marcink
9 :copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
9 :copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
10 :license: GPLv3, see COPYING for more details.
10 :license: GPLv3, see COPYING for more details.
11 """
11 """
12 # This program is free software; you can redistribute it and/or
12 # This program is free software; you can redistribute it and/or
13 # modify it under the terms of the GNU General Public License
13 # modify it under the terms of the GNU General Public License
14 # as published by the Free Software Foundation; version 2
14 # as published by the Free Software Foundation; version 2
15 # of the License or (at your opinion) any later version of the license.
15 # of the License or (at your opinion) any later version of the license.
16 #
16 #
17 # This program is distributed in the hope that it will be useful,
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
20 # GNU General Public License for more details.
21 #
21 #
22 # You should have received a copy of the GNU General Public License
22 # You should have received a copy of the GNU General Public License
23 # along with this program; if not, write to the Free Software
23 # along with this program; if not, write to the Free Software
24 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
24 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
25 # MA 02110-1301, USA.
25 # MA 02110-1301, USA.
26
26
27 import os
27 import os
28 import time
28 import time
29 import traceback
29 import traceback
30 import logging
30 import logging
31
31
32 from vcs import get_backend
32 from vcs import get_backend
33 from vcs.utils.helpers import get_scm
33 from vcs.utils.helpers import get_scm
34 from vcs.exceptions import RepositoryError, VCSError
34 from vcs.exceptions import RepositoryError, VCSError
35 from vcs.utils.lazy import LazyProperty
35 from vcs.utils.lazy import LazyProperty
36
36
37 from mercurial import ui
37 from mercurial import ui
38
38
39 from beaker.cache import cache_region, region_invalidate
39 from beaker.cache import cache_region, region_invalidate
40
40
41 from rhodecode import BACKENDS
41 from rhodecode import BACKENDS
42 from rhodecode.lib import helpers as h
42 from rhodecode.lib import helpers as h
43 from rhodecode.lib.auth import HasRepoPermissionAny
43 from rhodecode.lib.auth import HasRepoPermissionAny
44 from rhodecode.lib.utils import get_repos, make_ui, action_logger
44 from rhodecode.lib.utils import get_repos, make_ui, action_logger
45 from rhodecode.model import BaseModel
45 from rhodecode.model import BaseModel
46 from rhodecode.model.user import UserModel
46 from rhodecode.model.user import UserModel
47
47
48 from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \
48 from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \
49 UserFollowing
49 UserFollowing, UserLog
50 from rhodecode.model.caching_query import FromCache
50 from rhodecode.model.caching_query import FromCache
51
51
52 from sqlalchemy.orm import joinedload
52 from sqlalchemy.orm import joinedload
53 from sqlalchemy.orm.session import make_transient
53 from sqlalchemy.orm.session import make_transient
54 from sqlalchemy.exc import DatabaseError
54 from sqlalchemy.exc import DatabaseError
55
55
56 log = logging.getLogger(__name__)
56 log = logging.getLogger(__name__)
57
57
58
58
59 class UserTemp(object):
59 class UserTemp(object):
60 def __init__(self, user_id):
60 def __init__(self, user_id):
61 self.user_id = user_id
61 self.user_id = user_id
62 class RepoTemp(object):
62 class RepoTemp(object):
63 def __init__(self, repo_id):
63 def __init__(self, repo_id):
64 self.repo_id = repo_id
64 self.repo_id = repo_id
65
65
66 class ScmModel(BaseModel):
66 class ScmModel(BaseModel):
67 """
67 """
68 Mercurial Model
68 Mercurial Model
69 """
69 """
70
70
71 @LazyProperty
71 @LazyProperty
72 def repos_path(self):
72 def repos_path(self):
73 """
73 """
74 Get's the repositories root path from database
74 Get's the repositories root path from database
75 """
75 """
76 q = self.sa.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == '/').one()
76 q = self.sa.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == '/').one()
77
77
78 return q.ui_value
78 return q.ui_value
79
79
80 def repo_scan(self, repos_path, baseui):
80 def repo_scan(self, repos_path, baseui):
81 """
81 """
82 Listing of repositories in given path. This path should not be a
82 Listing of repositories in given path. This path should not be a
83 repository itself. Return a dictionary of repository objects
83 repository itself. Return a dictionary of repository objects
84
84
85 :param repos_path: path to directory containing repositories
85 :param repos_path: path to directory containing repositories
86 :param baseui
86 :param baseui
87 """
87 """
88 log.info('scanning for repositories in %s', repos_path)
88 log.info('scanning for repositories in %s', repos_path)
89
89
90 if not isinstance(baseui, ui.ui):
90 if not isinstance(baseui, ui.ui):
91 baseui = make_ui('db')
91 baseui = make_ui('db')
92 repos_list = {}
92 repos_list = {}
93
93
94 for name, path in get_repos(repos_path):
94 for name, path in get_repos(repos_path):
95 try:
95 try:
96 if repos_list.has_key(name):
96 if repos_list.has_key(name):
97 raise RepositoryError('Duplicate repository name %s '
97 raise RepositoryError('Duplicate repository name %s '
98 'found in %s' % (name, path))
98 'found in %s' % (name, path))
99 else:
99 else:
100
100
101 klass = get_backend(path[0])
101 klass = get_backend(path[0])
102
102
103 if path[0] == 'hg' and path[0] in BACKENDS.keys():
103 if path[0] == 'hg' and path[0] in BACKENDS.keys():
104 repos_list[name] = klass(path[1], baseui=baseui)
104 repos_list[name] = klass(path[1], baseui=baseui)
105
105
106 if path[0] == 'git' and path[0] in BACKENDS.keys():
106 if path[0] == 'git' and path[0] in BACKENDS.keys():
107 repos_list[name] = klass(path[1])
107 repos_list[name] = klass(path[1])
108 except OSError:
108 except OSError:
109 continue
109 continue
110
110
111 return repos_list
111 return repos_list
112
112
113 def get_repos(self, all_repos=None):
113 def get_repos(self, all_repos=None):
114 """
114 """
115 Get all repos from db and for each repo create it's backend instance.
115 Get all repos from db and for each repo create it's backend instance.
116 and fill that backed with information from database
116 and fill that backed with information from database
117
117
118 :param all_repos: give specific repositories list, good for filtering
118 :param all_repos: give specific repositories list, good for filtering
119 """
119 """
120 if all_repos is None:
120 if all_repos is None:
121 all_repos = self.sa.query(Repository)\
121 all_repos = self.sa.query(Repository)\
122 .order_by(Repository.repo_name).all()
122 .order_by(Repository.repo_name).all()
123
123
124 invalidation_list = [str(x.cache_key) for x in \
124 invalidation_list = [str(x.cache_key) for x in \
125 self.sa.query(CacheInvalidation.cache_key)\
125 self.sa.query(CacheInvalidation.cache_key)\
126 .filter(CacheInvalidation.cache_active == False)\
126 .filter(CacheInvalidation.cache_active == False)\
127 .all()]
127 .all()]
128
128
129 for r in all_repos:
129 for r in all_repos:
130
130
131 repo = self.get(r.repo_name, invalidation_list)
131 repo = self.get(r.repo_name, invalidation_list)
132
132
133 if repo is not None:
133 if repo is not None:
134 last_change = repo.last_change
134 last_change = repo.last_change
135 tip = h.get_changeset_safe(repo, 'tip')
135 tip = h.get_changeset_safe(repo, 'tip')
136
136
137 tmp_d = {}
137 tmp_d = {}
138 tmp_d['name'] = repo.name
138 tmp_d['name'] = repo.name
139 tmp_d['name_sort'] = tmp_d['name'].lower()
139 tmp_d['name_sort'] = tmp_d['name'].lower()
140 tmp_d['description'] = repo.dbrepo.description
140 tmp_d['description'] = repo.dbrepo.description
141 tmp_d['description_sort'] = tmp_d['description']
141 tmp_d['description_sort'] = tmp_d['description']
142 tmp_d['last_change'] = last_change
142 tmp_d['last_change'] = last_change
143 tmp_d['last_change_sort'] = time.mktime(last_change.timetuple())
143 tmp_d['last_change_sort'] = time.mktime(last_change.timetuple())
144 tmp_d['tip'] = tip.raw_id
144 tmp_d['tip'] = tip.raw_id
145 tmp_d['tip_sort'] = tip.revision
145 tmp_d['tip_sort'] = tip.revision
146 tmp_d['rev'] = tip.revision
146 tmp_d['rev'] = tip.revision
147 tmp_d['contact'] = repo.dbrepo.user.full_contact
147 tmp_d['contact'] = repo.dbrepo.user.full_contact
148 tmp_d['contact_sort'] = tmp_d['contact']
148 tmp_d['contact_sort'] = tmp_d['contact']
149 tmp_d['repo_archives'] = list(repo._get_archives())
149 tmp_d['repo_archives'] = list(repo._get_archives())
150 tmp_d['last_msg'] = tip.message
150 tmp_d['last_msg'] = tip.message
151 tmp_d['repo'] = repo
151 tmp_d['repo'] = repo
152 yield tmp_d
152 yield tmp_d
153
153
154 def get_repo(self, repo_name):
154 def get_repo(self, repo_name):
155 return self.get(repo_name)
155 return self.get(repo_name)
156
156
157 def get(self, repo_name, invalidation_list=None):
157 def get(self, repo_name, invalidation_list=None):
158 """
158 """
159 Get's repository from given name, creates BackendInstance and
159 Get's repository from given name, creates BackendInstance and
160 propagates it's data from database with all additional information
160 propagates it's data from database with all additional information
161 :param repo_name:
161 :param repo_name:
162 """
162 """
163 if not HasRepoPermissionAny('repository.read', 'repository.write',
163 if not HasRepoPermissionAny('repository.read', 'repository.write',
164 'repository.admin')(repo_name, 'get repo check'):
164 'repository.admin')(repo_name, 'get repo check'):
165 return
165 return
166
166
167
167
168 @cache_region('long_term')
168 @cache_region('long_term')
169 def _get_repo(repo_name):
169 def _get_repo(repo_name):
170
170
171 repo_path = os.path.join(self.repos_path, repo_name)
171 repo_path = os.path.join(self.repos_path, repo_name)
172
172
173 try:
173 try:
174 alias = get_scm(repo_path)[0]
174 alias = get_scm(repo_path)[0]
175
175
176 log.debug('Creating instance of %s repository', alias)
176 log.debug('Creating instance of %s repository', alias)
177 backend = get_backend(alias)
177 backend = get_backend(alias)
178 except VCSError:
178 except VCSError:
179 log.error(traceback.format_exc())
179 log.error(traceback.format_exc())
180 return
180 return
181
181
182 if alias == 'hg':
182 if alias == 'hg':
183 from pylons import app_globals as g
183 from pylons import app_globals as g
184 repo = backend(repo_path, create=False, baseui=g.baseui)
184 repo = backend(repo_path, create=False, baseui=g.baseui)
185 #skip hidden web repository
185 #skip hidden web repository
186 if repo._get_hidden():
186 if repo._get_hidden():
187 return
187 return
188 else:
188 else:
189 repo = backend(repo_path, create=False)
189 repo = backend(repo_path, create=False)
190
190
191 dbrepo = self.sa.query(Repository)\
191 dbrepo = self.sa.query(Repository)\
192 .options(joinedload(Repository.fork))\
192 .options(joinedload(Repository.fork))\
193 .options(joinedload(Repository.user))\
193 .options(joinedload(Repository.user))\
194 .filter(Repository.repo_name == repo_name)\
194 .filter(Repository.repo_name == repo_name)\
195 .scalar()
195 .scalar()
196
196
197 make_transient(dbrepo)
197 make_transient(dbrepo)
198 if dbrepo.user:
198 if dbrepo.user:
199 make_transient(dbrepo.user)
199 make_transient(dbrepo.user)
200 if dbrepo.fork:
200 if dbrepo.fork:
201 make_transient(dbrepo.fork)
201 make_transient(dbrepo.fork)
202
202
203 repo.dbrepo = dbrepo
203 repo.dbrepo = dbrepo
204 return repo
204 return repo
205
205
206 pre_invalidate = True
206 pre_invalidate = True
207 if invalidation_list:
207 if invalidation_list:
208 pre_invalidate = repo_name in invalidation_list
208 pre_invalidate = repo_name in invalidation_list
209
209
210 if pre_invalidate:
210 if pre_invalidate:
211 invalidate = self._should_invalidate(repo_name)
211 invalidate = self._should_invalidate(repo_name)
212
212
213 if invalidate:
213 if invalidate:
214 log.info('invalidating cache for repository %s', repo_name)
214 log.info('invalidating cache for repository %s', repo_name)
215 region_invalidate(_get_repo, None, repo_name)
215 region_invalidate(_get_repo, None, repo_name)
216 self._mark_invalidated(invalidate)
216 self._mark_invalidated(invalidate)
217
217
218 return _get_repo(repo_name)
218 return _get_repo(repo_name)
219
219
220
220
221
221
222 def mark_for_invalidation(self, repo_name):
222 def mark_for_invalidation(self, repo_name):
223 """
223 """
224 Puts cache invalidation task into db for
224 Puts cache invalidation task into db for
225 further global cache invalidation
225 further global cache invalidation
226
226
227 :param repo_name: this repo that should invalidation take place
227 :param repo_name: this repo that should invalidation take place
228 """
228 """
229 log.debug('marking %s for invalidation', repo_name)
229 log.debug('marking %s for invalidation', repo_name)
230 cache = self.sa.query(CacheInvalidation)\
230 cache = self.sa.query(CacheInvalidation)\
231 .filter(CacheInvalidation.cache_key == repo_name).scalar()
231 .filter(CacheInvalidation.cache_key == repo_name).scalar()
232
232
233 if cache:
233 if cache:
234 #mark this cache as inactive
234 #mark this cache as inactive
235 cache.cache_active = False
235 cache.cache_active = False
236 else:
236 else:
237 log.debug('cache key not found in invalidation db -> creating one')
237 log.debug('cache key not found in invalidation db -> creating one')
238 cache = CacheInvalidation(repo_name)
238 cache = CacheInvalidation(repo_name)
239
239
240 try:
240 try:
241 self.sa.add(cache)
241 self.sa.add(cache)
242 self.sa.commit()
242 self.sa.commit()
243 except (DatabaseError,):
243 except (DatabaseError,):
244 log.error(traceback.format_exc())
244 log.error(traceback.format_exc())
245 self.sa.rollback()
245 self.sa.rollback()
246
246
247
247
248 def toggle_following_repo(self, follow_repo_id, user_id):
248 def toggle_following_repo(self, follow_repo_id, user_id):
249
249
250 f = self.sa.query(UserFollowing)\
250 f = self.sa.query(UserFollowing)\
251 .filter(UserFollowing.follows_repo_id == follow_repo_id)\
251 .filter(UserFollowing.follows_repo_id == follow_repo_id)\
252 .filter(UserFollowing.user_id == user_id).scalar()
252 .filter(UserFollowing.user_id == user_id).scalar()
253
253
254 if f is not None:
254 if f is not None:
255
255
256 try:
256 try:
257 self.sa.delete(f)
257 self.sa.delete(f)
258 self.sa.commit()
258 self.sa.commit()
259 action_logger(UserTemp(user_id),
259 action_logger(UserTemp(user_id),
260 'stopped_following_repo',
260 'stopped_following_repo',
261 RepoTemp(follow_repo_id))
261 RepoTemp(follow_repo_id))
262 return
262 return
263 except:
263 except:
264 log.error(traceback.format_exc())
264 log.error(traceback.format_exc())
265 self.sa.rollback()
265 self.sa.rollback()
266 raise
266 raise
267
267
268
268
269 try:
269 try:
270 f = UserFollowing()
270 f = UserFollowing()
271 f.user_id = user_id
271 f.user_id = user_id
272 f.follows_repo_id = follow_repo_id
272 f.follows_repo_id = follow_repo_id
273 self.sa.add(f)
273 self.sa.add(f)
274 self.sa.commit()
274 self.sa.commit()
275 action_logger(UserTemp(user_id),
275 action_logger(UserTemp(user_id),
276 'started_following_repo',
276 'started_following_repo',
277 RepoTemp(follow_repo_id))
277 RepoTemp(follow_repo_id))
278 except:
278 except:
279 log.error(traceback.format_exc())
279 log.error(traceback.format_exc())
280 self.sa.rollback()
280 self.sa.rollback()
281 raise
281 raise
282
282
283 def toggle_following_user(self, follow_user_id , user_id):
283 def toggle_following_user(self, follow_user_id , user_id):
284 f = self.sa.query(UserFollowing)\
284 f = self.sa.query(UserFollowing)\
285 .filter(UserFollowing.follows_user_id == follow_user_id)\
285 .filter(UserFollowing.follows_user_id == follow_user_id)\
286 .filter(UserFollowing.user_id == user_id).scalar()
286 .filter(UserFollowing.user_id == user_id).scalar()
287
287
288 if f is not None:
288 if f is not None:
289 try:
289 try:
290 self.sa.delete(f)
290 self.sa.delete(f)
291 self.sa.commit()
291 self.sa.commit()
292 return
292 return
293 except:
293 except:
294 log.error(traceback.format_exc())
294 log.error(traceback.format_exc())
295 self.sa.rollback()
295 self.sa.rollback()
296 raise
296 raise
297
297
298 try:
298 try:
299 f = UserFollowing()
299 f = UserFollowing()
300 f.user_id = user_id
300 f.user_id = user_id
301 f.follows_user_id = follow_user_id
301 f.follows_user_id = follow_user_id
302 self.sa.add(f)
302 self.sa.add(f)
303 self.sa.commit()
303 self.sa.commit()
304 except:
304 except:
305 log.error(traceback.format_exc())
305 log.error(traceback.format_exc())
306 self.sa.rollback()
306 self.sa.rollback()
307 raise
307 raise
308
308
309 def is_following_repo(self, repo_name, user_id):
309 def is_following_repo(self, repo_name, user_id):
310 r = self.sa.query(Repository)\
310 r = self.sa.query(Repository)\
311 .filter(Repository.repo_name == repo_name).scalar()
311 .filter(Repository.repo_name == repo_name).scalar()
312
312
313 f = self.sa.query(UserFollowing)\
313 f = self.sa.query(UserFollowing)\
314 .filter(UserFollowing.follows_repository == r)\
314 .filter(UserFollowing.follows_repository == r)\
315 .filter(UserFollowing.user_id == user_id).scalar()
315 .filter(UserFollowing.user_id == user_id).scalar()
316
316
317 return f is not None
317 return f is not None
318
318
319 def is_following_user(self, username, user_id):
319 def is_following_user(self, username, user_id):
320 u = UserModel(self.sa).get_by_username(username)
320 u = UserModel(self.sa).get_by_username(username)
321
321
322 f = self.sa.query(UserFollowing)\
322 f = self.sa.query(UserFollowing)\
323 .filter(UserFollowing.follows_user == u)\
323 .filter(UserFollowing.follows_user == u)\
324 .filter(UserFollowing.user_id == user_id).scalar()
324 .filter(UserFollowing.user_id == user_id).scalar()
325
325
326 return f is not None
326 return f is not None
327
327
328 def get_followers(self, repo_id):
328 def get_followers(self, repo_id):
329 return self.sa.query(UserFollowing)\
329 return self.sa.query(UserFollowing)\
330 .filter(UserFollowing.follows_repo_id == repo_id).count()
330 .filter(UserFollowing.follows_repo_id == repo_id).count()
331
331
332 def get_forks(self, repo_id):
332 def get_forks(self, repo_id):
333 return self.sa.query(Repository)\
333 return self.sa.query(Repository)\
334 .filter(Repository.fork_id == repo_id).count()
334 .filter(Repository.fork_id == repo_id).count()
335
335
336
337 def get_unread_journal(self):
338 return self.sa.query(UserLog).count()
339
340
336 def _should_invalidate(self, repo_name):
341 def _should_invalidate(self, repo_name):
337 """
342 """
338 Looks up database for invalidation signals for this repo_name
343 Looks up database for invalidation signals for this repo_name
339 :param repo_name:
344 :param repo_name:
340 """
345 """
341
346
342 ret = self.sa.query(CacheInvalidation)\
347 ret = self.sa.query(CacheInvalidation)\
343 .options(FromCache('sql_cache_short',
348 .options(FromCache('sql_cache_short',
344 'get_invalidation_%s' % repo_name))\
349 'get_invalidation_%s' % repo_name))\
345 .filter(CacheInvalidation.cache_key == repo_name)\
350 .filter(CacheInvalidation.cache_key == repo_name)\
346 .filter(CacheInvalidation.cache_active == False)\
351 .filter(CacheInvalidation.cache_active == False)\
347 .scalar()
352 .scalar()
348
353
349 return ret
354 return ret
350
355
351 def _mark_invalidated(self, cache_key):
356 def _mark_invalidated(self, cache_key):
352 """
357 """
353 Marks all occurences of cache to invaldation as already invalidated
358 Marks all occurences of cache to invaldation as already invalidated
354 :param repo_name:
359 :param repo_name:
355 """
360 """
356 if cache_key:
361 if cache_key:
357 log.debug('marking %s as already invalidated', cache_key)
362 log.debug('marking %s as already invalidated', cache_key)
358 try:
363 try:
359 cache_key.cache_active = True
364 cache_key.cache_active = True
360 self.sa.add(cache_key)
365 self.sa.add(cache_key)
361 self.sa.commit()
366 self.sa.commit()
362 except (DatabaseError,):
367 except (DatabaseError,):
363 log.error(traceback.format_exc())
368 log.error(traceback.format_exc())
364 self.sa.rollback()
369 self.sa.rollback()
365
370
@@ -1,2388 +1,2401 b''
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
2 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
194 #header ul#logged-user{
195 margin-bottom:5px !important;
196 -webkit-border-radius: 0px 0px 8px 8px;
197 -khtml-border-radius: 0px 0px 8px 8px;
198 -moz-border-radius: 0px 0px 8px 8px;
199 border-radius: 0px 0px 8px 8px;
200 height:37px;
201 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367
202 }
203
193 #header ul#logged-user li {
204 #header ul#logged-user li {
194 list-style:none;
205 list-style:none;
195 float:left;
206 float:left;
196 border-left:1px solid #bbb;
207 margin:8px 0 0;
197 border-right:1px solid #a5a5a5;
208 padding:4px 12px;
198 margin:-2px 0 0;
209 border-left: 1px solid #316293;
199 padding:10px 12px;
200 }
210 }
201
211
202 #header ul#logged-user li.first {
212 #header ul#logged-user li.first {
203 border-left:none;
213 border-left:none;
204 margin:-6px;
214 margin:4px;
215 }
216
217 #header ul#logged-user li.first div.gravatar {
218 margin-top:-2px;
205 }
219 }
206
220
207 #header ul#logged-user li.first div.account {
221 #header ul#logged-user li.first div.account {
208 padding-top:4px;
222 padding-top:4px;
209 float:left;
223 float:left;
210 }
224 }
211
225
212 #header ul#logged-user li.last {
226 #header ul#logged-user li.last {
213 border-right:none;
227 border-right:none;
214 }
228 }
215
229
216 #header ul#logged-user li a {
230 #header ul#logged-user li a {
217 color:#4e4e4e;
231 color:#fff;
218 font-weight:700;
232 font-weight:700;
219 text-decoration:none;
233 text-decoration:none;
220 }
234 }
221
235
222 #header ul#logged-user li a:hover {
236 #header ul#logged-user li a:hover {
223 color:#376ea6;
224 text-decoration:underline;
237 text-decoration:underline;
225 }
238 }
226
239
227 #header ul#logged-user li.highlight a {
240 #header ul#logged-user li.highlight a {
228 color:#fff;
241 color:#fff;
229 }
242 }
230
243
231 #header ul#logged-user li.highlight a:hover {
244 #header ul#logged-user li.highlight a:hover {
232 color:#376ea6;
245 color:#FFF;
233 }
246 }
234
247
235 #header #header-inner {
248 #header #header-inner {
236 height:40px;
249 height:40px;
237 clear:both;
250 clear:both;
238 position:relative;
251 position:relative;
239 background:#003367 url("../images/header_inner.png") repeat-x;
252 background:#003367 url("../images/header_inner.png") repeat-x;
240 border-bottom:2px solid #fff;
253 border-bottom:2px solid #fff;
241 margin:0;
254 margin:0;
242 padding:0;
255 padding:0;
243 }
256 }
244
257
245 #header #header-inner #home a {
258 #header #header-inner #home a {
246 height:40px;
259 height:40px;
247 width:46px;
260 width:46px;
248 display:block;
261 display:block;
249 background:url("../images/button_home.png");
262 background:url("../images/button_home.png");
250 background-position:0 0;
263 background-position:0 0;
251 margin:0;
264 margin:0;
252 padding:0;
265 padding:0;
253 }
266 }
254
267
255 #header #header-inner #home a:hover {
268 #header #header-inner #home a:hover {
256 background-position:0 -40px;
269 background-position:0 -40px;
257 }
270 }
258
271
259 #header #header-inner #logo h1 {
272 #header #header-inner #logo h1 {
260 color:#FFF;
273 color:#FFF;
261 font-size:18px;
274 font-size:18px;
262 margin:10px 0 0 13px;
275 margin:10px 0 0 13px;
263 padding:0;
276 padding:0;
264 }
277 }
265
278
266 #header #header-inner #logo a {
279 #header #header-inner #logo a {
267 color:#fff;
280 color:#fff;
268 text-decoration:none;
281 text-decoration:none;
269 }
282 }
270
283
271 #header #header-inner #logo a:hover {
284 #header #header-inner #logo a:hover {
272 color:#bfe3ff;
285 color:#bfe3ff;
273 }
286 }
274
287
275 #header #header-inner #quick,#header #header-inner #quick ul {
288 #header #header-inner #quick,#header #header-inner #quick ul {
276 position:relative;
289 position:relative;
277 float:right;
290 float:right;
278 list-style-type:none;
291 list-style-type:none;
279 list-style-position:outside;
292 list-style-position:outside;
280 margin:10px 5px 0 0;
293 margin:10px 5px 0 0;
281 padding:0;
294 padding:0;
282 }
295 }
283
296
284 #header #header-inner #quick li {
297 #header #header-inner #quick li {
285 position:relative;
298 position:relative;
286 float:left;
299 float:left;
287 margin:0 5px 0 0;
300 margin:0 5px 0 0;
288 padding:0;
301 padding:0;
289 }
302 }
290
303
291 #header #header-inner #quick li a {
304 #header #header-inner #quick li a {
292 top:0;
305 top:0;
293 left:0;
306 left:0;
294 height:1%;
307 height:1%;
295 display:block;
308 display:block;
296 clear:both;
309 clear:both;
297 overflow:hidden;
310 overflow:hidden;
298 color:#FFF;
311 color:#FFF;
299 font-weight:700;
312 font-weight:700;
300 text-decoration:none;
313 text-decoration:none;
301 background:#369 url("../../images/quick_l.png") no-repeat top left;
314 background:#369 url("../../images/quick_l.png") no-repeat top left;
302 padding:0;
315 padding:0;
303 }
316 }
304
317
305 #header #header-inner #quick li span.short {
318 #header #header-inner #quick li span.short {
306 padding:9px 6px 8px 6px;
319 padding:9px 6px 8px 6px;
307 }
320 }
308
321
309 #header #header-inner #quick li span {
322 #header #header-inner #quick li span {
310 top:0;
323 top:0;
311 right:0;
324 right:0;
312 height:1%;
325 height:1%;
313 display:block;
326 display:block;
314 float:left;
327 float:left;
315 background:url("../../images/quick_r.png") no-repeat top right;
328 background:url("../../images/quick_r.png") no-repeat top right;
316 border-left:1px solid #3f6f9f;
329 border-left:1px solid #3f6f9f;
317 margin:0;
330 margin:0;
318 padding:10px 12px 8px 10px;
331 padding:10px 12px 8px 10px;
319 }
332 }
320
333
321 #header #header-inner #quick li span.normal {
334 #header #header-inner #quick li span.normal {
322 border:none;
335 border:none;
323 padding:10px 12px 8px;
336 padding:10px 12px 8px;
324 }
337 }
325
338
326 #header #header-inner #quick li span.icon {
339 #header #header-inner #quick li span.icon {
327 top:0;
340 top:0;
328 left:0;
341 left:0;
329 border-left:none;
342 border-left:none;
330 background:url("../../images/quick_l.png") no-repeat top left;
343 background:url("../../images/quick_l.png") no-repeat top left;
331 border-right:1px solid #2e5c89;
344 border-right:1px solid #2e5c89;
332 padding:8px 8px 4px;
345 padding:8px 8px 4px;
333 }
346 }
334
347
335 #header #header-inner #quick li span.icon_short {
348 #header #header-inner #quick li span.icon_short {
336 top:0;
349 top:0;
337 left:0;
350 left:0;
338 border-left:none;
351 border-left:none;
339 background:url("../../images/quick_l.png") no-repeat top left;
352 background:url("../../images/quick_l.png") no-repeat top left;
340 border-right:1px solid #2e5c89;
353 border-right:1px solid #2e5c89;
341 padding:9px 4px 4px;
354 padding:9px 4px 4px;
342 }
355 }
343
356
344 #header #header-inner #quick li a:hover {
357 #header #header-inner #quick li a:hover {
345 background:#4e4e4e url("../../images/quick_l_selected.png") no-repeat top left;
358 background:#4e4e4e url("../../images/quick_l_selected.png") no-repeat top left;
346 }
359 }
347
360
348 #header #header-inner #quick li a:hover span {
361 #header #header-inner #quick li a:hover span {
349 border-left:1px solid #545454;
362 border-left:1px solid #545454;
350 background:url("../../images/quick_r_selected.png") no-repeat top right;
363 background:url("../../images/quick_r_selected.png") no-repeat top right;
351 }
364 }
352
365
353 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short {
366 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short {
354 border-left:none;
367 border-left:none;
355 border-right:1px solid #464646;
368 border-right:1px solid #464646;
356 background:url("../../images/quick_l_selected.png") no-repeat top left;
369 background:url("../../images/quick_l_selected.png") no-repeat top left;
357 }
370 }
358
371
359
372
360 #header #header-inner #quick ul {
373 #header #header-inner #quick ul {
361 top:29px;
374 top:29px;
362 right:0;
375 right:0;
363 min-width:200px;
376 min-width:200px;
364 display:none;
377 display:none;
365 position:absolute;
378 position:absolute;
366 background:#FFF;
379 background:#FFF;
367 border:1px solid #666;
380 border:1px solid #666;
368 border-top:1px solid #003367;
381 border-top:1px solid #003367;
369 z-index:100;
382 z-index:100;
370 margin:0;
383 margin:0;
371 padding:0;
384 padding:0;
372 }
385 }
373
386
374 #header #header-inner #quick ul.repo_switcher {
387 #header #header-inner #quick ul.repo_switcher {
375 max-height:275px;
388 max-height:275px;
376 overflow-x:hidden;
389 overflow-x:hidden;
377 overflow-y:auto;
390 overflow-y:auto;
378 }
391 }
379
392
380 #header #header-inner #quick .repo_switcher_type{
393 #header #header-inner #quick .repo_switcher_type{
381 position:absolute;
394 position:absolute;
382 left:0;
395 left:0;
383 top:9px;
396 top:9px;
384
397
385 }
398 }
386 #header #header-inner #quick li ul li {
399 #header #header-inner #quick li ul li {
387 border-bottom:1px solid #ddd;
400 border-bottom:1px solid #ddd;
388 }
401 }
389
402
390 #header #header-inner #quick li ul li a {
403 #header #header-inner #quick li ul li a {
391 width:182px;
404 width:182px;
392 height:auto;
405 height:auto;
393 display:block;
406 display:block;
394 float:left;
407 float:left;
395 background:#FFF;
408 background:#FFF;
396 color:#003367;
409 color:#003367;
397 font-weight:400;
410 font-weight:400;
398 margin:0;
411 margin:0;
399 padding:7px 9px;
412 padding:7px 9px;
400 }
413 }
401
414
402 #header #header-inner #quick li ul li a:hover {
415 #header #header-inner #quick li ul li a:hover {
403 color:#000;
416 color:#000;
404 background:#FFF;
417 background:#FFF;
405 }
418 }
406
419
407 #header #header-inner #quick ul ul {
420 #header #header-inner #quick ul ul {
408 top:auto;
421 top:auto;
409 }
422 }
410
423
411 #header #header-inner #quick li ul ul {
424 #header #header-inner #quick li ul ul {
412 right:200px;
425 right:200px;
413 max-height:275px;
426 max-height:275px;
414 overflow:auto;
427 overflow:auto;
415 overflow-x:hidden;
428 overflow-x:hidden;
416 white-space:normal;
429 white-space:normal;
417 }
430 }
418
431
419 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
432 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
420 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
433 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
421 width:167px;
434 width:167px;
422 margin:0;
435 margin:0;
423 padding:12px 9px 7px 24px;
436 padding:12px 9px 7px 24px;
424 }
437 }
425
438
426 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
439 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
427 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
440 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
428 min-width:167px;
441 min-width:167px;
429 margin:0;
442 margin:0;
430 padding:12px 9px 7px 24px;
443 padding:12px 9px 7px 24px;
431 }
444 }
432
445
433 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
446 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
434 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
447 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
435 min-width:167px;
448 min-width:167px;
436 margin:0;
449 margin:0;
437 padding:12px 9px 7px 24px;
450 padding:12px 9px 7px 24px;
438 }
451 }
439
452
440 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover {
453 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover {
441 background:url("../images/icons/hgicon.png") no-repeat scroll 4px 9px #FFF;
454 background:url("../images/icons/hgicon.png") no-repeat scroll 4px 9px #FFF;
442 min-width:167px;
455 min-width:167px;
443 margin:0 0 0 14px;
456 margin:0 0 0 14px;
444 padding:12px 9px 7px 24px;
457 padding:12px 9px 7px 24px;
445 }
458 }
446
459
447 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover {
460 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover {
448 background:url("../images/icons/giticon.png") no-repeat scroll 4px 9px #FFF;
461 background:url("../images/icons/giticon.png") no-repeat scroll 4px 9px #FFF;
449 min-width:167px;
462 min-width:167px;
450 margin:0 0 0 14px;
463 margin:0 0 0 14px;
451 padding:12px 9px 7px 24px;
464 padding:12px 9px 7px 24px;
452 }
465 }
453
466
454 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
467 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
455 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
468 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
456 width:167px;
469 width:167px;
457 margin:0;
470 margin:0;
458 padding:12px 9px 7px 24px;
471 padding:12px 9px 7px 24px;
459 }
472 }
460
473
461 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
474 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
462 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
475 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
463 width:167px;
476 width:167px;
464 margin:0;
477 margin:0;
465 padding:12px 9px 7px 24px;
478 padding:12px 9px 7px 24px;
466 }
479 }
467
480
468 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover {
481 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover {
469 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
482 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
470 width:167px;
483 width:167px;
471 margin:0;
484 margin:0;
472 padding:12px 9px 7px 24px;
485 padding:12px 9px 7px 24px;
473 }
486 }
474
487
475 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
488 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
476 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
489 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
477 width:167px;
490 width:167px;
478 margin:0;
491 margin:0;
479 padding:12px 9px 7px 24px;
492 padding:12px 9px 7px 24px;
480 }
493 }
481
494
482 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover {
495 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover {
483 background:#FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
496 background:#FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
484 width:167px;
497 width:167px;
485 margin:0;
498 margin:0;
486 padding:12px 9px 7px 24px;
499 padding:12px 9px 7px 24px;
487 }
500 }
488
501
489 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
502 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
490 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
503 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
491 width:167px;
504 width:167px;
492 margin:0;
505 margin:0;
493 padding:12px 9px 7px 24px;
506 padding:12px 9px 7px 24px;
494 }
507 }
495
508
496 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
509 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
497 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
510 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
498 width:167px;
511 width:167px;
499 margin:0;
512 margin:0;
500 padding:12px 9px 7px 24px;
513 padding:12px 9px 7px 24px;
501 }
514 }
502
515
503 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
516 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
504 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
517 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
505 width:167px;
518 width:167px;
506 margin:0;
519 margin:0;
507 padding:12px 9px 7px 24px;
520 padding:12px 9px 7px 24px;
508 }
521 }
509
522
510 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
523 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
511 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
524 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
512 width:167px;
525 width:167px;
513 margin:0;
526 margin:0;
514 padding:12px 9px 7px 24px;
527 padding:12px 9px 7px 24px;
515 }
528 }
516
529
517 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
530 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
518 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
531 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
519 width:167px;
532 width:167px;
520 margin:0;
533 margin:0;
521 padding:12px 9px 7px 24px;
534 padding:12px 9px 7px 24px;
522 }
535 }
523
536
524 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
537 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
525 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
538 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
526 width:167px;
539 width:167px;
527 margin:0;
540 margin:0;
528 padding:12px 9px 7px 24px;
541 padding:12px 9px 7px 24px;
529 }
542 }
530
543
531 #content #left {
544 #content #left {
532 left:0;
545 left:0;
533 width:280px;
546 width:280px;
534 position:absolute;
547 position:absolute;
535 }
548 }
536
549
537 #content #right {
550 #content #right {
538 margin:0 60px 10px 290px;
551 margin:0 60px 10px 290px;
539 }
552 }
540
553
541 #content div.box {
554 #content div.box {
542 clear:both;
555 clear:both;
543 overflow:hidden;
556 overflow:hidden;
544 background:#fff;
557 background:#fff;
545 margin:0 0 10px;
558 margin:0 0 10px;
546 padding:0 0 10px;
559 padding:0 0 10px;
547 }
560 }
548
561
549 #content div.box-left {
562 #content div.box-left {
550 width:49%;
563 width:49%;
551 clear:none;
564 clear:none;
552 float:left;
565 float:left;
553 margin:0 0 10px;
566 margin:0 0 10px;
554 }
567 }
555
568
556 #content div.box-right {
569 #content div.box-right {
557 width:49%;
570 width:49%;
558 clear:none;
571 clear:none;
559 float:right;
572 float:right;
560 margin:0 0 10px;
573 margin:0 0 10px;
561 }
574 }
562
575
563 #content div.box div.title {
576 #content div.box div.title {
564 clear:both;
577 clear:both;
565 overflow:hidden;
578 overflow:hidden;
566 background:#369 url("../images/header_inner.png") repeat-x;
579 background:#369 url("../images/header_inner.png") repeat-x;
567 margin:0 0 20px;
580 margin:0 0 20px;
568 padding:0;
581 padding:0;
569 }
582 }
570
583
571 #content div.box div.title h5 {
584 #content div.box div.title h5 {
572 float:left;
585 float:left;
573 border:none;
586 border:none;
574 color:#fff;
587 color:#fff;
575 text-transform:uppercase;
588 text-transform:uppercase;
576 margin:0;
589 margin:0;
577 padding:11px 0 11px 10px;
590 padding:11px 0 11px 10px;
578 }
591 }
579
592
580 #content div.box div.title ul.links li {
593 #content div.box div.title ul.links li {
581 list-style:none;
594 list-style:none;
582 float:left;
595 float:left;
583 margin:0;
596 margin:0;
584 padding:0;
597 padding:0;
585 }
598 }
586
599
587 #content div.box div.title ul.links li a {
600 #content div.box div.title ul.links li a {
588 height:1%;
601 height:1%;
589 display:block;
602 display:block;
590 float:left;
603 float:left;
591 border-left:1px solid #316293;
604 border-left:1px solid #316293;
592 color:#fff;
605 color:#fff;
593 font-size:11px;
606 font-size:11px;
594 font-weight:700;
607 font-weight:700;
595 text-decoration:none;
608 text-decoration:none;
596 margin:0;
609 margin:0;
597 padding:13px 16px 12px;
610 padding:13px 16px 12px;
598 }
611 }
599
612
600 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
613 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
601 clear:both;
614 clear:both;
602 overflow:hidden;
615 overflow:hidden;
603 border-bottom:1px solid #DDD;
616 border-bottom:1px solid #DDD;
604 margin:10px 20px;
617 margin:10px 20px;
605 padding:0 0 15px;
618 padding:0 0 15px;
606 }
619 }
607
620
608 #content div.box p {
621 #content div.box p {
609 color:#5f5f5f;
622 color:#5f5f5f;
610 font-size:12px;
623 font-size:12px;
611 line-height:150%;
624 line-height:150%;
612 margin:0 24px 10px;
625 margin:0 24px 10px;
613 padding:0;
626 padding:0;
614 }
627 }
615
628
616 #content div.box blockquote {
629 #content div.box blockquote {
617 border-left:4px solid #DDD;
630 border-left:4px solid #DDD;
618 color:#5f5f5f;
631 color:#5f5f5f;
619 font-size:11px;
632 font-size:11px;
620 line-height:150%;
633 line-height:150%;
621 margin:0 34px;
634 margin:0 34px;
622 padding:0 0 0 14px;
635 padding:0 0 0 14px;
623 }
636 }
624
637
625 #content div.box blockquote p {
638 #content div.box blockquote p {
626 margin:10px 0;
639 margin:10px 0;
627 padding:0;
640 padding:0;
628 }
641 }
629
642
630 #content div.box dl {
643 #content div.box dl {
631 margin:10px 24px;
644 margin:10px 24px;
632 }
645 }
633
646
634 #content div.box dt {
647 #content div.box dt {
635 font-size:12px;
648 font-size:12px;
636 margin:0;
649 margin:0;
637 }
650 }
638
651
639 #content div.box dd {
652 #content div.box dd {
640 font-size:12px;
653 font-size:12px;
641 margin:0;
654 margin:0;
642 padding:8px 0 8px 15px;
655 padding:8px 0 8px 15px;
643 }
656 }
644
657
645 #content div.box li {
658 #content div.box li {
646 font-size:12px;
659 font-size:12px;
647 padding:4px 0;
660 padding:4px 0;
648 }
661 }
649
662
650 #content div.box ul.disc,#content div.box ul.circle {
663 #content div.box ul.disc,#content div.box ul.circle {
651 margin:10px 24px 10px 38px;
664 margin:10px 24px 10px 38px;
652 }
665 }
653
666
654 #content div.box ul.square {
667 #content div.box ul.square {
655 margin:10px 24px 10px 40px;
668 margin:10px 24px 10px 40px;
656 }
669 }
657
670
658 #content div.box img.left {
671 #content div.box img.left {
659 border:none;
672 border:none;
660 float:left;
673 float:left;
661 margin:10px 10px 10px 0;
674 margin:10px 10px 10px 0;
662 }
675 }
663
676
664 #content div.box img.right {
677 #content div.box img.right {
665 border:none;
678 border:none;
666 float:right;
679 float:right;
667 margin:10px 0 10px 10px;
680 margin:10px 0 10px 10px;
668 }
681 }
669
682
670 #content div.box div.messages {
683 #content div.box div.messages {
671 clear:both;
684 clear:both;
672 overflow:hidden;
685 overflow:hidden;
673 margin:0 20px;
686 margin:0 20px;
674 padding:0;
687 padding:0;
675 }
688 }
676
689
677 #content div.box div.message {
690 #content div.box div.message {
678 clear:both;
691 clear:both;
679 overflow:hidden;
692 overflow:hidden;
680 margin:0;
693 margin:0;
681 padding:10px 0;
694 padding:10px 0;
682 }
695 }
683
696
684 #content div.box div.message a {
697 #content div.box div.message a {
685 font-weight:400 !important;
698 font-weight:400 !important;
686 }
699 }
687
700
688 #content div.box div.message div.image {
701 #content div.box div.message div.image {
689 float:left;
702 float:left;
690 margin:9px 0 0 5px;
703 margin:9px 0 0 5px;
691 padding:6px;
704 padding:6px;
692 }
705 }
693
706
694 #content div.box div.message div.image img {
707 #content div.box div.message div.image img {
695 vertical-align:middle;
708 vertical-align:middle;
696 margin:0;
709 margin:0;
697 }
710 }
698
711
699 #content div.box div.message div.text {
712 #content div.box div.message div.text {
700 float:left;
713 float:left;
701 margin:0;
714 margin:0;
702 padding:9px 6px;
715 padding:9px 6px;
703 }
716 }
704
717
705 #content div.box div.message div.dismiss a {
718 #content div.box div.message div.dismiss a {
706 height:16px;
719 height:16px;
707 width:16px;
720 width:16px;
708 display:block;
721 display:block;
709 background:url("../images/icons/cross.png") no-repeat;
722 background:url("../images/icons/cross.png") no-repeat;
710 margin:15px 14px 0 0;
723 margin:15px 14px 0 0;
711 padding:0;
724 padding:0;
712 }
725 }
713
726
714 #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 {
727 #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 {
715 border:none;
728 border:none;
716 margin:0;
729 margin:0;
717 padding:0;
730 padding:0;
718 }
731 }
719
732
720 #content div.box div.message div.text span {
733 #content div.box div.message div.text span {
721 height:1%;
734 height:1%;
722 display:block;
735 display:block;
723 margin:0;
736 margin:0;
724 padding:5px 0 0;
737 padding:5px 0 0;
725 }
738 }
726
739
727 #content div.box div.message-error {
740 #content div.box div.message-error {
728 height:1%;
741 height:1%;
729 clear:both;
742 clear:both;
730 overflow:hidden;
743 overflow:hidden;
731 background:#FBE3E4;
744 background:#FBE3E4;
732 border:1px solid #FBC2C4;
745 border:1px solid #FBC2C4;
733 color:#860006;
746 color:#860006;
734 }
747 }
735
748
736 #content div.box div.message-error h6 {
749 #content div.box div.message-error h6 {
737 color:#860006;
750 color:#860006;
738 }
751 }
739
752
740 #content div.box div.message-warning {
753 #content div.box div.message-warning {
741 height:1%;
754 height:1%;
742 clear:both;
755 clear:both;
743 overflow:hidden;
756 overflow:hidden;
744 background:#FFF6BF;
757 background:#FFF6BF;
745 border:1px solid #FFD324;
758 border:1px solid #FFD324;
746 color:#5f5200;
759 color:#5f5200;
747 }
760 }
748
761
749 #content div.box div.message-warning h6 {
762 #content div.box div.message-warning h6 {
750 color:#5f5200;
763 color:#5f5200;
751 }
764 }
752
765
753 #content div.box div.message-notice {
766 #content div.box div.message-notice {
754 height:1%;
767 height:1%;
755 clear:both;
768 clear:both;
756 overflow:hidden;
769 overflow:hidden;
757 background:#8FBDE0;
770 background:#8FBDE0;
758 border:1px solid #6BACDE;
771 border:1px solid #6BACDE;
759 color:#003863;
772 color:#003863;
760 }
773 }
761
774
762 #content div.box div.message-notice h6 {
775 #content div.box div.message-notice h6 {
763 color:#003863;
776 color:#003863;
764 }
777 }
765
778
766 #content div.box div.message-success {
779 #content div.box div.message-success {
767 height:1%;
780 height:1%;
768 clear:both;
781 clear:both;
769 overflow:hidden;
782 overflow:hidden;
770 background:#E6EFC2;
783 background:#E6EFC2;
771 border:1px solid #C6D880;
784 border:1px solid #C6D880;
772 color:#4e6100;
785 color:#4e6100;
773 }
786 }
774
787
775 #content div.box div.message-success h6 {
788 #content div.box div.message-success h6 {
776 color:#4e6100;
789 color:#4e6100;
777 }
790 }
778
791
779 #content div.box div.form div.fields div.field {
792 #content div.box div.form div.fields div.field {
780 height:1%;
793 height:1%;
781 border-bottom:1px solid #DDD;
794 border-bottom:1px solid #DDD;
782 clear:both;
795 clear:both;
783 margin:0;
796 margin:0;
784 padding:10px 0;
797 padding:10px 0;
785 }
798 }
786
799
787 #content div.box div.form div.fields div.field-first {
800 #content div.box div.form div.fields div.field-first {
788 padding:0 0 10px;
801 padding:0 0 10px;
789 }
802 }
790
803
791 #content div.box div.form div.fields div.field-noborder {
804 #content div.box div.form div.fields div.field-noborder {
792 border-bottom:0 !important;
805 border-bottom:0 !important;
793 }
806 }
794
807
795 #content div.box div.form div.fields div.field span.error-message {
808 #content div.box div.form div.fields div.field span.error-message {
796 height:1%;
809 height:1%;
797 display:inline-block;
810 display:inline-block;
798 color:red;
811 color:red;
799 margin:8px 0 0 4px;
812 margin:8px 0 0 4px;
800 padding:0;
813 padding:0;
801 }
814 }
802
815
803 #content div.box div.form div.fields div.field span.success {
816 #content div.box div.form div.fields div.field span.success {
804 height:1%;
817 height:1%;
805 display:block;
818 display:block;
806 color:#316309;
819 color:#316309;
807 margin:8px 0 0;
820 margin:8px 0 0;
808 padding:0;
821 padding:0;
809 }
822 }
810
823
811 #content div.box div.form div.fields div.field div.label {
824 #content div.box div.form div.fields div.field div.label {
812 left:80px;
825 left:80px;
813 width:auto;
826 width:auto;
814 position:absolute;
827 position:absolute;
815 margin:0;
828 margin:0;
816 padding:8px 0 0 5px;
829 padding:8px 0 0 5px;
817 }
830 }
818
831
819 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
832 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
820 clear:both;
833 clear:both;
821 overflow:hidden;
834 overflow:hidden;
822 left:0;
835 left:0;
823 width:auto;
836 width:auto;
824 position:relative;
837 position:relative;
825 margin:0;
838 margin:0;
826 padding:0 0 8px;
839 padding:0 0 8px;
827 }
840 }
828
841
829 #content div.box div.form div.fields div.field div.label-select {
842 #content div.box div.form div.fields div.field div.label-select {
830 padding:5px 0 0 5px;
843 padding:5px 0 0 5px;
831 }
844 }
832
845
833 #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 {
846 #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 {
834 padding:0 0 8px;
847 padding:0 0 8px;
835 }
848 }
836
849
837 #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 {
850 #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 {
838 padding:0 0 8px !important;
851 padding:0 0 8px !important;
839 }
852 }
840
853
841 #content div.box div.form div.fields div.field div.label label {
854 #content div.box div.form div.fields div.field div.label label {
842 color:#393939;
855 color:#393939;
843 font-weight:700;
856 font-weight:700;
844 }
857 }
845
858
846 #content div.box div.form div.fields div.field div.input {
859 #content div.box div.form div.fields div.field div.input {
847 margin:0 0 0 200px;
860 margin:0 0 0 200px;
848 }
861 }
849 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
862 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
850 margin:0 0 0 0px;
863 margin:0 0 0 0px;
851 }
864 }
852
865
853 #content div.box div.form div.fields div.field div.input input {
866 #content div.box div.form div.fields div.field div.input input {
854 background:#FFF;
867 background:#FFF;
855 border-top:1px solid #b3b3b3;
868 border-top:1px solid #b3b3b3;
856 border-left:1px solid #b3b3b3;
869 border-left:1px solid #b3b3b3;
857 border-right:1px solid #eaeaea;
870 border-right:1px solid #eaeaea;
858 border-bottom:1px solid #eaeaea;
871 border-bottom:1px solid #eaeaea;
859 color:#000;
872 color:#000;
860 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
873 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
861 font-size:11px;
874 font-size:11px;
862 margin:0;
875 margin:0;
863 padding:7px 7px 6px;
876 padding:7px 7px 6px;
864 }
877 }
865
878
866
879
867
880
868 #content div.box div.form div.fields div.field div.input input.small {
881 #content div.box div.form div.fields div.field div.input input.small {
869 width:30%;
882 width:30%;
870 }
883 }
871
884
872 #content div.box div.form div.fields div.field div.input input.medium {
885 #content div.box div.form div.fields div.field div.input input.medium {
873 width:55%;
886 width:55%;
874 }
887 }
875
888
876 #content div.box div.form div.fields div.field div.input input.large {
889 #content div.box div.form div.fields div.field div.input input.large {
877 width:85%;
890 width:85%;
878 }
891 }
879
892
880 #content div.box div.form div.fields div.field div.input input.date {
893 #content div.box div.form div.fields div.field div.input input.date {
881 width:177px;
894 width:177px;
882 }
895 }
883
896
884 #content div.box div.form div.fields div.field div.input input.button {
897 #content div.box div.form div.fields div.field div.input input.button {
885 background:#D4D0C8;
898 background:#D4D0C8;
886 border-top:1px solid #FFF;
899 border-top:1px solid #FFF;
887 border-left:1px solid #FFF;
900 border-left:1px solid #FFF;
888 border-right:1px solid #404040;
901 border-right:1px solid #404040;
889 border-bottom:1px solid #404040;
902 border-bottom:1px solid #404040;
890 color:#000;
903 color:#000;
891 margin:0;
904 margin:0;
892 padding:4px 8px;
905 padding:4px 8px;
893 }
906 }
894
907
895 #content div.box div.form div.fields div.field div.input a.ui-input-file {
908 #content div.box div.form div.fields div.field div.input a.ui-input-file {
896 width:28px;
909 width:28px;
897 height:28px;
910 height:28px;
898 display:inline;
911 display:inline;
899 position:absolute;
912 position:absolute;
900 overflow:hidden;
913 overflow:hidden;
901 cursor:pointer;
914 cursor:pointer;
902 background:#e5e3e3 url("../images/button_browse.png") no-repeat;
915 background:#e5e3e3 url("../images/button_browse.png") no-repeat;
903 border:none;
916 border:none;
904 text-decoration:none;
917 text-decoration:none;
905 margin:0 0 0 6px;
918 margin:0 0 0 6px;
906 padding:0;
919 padding:0;
907 }
920 }
908
921
909 #content div.box div.form div.fields div.field div.textarea {
922 #content div.box div.form div.fields div.field div.textarea {
910 border-top:1px solid #b3b3b3;
923 border-top:1px solid #b3b3b3;
911 border-left:1px solid #b3b3b3;
924 border-left:1px solid #b3b3b3;
912 border-right:1px solid #eaeaea;
925 border-right:1px solid #eaeaea;
913 border-bottom:1px solid #eaeaea;
926 border-bottom:1px solid #eaeaea;
914 margin:0 0 0 200px;
927 margin:0 0 0 200px;
915 padding:10px;
928 padding:10px;
916 }
929 }
917
930
918 #content div.box div.form div.fields div.field div.textarea-editor {
931 #content div.box div.form div.fields div.field div.textarea-editor {
919 border:1px solid #ddd;
932 border:1px solid #ddd;
920 padding:0;
933 padding:0;
921 }
934 }
922
935
923 #content div.box div.form div.fields div.field div.textarea textarea {
936 #content div.box div.form div.fields div.field div.textarea textarea {
924 width:100%;
937 width:100%;
925 height:220px;
938 height:220px;
926 overflow:hidden;
939 overflow:hidden;
927 background:#FFF;
940 background:#FFF;
928 color:#000;
941 color:#000;
929 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
942 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
930 font-size:11px;
943 font-size:11px;
931 outline:none;
944 outline:none;
932 border-width:0;
945 border-width:0;
933 margin:0;
946 margin:0;
934 padding:0;
947 padding:0;
935 }
948 }
936
949
937 #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 {
950 #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 {
938 width:100%;
951 width:100%;
939 height:100px;
952 height:100px;
940 }
953 }
941
954
942 #content div.box div.form div.fields div.field div.textarea table {
955 #content div.box div.form div.fields div.field div.textarea table {
943 width:100%;
956 width:100%;
944 border:none;
957 border:none;
945 margin:0;
958 margin:0;
946 padding:0;
959 padding:0;
947 }
960 }
948
961
949 #content div.box div.form div.fields div.field div.textarea table td {
962 #content div.box div.form div.fields div.field div.textarea table td {
950 background:#DDD;
963 background:#DDD;
951 border:none;
964 border:none;
952 padding:0;
965 padding:0;
953 }
966 }
954
967
955 #content div.box div.form div.fields div.field div.textarea table td table {
968 #content div.box div.form div.fields div.field div.textarea table td table {
956 width:auto;
969 width:auto;
957 border:none;
970 border:none;
958 margin:0;
971 margin:0;
959 padding:0;
972 padding:0;
960 }
973 }
961
974
962 #content div.box div.form div.fields div.field div.textarea table td table td {
975 #content div.box div.form div.fields div.field div.textarea table td table td {
963 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
976 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
964 font-size:11px;
977 font-size:11px;
965 padding:5px 5px 5px 0;
978 padding:5px 5px 5px 0;
966 }
979 }
967
980
968 #content div.box div.form div.fields div.field div.textarea table td table td a.mceButtonActive {
981 #content div.box div.form div.fields div.field div.textarea table td table td a.mceButtonActive {
969 background:#b1b1b1;
982 background:#b1b1b1;
970 }
983 }
971
984
972 #content div.box div.form div.fields div.field div.select a.ui-selectmenu {
985 #content div.box div.form div.fields div.field div.select a.ui-selectmenu {
973 color:#565656;
986 color:#565656;
974 text-decoration:none;
987 text-decoration:none;
975 }
988 }
976
989
977 #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 {
990 #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 {
978 background:#f6f6f6;
991 background:#f6f6f6;
979 border-color:#666;
992 border-color:#666;
980 }
993 }
981
994
982 div.form div.fields div.field div.button {
995 div.form div.fields div.field div.button {
983 margin:0;
996 margin:0;
984 padding:0 0 0 8px;
997 padding:0 0 0 8px;
985 }
998 }
986
999
987 div.form div.fields div.field div.highlight .ui-state-default {
1000 div.form div.fields div.field div.highlight .ui-state-default {
988 background:#4e85bb url("../images/button_highlight.png") repeat-x;
1001 background:#4e85bb url("../images/button_highlight.png") repeat-x;
989 border-top:1px solid #5c91a4;
1002 border-top:1px solid #5c91a4;
990 border-left:1px solid #2a6f89;
1003 border-left:1px solid #2a6f89;
991 border-right:1px solid #2b7089;
1004 border-right:1px solid #2b7089;
992 border-bottom:1px solid #1a6480;
1005 border-bottom:1px solid #1a6480;
993 color:#FFF;
1006 color:#FFF;
994 margin:0;
1007 margin:0;
995 padding:6px 12px;
1008 padding:6px 12px;
996 }
1009 }
997
1010
998 div.form div.fields div.field div.highlight .ui-state-hover {
1011 div.form div.fields div.field div.highlight .ui-state-hover {
999 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
1012 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
1000 border-top:1px solid #78acbf;
1013 border-top:1px solid #78acbf;
1001 border-left:1px solid #34819e;
1014 border-left:1px solid #34819e;
1002 border-right:1px solid #35829f;
1015 border-right:1px solid #35829f;
1003 border-bottom:1px solid #257897;
1016 border-bottom:1px solid #257897;
1004 color:#FFF;
1017 color:#FFF;
1005 margin:0;
1018 margin:0;
1006 padding:6px 12px;
1019 padding:6px 12px;
1007 }
1020 }
1008
1021
1009 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-default {
1022 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-default {
1010 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
1023 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
1011 border-top:1px solid #5c91a4;
1024 border-top:1px solid #5c91a4;
1012 border-left:1px solid #2a6f89;
1025 border-left:1px solid #2a6f89;
1013 border-right:1px solid #2b7089;
1026 border-right:1px solid #2b7089;
1014 border-bottom:1px solid #1a6480;
1027 border-bottom:1px solid #1a6480;
1015 color:#fff;
1028 color:#fff;
1016 margin:0;
1029 margin:0;
1017 padding:6px 12px;
1030 padding:6px 12px;
1018 }
1031 }
1019
1032
1020 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-hover {
1033 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-hover {
1021 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
1034 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
1022 border-top:1px solid #78acbf;
1035 border-top:1px solid #78acbf;
1023 border-left:1px solid #34819e;
1036 border-left:1px solid #34819e;
1024 border-right:1px solid #35829f;
1037 border-right:1px solid #35829f;
1025 border-bottom:1px solid #257897;
1038 border-bottom:1px solid #257897;
1026 color:#fff;
1039 color:#fff;
1027 margin:0;
1040 margin:0;
1028 padding:6px 12px;
1041 padding:6px 12px;
1029 }
1042 }
1030
1043
1031 #content div.box table {
1044 #content div.box table {
1032 width:100%;
1045 width:100%;
1033 border-collapse:collapse;
1046 border-collapse:collapse;
1034 margin:0;
1047 margin:0;
1035 padding:0;
1048 padding:0;
1036 }
1049 }
1037
1050
1038 #content div.box table th {
1051 #content div.box table th {
1039 background:#eee;
1052 background:#eee;
1040 border-bottom:1px solid #ddd;
1053 border-bottom:1px solid #ddd;
1041 padding:5px 0px 5px 5px;
1054 padding:5px 0px 5px 5px;
1042 }
1055 }
1043
1056
1044 #content div.box table th.left {
1057 #content div.box table th.left {
1045 text-align:left;
1058 text-align:left;
1046 }
1059 }
1047
1060
1048 #content div.box table th.right {
1061 #content div.box table th.right {
1049 text-align:right;
1062 text-align:right;
1050 }
1063 }
1051
1064
1052 #content div.box table th.center {
1065 #content div.box table th.center {
1053 text-align:center;
1066 text-align:center;
1054 }
1067 }
1055
1068
1056 #content div.box table th.selected {
1069 #content div.box table th.selected {
1057 vertical-align:middle;
1070 vertical-align:middle;
1058 padding:0;
1071 padding:0;
1059 }
1072 }
1060
1073
1061 #content div.box table td {
1074 #content div.box table td {
1062 background:#fff;
1075 background:#fff;
1063 border-bottom:1px solid #cdcdcd;
1076 border-bottom:1px solid #cdcdcd;
1064 vertical-align:middle;
1077 vertical-align:middle;
1065 padding:5px;
1078 padding:5px;
1066 }
1079 }
1067
1080
1068 #content div.box table tr.selected td {
1081 #content div.box table tr.selected td {
1069 background:#FFC;
1082 background:#FFC;
1070 }
1083 }
1071
1084
1072 #content div.box table td.selected {
1085 #content div.box table td.selected {
1073 width:3%;
1086 width:3%;
1074 text-align:center;
1087 text-align:center;
1075 vertical-align:middle;
1088 vertical-align:middle;
1076 padding:0;
1089 padding:0;
1077 }
1090 }
1078
1091
1079 #content div.box table td.action {
1092 #content div.box table td.action {
1080 width:45%;
1093 width:45%;
1081 text-align:left;
1094 text-align:left;
1082 }
1095 }
1083
1096
1084 #content div.box table td.date {
1097 #content div.box table td.date {
1085 width:33%;
1098 width:33%;
1086 text-align:center;
1099 text-align:center;
1087 }
1100 }
1088
1101
1089 #content div.box div.action {
1102 #content div.box div.action {
1090 float:right;
1103 float:right;
1091 background:#FFF;
1104 background:#FFF;
1092 text-align:right;
1105 text-align:right;
1093 margin:10px 0 0;
1106 margin:10px 0 0;
1094 padding:0;
1107 padding:0;
1095 }
1108 }
1096
1109
1097 #content div.box div.action select {
1110 #content div.box div.action select {
1098 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1111 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1099 font-size:11px;
1112 font-size:11px;
1100 margin:0;
1113 margin:0;
1101 }
1114 }
1102
1115
1103 #content div.box div.action .ui-selectmenu {
1116 #content div.box div.action .ui-selectmenu {
1104 margin:0;
1117 margin:0;
1105 padding:0;
1118 padding:0;
1106 }
1119 }
1107
1120
1108 #content div.box div.pagination {
1121 #content div.box div.pagination {
1109 height:1%;
1122 height:1%;
1110 clear:both;
1123 clear:both;
1111 overflow:hidden;
1124 overflow:hidden;
1112 margin:10px 0 0;
1125 margin:10px 0 0;
1113 padding:0;
1126 padding:0;
1114 }
1127 }
1115
1128
1116 #content div.box div.pagination ul.pager {
1129 #content div.box div.pagination ul.pager {
1117 float:right;
1130 float:right;
1118 text-align:right;
1131 text-align:right;
1119 margin:0;
1132 margin:0;
1120 padding:0;
1133 padding:0;
1121 }
1134 }
1122
1135
1123 #content div.box div.pagination ul.pager li {
1136 #content div.box div.pagination ul.pager li {
1124 height:1%;
1137 height:1%;
1125 float:left;
1138 float:left;
1126 list-style:none;
1139 list-style:none;
1127 background:#ebebeb url("../images/pager.png") repeat-x;
1140 background:#ebebeb url("../images/pager.png") repeat-x;
1128 border-top:1px solid #dedede;
1141 border-top:1px solid #dedede;
1129 border-left:1px solid #cfcfcf;
1142 border-left:1px solid #cfcfcf;
1130 border-right:1px solid #c4c4c4;
1143 border-right:1px solid #c4c4c4;
1131 border-bottom:1px solid #c4c4c4;
1144 border-bottom:1px solid #c4c4c4;
1132 color:#4A4A4A;
1145 color:#4A4A4A;
1133 font-weight:700;
1146 font-weight:700;
1134 margin:0 0 0 4px;
1147 margin:0 0 0 4px;
1135 padding:0;
1148 padding:0;
1136 }
1149 }
1137
1150
1138 #content div.box div.pagination ul.pager li.separator {
1151 #content div.box div.pagination ul.pager li.separator {
1139 padding:6px;
1152 padding:6px;
1140 }
1153 }
1141
1154
1142 #content div.box div.pagination ul.pager li.current {
1155 #content div.box div.pagination ul.pager li.current {
1143 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1156 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1144 border-top:1px solid #ccc;
1157 border-top:1px solid #ccc;
1145 border-left:1px solid #bebebe;
1158 border-left:1px solid #bebebe;
1146 border-right:1px solid #b1b1b1;
1159 border-right:1px solid #b1b1b1;
1147 border-bottom:1px solid #afafaf;
1160 border-bottom:1px solid #afafaf;
1148 color:#515151;
1161 color:#515151;
1149 padding:6px;
1162 padding:6px;
1150 }
1163 }
1151
1164
1152 #content div.box div.pagination ul.pager li a {
1165 #content div.box div.pagination ul.pager li a {
1153 height:1%;
1166 height:1%;
1154 display:block;
1167 display:block;
1155 float:left;
1168 float:left;
1156 color:#515151;
1169 color:#515151;
1157 text-decoration:none;
1170 text-decoration:none;
1158 margin:0;
1171 margin:0;
1159 padding:6px;
1172 padding:6px;
1160 }
1173 }
1161
1174
1162 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1175 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1163 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1176 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1164 border-top:1px solid #ccc;
1177 border-top:1px solid #ccc;
1165 border-left:1px solid #bebebe;
1178 border-left:1px solid #bebebe;
1166 border-right:1px solid #b1b1b1;
1179 border-right:1px solid #b1b1b1;
1167 border-bottom:1px solid #afafaf;
1180 border-bottom:1px solid #afafaf;
1168 margin:-1px;
1181 margin:-1px;
1169 }
1182 }
1170
1183
1171 #content div.box div.pagination-wh {
1184 #content div.box div.pagination-wh {
1172 height:1%;
1185 height:1%;
1173 clear:both;
1186 clear:both;
1174 overflow:hidden;
1187 overflow:hidden;
1175 text-align:right;
1188 text-align:right;
1176 margin:10px 0 0;
1189 margin:10px 0 0;
1177 padding:0;
1190 padding:0;
1178 }
1191 }
1179
1192
1180 #content div.box div.pagination-right {
1193 #content div.box div.pagination-right {
1181 float:right;
1194 float:right;
1182 }
1195 }
1183
1196
1184 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1197 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1185 height:1%;
1198 height:1%;
1186 float:left;
1199 float:left;
1187 background:#ebebeb url("../images/pager.png") repeat-x;
1200 background:#ebebeb url("../images/pager.png") repeat-x;
1188 border-top:1px solid #dedede;
1201 border-top:1px solid #dedede;
1189 border-left:1px solid #cfcfcf;
1202 border-left:1px solid #cfcfcf;
1190 border-right:1px solid #c4c4c4;
1203 border-right:1px solid #c4c4c4;
1191 border-bottom:1px solid #c4c4c4;
1204 border-bottom:1px solid #c4c4c4;
1192 color:#4A4A4A;
1205 color:#4A4A4A;
1193 font-weight:700;
1206 font-weight:700;
1194 margin:0 0 0 4px;
1207 margin:0 0 0 4px;
1195 padding:6px;
1208 padding:6px;
1196 }
1209 }
1197
1210
1198 #content div.box div.pagination-wh span.pager_curpage {
1211 #content div.box div.pagination-wh span.pager_curpage {
1199 height:1%;
1212 height:1%;
1200 float:left;
1213 float:left;
1201 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1214 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1202 border-top:1px solid #ccc;
1215 border-top:1px solid #ccc;
1203 border-left:1px solid #bebebe;
1216 border-left:1px solid #bebebe;
1204 border-right:1px solid #b1b1b1;
1217 border-right:1px solid #b1b1b1;
1205 border-bottom:1px solid #afafaf;
1218 border-bottom:1px solid #afafaf;
1206 color:#515151;
1219 color:#515151;
1207 font-weight:700;
1220 font-weight:700;
1208 margin:0 0 0 4px;
1221 margin:0 0 0 4px;
1209 padding:6px;
1222 padding:6px;
1210 }
1223 }
1211
1224
1212 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1225 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1213 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1226 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1214 border-top:1px solid #ccc;
1227 border-top:1px solid #ccc;
1215 border-left:1px solid #bebebe;
1228 border-left:1px solid #bebebe;
1216 border-right:1px solid #b1b1b1;
1229 border-right:1px solid #b1b1b1;
1217 border-bottom:1px solid #afafaf;
1230 border-bottom:1px solid #afafaf;
1218 text-decoration:none;
1231 text-decoration:none;
1219 }
1232 }
1220
1233
1221 #content div.box div.traffic div.legend {
1234 #content div.box div.traffic div.legend {
1222 clear:both;
1235 clear:both;
1223 overflow:hidden;
1236 overflow:hidden;
1224 border-bottom:1px solid #ddd;
1237 border-bottom:1px solid #ddd;
1225 margin:0 0 10px;
1238 margin:0 0 10px;
1226 padding:0 0 10px;
1239 padding:0 0 10px;
1227 }
1240 }
1228
1241
1229 #content div.box div.traffic div.legend h6 {
1242 #content div.box div.traffic div.legend h6 {
1230 float:left;
1243 float:left;
1231 border:none;
1244 border:none;
1232 margin:0;
1245 margin:0;
1233 padding:0;
1246 padding:0;
1234 }
1247 }
1235
1248
1236 #content div.box div.traffic div.legend li {
1249 #content div.box div.traffic div.legend li {
1237 list-style:none;
1250 list-style:none;
1238 float:left;
1251 float:left;
1239 font-size:11px;
1252 font-size:11px;
1240 margin:0;
1253 margin:0;
1241 padding:0 8px 0 4px;
1254 padding:0 8px 0 4px;
1242 }
1255 }
1243
1256
1244 #content div.box div.traffic div.legend li.visits {
1257 #content div.box div.traffic div.legend li.visits {
1245 border-left:12px solid #edc240;
1258 border-left:12px solid #edc240;
1246 }
1259 }
1247
1260
1248 #content div.box div.traffic div.legend li.pageviews {
1261 #content div.box div.traffic div.legend li.pageviews {
1249 border-left:12px solid #afd8f8;
1262 border-left:12px solid #afd8f8;
1250 }
1263 }
1251
1264
1252 #content div.box div.traffic table {
1265 #content div.box div.traffic table {
1253 width:auto;
1266 width:auto;
1254 }
1267 }
1255
1268
1256 #content div.box div.traffic table td {
1269 #content div.box div.traffic table td {
1257 background:transparent;
1270 background:transparent;
1258 border:none;
1271 border:none;
1259 padding:2px 3px 3px;
1272 padding:2px 3px 3px;
1260 }
1273 }
1261
1274
1262 #content div.box div.traffic table td.legendLabel {
1275 #content div.box div.traffic table td.legendLabel {
1263 padding:0 3px 2px;
1276 padding:0 3px 2px;
1264 }
1277 }
1265
1278
1266 #footer {
1279 #footer {
1267 clear:both;
1280 clear:both;
1268 overflow:hidden;
1281 overflow:hidden;
1269 text-align:right;
1282 text-align:right;
1270 margin:0;
1283 margin:0;
1271 padding:0 30px 4px;
1284 padding:0 30px 4px;
1272 margin:-10px 0 0;
1285 margin:-10px 0 0;
1273 }
1286 }
1274
1287
1275 #footer div#footer-inner {
1288 #footer div#footer-inner {
1276 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1289 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1277 border-top:2px solid #FFFFFF;
1290 border-top:2px solid #FFFFFF;
1278 }
1291 }
1279
1292
1280 #footer div#footer-inner p {
1293 #footer div#footer-inner p {
1281 padding:15px 25px 15px 0;
1294 padding:15px 25px 15px 0;
1282 color:#FFF;
1295 color:#FFF;
1283 font-weight:700;
1296 font-weight:700;
1284 }
1297 }
1285 #footer div#footer-inner .footer-link {
1298 #footer div#footer-inner .footer-link {
1286 float:left;
1299 float:left;
1287 padding-left:10px;
1300 padding-left:10px;
1288 }
1301 }
1289 #footer div#footer-inner .footer-link a {
1302 #footer div#footer-inner .footer-link a {
1290 color:#FFF;
1303 color:#FFF;
1291 }
1304 }
1292
1305
1293 #login div.title {
1306 #login div.title {
1294 width:420px;
1307 width:420px;
1295 clear:both;
1308 clear:both;
1296 overflow:hidden;
1309 overflow:hidden;
1297 position:relative;
1310 position:relative;
1298 background:#003367 url("../../images/header_inner.png") repeat-x;
1311 background:#003367 url("../../images/header_inner.png") repeat-x;
1299 margin:0 auto;
1312 margin:0 auto;
1300 padding:0;
1313 padding:0;
1301 }
1314 }
1302
1315
1303 #login div.inner {
1316 #login div.inner {
1304 width:380px;
1317 width:380px;
1305 background:#FFF url("../images/login.png") no-repeat top left;
1318 background:#FFF url("../images/login.png") no-repeat top left;
1306 border-top:none;
1319 border-top:none;
1307 border-bottom:none;
1320 border-bottom:none;
1308 margin:0 auto;
1321 margin:0 auto;
1309 padding:20px;
1322 padding:20px;
1310 }
1323 }
1311
1324
1312 #login div.form div.fields div.field div.label {
1325 #login div.form div.fields div.field div.label {
1313 width:173px;
1326 width:173px;
1314 float:left;
1327 float:left;
1315 text-align:right;
1328 text-align:right;
1316 margin:2px 10px 0 0;
1329 margin:2px 10px 0 0;
1317 padding:5px 0 0 5px;
1330 padding:5px 0 0 5px;
1318 }
1331 }
1319
1332
1320 #login div.form div.fields div.field div.input input {
1333 #login div.form div.fields div.field div.input input {
1321 width:176px;
1334 width:176px;
1322 background:#FFF;
1335 background:#FFF;
1323 border-top:1px solid #b3b3b3;
1336 border-top:1px solid #b3b3b3;
1324 border-left:1px solid #b3b3b3;
1337 border-left:1px solid #b3b3b3;
1325 border-right:1px solid #eaeaea;
1338 border-right:1px solid #eaeaea;
1326 border-bottom:1px solid #eaeaea;
1339 border-bottom:1px solid #eaeaea;
1327 color:#000;
1340 color:#000;
1328 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1341 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1329 font-size:11px;
1342 font-size:11px;
1330 margin:0;
1343 margin:0;
1331 padding:7px 7px 6px;
1344 padding:7px 7px 6px;
1332 }
1345 }
1333
1346
1334 #login div.form div.fields div.buttons {
1347 #login div.form div.fields div.buttons {
1335 clear:both;
1348 clear:both;
1336 overflow:hidden;
1349 overflow:hidden;
1337 border-top:1px solid #DDD;
1350 border-top:1px solid #DDD;
1338 text-align:right;
1351 text-align:right;
1339 margin:0;
1352 margin:0;
1340 padding:10px 0 0;
1353 padding:10px 0 0;
1341 }
1354 }
1342
1355
1343 #login div.form div.links {
1356 #login div.form div.links {
1344 clear:both;
1357 clear:both;
1345 overflow:hidden;
1358 overflow:hidden;
1346 margin:10px 0 0;
1359 margin:10px 0 0;
1347 padding:0 0 2px;
1360 padding:0 0 2px;
1348 }
1361 }
1349
1362
1350 #register div.title {
1363 #register div.title {
1351 clear:both;
1364 clear:both;
1352 overflow:hidden;
1365 overflow:hidden;
1353 position:relative;
1366 position:relative;
1354 background:#003367 url("../images/header_inner.png") repeat-x;
1367 background:#003367 url("../images/header_inner.png") repeat-x;
1355 margin:0 auto;
1368 margin:0 auto;
1356 padding:0;
1369 padding:0;
1357 }
1370 }
1358
1371
1359 #register div.inner {
1372 #register div.inner {
1360 background:#FFF;
1373 background:#FFF;
1361 border-top:none;
1374 border-top:none;
1362 border-bottom:none;
1375 border-bottom:none;
1363 margin:0 auto;
1376 margin:0 auto;
1364 padding:20px;
1377 padding:20px;
1365 }
1378 }
1366
1379
1367 #register div.form div.fields div.field div.label {
1380 #register div.form div.fields div.field div.label {
1368 width:135px;
1381 width:135px;
1369 float:left;
1382 float:left;
1370 text-align:right;
1383 text-align:right;
1371 margin:2px 10px 0 0;
1384 margin:2px 10px 0 0;
1372 padding:5px 0 0 5px;
1385 padding:5px 0 0 5px;
1373 }
1386 }
1374
1387
1375 #register div.form div.fields div.field div.input input {
1388 #register div.form div.fields div.field div.input input {
1376 width:300px;
1389 width:300px;
1377 background:#FFF;
1390 background:#FFF;
1378 border-top:1px solid #b3b3b3;
1391 border-top:1px solid #b3b3b3;
1379 border-left:1px solid #b3b3b3;
1392 border-left:1px solid #b3b3b3;
1380 border-right:1px solid #eaeaea;
1393 border-right:1px solid #eaeaea;
1381 border-bottom:1px solid #eaeaea;
1394 border-bottom:1px solid #eaeaea;
1382 color:#000;
1395 color:#000;
1383 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1396 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1384 font-size:11px;
1397 font-size:11px;
1385 margin:0;
1398 margin:0;
1386 padding:7px 7px 6px;
1399 padding:7px 7px 6px;
1387 }
1400 }
1388
1401
1389 #register div.form div.fields div.buttons {
1402 #register div.form div.fields div.buttons {
1390 clear:both;
1403 clear:both;
1391 overflow:hidden;
1404 overflow:hidden;
1392 border-top:1px solid #DDD;
1405 border-top:1px solid #DDD;
1393 text-align:left;
1406 text-align:left;
1394 margin:0;
1407 margin:0;
1395 padding:10px 0 0 114px;
1408 padding:10px 0 0 114px;
1396 }
1409 }
1397
1410
1398 #register div.form div.fields div.buttons div.highlight input.ui-state-default {
1411 #register div.form div.fields div.buttons div.highlight input.ui-state-default {
1399 background:url("../images/button_highlight.png") repeat-x scroll 0 0 #4E85BB;
1412 background:url("../images/button_highlight.png") repeat-x scroll 0 0 #4E85BB;
1400 color:#FFF;
1413 color:#FFF;
1401 border-color:#5C91A4 #2B7089 #1A6480 #2A6F89;
1414 border-color:#5C91A4 #2B7089 #1A6480 #2A6F89;
1402 border-style:solid;
1415 border-style:solid;
1403 border-width:1px;
1416 border-width:1px;
1404 }
1417 }
1405
1418
1406 #register div.form div.activation_msg {
1419 #register div.form div.activation_msg {
1407 padding-top:4px;
1420 padding-top:4px;
1408 padding-bottom:4px;
1421 padding-bottom:4px;
1409 }
1422 }
1410
1423
1411 .trending_language_tbl,.trending_language_tbl td {
1424 .trending_language_tbl,.trending_language_tbl td {
1412 border:0 !important;
1425 border:0 !important;
1413 margin:0 !important;
1426 margin:0 !important;
1414 padding:0 !important;
1427 padding:0 !important;
1415 }
1428 }
1416
1429
1417 .trending_language {
1430 .trending_language {
1418 background-color:#003367;
1431 background-color:#003367;
1419 color:#FFF;
1432 color:#FFF;
1420 display:block;
1433 display:block;
1421 min-width:20px;
1434 min-width:20px;
1422 text-decoration:none;
1435 text-decoration:none;
1423 height:12px;
1436 height:12px;
1424 margin-bottom:4px;
1437 margin-bottom:4px;
1425 margin-left:5px;
1438 margin-left:5px;
1426 white-space:pre;
1439 white-space:pre;
1427 padding:3px;
1440 padding:3px;
1428 }
1441 }
1429
1442
1430 h3.files_location {
1443 h3.files_location {
1431 font-size:1.8em;
1444 font-size:1.8em;
1432 font-weight:700;
1445 font-weight:700;
1433 border-bottom:none !important;
1446 border-bottom:none !important;
1434 margin:10px 0 !important;
1447 margin:10px 0 !important;
1435 }
1448 }
1436
1449
1437 #files_data dl dt {
1450 #files_data dl dt {
1438 float:left;
1451 float:left;
1439 width:115px;
1452 width:115px;
1440 margin:0 !important;
1453 margin:0 !important;
1441 padding:5px;
1454 padding:5px;
1442 }
1455 }
1443
1456
1444 #files_data dl dd {
1457 #files_data dl dd {
1445 margin:0 !important;
1458 margin:0 !important;
1446 padding:5px !important;
1459 padding:5px !important;
1447 }
1460 }
1448
1461
1449 #changeset_content {
1462 #changeset_content {
1450 border:1px solid #CCC;
1463 border:1px solid #CCC;
1451 padding:5px;
1464 padding:5px;
1452 }
1465 }
1453
1466
1454 #changeset_content .container {
1467 #changeset_content .container {
1455 min-height:120px;
1468 min-height:120px;
1456 font-size:1.2em;
1469 font-size:1.2em;
1457 overflow:hidden;
1470 overflow:hidden;
1458 }
1471 }
1459
1472
1460 #changeset_content .container .right {
1473 #changeset_content .container .right {
1461 float:right;
1474 float:right;
1462 width:25%;
1475 width:25%;
1463 text-align:right;
1476 text-align:right;
1464 }
1477 }
1465
1478
1466 #changeset_content .container .left .message {
1479 #changeset_content .container .left .message {
1467 font-style:italic;
1480 font-style:italic;
1468 color:#556CB5;
1481 color:#556CB5;
1469 white-space:pre-wrap;
1482 white-space:pre-wrap;
1470 }
1483 }
1471
1484
1472 .cs_files .cs_added {
1485 .cs_files .cs_added {
1473 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1486 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1474 height:16px;
1487 height:16px;
1475 padding-left:20px;
1488 padding-left:20px;
1476 margin-top:7px;
1489 margin-top:7px;
1477 text-align:left;
1490 text-align:left;
1478 }
1491 }
1479
1492
1480 .cs_files .cs_changed {
1493 .cs_files .cs_changed {
1481 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1494 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1482 height:16px;
1495 height:16px;
1483 padding-left:20px;
1496 padding-left:20px;
1484 margin-top:7px;
1497 margin-top:7px;
1485 text-align:left;
1498 text-align:left;
1486 }
1499 }
1487
1500
1488 .cs_files .cs_removed {
1501 .cs_files .cs_removed {
1489 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1502 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1490 height:16px;
1503 height:16px;
1491 padding-left:20px;
1504 padding-left:20px;
1492 margin-top:7px;
1505 margin-top:7px;
1493 text-align:left;
1506 text-align:left;
1494 }
1507 }
1495
1508
1496 #graph {
1509 #graph {
1497 overflow:hidden;
1510 overflow:hidden;
1498 }
1511 }
1499
1512
1500 #graph_nodes {
1513 #graph_nodes {
1501 width:160px;
1514 width:160px;
1502 float:left;
1515 float:left;
1503 margin-left:-50px;
1516 margin-left:-50px;
1504 margin-top:5px;
1517 margin-top:5px;
1505 }
1518 }
1506
1519
1507 #graph_content {
1520 #graph_content {
1508 width:800px;
1521 width:800px;
1509 float:left;
1522 float:left;
1510 }
1523 }
1511
1524
1512 #graph_content .container_header {
1525 #graph_content .container_header {
1513 border:1px solid #CCC;
1526 border:1px solid #CCC;
1514 padding:10px;
1527 padding:10px;
1515 }
1528 }
1516
1529
1517 #graph_content .container {
1530 #graph_content .container {
1518 border-bottom:1px solid #CCC;
1531 border-bottom:1px solid #CCC;
1519 border-left:1px solid #CCC;
1532 border-left:1px solid #CCC;
1520 border-right:1px solid #CCC;
1533 border-right:1px solid #CCC;
1521 min-height:80px;
1534 min-height:80px;
1522 overflow:hidden;
1535 overflow:hidden;
1523 font-size:1.2em;
1536 font-size:1.2em;
1524 }
1537 }
1525
1538
1526 #graph_content .container .right {
1539 #graph_content .container .right {
1527 float:right;
1540 float:right;
1528 width:28%;
1541 width:28%;
1529 text-align:right;
1542 text-align:right;
1530 padding-bottom:5px;
1543 padding-bottom:5px;
1531 }
1544 }
1532
1545
1533 #graph_content .container .left .date {
1546 #graph_content .container .left .date {
1534 font-weight:700;
1547 font-weight:700;
1535 padding-bottom:5px;
1548 padding-bottom:5px;
1536 }
1549 }
1537
1550
1538 #graph_content .container .left .message {
1551 #graph_content .container .left .message {
1539 font-size:100%;
1552 font-size:100%;
1540 padding-top:3px;
1553 padding-top:3px;
1541 white-space:pre-wrap;
1554 white-space:pre-wrap;
1542 }
1555 }
1543
1556
1544 .right div {
1557 .right div {
1545 clear:both;
1558 clear:both;
1546 }
1559 }
1547
1560
1548 .right .changes .added,.changed,.removed {
1561 .right .changes .added,.changed,.removed {
1549 border:1px solid #DDD;
1562 border:1px solid #DDD;
1550 display:block;
1563 display:block;
1551 float:right;
1564 float:right;
1552 text-align:center;
1565 text-align:center;
1553 min-width:15px;
1566 min-width:15px;
1554 }
1567 }
1555
1568
1556 .right .changes .added {
1569 .right .changes .added {
1557 background:#BFB;
1570 background:#BFB;
1558 }
1571 }
1559
1572
1560 .right .changes .changed {
1573 .right .changes .changed {
1561 background:#FD8;
1574 background:#FD8;
1562 }
1575 }
1563
1576
1564 .right .changes .removed {
1577 .right .changes .removed {
1565 background:#F88;
1578 background:#F88;
1566 }
1579 }
1567
1580
1568 .right .merge {
1581 .right .merge {
1569 vertical-align:top;
1582 vertical-align:top;
1570 font-size:0.75em;
1583 font-size:0.75em;
1571 font-weight:700;
1584 font-weight:700;
1572 }
1585 }
1573
1586
1574 .right .parent {
1587 .right .parent {
1575 font-size:90%;
1588 font-size:90%;
1576 font-family:monospace;
1589 font-family:monospace;
1577 }
1590 }
1578
1591
1579 .right .logtags .branchtag {
1592 .right .logtags .branchtag {
1580 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1593 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1581 display:block;
1594 display:block;
1582 font-size:0.8em;
1595 font-size:0.8em;
1583 padding:11px 16px 0 0;
1596 padding:11px 16px 0 0;
1584 }
1597 }
1585
1598
1586 .right .logtags .tagtag {
1599 .right .logtags .tagtag {
1587 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1600 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1588 display:block;
1601 display:block;
1589 font-size:0.8em;
1602 font-size:0.8em;
1590 padding:11px 16px 0 0;
1603 padding:11px 16px 0 0;
1591 }
1604 }
1592
1605
1593 div.browserblock {
1606 div.browserblock {
1594 overflow:hidden;
1607 overflow:hidden;
1595 border:1px solid #ccc;
1608 border:1px solid #ccc;
1596 background:#f8f8f8;
1609 background:#f8f8f8;
1597 font-size:100%;
1610 font-size:100%;
1598 line-height:125%;
1611 line-height:125%;
1599 padding:0;
1612 padding:0;
1600 }
1613 }
1601
1614
1602 div.browserblock .browser-header {
1615 div.browserblock .browser-header {
1603 border-bottom:1px solid #CCC;
1616 border-bottom:1px solid #CCC;
1604 background:#FFF;
1617 background:#FFF;
1605 color:blue;
1618 color:blue;
1606 padding:10px 0;
1619 padding:10px 0;
1607 }
1620 }
1608
1621
1609 div.browserblock .browser-header span {
1622 div.browserblock .browser-header span {
1610 margin-left:25px;
1623 margin-left:25px;
1611 font-weight:700;
1624 font-weight:700;
1612 }
1625 }
1613
1626
1614 div.browserblock .browser-body {
1627 div.browserblock .browser-body {
1615 background:#EEE;
1628 background:#EEE;
1616 }
1629 }
1617
1630
1618 table.code-browser {
1631 table.code-browser {
1619 border-collapse:collapse;
1632 border-collapse:collapse;
1620 width:100%;
1633 width:100%;
1621 }
1634 }
1622
1635
1623 table.code-browser tr {
1636 table.code-browser tr {
1624 margin:3px;
1637 margin:3px;
1625 }
1638 }
1626
1639
1627 table.code-browser thead th {
1640 table.code-browser thead th {
1628 background-color:#EEE;
1641 background-color:#EEE;
1629 height:20px;
1642 height:20px;
1630 font-size:1.1em;
1643 font-size:1.1em;
1631 font-weight:700;
1644 font-weight:700;
1632 text-align:left;
1645 text-align:left;
1633 padding-left:10px;
1646 padding-left:10px;
1634 }
1647 }
1635
1648
1636 table.code-browser tbody td {
1649 table.code-browser tbody td {
1637 padding-left:10px;
1650 padding-left:10px;
1638 height:20px;
1651 height:20px;
1639 }
1652 }
1640
1653
1641 table.code-browser .browser-file {
1654 table.code-browser .browser-file {
1642 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1655 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1643 height:16px;
1656 height:16px;
1644 padding-left:20px;
1657 padding-left:20px;
1645 text-align:left;
1658 text-align:left;
1646 }
1659 }
1647
1660
1648 table.code-browser .browser-dir {
1661 table.code-browser .browser-dir {
1649 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1662 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1650 height:16px;
1663 height:16px;
1651 padding-left:20px;
1664 padding-left:20px;
1652 text-align:left;
1665 text-align:left;
1653 }
1666 }
1654
1667
1655 .box .search {
1668 .box .search {
1656 clear:both;
1669 clear:both;
1657 overflow:hidden;
1670 overflow:hidden;
1658 margin:0;
1671 margin:0;
1659 padding:0 20px 10px;
1672 padding:0 20px 10px;
1660 }
1673 }
1661
1674
1662 .box .search div.search_path {
1675 .box .search div.search_path {
1663 background:none repeat scroll 0 0 #EEE;
1676 background:none repeat scroll 0 0 #EEE;
1664 border:1px solid #CCC;
1677 border:1px solid #CCC;
1665 color:blue;
1678 color:blue;
1666 margin-bottom:10px;
1679 margin-bottom:10px;
1667 padding:10px 0;
1680 padding:10px 0;
1668 }
1681 }
1669
1682
1670 .box .search div.search_path div.link {
1683 .box .search div.search_path div.link {
1671 font-weight:700;
1684 font-weight:700;
1672 margin-left:25px;
1685 margin-left:25px;
1673 }
1686 }
1674
1687
1675 .box .search div.search_path div.link a {
1688 .box .search div.search_path div.link a {
1676 color:#003367;
1689 color:#003367;
1677 cursor:pointer;
1690 cursor:pointer;
1678 text-decoration:none;
1691 text-decoration:none;
1679 }
1692 }
1680
1693
1681 #path_unlock {
1694 #path_unlock {
1682 color:red;
1695 color:red;
1683 font-size:1.2em;
1696 font-size:1.2em;
1684 padding-left:4px;
1697 padding-left:4px;
1685 }
1698 }
1686
1699
1687 .info_box * {
1700 .info_box * {
1688 background:url("../../images/pager.png") repeat-x scroll 0 0 #EBEBEB;
1701 background:url("../../images/pager.png") repeat-x scroll 0 0 #EBEBEB;
1689 color:#4A4A4A;
1702 color:#4A4A4A;
1690 font-weight:700;
1703 font-weight:700;
1691 height:1%;
1704 height:1%;
1692 display:inline;
1705 display:inline;
1693 border-color:#DEDEDE #C4C4C4 #C4C4C4 #CFCFCF;
1706 border-color:#DEDEDE #C4C4C4 #C4C4C4 #CFCFCF;
1694 border-style:solid;
1707 border-style:solid;
1695 border-width:1px;
1708 border-width:1px;
1696 padding:4px 6px;
1709 padding:4px 6px;
1697 }
1710 }
1698
1711
1699 .info_box span {
1712 .info_box span {
1700 margin-left:3px;
1713 margin-left:3px;
1701 margin-right:3px;
1714 margin-right:3px;
1702 }
1715 }
1703
1716
1704 .info_box input#at_rev {
1717 .info_box input#at_rev {
1705 text-align:center;
1718 text-align:center;
1706 padding:5px 3px 3px 2px;
1719 padding:5px 3px 3px 2px;
1707 }
1720 }
1708
1721
1709 .info_box input#view {
1722 .info_box input#view {
1710 text-align:center;
1723 text-align:center;
1711 padding:4px 3px 2px 2px;
1724 padding:4px 3px 2px 2px;
1712 }
1725 }
1713
1726
1714 .yui-overlay,.yui-panel-container {
1727 .yui-overlay,.yui-panel-container {
1715 visibility:hidden;
1728 visibility:hidden;
1716 position:absolute;
1729 position:absolute;
1717 z-index:2;
1730 z-index:2;
1718 }
1731 }
1719
1732
1720 .yui-tt {
1733 .yui-tt {
1721 visibility:hidden;
1734 visibility:hidden;
1722 position:absolute;
1735 position:absolute;
1723 color:#666;
1736 color:#666;
1724 background-color:#FFF;
1737 background-color:#FFF;
1725 font-family:arial, helvetica, verdana, sans-serif;
1738 font-family:arial, helvetica, verdana, sans-serif;
1726 border:2px solid #003367;
1739 border:2px solid #003367;
1727 font:100% sans-serif;
1740 font:100% sans-serif;
1728 width:auto;
1741 width:auto;
1729 opacity:1px;
1742 opacity:1px;
1730 padding:8px;
1743 padding:8px;
1731 white-space: pre;
1744 white-space: pre;
1732 }
1745 }
1733
1746
1734 .ac {
1747 .ac {
1735 vertical-align:top;
1748 vertical-align:top;
1736 }
1749 }
1737
1750
1738 .ac .yui-ac {
1751 .ac .yui-ac {
1739 position:relative;
1752 position:relative;
1740 font-family:arial;
1753 font-family:arial;
1741 font-size:100%;
1754 font-size:100%;
1742 }
1755 }
1743
1756
1744 .ac .perm_ac {
1757 .ac .perm_ac {
1745 width:15em;
1758 width:15em;
1746 }
1759 }
1747
1760
1748 .ac .yui-ac-input {
1761 .ac .yui-ac-input {
1749 width:100%;
1762 width:100%;
1750 }
1763 }
1751
1764
1752 .ac .yui-ac-container {
1765 .ac .yui-ac-container {
1753 position:absolute;
1766 position:absolute;
1754 top:1.6em;
1767 top:1.6em;
1755 width:100%;
1768 width:100%;
1756 }
1769 }
1757
1770
1758 .ac .yui-ac-content {
1771 .ac .yui-ac-content {
1759 position:absolute;
1772 position:absolute;
1760 width:100%;
1773 width:100%;
1761 border:1px solid gray;
1774 border:1px solid gray;
1762 background:#fff;
1775 background:#fff;
1763 overflow:hidden;
1776 overflow:hidden;
1764 z-index:9050;
1777 z-index:9050;
1765 }
1778 }
1766
1779
1767 .ac .yui-ac-shadow {
1780 .ac .yui-ac-shadow {
1768 position:absolute;
1781 position:absolute;
1769 width:100%;
1782 width:100%;
1770 background:#000;
1783 background:#000;
1771 -moz-opacity:0.1px;
1784 -moz-opacity:0.1px;
1772 opacity:.10;
1785 opacity:.10;
1773 filter:alpha(opacity = 10);
1786 filter:alpha(opacity = 10);
1774 z-index:9049;
1787 z-index:9049;
1775 margin:.3em;
1788 margin:.3em;
1776 }
1789 }
1777
1790
1778 .ac .yui-ac-content ul {
1791 .ac .yui-ac-content ul {
1779 width:100%;
1792 width:100%;
1780 margin:0;
1793 margin:0;
1781 padding:0;
1794 padding:0;
1782 }
1795 }
1783
1796
1784 .ac .yui-ac-content li {
1797 .ac .yui-ac-content li {
1785 cursor:default;
1798 cursor:default;
1786 white-space:nowrap;
1799 white-space:nowrap;
1787 margin:0;
1800 margin:0;
1788 padding:2px 5px;
1801 padding:2px 5px;
1789 }
1802 }
1790
1803
1791 .ac .yui-ac-content li.yui-ac-prehighlight {
1804 .ac .yui-ac-content li.yui-ac-prehighlight {
1792 background:#B3D4FF;
1805 background:#B3D4FF;
1793 }
1806 }
1794
1807
1795 .ac .yui-ac-content li.yui-ac-highlight {
1808 .ac .yui-ac-content li.yui-ac-highlight {
1796 background:#556CB5;
1809 background:#556CB5;
1797 color:#FFF;
1810 color:#FFF;
1798 }
1811 }
1799
1812
1800 .follow{
1813 .follow{
1801 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
1814 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
1802 height: 16px;
1815 height: 16px;
1803 width: 20px;
1816 width: 20px;
1804 cursor: pointer;
1817 cursor: pointer;
1805 display: block;
1818 display: block;
1806 float: right;
1819 float: right;
1807 margin-top: 2px;
1820 margin-top: 2px;
1808 }
1821 }
1809
1822
1810 .following{
1823 .following{
1811 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
1824 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
1812 height: 16px;
1825 height: 16px;
1813 width: 20px;
1826 width: 20px;
1814 cursor: pointer;
1827 cursor: pointer;
1815 display: block;
1828 display: block;
1816 float: right;
1829 float: right;
1817 margin-top: 2px;
1830 margin-top: 2px;
1818 }
1831 }
1819
1832
1820 .currently_following{
1833 .currently_following{
1821
1834
1822 padding-left: 10px;
1835 padding-left: 10px;
1823 padding-bottom:5px;
1836 padding-bottom:5px;
1824
1837
1825 }
1838 }
1826
1839
1827
1840
1828
1841
1829 .add_icon {
1842 .add_icon {
1830 background:url("../images/icons/add.png") no-repeat scroll 3px;
1843 background:url("../images/icons/add.png") no-repeat scroll 3px;
1831 height:16px;
1844 height:16px;
1832 padding-left:20px;
1845 padding-left:20px;
1833 padding-top:1px;
1846 padding-top:1px;
1834 text-align:left;
1847 text-align:left;
1835 }
1848 }
1836
1849
1837 .edit_icon {
1850 .edit_icon {
1838 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
1851 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
1839 height:16px;
1852 height:16px;
1840 padding-left:20px;
1853 padding-left:20px;
1841 padding-top:1px;
1854 padding-top:1px;
1842 text-align:left;
1855 text-align:left;
1843 }
1856 }
1844
1857
1845 .delete_icon {
1858 .delete_icon {
1846 background:url("../images/icons/delete.png") no-repeat scroll 3px;
1859 background:url("../images/icons/delete.png") no-repeat scroll 3px;
1847 height:16px;
1860 height:16px;
1848 padding-left:20px;
1861 padding-left:20px;
1849 padding-top:1px;
1862 padding-top:1px;
1850 text-align:left;
1863 text-align:left;
1851 }
1864 }
1852
1865
1853 .refresh_icon {
1866 .refresh_icon {
1854 background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
1867 background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
1855 height:16px;
1868 height:16px;
1856 padding-left:20px;
1869 padding-left:20px;
1857 padding-top:1px;
1870 padding-top:1px;
1858 text-align:left;
1871 text-align:left;
1859 }
1872 }
1860
1873
1861 .rss_icon {
1874 .rss_icon {
1862 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
1875 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
1863 height:16px;
1876 height:16px;
1864 padding-left:20px;
1877 padding-left:20px;
1865 padding-top:1px;
1878 padding-top:1px;
1866 text-align:left;
1879 text-align:left;
1867 }
1880 }
1868
1881
1869 .atom_icon {
1882 .atom_icon {
1870 background:url("../images/icons/atom.png") no-repeat scroll 3px;
1883 background:url("../images/icons/atom.png") no-repeat scroll 3px;
1871 height:16px;
1884 height:16px;
1872 padding-left:20px;
1885 padding-left:20px;
1873 padding-top:1px;
1886 padding-top:1px;
1874 text-align:left;
1887 text-align:left;
1875 }
1888 }
1876
1889
1877 .archive_icon {
1890 .archive_icon {
1878 background:url("../images/icons/compress.png") no-repeat scroll 3px;
1891 background:url("../images/icons/compress.png") no-repeat scroll 3px;
1879 height:16px;
1892 height:16px;
1880 padding-left:20px;
1893 padding-left:20px;
1881 text-align:left;
1894 text-align:left;
1882 padding-top:1px;
1895 padding-top:1px;
1883 }
1896 }
1884
1897
1885 .action_button {
1898 .action_button {
1886 border:0;
1899 border:0;
1887 display:block;
1900 display:block;
1888 }
1901 }
1889
1902
1890 .action_button:hover {
1903 .action_button:hover {
1891 border:0;
1904 border:0;
1892 text-decoration:underline;
1905 text-decoration:underline;
1893 cursor:pointer;
1906 cursor:pointer;
1894 }
1907 }
1895
1908
1896 #switch_repos {
1909 #switch_repos {
1897 position:absolute;
1910 position:absolute;
1898 height:25px;
1911 height:25px;
1899 z-index:1;
1912 z-index:1;
1900 }
1913 }
1901
1914
1902 #switch_repos select {
1915 #switch_repos select {
1903 min-width:150px;
1916 min-width:150px;
1904 max-height:250px;
1917 max-height:250px;
1905 z-index:1;
1918 z-index:1;
1906 }
1919 }
1907
1920
1908 .breadcrumbs {
1921 .breadcrumbs {
1909 border:medium none;
1922 border:medium none;
1910 color:#FFF;
1923 color:#FFF;
1911 float:left;
1924 float:left;
1912 text-transform:uppercase;
1925 text-transform:uppercase;
1913 font-weight:700;
1926 font-weight:700;
1914 font-size:14px;
1927 font-size:14px;
1915 margin:0;
1928 margin:0;
1916 padding:11px 0 11px 10px;
1929 padding:11px 0 11px 10px;
1917 }
1930 }
1918
1931
1919 .breadcrumbs a {
1932 .breadcrumbs a {
1920 color:#FFF;
1933 color:#FFF;
1921 }
1934 }
1922
1935
1923 .flash_msg ul {
1936 .flash_msg ul {
1924 margin:0;
1937 margin:0;
1925 padding:0 0 10px;
1938 padding:0 0 10px;
1926 }
1939 }
1927
1940
1928 .error_msg {
1941 .error_msg {
1929 background-color:#FFCFCF;
1942 background-color:#FFCFCF;
1930 background-image:url("../../images/icons/error_msg.png");
1943 background-image:url("../../images/icons/error_msg.png");
1931 border:1px solid #FF9595;
1944 border:1px solid #FF9595;
1932 color:#C30;
1945 color:#C30;
1933 }
1946 }
1934
1947
1935 .warning_msg {
1948 .warning_msg {
1936 background-color:#FFFBCC;
1949 background-color:#FFFBCC;
1937 background-image:url("../../images/icons/warning_msg.png");
1950 background-image:url("../../images/icons/warning_msg.png");
1938 border:1px solid #FFF35E;
1951 border:1px solid #FFF35E;
1939 color:#C69E00;
1952 color:#C69E00;
1940 }
1953 }
1941
1954
1942 .success_msg {
1955 .success_msg {
1943 background-color:#D5FFCF;
1956 background-color:#D5FFCF;
1944 background-image:url("../../images/icons/success_msg.png");
1957 background-image:url("../../images/icons/success_msg.png");
1945 border:1px solid #97FF88;
1958 border:1px solid #97FF88;
1946 color:#090;
1959 color:#090;
1947 }
1960 }
1948
1961
1949 .notice_msg {
1962 .notice_msg {
1950 background-color:#DCE3FF;
1963 background-color:#DCE3FF;
1951 background-image:url("../../images/icons/notice_msg.png");
1964 background-image:url("../../images/icons/notice_msg.png");
1952 border:1px solid #93A8FF;
1965 border:1px solid #93A8FF;
1953 color:#556CB5;
1966 color:#556CB5;
1954 }
1967 }
1955
1968
1956 .success_msg,.error_msg,.notice_msg,.warning_msg {
1969 .success_msg,.error_msg,.notice_msg,.warning_msg {
1957 background-position:10px center;
1970 background-position:10px center;
1958 background-repeat:no-repeat;
1971 background-repeat:no-repeat;
1959 font-size:12px;
1972 font-size:12px;
1960 font-weight:700;
1973 font-weight:700;
1961 min-height:14px;
1974 min-height:14px;
1962 line-height:14px;
1975 line-height:14px;
1963 margin-bottom:0;
1976 margin-bottom:0;
1964 margin-top:0;
1977 margin-top:0;
1965 display:block;
1978 display:block;
1966 overflow:auto;
1979 overflow:auto;
1967 padding:6px 10px 6px 40px;
1980 padding:6px 10px 6px 40px;
1968 }
1981 }
1969
1982
1970 #msg_close {
1983 #msg_close {
1971 background:transparent url("../../icons/cross_grey_small.png") no-repeat scroll 0 0;
1984 background:transparent url("../../icons/cross_grey_small.png") no-repeat scroll 0 0;
1972 cursor:pointer;
1985 cursor:pointer;
1973 height:16px;
1986 height:16px;
1974 position:absolute;
1987 position:absolute;
1975 right:5px;
1988 right:5px;
1976 top:5px;
1989 top:5px;
1977 width:16px;
1990 width:16px;
1978 }
1991 }
1979
1992
1980 div#legend_container table,div#legend_choices table {
1993 div#legend_container table,div#legend_choices table {
1981 width:auto !important;
1994 width:auto !important;
1982 }
1995 }
1983
1996
1984 table#permissions_manage {
1997 table#permissions_manage {
1985 width:0 !important;
1998 width:0 !important;
1986 }
1999 }
1987
2000
1988 table#permissions_manage span.private_repo_msg {
2001 table#permissions_manage span.private_repo_msg {
1989 font-size:0.8em;
2002 font-size:0.8em;
1990 opacity:0.6px;
2003 opacity:0.6px;
1991 }
2004 }
1992
2005
1993 table#permissions_manage td.private_repo_msg {
2006 table#permissions_manage td.private_repo_msg {
1994 font-size:0.8em;
2007 font-size:0.8em;
1995 }
2008 }
1996
2009
1997 table#permissions_manage tr#add_perm_input td {
2010 table#permissions_manage tr#add_perm_input td {
1998 vertical-align:middle;
2011 vertical-align:middle;
1999 }
2012 }
2000
2013
2001 div.gravatar {
2014 div.gravatar {
2002 background-color:#FFF;
2015 background-color:#FFF;
2003 border:1px solid #D0D0D0;
2016 border:1px solid #D0D0D0;
2004 float:left;
2017 float:left;
2005 margin-right:0.7em;
2018 margin-right:0.7em;
2006 padding:2px 2px 0;
2019 padding:2px 2px 0;
2007 }
2020 }
2008
2021
2009 #header,#content,#footer {
2022 #header,#content,#footer {
2010 min-width:1024px;
2023 min-width:1024px;
2011 }
2024 }
2012
2025
2013 #content {
2026 #content {
2014 min-height:100%;
2027 min-height:100%;
2015 clear:both;
2028 clear:both;
2016 overflow:hidden;
2029 overflow:hidden;
2017 padding:14px 30px;
2030 padding:14px 30px;
2018 }
2031 }
2019
2032
2020 #content div.box div.title div.search {
2033 #content div.box div.title div.search {
2021 background:url("../../images/title_link.png") no-repeat top left;
2034 background:url("../../images/title_link.png") no-repeat top left;
2022 border-left:1px solid #316293;
2035 border-left:1px solid #316293;
2023 }
2036 }
2024
2037
2025 #content div.box div.title div.search div.input input {
2038 #content div.box div.title div.search div.input input {
2026 border:1px solid #316293;
2039 border:1px solid #316293;
2027 }
2040 }
2028
2041
2029 #content div.box div.title div.search div.button input.ui-state-default {
2042 #content div.box div.title div.search div.button input.ui-state-default {
2030 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
2043 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
2031 border:1px solid #316293;
2044 border:1px solid #316293;
2032 border-left:none;
2045 border-left:none;
2033 color:#FFF;
2046 color:#FFF;
2034 }
2047 }
2035
2048
2036 #content div.box div.title div.search div.button input.ui-state-hover {
2049 #content div.box div.title div.search div.button input.ui-state-hover {
2037 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
2050 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
2038 border:1px solid #316293;
2051 border:1px solid #316293;
2039 border-left:none;
2052 border-left:none;
2040 color:#FFF;
2053 color:#FFF;
2041 }
2054 }
2042
2055
2043 #content div.box div.form div.fields div.field div.highlight .ui-state-default {
2056 #content div.box div.form div.fields div.field div.highlight .ui-state-default {
2044 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
2057 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
2045 border-top:1px solid #5c91a4;
2058 border-top:1px solid #5c91a4;
2046 border-left:1px solid #2a6f89;
2059 border-left:1px solid #2a6f89;
2047 border-right:1px solid #2b7089;
2060 border-right:1px solid #2b7089;
2048 border-bottom:1px solid #1a6480;
2061 border-bottom:1px solid #1a6480;
2049 color:#fff;
2062 color:#fff;
2050 }
2063 }
2051
2064
2052 #content div.box div.form div.fields div.field div.highlight .ui-state-hover {
2065 #content div.box div.form div.fields div.field div.highlight .ui-state-hover {
2053 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
2066 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
2054 border-top:1px solid #78acbf;
2067 border-top:1px solid #78acbf;
2055 border-left:1px solid #34819e;
2068 border-left:1px solid #34819e;
2056 border-right:1px solid #35829f;
2069 border-right:1px solid #35829f;
2057 border-bottom:1px solid #257897;
2070 border-bottom:1px solid #257897;
2058 color:#fff;
2071 color:#fff;
2059 }
2072 }
2060
2073
2061 ins,div.options a:hover {
2074 ins,div.options a:hover {
2062 text-decoration:none;
2075 text-decoration:none;
2063 }
2076 }
2064
2077
2065 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 {
2078 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 {
2066 border:none;
2079 border:none;
2067 }
2080 }
2068
2081
2069 img.icon,.right .merge img {
2082 img.icon,.right .merge img {
2070 vertical-align:bottom;
2083 vertical-align:bottom;
2071 }
2084 }
2072
2085
2073 #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 {
2086 #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 {
2074 float:right;
2087 float:right;
2075 margin:0;
2088 margin:0;
2076 padding:0;
2089 padding:0;
2077 }
2090 }
2078
2091
2079 #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 {
2092 #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 {
2080 float:left;
2093 float:left;
2081 }
2094 }
2082
2095
2083 #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 {
2096 #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 {
2084 display:none;
2097 display:none;
2085 }
2098 }
2086
2099
2087 #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 {
2100 #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 {
2088 display:block;
2101 display:block;
2089 }
2102 }
2090
2103
2091 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2104 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2092 color:#bfe3ff;
2105 color:#bfe3ff;
2093 }
2106 }
2094
2107
2095 #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 {
2108 #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 {
2096 margin:10px 24px 10px 44px;
2109 margin:10px 24px 10px 44px;
2097 }
2110 }
2098
2111
2099 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2112 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2100 clear:both;
2113 clear:both;
2101 overflow:hidden;
2114 overflow:hidden;
2102 margin:0;
2115 margin:0;
2103 padding:0 20px 10px;
2116 padding:0 20px 10px;
2104 }
2117 }
2105
2118
2106 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2119 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2107 clear:both;
2120 clear:both;
2108 overflow:hidden;
2121 overflow:hidden;
2109 margin:0;
2122 margin:0;
2110 padding:0;
2123 padding:0;
2111 }
2124 }
2112
2125
2113 #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 {
2126 #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 {
2114 height:1%;
2127 height:1%;
2115 display:block;
2128 display:block;
2116 color:#363636;
2129 color:#363636;
2117 margin:0;
2130 margin:0;
2118 padding:2px 0 0;
2131 padding:2px 0 0;
2119 }
2132 }
2120
2133
2121 #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 {
2134 #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 {
2122 background:#FBE3E4;
2135 background:#FBE3E4;
2123 border-top:1px solid #e1b2b3;
2136 border-top:1px solid #e1b2b3;
2124 border-left:1px solid #e1b2b3;
2137 border-left:1px solid #e1b2b3;
2125 border-right:1px solid #FBC2C4;
2138 border-right:1px solid #FBC2C4;
2126 border-bottom:1px solid #FBC2C4;
2139 border-bottom:1px solid #FBC2C4;
2127 }
2140 }
2128
2141
2129 #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 {
2142 #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 {
2130 background:#E6EFC2;
2143 background:#E6EFC2;
2131 border-top:1px solid #cebb98;
2144 border-top:1px solid #cebb98;
2132 border-left:1px solid #cebb98;
2145 border-left:1px solid #cebb98;
2133 border-right:1px solid #c6d880;
2146 border-right:1px solid #c6d880;
2134 border-bottom:1px solid #c6d880;
2147 border-bottom:1px solid #c6d880;
2135 }
2148 }
2136
2149
2137 #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 {
2150 #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 {
2138 margin:0;
2151 margin:0;
2139 }
2152 }
2140
2153
2141 #content div.box-left div.form div.fields div.field div.select,#content div.box-left div.form div.fields div.field div.checkboxes,#content div.box-left div.form div.fields div.field div.radios,#content div.box-right div.form div.fields div.field div.select,#content div.box-right div.form div.fields div.field div.checkboxes,#content div.box-right div.form div.fields div.field div.radios{
2154 #content div.box-left div.form div.fields div.field div.select,#content div.box-left div.form div.fields div.field div.checkboxes,#content div.box-left div.form div.fields div.field div.radios,#content div.box-right div.form div.fields div.field div.select,#content div.box-right div.form div.fields div.field div.checkboxes,#content div.box-right div.form div.fields div.field div.radios{
2142 margin:0 0 0 0px !important;
2155 margin:0 0 0 0px !important;
2143 padding:0;
2156 padding:0;
2144 }
2157 }
2145
2158
2146 #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 {
2159 #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 {
2147 margin:0 0 0 200px;
2160 margin:0 0 0 200px;
2148 padding:0;
2161 padding:0;
2149 }
2162 }
2150
2163
2151
2164
2152 #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 {
2165 #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 {
2153 color:#000;
2166 color:#000;
2154 text-decoration:none;
2167 text-decoration:none;
2155 }
2168 }
2156
2169
2157 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2170 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2158 border:1px solid #666;
2171 border:1px solid #666;
2159 }
2172 }
2160
2173
2161 #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 {
2174 #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 {
2162 clear:both;
2175 clear:both;
2163 overflow:hidden;
2176 overflow:hidden;
2164 margin:0;
2177 margin:0;
2165 padding:8px 0 2px;
2178 padding:8px 0 2px;
2166 }
2179 }
2167
2180
2168 #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 {
2181 #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 {
2169 float:left;
2182 float:left;
2170 margin:0;
2183 margin:0;
2171 }
2184 }
2172
2185
2173 #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 {
2186 #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 {
2174 height:1%;
2187 height:1%;
2175 display:block;
2188 display:block;
2176 float:left;
2189 float:left;
2177 margin:2px 0 0 4px;
2190 margin:2px 0 0 4px;
2178 }
2191 }
2179
2192
2180 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 {
2193 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 {
2181 color:#000;
2194 color:#000;
2182 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2195 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2183 font-size:11px;
2196 font-size:11px;
2184 font-weight:700;
2197 font-weight:700;
2185 margin:0;
2198 margin:0;
2186 }
2199 }
2187
2200
2188 div.form div.fields div.field div.button .ui-state-default,#content div.box div.form div.fields div.buttons input.ui-state-default {
2201 div.form div.fields div.field div.button .ui-state-default,#content div.box div.form div.fields div.buttons input.ui-state-default {
2189 background:#e5e3e3 url("../images/button.png") repeat-x;
2202 background:#e5e3e3 url("../images/button.png") repeat-x;
2190 border-top:1px solid #DDD;
2203 border-top:1px solid #DDD;
2191 border-left:1px solid #c6c6c6;
2204 border-left:1px solid #c6c6c6;
2192 border-right:1px solid #DDD;
2205 border-right:1px solid #DDD;
2193 border-bottom:1px solid #c6c6c6;
2206 border-bottom:1px solid #c6c6c6;
2194 color:#515151;
2207 color:#515151;
2195 outline:none;
2208 outline:none;
2196 margin:0;
2209 margin:0;
2197 padding:6px 12px;
2210 padding:6px 12px;
2198 }
2211 }
2199
2212
2200 div.form div.fields div.field div.button .ui-state-hover,#content div.box div.form div.fields div.buttons input.ui-state-hover {
2213 div.form div.fields div.field div.button .ui-state-hover,#content div.box div.form div.fields div.buttons input.ui-state-hover {
2201 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2214 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2202 border-top:1px solid #ccc;
2215 border-top:1px solid #ccc;
2203 border-left:1px solid #bebebe;
2216 border-left:1px solid #bebebe;
2204 border-right:1px solid #b1b1b1;
2217 border-right:1px solid #b1b1b1;
2205 border-bottom:1px solid #afafaf;
2218 border-bottom:1px solid #afafaf;
2206 color:#515151;
2219 color:#515151;
2207 outline:none;
2220 outline:none;
2208 margin:0;
2221 margin:0;
2209 padding:6px 12px;
2222 padding:6px 12px;
2210 }
2223 }
2211
2224
2212 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2225 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2213 display:inline;
2226 display:inline;
2214 }
2227 }
2215
2228
2216 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2229 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2217 margin:10px 0 0 200px;
2230 margin:10px 0 0 200px;
2218 padding:0;
2231 padding:0;
2219 }
2232 }
2220
2233
2221 #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 {
2234 #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 {
2222 margin:10px 0 0;
2235 margin:10px 0 0;
2223 }
2236 }
2224
2237
2225 #content div.box table td.user,#content div.box table td.address {
2238 #content div.box table td.user,#content div.box table td.address {
2226 width:10%;
2239 width:10%;
2227 text-align:center;
2240 text-align:center;
2228 }
2241 }
2229
2242
2230 #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 {
2243 #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 {
2231 text-align:right;
2244 text-align:right;
2232 margin:6px 0 0;
2245 margin:6px 0 0;
2233 padding:0;
2246 padding:0;
2234 }
2247 }
2235
2248
2236 #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 {
2249 #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 {
2237 background:#e5e3e3 url("../images/button.png") repeat-x;
2250 background:#e5e3e3 url("../images/button.png") repeat-x;
2238 border-top:1px solid #DDD;
2251 border-top:1px solid #DDD;
2239 border-left:1px solid #c6c6c6;
2252 border-left:1px solid #c6c6c6;
2240 border-right:1px solid #DDD;
2253 border-right:1px solid #DDD;
2241 border-bottom:1px solid #c6c6c6;
2254 border-bottom:1px solid #c6c6c6;
2242 color:#515151;
2255 color:#515151;
2243 margin:0;
2256 margin:0;
2244 padding:6px 12px;
2257 padding:6px 12px;
2245 }
2258 }
2246
2259
2247 #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 {
2260 #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 {
2248 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2261 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2249 border-top:1px solid #ccc;
2262 border-top:1px solid #ccc;
2250 border-left:1px solid #bebebe;
2263 border-left:1px solid #bebebe;
2251 border-right:1px solid #b1b1b1;
2264 border-right:1px solid #b1b1b1;
2252 border-bottom:1px solid #afafaf;
2265 border-bottom:1px solid #afafaf;
2253 color:#515151;
2266 color:#515151;
2254 margin:0;
2267 margin:0;
2255 padding:6px 12px;
2268 padding:6px 12px;
2256 }
2269 }
2257
2270
2258 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2271 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2259 text-align:left;
2272 text-align:left;
2260 float:left;
2273 float:left;
2261 margin:0;
2274 margin:0;
2262 padding:0;
2275 padding:0;
2263 }
2276 }
2264
2277
2265 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2278 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2266 height:1%;
2279 height:1%;
2267 display:block;
2280 display:block;
2268 float:left;
2281 float:left;
2269 background:#ebebeb url("../images/pager.png") repeat-x;
2282 background:#ebebeb url("../images/pager.png") repeat-x;
2270 border-top:1px solid #dedede;
2283 border-top:1px solid #dedede;
2271 border-left:1px solid #cfcfcf;
2284 border-left:1px solid #cfcfcf;
2272 border-right:1px solid #c4c4c4;
2285 border-right:1px solid #c4c4c4;
2273 border-bottom:1px solid #c4c4c4;
2286 border-bottom:1px solid #c4c4c4;
2274 color:#4A4A4A;
2287 color:#4A4A4A;
2275 font-weight:700;
2288 font-weight:700;
2276 margin:0;
2289 margin:0;
2277 padding:6px 8px;
2290 padding:6px 8px;
2278 }
2291 }
2279
2292
2280 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2293 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2281 color:#B4B4B4;
2294 color:#B4B4B4;
2282 padding:6px;
2295 padding:6px;
2283 }
2296 }
2284
2297
2285 #login,#register {
2298 #login,#register {
2286 width:520px;
2299 width:520px;
2287 margin:10% auto 0;
2300 margin:10% auto 0;
2288 padding:0;
2301 padding:0;
2289 }
2302 }
2290
2303
2291 #login div.color,#register div.color {
2304 #login div.color,#register div.color {
2292 clear:both;
2305 clear:both;
2293 overflow:hidden;
2306 overflow:hidden;
2294 background:#FFF;
2307 background:#FFF;
2295 margin:10px auto 0;
2308 margin:10px auto 0;
2296 padding:3px 3px 3px 0;
2309 padding:3px 3px 3px 0;
2297 }
2310 }
2298
2311
2299 #login div.color a,#register div.color a {
2312 #login div.color a,#register div.color a {
2300 width:20px;
2313 width:20px;
2301 height:20px;
2314 height:20px;
2302 display:block;
2315 display:block;
2303 float:left;
2316 float:left;
2304 margin:0 0 0 3px;
2317 margin:0 0 0 3px;
2305 padding:0;
2318 padding:0;
2306 }
2319 }
2307
2320
2308 #login div.title h5,#register div.title h5 {
2321 #login div.title h5,#register div.title h5 {
2309 color:#fff;
2322 color:#fff;
2310 margin:10px;
2323 margin:10px;
2311 padding:0;
2324 padding:0;
2312 }
2325 }
2313
2326
2314 #login div.form div.fields div.field,#register div.form div.fields div.field {
2327 #login div.form div.fields div.field,#register div.form div.fields div.field {
2315 clear:both;
2328 clear:both;
2316 overflow:hidden;
2329 overflow:hidden;
2317 margin:0;
2330 margin:0;
2318 padding:0 0 10px;
2331 padding:0 0 10px;
2319 }
2332 }
2320
2333
2321 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2334 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2322 height:1%;
2335 height:1%;
2323 display:block;
2336 display:block;
2324 color:red;
2337 color:red;
2325 margin:8px 0 0;
2338 margin:8px 0 0;
2326 padding:0;
2339 padding:0;
2327 max-width: 320px;
2340 max-width: 320px;
2328 }
2341 }
2329
2342
2330 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2343 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2331 color:#000;
2344 color:#000;
2332 font-weight:700;
2345 font-weight:700;
2333 }
2346 }
2334
2347
2335 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2348 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2336 float:left;
2349 float:left;
2337 margin:0;
2350 margin:0;
2338 padding:0;
2351 padding:0;
2339 }
2352 }
2340
2353
2341 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2354 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2342 margin:0 0 0 184px;
2355 margin:0 0 0 184px;
2343 padding:0;
2356 padding:0;
2344 }
2357 }
2345
2358
2346 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2359 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2347 color:#565656;
2360 color:#565656;
2348 font-weight:700;
2361 font-weight:700;
2349 }
2362 }
2350
2363
2351 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2364 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2352 color:#000;
2365 color:#000;
2353 font-size:1em;
2366 font-size:1em;
2354 font-weight:700;
2367 font-weight:700;
2355 font-family:Verdana, Helvetica, Sans-Serif;
2368 font-family:Verdana, Helvetica, Sans-Serif;
2356 margin:0;
2369 margin:0;
2357 }
2370 }
2358
2371
2359 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2372 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2360 width:600px;
2373 width:600px;
2361 }
2374 }
2362
2375
2363 #changeset_content .container .left,#graph_content .container .left {
2376 #changeset_content .container .left,#graph_content .container .left {
2364 float:left;
2377 float:left;
2365 width:70%;
2378 width:70%;
2366 padding-left:5px;
2379 padding-left:5px;
2367 }
2380 }
2368
2381
2369 #changeset_content .container .left .date,.ac .match {
2382 #changeset_content .container .left .date,.ac .match {
2370 font-weight:700;
2383 font-weight:700;
2371 padding-top: 5px;
2384 padding-top: 5px;
2372 padding-bottom:5px;
2385 padding-bottom:5px;
2373 }
2386 }
2374
2387
2375 div#legend_container table td,div#legend_choices table td {
2388 div#legend_container table td,div#legend_choices table td {
2376 border:none !important;
2389 border:none !important;
2377 height:20px !important;
2390 height:20px !important;
2378 padding:0 !important;
2391 padding:0 !important;
2379 }
2392 }
2380
2393
2381 #q_filter{
2394 #q_filter{
2382 border:0 none;
2395 border:0 none;
2383 color:#AAAAAA;
2396 color:#AAAAAA;
2384 margin-bottom:-4px;
2397 margin-bottom:-4px;
2385 margin-top:-4px;
2398 margin-top:-4px;
2386 padding-left:3px;
2399 padding-left:3px;
2387 }
2400 }
2388
2401
@@ -1,354 +1,362 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" id="mainhtml">
3 <html xmlns="http://www.w3.org/1999/xhtml" id="mainhtml">
4 <head>
4 <head>
5 <title>${next.title()}</title>
5 <title>${next.title()}</title>
6 <link rel="icon" href="/images/icons/database_gear.png" type="image/png" />
6 <link rel="icon" href="/images/icons/database_gear.png" type="image/png" />
7 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8 <meta name="robots" content="index, nofollow"/>
8 <meta name="robots" content="index, nofollow"/>
9 <!-- stylesheets -->
9 <!-- stylesheets -->
10 ${self.css()}
10 ${self.css()}
11 <!-- scripts -->
11 <!-- scripts -->
12 ${self.js()}
12 ${self.js()}
13 </head>
13 </head>
14 <body>
14 <body>
15 <!-- header -->
15 <!-- header -->
16 <div id="header">
16 <div id="header">
17 <!-- user -->
17 <!-- user -->
18 <ul id="logged-user">
18 <ul id="logged-user">
19 %if c.rhodecode_user.username == 'default':
20 <li class="first">
21 <div class="account">
22 ## ${h.link_to('%s %s'%(c.rhodecode_user.name,c.rhodecode_user.lastname),h.url('#'))}<br/>
23 ## ${h.link_to(c.rhodecode_user.username,h.url('#'))}
24 </div>
25 </li>
26 <li class="last highlight">${h.link_to(u'Login',h.url('login_home'))}</li>
27 %else:
28 <li class="first">
19 <li class="first">
29 <div class="gravatar">
20 <div class="gravatar">
30 <img alt="gravatar" src="${h.gravatar_url(c.rhodecode_user.email,24)}" />
21 <img alt="gravatar" src="${h.gravatar_url(c.rhodecode_user.email,20)}" />
31 </div>
22 </div>
32 <div class="account">
23 <div class="account">
33 ${h.link_to('%s %s'%(c.rhodecode_user.name,c.rhodecode_user.lastname),h.url('admin_settings_my_account'))}<br/>
24 %if c.rhodecode_user.username == 'default':
25 ##${h.link_to('%s %s'%(c.rhodecode_user.name,c.rhodecode_user.lastname),h.url('register'))}<br/>
26 ${h.link_to('anonymous',h.url('register'))}
27 %else:
28 ##${h.link_to('%s %s'%(c.rhodecode_user.name,c.rhodecode_user.lastname),h.url('admin_settings_my_account'))}<br/>
34 ${h.link_to(c.rhodecode_user.username,h.url('admin_settings_my_account'))}
29 ${h.link_to(c.rhodecode_user.username,h.url('admin_settings_my_account'))}
30 %endif
35 </div>
31 </div>
36 </li>
32 </li>
37 <li class="last highlight">${h.link_to(u'Logout',h.url('logout_home'))}</li>
33 <li>
38 %endif
34 <a href="${h.url('home')}">${_('Home')}</a>
35 </li>
36 <li>
37 <a href="${h.url('journal')}">${_('Journal')}</a>
38 ##(${c.unread_journal})</a>
39 </li>
40 %if c.rhodecode_user.username == 'default':
41 <li class="last highlight">${h.link_to(u'Login',h.url('login_home'))}</li>
42 %else:
43 <li class="last highlight">${h.link_to(u'Log Out',h.url('logout_home'))}</li>
44 %endif
45
46
39 </ul>
47 </ul>
40 <!-- end user -->
48 <!-- end user -->
41 <div id="header-inner" class="title top-left-rounded-corner top-right-rounded-corner">
49 <div id="header-inner" class="title top-left-rounded-corner top-right-rounded-corner">
42 <!-- logo -->
50 <!-- logo -->
43 <div id="logo">
51 <div id="logo">
44 <h1><a href="${h.url('home')}">${c.rhodecode_name}</a></h1>
52 <h1><a href="${h.url('home')}">${c.rhodecode_name}</a></h1>
45 </div>
53 </div>
46 <!-- end logo -->
54 <!-- end logo -->
47 <!-- menu -->
55 <!-- menu -->
48 ${self.page_nav()}
56 ${self.page_nav()}
49 <!-- quick -->
57 <!-- quick -->
50 </div>
58 </div>
51 </div>
59 </div>
52 <!-- end header -->
60 <!-- end header -->
53
61
54 <!-- CONTENT -->
62 <!-- CONTENT -->
55 <div id="content">
63 <div id="content">
56 <div class="flash_msg">
64 <div class="flash_msg">
57 <% messages = h.flash.pop_messages() %>
65 <% messages = h.flash.pop_messages() %>
58 % if messages:
66 % if messages:
59 <ul id="flash-messages">
67 <ul id="flash-messages">
60 % for message in messages:
68 % for message in messages:
61 <li class="${message.category}_msg">${message}</li>
69 <li class="${message.category}_msg">${message}</li>
62 % endfor
70 % endfor
63 </ul>
71 </ul>
64 % endif
72 % endif
65 </div>
73 </div>
66 <div id="main">
74 <div id="main">
67 ${next.main()}
75 ${next.main()}
68 </div>
76 </div>
69 </div>
77 </div>
70 <!-- END CONTENT -->
78 <!-- END CONTENT -->
71
79
72 <!-- footer -->
80 <!-- footer -->
73 <div id="footer">
81 <div id="footer">
74 <div id="footer-inner" class="title bottom-left-rounded-corner bottom-right-rounded-corner">
82 <div id="footer-inner" class="title bottom-left-rounded-corner bottom-right-rounded-corner">
75 <div>
83 <div>
76 <p class="footer-link">${h.link_to(_('Submit a bug'),h.url('bugtracker'))}</p>
84 <p class="footer-link">${h.link_to(_('Submit a bug'),h.url('bugtracker'))}</p>
77 <p class="footer-link">${h.link_to(_('GPL license'),h.url('gpl_license'))}</p>
85 <p class="footer-link">${h.link_to(_('GPL license'),h.url('gpl_license'))}</p>
78 <p>RhodeCode ${c.rhodecode_version} &copy; 2010 by Marcin Kuzminski</p>
86 <p>RhodeCode ${c.rhodecode_version} &copy; 2010 by Marcin Kuzminski</p>
79 </div>
87 </div>
80 </div>
88 </div>
81 <script type="text/javascript">${h.tooltip.activate()}</script>
89 <script type="text/javascript">${h.tooltip.activate()}</script>
82 </div>
90 </div>
83 <!-- end footer -->
91 <!-- end footer -->
84 </body>
92 </body>
85
93
86 </html>
94 </html>
87
95
88 ### MAKO DEFS ###
96 ### MAKO DEFS ###
89 <%def name="page_nav()">
97 <%def name="page_nav()">
90 ${self.menu()}
98 ${self.menu()}
91 </%def>
99 </%def>
92
100
93 <%def name="menu(current=None)">
101 <%def name="menu(current=None)">
94 <%
102 <%
95 def is_current(selected):
103 def is_current(selected):
96 if selected == current:
104 if selected == current:
97 return h.literal('class="current"')
105 return h.literal('class="current"')
98 %>
106 %>
99 %if current not in ['home','admin']:
107 %if current not in ['home','admin']:
100 ##REGULAR MENU
108 ##REGULAR MENU
101 <ul id="quick">
109 <ul id="quick">
102 <!-- repo switcher -->
110 <!-- repo switcher -->
103 <li>
111 <li>
104 <a id="repo_switcher" title="${_('Switch repository')}" href="#">
112 <a id="repo_switcher" title="${_('Switch repository')}" href="#">
105 <span class="icon">
113 <span class="icon">
106 <img src="/images/icons/database.png" alt="${_('Products')}" />
114 <img src="/images/icons/database.png" alt="${_('Products')}" />
107 </span>
115 </span>
108 <span>&darr;</span>
116 <span>&darr;</span>
109 </a>
117 </a>
110 <ul class="repo_switcher">
118 <ul class="repo_switcher">
111 %for repo in c.cached_repo_list:
119 %for repo in c.cached_repo_list:
112
120
113 %if repo['repo'].dbrepo.private:
121 %if repo['repo'].dbrepo.private:
114 <li><img src="/images/icons/lock.png" alt="${_('Private repository')}" class="repo_switcher_type"/>${h.link_to(repo['repo'].name,h.url('summary_home',repo_name=repo['repo'].name),class_="%s" % repo['repo'].dbrepo.repo_type)}</li>
122 <li><img src="/images/icons/lock.png" alt="${_('Private repository')}" class="repo_switcher_type"/>${h.link_to(repo['repo'].name,h.url('summary_home',repo_name=repo['repo'].name),class_="%s" % repo['repo'].dbrepo.repo_type)}</li>
115 %else:
123 %else:
116 <li><img src="/images/icons/lock_open.png" alt="${_('Public repository')}" class="repo_switcher_type" />${h.link_to(repo['repo'].name,h.url('summary_home',repo_name=repo['repo'].name),class_="%s" % repo['repo'].dbrepo.repo_type)}</li>
124 <li><img src="/images/icons/lock_open.png" alt="${_('Public repository')}" class="repo_switcher_type" />${h.link_to(repo['repo'].name,h.url('summary_home',repo_name=repo['repo'].name),class_="%s" % repo['repo'].dbrepo.repo_type)}</li>
117 %endif
125 %endif
118 %endfor
126 %endfor
119 </ul>
127 </ul>
120 </li>
128 </li>
121
129
122 <li ${is_current('summary')}>
130 <li ${is_current('summary')}>
123 <a title="${_('Summary')}" href="${h.url('summary_home',repo_name=c.repo_name)}">
131 <a title="${_('Summary')}" href="${h.url('summary_home',repo_name=c.repo_name)}">
124 <span class="icon">
132 <span class="icon">
125 <img src="/images/icons/clipboard_16.png" alt="${_('Summary')}" />
133 <img src="/images/icons/clipboard_16.png" alt="${_('Summary')}" />
126 </span>
134 </span>
127 <span>${_('Summary')}</span>
135 <span>${_('Summary')}</span>
128 </a>
136 </a>
129 </li>
137 </li>
130 ##<li ${is_current('shortlog')}>
138 ##<li ${is_current('shortlog')}>
131 ## <a title="${_('Shortlog')}" href="${h.url('shortlog_home',repo_name=c.repo_name)}">
139 ## <a title="${_('Shortlog')}" href="${h.url('shortlog_home',repo_name=c.repo_name)}">
132 ## <span class="icon">
140 ## <span class="icon">
133 ## <img src="/images/icons/application_view_list.png" alt="${_('Shortlog')}" />
141 ## <img src="/images/icons/application_view_list.png" alt="${_('Shortlog')}" />
134 ## </span>
142 ## </span>
135 ## <span>${_('Shortlog')}</span>
143 ## <span>${_('Shortlog')}</span>
136 ## </a>
144 ## </a>
137 ##</li>
145 ##</li>
138 <li ${is_current('changelog')}>
146 <li ${is_current('changelog')}>
139 <a title="${_('Changelog')}" href="${h.url('changelog_home',repo_name=c.repo_name)}">
147 <a title="${_('Changelog')}" href="${h.url('changelog_home',repo_name=c.repo_name)}">
140 <span class="icon">
148 <span class="icon">
141 <img src="/images/icons/time.png" alt="${_('Changelog')}" />
149 <img src="/images/icons/time.png" alt="${_('Changelog')}" />
142 </span>
150 </span>
143 <span>${_('Changelog')}</span>
151 <span>${_('Changelog')}</span>
144 </a>
152 </a>
145 </li>
153 </li>
146
154
147 <li ${is_current('switch_to')}>
155 <li ${is_current('switch_to')}>
148 <a title="${_('Switch to')}" href="#">
156 <a title="${_('Switch to')}" href="#">
149 <span class="icon">
157 <span class="icon">
150 <img src="/images/icons/arrow_switch.png" alt="${_('Switch to')}" />
158 <img src="/images/icons/arrow_switch.png" alt="${_('Switch to')}" />
151 </span>
159 </span>
152 <span>${_('Switch to')}</span>
160 <span>${_('Switch to')}</span>
153 </a>
161 </a>
154 <ul>
162 <ul>
155 <li>
163 <li>
156 ${h.link_to('%s (%s)' % (_('branches'),len(c.repository_branches.values()),),h.url('branches_home',repo_name=c.repo_name),class_='branches childs')}
164 ${h.link_to('%s (%s)' % (_('branches'),len(c.repository_branches.values()),),h.url('branches_home',repo_name=c.repo_name),class_='branches childs')}
157 <ul>
165 <ul>
158 %if c.repository_branches.values():
166 %if c.repository_branches.values():
159 %for cnt,branch in enumerate(c.repository_branches.items()):
167 %for cnt,branch in enumerate(c.repository_branches.items()):
160 <li>${h.link_to('%s - %s' % (branch[0],h.short_id(branch[1])),h.url('files_home',repo_name=c.repo_name,revision=branch[1]))}</li>
168 <li>${h.link_to('%s - %s' % (branch[0],h.short_id(branch[1])),h.url('files_home',repo_name=c.repo_name,revision=branch[1]))}</li>
161 %endfor
169 %endfor
162 %else:
170 %else:
163 <li>${h.link_to(_('There are no branches yet'),'#')}</li>
171 <li>${h.link_to(_('There are no branches yet'),'#')}</li>
164 %endif
172 %endif
165 </ul>
173 </ul>
166 </li>
174 </li>
167 <li>
175 <li>
168 ${h.link_to('%s (%s)' % (_('tags'),len(c.repository_tags.values()),),h.url('tags_home',repo_name=c.repo_name),class_='tags childs')}
176 ${h.link_to('%s (%s)' % (_('tags'),len(c.repository_tags.values()),),h.url('tags_home',repo_name=c.repo_name),class_='tags childs')}
169 <ul>
177 <ul>
170 %if c.repository_tags.values():
178 %if c.repository_tags.values():
171 %for cnt,tag in enumerate(c.repository_tags.items()):
179 %for cnt,tag in enumerate(c.repository_tags.items()):
172 <li>${h.link_to('%s - %s' % (tag[0],h.short_id(tag[1])),h.url('files_home',repo_name=c.repo_name,revision=tag[1]))}</li>
180 <li>${h.link_to('%s - %s' % (tag[0],h.short_id(tag[1])),h.url('files_home',repo_name=c.repo_name,revision=tag[1]))}</li>
173 %endfor
181 %endfor
174 %else:
182 %else:
175 <li>${h.link_to(_('There are no tags yet'),'#')}</li>
183 <li>${h.link_to(_('There are no tags yet'),'#')}</li>
176 %endif
184 %endif
177 </ul>
185 </ul>
178 </li>
186 </li>
179 </ul>
187 </ul>
180 </li>
188 </li>
181 <li ${is_current('files')}>
189 <li ${is_current('files')}>
182 <a title="${_('Files')}" href="${h.url('files_home',repo_name=c.repo_name)}">
190 <a title="${_('Files')}" href="${h.url('files_home',repo_name=c.repo_name)}">
183 <span class="icon">
191 <span class="icon">
184 <img src="/images/icons/file.png" alt="${_('Files')}" />
192 <img src="/images/icons/file.png" alt="${_('Files')}" />
185 </span>
193 </span>
186 <span>${_('Files')}</span>
194 <span>${_('Files')}</span>
187 </a>
195 </a>
188 </li>
196 </li>
189
197
190 <li ${is_current('options')}>
198 <li ${is_current('options')}>
191 <a title="${_('Options')}" href="#">
199 <a title="${_('Options')}" href="#">
192 <span class="icon">
200 <span class="icon">
193 <img src="/images/icons/table_gear.png" alt="${_('Admin')}" />
201 <img src="/images/icons/table_gear.png" alt="${_('Admin')}" />
194 </span>
202 </span>
195 <span>${_('Options')}</span>
203 <span>${_('Options')}</span>
196 </a>
204 </a>
197 <ul>
205 <ul>
198 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
206 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
199 <li>${h.link_to(_('settings'),h.url('repo_settings_home',repo_name=c.repo_name),class_='settings')}</li>
207 <li>${h.link_to(_('settings'),h.url('repo_settings_home',repo_name=c.repo_name),class_='settings')}</li>
200 <li>${h.link_to(_('fork'),h.url('repo_fork_home',repo_name=c.repo_name),class_='fork')}</li>
208 <li>${h.link_to(_('fork'),h.url('repo_fork_home',repo_name=c.repo_name),class_='fork')}</li>
201 %endif
209 %endif
202 <li>${h.link_to(_('search'),h.url('search_repo',search_repo=c.repo_name),class_='search')}</li>
210 <li>${h.link_to(_('search'),h.url('search_repo',search_repo=c.repo_name),class_='search')}</li>
203
211
204 %if h.HasPermissionAll('hg.admin')('access admin main page'):
212 %if h.HasPermissionAll('hg.admin')('access admin main page'):
205 <li>
213 <li>
206 ${h.link_to(_('admin'),h.url('admin_home'),class_='admin')}
214 ${h.link_to(_('admin'),h.url('admin_home'),class_='admin')}
207 <%def name="admin_menu()">
215 <%def name="admin_menu()">
208 <ul>
216 <ul>
209 <li>${h.link_to(_('journal'),h.url('admin_home'),class_='journal')}</li>
217 <li>${h.link_to(_('journal'),h.url('admin_home'),class_='journal')}</li>
210 <li>${h.link_to(_('repositories'),h.url('repos'),class_='repos')}</li>
218 <li>${h.link_to(_('repositories'),h.url('repos'),class_='repos')}</li>
211 <li>${h.link_to(_('users'),h.url('users'),class_='users')}</li>
219 <li>${h.link_to(_('users'),h.url('users'),class_='users')}</li>
212 <li>${h.link_to(_('permissions'),h.url('edit_permission',id='default'),class_='permissions')}</li>
220 <li>${h.link_to(_('permissions'),h.url('edit_permission',id='default'),class_='permissions')}</li>
213 <li>${h.link_to(_('ldap'),h.url('ldap_home'),class_='ldap')}</li>
221 <li>${h.link_to(_('ldap'),h.url('ldap_home'),class_='ldap')}</li>
214 <li class="last">${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li>
222 <li class="last">${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li>
215 </ul>
223 </ul>
216 </%def>
224 </%def>
217
225
218 ${admin_menu()}
226 ${admin_menu()}
219 </li>
227 </li>
220 %endif
228 %endif
221
229
222 </ul>
230 </ul>
223 </li>
231 </li>
224
232
225 <li>
233 <li>
226 <a title="${_('Followers')}" href="#">
234 <a title="${_('Followers')}" href="#">
227 <span class="icon_short">
235 <span class="icon_short">
228 <img src="/images/icons/heart.png" alt="${_('Followers')}" />
236 <img src="/images/icons/heart.png" alt="${_('Followers')}" />
229 </span>
237 </span>
230 <span class="short">${c.repository_followers}</span>
238 <span class="short">${c.repository_followers}</span>
231 </a>
239 </a>
232 </li>
240 </li>
233 <li>
241 <li>
234 <a title="${_('Forks')}" href="#">
242 <a title="${_('Forks')}" href="#">
235 <span class="icon_short">
243 <span class="icon_short">
236 <img src="/images/icons/arrow_divide.png" alt="${_('Forks')}" />
244 <img src="/images/icons/arrow_divide.png" alt="${_('Forks')}" />
237 </span>
245 </span>
238 <span class="short">${c.repository_forks}</span>
246 <span class="short">${c.repository_forks}</span>
239 </a>
247 </a>
240 </li>
248 </li>
241
249
242
250
243
251
244 </ul>
252 </ul>
245 %else:
253 %else:
246 ##ROOT MENU
254 ##ROOT MENU
247 <ul id="quick">
255 <ul id="quick">
248 <li>
256 <li>
249 <a title="${_('Home')}" href="${h.url('home')}">
257 <a title="${_('Home')}" href="${h.url('home')}">
250 <span class="icon">
258 <span class="icon">
251 <img src="/images/icons/home_16.png" alt="${_('Home')}" />
259 <img src="/images/icons/home_16.png" alt="${_('Home')}" />
252 </span>
260 </span>
253 <span>${_('Home')}</span>
261 <span>${_('Home')}</span>
254 </a>
262 </a>
255 </li>
263 </li>
256
264
257 <li>
265 <li>
258 <a title="${_('Journal')}" href="${h.url('journal')}">
266 <a title="${_('Journal')}" href="${h.url('journal')}">
259 <span class="icon">
267 <span class="icon">
260 <img src="/images/icons/book.png" alt="${_('Journal')}" />
268 <img src="/images/icons/book.png" alt="${_('Journal')}" />
261 </span>
269 </span>
262 <span>${_('Journal')}</span>
270 <span>${_('Journal')}</span>
263 </a>
271 </a>
264 </li>
272 </li>
265
273
266 <li>
274 <li>
267 <a title="${_('Search')}" href="${h.url('search')}">
275 <a title="${_('Search')}" href="${h.url('search')}">
268 <span class="icon">
276 <span class="icon">
269 <img src="/images/icons/search_16.png" alt="${_('Search')}" />
277 <img src="/images/icons/search_16.png" alt="${_('Search')}" />
270 </span>
278 </span>
271 <span>${_('Search')}</span>
279 <span>${_('Search')}</span>
272 </a>
280 </a>
273 </li>
281 </li>
274
282
275 %if h.HasPermissionAll('hg.admin')('access admin main page'):
283 %if h.HasPermissionAll('hg.admin')('access admin main page'):
276 <li ${is_current('admin')}>
284 <li ${is_current('admin')}>
277 <a title="${_('Admin')}" href="${h.url('admin_home')}">
285 <a title="${_('Admin')}" href="${h.url('admin_home')}">
278 <span class="icon">
286 <span class="icon">
279 <img src="/images/icons/cog_edit.png" alt="${_('Admin')}" />
287 <img src="/images/icons/cog_edit.png" alt="${_('Admin')}" />
280 </span>
288 </span>
281 <span>${_('Admin')}</span>
289 <span>${_('Admin')}</span>
282 </a>
290 </a>
283 ${admin_menu()}
291 ${admin_menu()}
284 </li>
292 </li>
285 %endif
293 %endif
286 </ul>
294 </ul>
287 %endif
295 %endif
288 </%def>
296 </%def>
289
297
290
298
291 <%def name="css()">
299 <%def name="css()">
292 <link rel="stylesheet" type="text/css" href="/css/style.css" media="screen" />
300 <link rel="stylesheet" type="text/css" href="/css/style.css" media="screen" />
293 <link rel="stylesheet" type="text/css" href="/css/pygments.css" />
301 <link rel="stylesheet" type="text/css" href="/css/pygments.css" />
294 <link rel="stylesheet" type="text/css" href="/css/diff.css" />
302 <link rel="stylesheet" type="text/css" href="/css/diff.css" />
295 </%def>
303 </%def>
296
304
297 <%def name="js()">
305 <%def name="js()">
298 ##<script type="text/javascript" src="/js/yui/utilities/utilities.js"></script>
306 ##<script type="text/javascript" src="/js/yui/utilities/utilities.js"></script>
299 ##<script type="text/javascript" src="/js/yui/container/container.js"></script>
307 ##<script type="text/javascript" src="/js/yui/container/container.js"></script>
300 ##<script type="text/javascript" src="/js/yui/datasource/datasource.js"></script>
308 ##<script type="text/javascript" src="/js/yui/datasource/datasource.js"></script>
301 ##<script type="text/javascript" src="/js/yui/autocomplete/autocomplete.js"></script>
309 ##<script type="text/javascript" src="/js/yui/autocomplete/autocomplete.js"></script>
302 ##<script type="text/javascript" src="/js/yui/selector/selector-min.js"></script>
310 ##<script type="text/javascript" src="/js/yui/selector/selector-min.js"></script>
303
311
304 <script type="text/javascript" src="/js/yui2a.js"></script>
312 <script type="text/javascript" src="/js/yui2a.js"></script>
305 <!--[if IE]><script language="javascript" type="text/javascript" src="/js/excanvas.min.js"></script><![endif]-->
313 <!--[if IE]><script language="javascript" type="text/javascript" src="/js/excanvas.min.js"></script><![endif]-->
306 <script type="text/javascript" src="/js/yui.flot.js"></script>
314 <script type="text/javascript" src="/js/yui.flot.js"></script>
307
315
308 <script type="text/javascript">
316 <script type="text/javascript">
309 var base_url ='/_admin/toggle_following';
317 var base_url ='/_admin/toggle_following';
310 var YUC = YAHOO.util.Connect;
318 var YUC = YAHOO.util.Connect;
311 var YUD = YAHOO.util.Dom;
319 var YUD = YAHOO.util.Dom;
312 var YUE = YAHOO.util.Event;
320 var YUE = YAHOO.util.Event;
313
321
314 function onSuccess(){
322 function onSuccess(){
315
323
316 var f = YUD.get('follow_toggle');
324 var f = YUD.get('follow_toggle');
317 if(f.getAttribute('class')=='follow'){
325 if(f.getAttribute('class')=='follow'){
318 f.setAttribute('class','following');
326 f.setAttribute('class','following');
319 f.setAttribute('title',"${_('Stop following this repository')}");
327 f.setAttribute('title',"${_('Stop following this repository')}");
320 }
328 }
321 else{
329 else{
322 f.setAttribute('class','follow');
330 f.setAttribute('class','follow');
323 f.setAttribute('title',"${_('Start following this repository')}");
331 f.setAttribute('title',"${_('Start following this repository')}");
324 }
332 }
325 }
333 }
326
334
327 function toggleFollowingUser(fallows_user_id,token){
335 function toggleFollowingUser(fallows_user_id,token){
328 args = 'follows_user_id='+fallows_user_id;
336 args = 'follows_user_id='+fallows_user_id;
329 args+= '&auth_token='+token;
337 args+= '&auth_token='+token;
330 YUC.asyncRequest('POST',base_url,{
338 YUC.asyncRequest('POST',base_url,{
331 success:function(o){
339 success:function(o){
332 onSuccess();
340 onSuccess();
333 }
341 }
334 },args); return false;
342 },args); return false;
335 }
343 }
336
344
337 function toggleFollowingRepo(fallows_repo_id,token){
345 function toggleFollowingRepo(fallows_repo_id,token){
338 args = 'follows_repo_id='+fallows_repo_id;
346 args = 'follows_repo_id='+fallows_repo_id;
339 args+= '&auth_token='+token;
347 args+= '&auth_token='+token;
340 YUC.asyncRequest('POST',base_url,{
348 YUC.asyncRequest('POST',base_url,{
341 success:function(o){
349 success:function(o){
342 onSuccess();
350 onSuccess();
343 }
351 }
344 },args); return false;
352 },args); return false;
345 }
353 }
346 </script>
354 </script>
347
355
348 </%def>
356 </%def>
349
357
350 <%def name="breadcrumbs()">
358 <%def name="breadcrumbs()">
351 <div class="breadcrumbs">
359 <div class="breadcrumbs">
352 ${self.breadcrumbs_links()}
360 ${self.breadcrumbs_links()}
353 </div>
361 </div>
354 </%def> No newline at end of file
362 </%def>
General Comments 0
You need to be logged in to leave comments. Login now