##// END OF EJS Templates
fixes for 1.2.1 release
marcink -
r1535:0b8fba8a rhodecode-0.0.1.2.1 default
parent child Browse files
Show More
@@ -1,339 +1,354
1 1 .. _changelog:
2 2
3 3 Changelog
4 4 =========
5 5
6 1.2.1 (**2011-10-08**)
7 ======================
8
9 news
10 ----
11
12
13 fixes
14 -----
15
16 - fixed problems with basic auth and push problems
17 - gui fixes
18 - fixed logger
19
20
6 21 1.2.0 (**2011-10-07**)
7 22 ======================
8 23
9 24
10 25 news
11 26 ----
12 27
13 28 - implemented #47 repository groups
14 29 - implemented #89 Can setup google analytics code from settings menu
15 30 - implemented #91 added nicer looking archive urls with more download options
16 31 like tags, branches
17 32 - implemented #44 into file browsing, and added follow branch option
18 33 - implemented #84 downloads can be enabled/disabled for each repository
19 34 - anonymous repository can be cloned without having to pass default:default
20 35 into clone url
21 36 - fixed #90 whoosh indexer can index chooses repositories passed in command
22 37 line
23 38 - extended journal with day aggregates and paging
24 39 - implemented #107 source code lines highlight ranges
25 40 - implemented #93 customizable changelog on combined revision ranges -
26 41 equivalent of githubs compare view
27 42 - implemented #108 extended and more powerful LDAP configuration
28 43 - implemented #56 users groups
29 44 - major code rewrites optimized codes for speed and memory usage
30 45 - raw and diff downloads are now in git format
31 46 - setup command checks for write access to given path
32 47 - fixed many issues with international characters and unicode. It uses utf8
33 48 decode with replace to provide less errors even with non utf8 encoded strings
34 49 - #125 added API KEY access to feeds
35 50 - #109 Repository can be created from external Mercurial link (aka. remote
36 51 repository, and manually updated (via pull) from admin panel
37 52 - beta git support - push/pull server + basic view for git repos
38 53 - added followers page and forks page
39 54 - server side file creation (with binary file upload interface)
40 55 and edition with commits powered by codemirror
41 56 - #111 file browser file finder, quick lookup files on whole file tree
42 57 - added quick login sliding menu into main page
43 58 - changelog uses lazy loading of affected files details, in some scenarios
44 59 this can improve speed of changelog page dramatically especially for
45 60 larger repositories.
46 61 - implements #214 added support for downloading subrepos in download menu.
47 62 - Added basic API for direct operations on rhodecode via JSON
48 63 - Implemented advanced hook management
49 64
50 65 fixes
51 66 -----
52 67
53 68 - fixed file browser bug, when switching into given form revision the url was
54 69 not changing
55 70 - fixed propagation to error controller on simplehg and simplegit middlewares
56 71 - fixed error when trying to make a download on empty repository
57 72 - fixed problem with '[' chars in commit messages in journal
58 73 - fixed #99 Unicode errors, on file node paths with non utf-8 characters
59 74 - journal fork fixes
60 75 - removed issue with space inside renamed repository after deletion
61 76 - fixed strange issue on formencode imports
62 77 - fixed #126 Deleting repository on Windows, rename used incompatible chars.
63 78 - #150 fixes for errors on repositories mapped in db but corrupted in
64 79 filesystem
65 80 - fixed problem with ascendant characters in realm #181
66 81 - fixed problem with sqlite file based database connection pool
67 82 - whoosh indexer and code stats share the same dynamic extensions map
68 83 - fixes #188 - relationship delete of repo_to_perm entry on user removal
69 84 - fixes issue #189 Trending source files shows "show more" when no more exist
70 85 - fixes issue #197 Relative paths for pidlocks
71 86 - fixes issue #198 password will require only 3 chars now for login form
72 87 - fixes issue #199 wrong redirection for non admin users after creating a repository
73 88 - fixes issues #202, bad db constraint made impossible to attach same group
74 89 more than one time. Affects only mysql/postgres
75 90 - fixes #218 os.kill patch for windows was missing sig param
76 91 - improved rendering of dag (they are not trimmed anymore when number of
77 92 heads exceeds 5)
78 93
79 94 1.1.8 (**2011-04-12**)
80 95 ======================
81 96
82 97 news
83 98 ----
84 99
85 100 - improved windows support
86 101
87 102 fixes
88 103 -----
89 104
90 105 - fixed #140 freeze of python dateutil library, since new version is python2.x
91 106 incompatible
92 107 - setup-app will check for write permission in given path
93 108 - cleaned up license info issue #149
94 109 - fixes for issues #137,#116 and problems with unicode and accented characters.
95 110 - fixes crashes on gravatar, when passed in email as unicode
96 111 - fixed tooltip flickering problems
97 112 - fixed came_from redirection on windows
98 113 - fixed logging modules, and sql formatters
99 114 - windows fixes for os.kill issue #133
100 115 - fixes path splitting for windows issues #148
101 116 - fixed issue #143 wrong import on migration to 1.1.X
102 117 - fixed problems with displaying binary files, thanks to Thomas Waldmann
103 118 - removed name from archive files since it's breaking ui for long repo names
104 119 - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann
105 120 - fixed compatibility for 1024px displays, and larger dpi settings, thanks to
106 121 Thomas Waldmann
107 122 - fixed issue #166 summary pager was skipping 10 revisions on second page
108 123
109 124
110 125 1.1.7 (**2011-03-23**)
111 126 ======================
112 127
113 128 news
114 129 ----
115 130
116 131 fixes
117 132 -----
118 133
119 134 - fixed (again) #136 installation support for FreeBSD
120 135
121 136
122 137 1.1.6 (**2011-03-21**)
123 138 ======================
124 139
125 140 news
126 141 ----
127 142
128 143 fixes
129 144 -----
130 145
131 146 - fixed #136 installation support for FreeBSD
132 147 - RhodeCode will check for python version during installation
133 148
134 149 1.1.5 (**2011-03-17**)
135 150 ======================
136 151
137 152 news
138 153 ----
139 154
140 155 - basic windows support, by exchanging pybcrypt into sha256 for windows only
141 156 highly inspired by idea of mantis406
142 157
143 158 fixes
144 159 -----
145 160
146 161 - fixed sorting by author in main page
147 162 - fixed crashes with diffs on binary files
148 163 - fixed #131 problem with boolean values for LDAP
149 164 - fixed #122 mysql problems thanks to striker69
150 165 - fixed problem with errors on calling raw/raw_files/annotate functions
151 166 with unknown revisions
152 167 - fixed returned rawfiles attachment names with international character
153 168 - cleaned out docs, big thanks to Jason Harris
154 169
155 170 1.1.4 (**2011-02-19**)
156 171 ======================
157 172
158 173 news
159 174 ----
160 175
161 176 fixes
162 177 -----
163 178
164 179 - fixed formencode import problem on settings page, that caused server crash
165 180 when that page was accessed as first after server start
166 181 - journal fixes
167 182 - fixed option to access repository just by entering http://server/<repo_name>
168 183
169 184 1.1.3 (**2011-02-16**)
170 185 ======================
171 186
172 187 news
173 188 ----
174 189
175 190 - implemented #102 allowing the '.' character in username
176 191 - added option to access repository just by entering http://server/<repo_name>
177 192 - celery task ignores result for better performance
178 193
179 194 fixes
180 195 -----
181 196
182 197 - fixed ehlo command and non auth mail servers on smtp_lib. Thanks to
183 198 apollo13 and Johan Walles
184 199 - small fixes in journal
185 200 - fixed problems with getting setting for celery from .ini files
186 201 - registration, password reset and login boxes share the same title as main
187 202 application now
188 203 - fixed #113: to high permissions to fork repository
189 204 - fixed problem with '[' chars in commit messages in journal
190 205 - removed issue with space inside renamed repository after deletion
191 206 - db transaction fixes when filesystem repository creation failed
192 207 - fixed #106 relation issues on databases different than sqlite
193 208 - fixed static files paths links to use of url() method
194 209
195 210 1.1.2 (**2011-01-12**)
196 211 ======================
197 212
198 213 news
199 214 ----
200 215
201 216
202 217 fixes
203 218 -----
204 219
205 220 - fixes #98 protection against float division of percentage stats
206 221 - fixed graph bug
207 222 - forced webhelpers version since it was making troubles during installation
208 223
209 224 1.1.1 (**2011-01-06**)
210 225 ======================
211 226
212 227 news
213 228 ----
214 229
215 230 - added force https option into ini files for easier https usage (no need to
216 231 set server headers with this options)
217 232 - small css updates
218 233
219 234 fixes
220 235 -----
221 236
222 237 - fixed #96 redirect loop on files view on repositories without changesets
223 238 - fixed #97 unicode string passed into server header in special cases (mod_wsgi)
224 239 and server crashed with errors
225 240 - fixed large tooltips problems on main page
226 241 - fixed #92 whoosh indexer is more error proof
227 242
228 243 1.1.0 (**2010-12-18**)
229 244 ======================
230 245
231 246 news
232 247 ----
233 248
234 249 - rewrite of internals for vcs >=0.1.10
235 250 - uses mercurial 1.7 with dotencode disabled for maintaining compatibility
236 251 with older clients
237 252 - anonymous access, authentication via ldap
238 253 - performance upgrade for cached repos list - each repository has it's own
239 254 cache that's invalidated when needed.
240 255 - performance upgrades on repositories with large amount of commits (20K+)
241 256 - main page quick filter for filtering repositories
242 257 - user dashboards with ability to follow chosen repositories actions
243 258 - sends email to admin on new user registration
244 259 - added cache/statistics reset options into repository settings
245 260 - more detailed action logger (based on hooks) with pushed changesets lists
246 261 and options to disable those hooks from admin panel
247 262 - introduced new enhanced changelog for merges that shows more accurate results
248 263 - new improved and faster code stats (based on pygments lexers mapping tables,
249 264 showing up to 10 trending sources for each repository. Additionally stats
250 265 can be disabled in repository settings.
251 266 - gui optimizations, fixed application width to 1024px
252 267 - added cut off (for large files/changesets) limit into config files
253 268 - whoosh, celeryd, upgrade moved to paster command
254 269 - other than sqlite database backends can be used
255 270
256 271 fixes
257 272 -----
258 273
259 274 - fixes #61 forked repo was showing only after cache expired
260 275 - fixes #76 no confirmation on user deletes
261 276 - fixes #66 Name field misspelled
262 277 - fixes #72 block user removal when he owns repositories
263 278 - fixes #69 added password confirmation fields
264 279 - fixes #87 RhodeCode crashes occasionally on updating repository owner
265 280 - fixes #82 broken annotations on files with more than 1 blank line at the end
266 281 - a lot of fixes and tweaks for file browser
267 282 - fixed detached session issues
268 283 - fixed when user had no repos he would see all repos listed in my account
269 284 - fixed ui() instance bug when global hgrc settings was loaded for server
270 285 instance and all hgrc options were merged with our db ui() object
271 286 - numerous small bugfixes
272 287
273 288 (special thanks for TkSoh for detailed feedback)
274 289
275 290
276 291 1.0.2 (**2010-11-12**)
277 292 ======================
278 293
279 294 news
280 295 ----
281 296
282 297 - tested under python2.7
283 298 - bumped sqlalchemy and celery versions
284 299
285 300 fixes
286 301 -----
287 302
288 303 - fixed #59 missing graph.js
289 304 - fixed repo_size crash when repository had broken symlinks
290 305 - fixed python2.5 crashes.
291 306
292 307
293 308 1.0.1 (**2010-11-10**)
294 309 ======================
295 310
296 311 news
297 312 ----
298 313
299 314 - small css updated
300 315
301 316 fixes
302 317 -----
303 318
304 319 - fixed #53 python2.5 incompatible enumerate calls
305 320 - fixed #52 disable mercurial extension for web
306 321 - fixed #51 deleting repositories don't delete it's dependent objects
307 322
308 323
309 324 1.0.0 (**2010-11-02**)
310 325 ======================
311 326
312 327 - security bugfix simplehg wasn't checking for permissions on commands
313 328 other than pull or push.
314 329 - fixed doubled messages after push or pull in admin journal
315 330 - templating and css corrections, fixed repo switcher on chrome, updated titles
316 331 - admin menu accessible from options menu on repository view
317 332 - permissions cached queries
318 333
319 334 1.0.0rc4 (**2010-10-12**)
320 335 ==========================
321 336
322 337 - fixed python2.5 missing simplejson imports (thanks to Jens BΓ€ckman)
323 338 - removed cache_manager settings from sqlalchemy meta
324 339 - added sqlalchemy cache settings to ini files
325 340 - validated password length and added second try of failure on paster setup-app
326 341 - fixed setup database destroy prompt even when there was no db
327 342
328 343
329 344 1.0.0rc3 (**2010-10-11**)
330 345 =========================
331 346
332 347 - fixed i18n during installation.
333 348
334 349 1.0.0rc2 (**2010-10-11**)
335 350 =========================
336 351
337 352 - Disabled dirsize in file browser, it's causing nasty bug when dir renames
338 353 occure. After vcs is fixed it'll be put back again.
339 354 - templating/css rewrites, optimized css. No newline at end of file
@@ -1,56 +1,56
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.__init__
4 4 ~~~~~~~~~~~~~~~~~~
5 5
6 6 RhodeCode, a web based repository management based on pylons
7 7 versioning implementation: http://semver.org/
8 8
9 9 :created_on: Apr 9, 2010
10 10 :author: marcink
11 11 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
12 12 :license: GPLv3, see COPYING for more details.
13 13 """
14 14 # This program is free software: you can redistribute it and/or modify
15 15 # it under the terms of the GNU General Public License as published by
16 16 # the Free Software Foundation, either version 3 of the License, or
17 17 # (at your option) any later version.
18 18 #
19 19 # This program is distributed in the hope that it will be useful,
20 20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 22 # GNU General Public License for more details.
23 23 #
24 24 # You should have received a copy of the GNU General Public License
25 25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
26 26 import platform
27 27
28 VERSION = (1, 2, 0)
28 VERSION = (1, 2, 1)
29 29 __version__ = '.'.join((str(each) for each in VERSION[:4]))
30 30 __dbversion__ = 3 #defines current db version for migrations
31 31 __platform__ = platform.system()
32 32 __license__ = 'GPLv3'
33 33
34 34 PLATFORM_WIN = ('Windows')
35 35 PLATFORM_OTHERS = ('Linux', 'Darwin', 'FreeBSD', 'OpenBSD', 'SunOS')
36 36
37 37 try:
38 38 from rhodecode.lib.utils import get_current_revision
39 39 _rev = get_current_revision()
40 40 except ImportError:
41 41 #this is needed when doing some setup.py operations
42 42 _rev = False
43 43
44 44 if len(VERSION) > 3 and _rev:
45 45 __version__ += ' [rev:%s]' % _rev[0]
46 46
47 47
48 48 def get_version():
49 49 """Returns shorter version (digit parts only) as string."""
50 50
51 51 return '.'.join((str(each) for each in VERSION[:3]))
52 52
53 53 BACKENDS = {
54 54 'hg': 'Mercurial repository',
55 55 #'git': 'Git repository',
56 56 }
@@ -1,84 +1,84
1 1 """Pylons middleware initialization"""
2 2
3 3 from beaker.middleware import SessionMiddleware
4 4 from routes.middleware import RoutesMiddleware
5 5 from paste.cascade import Cascade
6 6 from paste.registry import RegistryManager
7 7 from paste.urlparser import StaticURLParser
8 8 from paste.deploy.converters import asbool
9 9 from paste.gzipper import make_gzip_middleware
10 10
11 11 from pylons.middleware import ErrorHandler, StatusCodeRedirect
12 12 from pylons.wsgiapp import PylonsApp
13 13
14 14 from rhodecode.lib.middleware.simplehg import SimpleHg
15 15 from rhodecode.lib.middleware.simplegit import SimpleGit
16 16 from rhodecode.lib.middleware.https_fixup import HttpsFixup
17 17 from rhodecode.config.environment import load_environment
18 18
19 19
20 20 def make_app(global_conf, full_stack=True, static_files=True, **app_conf):
21 21 """Create a Pylons WSGI application and return it
22 22
23 23 ``global_conf``
24 24 The inherited configuration for this application. Normally from
25 25 the [DEFAULT] section of the Paste ini file.
26 26
27 27 ``full_stack``
28 28 Whether or not this application provides a full WSGI stack (by
29 29 default, meaning it handles its own exceptions and errors).
30 30 Disable full_stack when this application is "managed" by
31 31 another WSGI middleware.
32 32
33 33 ``app_conf``
34 34 The application's local configuration. Normally specified in
35 35 the [app:<name>] section of the Paste ini file (where <name>
36 36 defaults to main).
37 37
38 38 """
39 39 # Configure the Pylons environment
40 40 config = load_environment(global_conf, app_conf)
41 41
42 42 # The Pylons WSGI app
43 43 app = PylonsApp(config=config)
44 44
45 45 # Routing/Session/Cache Middleware
46 46 app = RoutesMiddleware(app, config['routes.map'])
47 47 app = SessionMiddleware(app, config)
48 48
49 49 # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares)
50 50 if asbool(config['pdebug']):
51 51 from rhodecode.lib.profiler import ProfilingMiddleware
52 52 app = ProfilingMiddleware(app)
53 53
54 # we want our low level middleware to get to the request ASAP. We don't
55 # need any pylons stack middleware in them
56 app = SimpleHg(app, config)
57 app = SimpleGit(app, config)
58
54 59 if asbool(full_stack):
55 60 # Handle Python exceptions
56 61 app = ErrorHandler(app, global_conf, **config['pylons.errorware'])
57 62
58 63 # Display error documents for 401, 403, 404 status codes (and
59 64 # 500 when debug is disabled)
60 65 if asbool(config['debug']):
61 66 app = StatusCodeRedirect(app)
62 67 else:
63 68 app = StatusCodeRedirect(app, [400, 401, 403, 404, 500])
64 69
65 70 #enable https redirets based on HTTP_X_URL_SCHEME set by proxy
66 71 app = HttpsFixup(app, config)
67 72
68 73 # Establish the Registry for this application
69 74 app = RegistryManager(app)
70 75
71 76 if asbool(static_files):
72 77 # Serve static files
73 78 static_app = StaticURLParser(config['pylons.paths']['static_files'])
74 79 app = Cascade([static_app, app])
75 80 app = make_gzip_middleware(app, global_conf, compress_level=1)
76 81
77 # we want our low level middleware to get to the request ASAP. We don't
78 # need any pylons stack middleware in them
79 app = SimpleHg(app, config)
80 app = SimpleGit(app, config)
81
82 82 app.config = config
83 83
84 84 return app
@@ -1,611 +1,611
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.lib.utils
4 4 ~~~~~~~~~~~~~~~~~~~
5 5
6 6 Utilities library for RhodeCode
7 7
8 8 :created_on: Apr 18, 2010
9 9 :author: marcink
10 10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 11 :license: GPLv3, see COPYING for more details.
12 12 """
13 13 # This program is free software: you can redistribute it and/or modify
14 14 # it under the terms of the GNU General Public License as published by
15 15 # the Free Software Foundation, either version 3 of the License, or
16 16 # (at your option) any later version.
17 17 #
18 18 # This program is distributed in the hope that it will be useful,
19 19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 21 # GNU General Public License for more details.
22 22 #
23 23 # You should have received a copy of the GNU General Public License
24 24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 25
26 26 import os
27 27 import logging
28 28 import datetime
29 29 import traceback
30 30 import paste
31 31 import beaker
32 32 from os.path import dirname as dn, join as jn
33 33
34 34 from paste.script.command import Command, BadCommand
35 35
36 36 from mercurial import ui, config
37 37
38 38 from webhelpers.text import collapse, remove_formatting, strip_tags
39 39
40 40 from vcs import get_backend
41 41 from vcs.backends.base import BaseChangeset
42 42 from vcs.utils.lazy import LazyProperty
43 43 from vcs.utils.helpers import get_scm
44 44 from vcs.exceptions import VCSError
45 45
46 46 from rhodecode.model import meta
47 47 from rhodecode.model.caching_query import FromCache
48 48 from rhodecode.model.db import Repository, User, RhodeCodeUi, UserLog, Group, \
49 49 RhodeCodeSettings
50 50 from rhodecode.model.repo import RepoModel
51 51
52 52 log = logging.getLogger(__name__)
53 53
54 54
55 55 def recursive_replace(str, replace=' '):
56 56 """Recursive replace of given sign to just one instance
57 57
58 58 :param str: given string
59 59 :param replace: char to find and replace multiple instances
60 60
61 61 Examples::
62 62 >>> recursive_replace("Mighty---Mighty-Bo--sstones",'-')
63 63 'Mighty-Mighty-Bo-sstones'
64 64 """
65 65
66 66 if str.find(replace * 2) == -1:
67 67 return str
68 68 else:
69 69 str = str.replace(replace * 2, replace)
70 70 return recursive_replace(str, replace)
71 71
72 72
73 73 def repo_name_slug(value):
74 74 """Return slug of name of repository
75 75 This function is called on each creation/modification
76 76 of repository to prevent bad names in repo
77 77 """
78 78
79 79 slug = remove_formatting(value)
80 80 slug = strip_tags(slug)
81 81
82 82 for c in """=[]\;'"<>,/~!@#$%^&*()+{}|: """:
83 83 slug = slug.replace(c, '-')
84 84 slug = recursive_replace(slug, '-')
85 85 slug = collapse(slug, '-')
86 86 return slug
87 87
88 88
89 89 def get_repo_slug(request):
90 90 return request.environ['pylons.routes_dict'].get('repo_name')
91 91
92 92
93 93 def action_logger(user, action, repo, ipaddr='', sa=None):
94 94 """
95 95 Action logger for various actions made by users
96 96
97 97 :param user: user that made this action, can be a unique username string or
98 98 object containing user_id attribute
99 99 :param action: action to log, should be on of predefined unique actions for
100 100 easy translations
101 101 :param repo: string name of repository or object containing repo_id,
102 102 that action was made on
103 103 :param ipaddr: optional ip address from what the action was made
104 104 :param sa: optional sqlalchemy session
105 105
106 106 """
107 107
108 108 if not sa:
109 109 sa = meta.Session()
110 110
111 111 try:
112 112 if hasattr(user, 'user_id'):
113 113 user_obj = user
114 114 elif isinstance(user, basestring):
115 user_obj = User.by_username(user, cache=False)
115 user_obj = User.by_username(user)
116 116 else:
117 117 raise Exception('You have to provide user object or username')
118 118
119 119 rm = RepoModel()
120 120 if hasattr(repo, 'repo_id'):
121 121 repo_obj = rm.get(repo.repo_id, cache=False)
122 122 repo_name = repo_obj.repo_name
123 123 elif isinstance(repo, basestring):
124 124 repo_name = repo.lstrip('/')
125 125 repo_obj = rm.get_by_repo_name(repo_name, cache=False)
126 126 else:
127 127 raise Exception('You have to provide repository to action logger')
128 128
129 129 user_log = UserLog()
130 130 user_log.user_id = user_obj.user_id
131 131 user_log.action = action
132 132
133 133 user_log.repository_id = repo_obj.repo_id
134 134 user_log.repository_name = repo_name
135 135
136 136 user_log.action_date = datetime.datetime.now()
137 137 user_log.user_ip = ipaddr
138 138 sa.add(user_log)
139 139 sa.commit()
140 140
141 141 log.info('Adding user %s, action %s on %s', user_obj, action, repo)
142 142 except:
143 143 log.error(traceback.format_exc())
144 144 sa.rollback()
145 145
146 146
147 147 def get_repos(path, recursive=False):
148 148 """
149 149 Scans given path for repos and return (name,(type,path)) tuple
150 150
151 151 :param path: path to scann for repositories
152 152 :param recursive: recursive search and return names with subdirs in front
153 153 """
154 154 from vcs.utils.helpers import get_scm
155 155 from vcs.exceptions import VCSError
156 156
157 157 if path.endswith(os.sep):
158 158 #remove ending slash for better results
159 159 path = path[:-1]
160 160
161 161 def _get_repos(p):
162 162 if not os.access(p, os.W_OK):
163 163 return
164 164 for dirpath in os.listdir(p):
165 165 if os.path.isfile(os.path.join(p, dirpath)):
166 166 continue
167 167 cur_path = os.path.join(p, dirpath)
168 168 try:
169 169 scm_info = get_scm(cur_path)
170 170 yield scm_info[1].split(path)[-1].lstrip(os.sep), scm_info
171 171 except VCSError:
172 172 if not recursive:
173 173 continue
174 174 #check if this dir containts other repos for recursive scan
175 175 rec_path = os.path.join(p, dirpath)
176 176 if os.path.isdir(rec_path):
177 177 for inner_scm in _get_repos(rec_path):
178 178 yield inner_scm
179 179
180 180 return _get_repos(path)
181 181
182 182
183 183 def is_valid_repo(repo_name, base_path):
184 184 """
185 185 Returns True if given path is a valid repository False otherwise
186 186 :param repo_name:
187 187 :param base_path:
188 188
189 189 :return True: if given path is a valid repository
190 190 """
191 191 full_path = os.path.join(base_path, repo_name)
192
192
193 193 try:
194 194 get_scm(full_path)
195 195 return True
196 196 except VCSError:
197 197 return False
198 198
199 199 def is_valid_repos_group(repos_group_name, base_path):
200 200 """
201 201 Returns True if given path is a repos group False otherwise
202 202
203 203 :param repo_name:
204 204 :param base_path:
205 205 """
206 206 full_path = os.path.join(base_path, repos_group_name)
207
207
208 208 # check if it's not a repo
209 209 if is_valid_repo(repos_group_name, base_path):
210 210 return False
211
211
212 212 # check if it's a valid path
213 213 if os.path.isdir(full_path):
214 214 return True
215
215
216 216 return False
217
217
218 218 def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
219 219 while True:
220 220 ok = raw_input(prompt)
221 221 if ok in ('y', 'ye', 'yes'):
222 222 return True
223 223 if ok in ('n', 'no', 'nop', 'nope'):
224 224 return False
225 225 retries = retries - 1
226 226 if retries < 0:
227 227 raise IOError
228 228 print complaint
229 229
230 230 #propagated from mercurial documentation
231 231 ui_sections = ['alias', 'auth',
232 232 'decode/encode', 'defaults',
233 233 'diff', 'email',
234 234 'extensions', 'format',
235 235 'merge-patterns', 'merge-tools',
236 236 'hooks', 'http_proxy',
237 237 'smtp', 'patch',
238 238 'paths', 'profiling',
239 239 'server', 'trusted',
240 240 'ui', 'web', ]
241 241
242 242
243 243 def make_ui(read_from='file', path=None, checkpaths=True):
244 244 """A function that will read python rc files or database
245 245 and make an mercurial ui object from read options
246 246
247 247 :param path: path to mercurial config file
248 248 :param checkpaths: check the path
249 249 :param read_from: read from 'file' or 'db'
250 250 """
251 251
252 252 baseui = ui.ui()
253 253
254 254 #clean the baseui object
255 255 baseui._ocfg = config.config()
256 256 baseui._ucfg = config.config()
257 257 baseui._tcfg = config.config()
258 258
259 259 if read_from == 'file':
260 260 if not os.path.isfile(path):
261 261 log.warning('Unable to read config file %s' % path)
262 262 return False
263 263 log.debug('reading hgrc from %s', path)
264 264 cfg = config.config()
265 265 cfg.read(path)
266 266 for section in ui_sections:
267 267 for k, v in cfg.items(section):
268 268 log.debug('settings ui from file[%s]%s:%s', section, k, v)
269 269 baseui.setconfig(section, k, v)
270 270
271 271 elif read_from == 'db':
272 272 sa = meta.Session()
273 273 ret = sa.query(RhodeCodeUi)\
274 274 .options(FromCache("sql_cache_short",
275 275 "get_hg_ui_settings")).all()
276 276
277 277 hg_ui = ret
278 278 for ui_ in hg_ui:
279 279 if ui_.ui_active:
280 280 log.debug('settings ui from db[%s]%s:%s', ui_.ui_section,
281 281 ui_.ui_key, ui_.ui_value)
282 282 baseui.setconfig(ui_.ui_section, ui_.ui_key, ui_.ui_value)
283 283
284 284 meta.Session.remove()
285 285 return baseui
286 286
287 287
288 288 def set_rhodecode_config(config):
289 289 """Updates pylons config with new settings from database
290 290
291 291 :param config:
292 292 """
293 293 hgsettings = RhodeCodeSettings.get_app_settings()
294 294
295 295 for k, v in hgsettings.items():
296 296 config[k] = v
297 297
298 298
299 299 def invalidate_cache(cache_key, *args):
300 300 """Puts cache invalidation task into db for
301 301 further global cache invalidation
302 302 """
303 303
304 304 from rhodecode.model.scm import ScmModel
305 305
306 306 if cache_key.startswith('get_repo_cached_'):
307 307 name = cache_key.split('get_repo_cached_')[-1]
308 308 ScmModel().mark_for_invalidation(name)
309 309
310 310
311 311 class EmptyChangeset(BaseChangeset):
312 312 """
313 313 An dummy empty changeset. It's possible to pass hash when creating
314 314 an EmptyChangeset
315 315 """
316 316
317 317 def __init__(self, cs='0' * 40, repo=None, requested_revision=None, alias=None):
318 318 self._empty_cs = cs
319 319 self.revision = -1
320 320 self.message = ''
321 321 self.author = ''
322 322 self.date = ''
323 323 self.repository = repo
324 324 self.requested_revision = requested_revision
325 325 self.alias = alias
326 326
327 327 @LazyProperty
328 328 def raw_id(self):
329 329 """Returns raw string identifying this changeset, useful for web
330 330 representation.
331 331 """
332 332
333 333 return self._empty_cs
334 334
335 335 @LazyProperty
336 336 def branch(self):
337 337 return get_backend(self.alias).DEFAULT_BRANCH_NAME
338 338
339 339 @LazyProperty
340 340 def short_id(self):
341 341 return self.raw_id[:12]
342 342
343 343 def get_file_changeset(self, path):
344 344 return self
345 345
346 346 def get_file_content(self, path):
347 347 return u''
348 348
349 349 def get_file_size(self, path):
350 350 return 0
351 351
352 352
353 353 def map_groups(groups):
354 354 """Checks for groups existence, and creates groups structures.
355 355 It returns last group in structure
356 356
357 357 :param groups: list of groups structure
358 358 """
359 359 sa = meta.Session()
360 360
361 361 parent = None
362 362 group = None
363 363 for lvl, group_name in enumerate(groups[:-1]):
364 364 group = sa.query(Group).filter(Group.group_name == group_name).scalar()
365 365
366 366 if group is None:
367 367 group = Group(group_name, parent)
368 368 sa.add(group)
369 369 sa.commit()
370 370
371 371 parent = group
372 372
373 373 return group
374 374
375 375
376 376 def repo2db_mapper(initial_repo_list, remove_obsolete=False):
377 377 """maps all repos given in initial_repo_list, non existing repositories
378 378 are created, if remove_obsolete is True it also check for db entries
379 379 that are not in initial_repo_list and removes them.
380 380
381 381 :param initial_repo_list: list of repositories found by scanning methods
382 382 :param remove_obsolete: check for obsolete entries in database
383 383 """
384 384
385 385 sa = meta.Session()
386 386 rm = RepoModel()
387 387 user = sa.query(User).filter(User.admin == True).first()
388 388 added = []
389 389 for name, repo in initial_repo_list.items():
390 390 group = map_groups(name.split(os.sep))
391 391 if not rm.get_by_repo_name(name, cache=False):
392 392 log.info('repository %s not found creating default', name)
393 393 added.append(name)
394 394 form_data = {
395 395 'repo_name': name,
396 396 'repo_name_full': name,
397 397 'repo_type': repo.alias,
398 398 'description': repo.description \
399 399 if repo.description != 'unknown' else \
400 400 '%s repository' % name,
401 401 'private': False,
402 402 'group_id': getattr(group, 'group_id', None)
403 403 }
404 404 rm.create(form_data, user, just_db=True)
405 405
406 406 removed = []
407 407 if remove_obsolete:
408 408 #remove from database those repositories that are not in the filesystem
409 409 for repo in sa.query(Repository).all():
410 410 if repo.repo_name not in initial_repo_list.keys():
411 411 removed.append(repo.repo_name)
412 412 sa.delete(repo)
413 413 sa.commit()
414 414
415 415 return added, removed
416 416
417 417 #set cache regions for beaker so celery can utilise it
418 418 def add_cache(settings):
419 419 cache_settings = {'regions': None}
420 420 for key in settings.keys():
421 421 for prefix in ['beaker.cache.', 'cache.']:
422 422 if key.startswith(prefix):
423 423 name = key.split(prefix)[1].strip()
424 424 cache_settings[name] = settings[key].strip()
425 425 if cache_settings['regions']:
426 426 for region in cache_settings['regions'].split(','):
427 427 region = region.strip()
428 428 region_settings = {}
429 429 for key, value in cache_settings.items():
430 430 if key.startswith(region):
431 431 region_settings[key.split('.')[1]] = value
432 432 region_settings['expire'] = int(region_settings.get('expire',
433 433 60))
434 434 region_settings.setdefault('lock_dir',
435 435 cache_settings.get('lock_dir'))
436 436 region_settings.setdefault('data_dir',
437 437 cache_settings.get('data_dir'))
438 438
439 439 if 'type' not in region_settings:
440 440 region_settings['type'] = cache_settings.get('type',
441 441 'memory')
442 442 beaker.cache.cache_regions[region] = region_settings
443 443
444 444
445 445 def get_current_revision():
446 446 """Returns tuple of (number, id) from repository containing this package
447 447 or None if repository could not be found.
448 448 """
449 449
450 450 try:
451 451 from vcs import get_repo
452 452 from vcs.utils.helpers import get_scm
453 453 from vcs.exceptions import RepositoryError, VCSError
454 454 repopath = os.path.join(os.path.dirname(__file__), '..', '..')
455 455 scm = get_scm(repopath)[0]
456 456 repo = get_repo(path=repopath, alias=scm)
457 457 tip = repo.get_changeset()
458 458 return (tip.revision, tip.short_id)
459 459 except (ImportError, RepositoryError, VCSError), err:
460 460 logging.debug("Cannot retrieve rhodecode's revision. Original error "
461 461 "was: %s" % err)
462 462 return None
463 463
464 464
465 465 #==============================================================================
466 466 # TEST FUNCTIONS AND CREATORS
467 467 #==============================================================================
468 468 def create_test_index(repo_location, config, full_index):
469 469 """
470 470 Makes default test index
471 471
472 472 :param config: test config
473 473 :param full_index:
474 474 """
475 475
476 476 from rhodecode.lib.indexers.daemon import WhooshIndexingDaemon
477 477 from rhodecode.lib.pidlock import DaemonLock, LockHeld
478 478
479 479 repo_location = repo_location
480 480
481 481 index_location = os.path.join(config['app_conf']['index_dir'])
482 482 if not os.path.exists(index_location):
483 483 os.makedirs(index_location)
484 484
485 485 try:
486 486 l = DaemonLock(file=jn(dn(index_location), 'make_index.lock'))
487 487 WhooshIndexingDaemon(index_location=index_location,
488 488 repo_location=repo_location)\
489 489 .run(full_index=full_index)
490 490 l.release()
491 491 except LockHeld:
492 492 pass
493 493
494 494
495 495 def create_test_env(repos_test_path, config):
496 496 """Makes a fresh database and
497 497 install test repository into tmp dir
498 498 """
499 499 from rhodecode.lib.db_manage import DbManage
500 500 from rhodecode.tests import HG_REPO, GIT_REPO, NEW_HG_REPO, NEW_GIT_REPO, \
501 501 HG_FORK, GIT_FORK, TESTS_TMP_PATH
502 502 import tarfile
503 503 import shutil
504 504 from os.path import abspath
505 505
506 506 # PART ONE create db
507 507 dbconf = config['sqlalchemy.db1.url']
508 508 log.debug('making test db %s', dbconf)
509 509
510 510 # create test dir if it doesn't exist
511 511 if not os.path.isdir(repos_test_path):
512 512 log.debug('Creating testdir %s' % repos_test_path)
513 513 os.makedirs(repos_test_path)
514 514
515 515 dbmanage = DbManage(log_sql=True, dbconf=dbconf, root=config['here'],
516 516 tests=True)
517 517 dbmanage.create_tables(override=True)
518 518 dbmanage.create_settings(dbmanage.config_prompt(repos_test_path))
519 519 dbmanage.create_default_user()
520 520 dbmanage.admin_prompt()
521 521 dbmanage.create_permissions()
522 522 dbmanage.populate_default_permissions()
523 523
524 524 # PART TWO make test repo
525 525 log.debug('making test vcs repositories')
526 526
527 527 idx_path = config['app_conf']['index_dir']
528 528 data_path = config['app_conf']['cache_dir']
529 529
530 530 #clean index and data
531 531 if idx_path and os.path.exists(idx_path):
532 532 log.debug('remove %s' % idx_path)
533 533 shutil.rmtree(idx_path)
534 534
535 535 if data_path and os.path.exists(data_path):
536 536 log.debug('remove %s' % data_path)
537 537 shutil.rmtree(data_path)
538 538
539 539 #CREATE DEFAULT HG REPOSITORY
540 540 cur_dir = dn(dn(abspath(__file__)))
541 541 tar = tarfile.open(jn(cur_dir, 'tests', "vcs_test_hg.tar.gz"))
542 542 tar.extractall(jn(TESTS_TMP_PATH, HG_REPO))
543 543 tar.close()
544 544
545 545
546 546 #==============================================================================
547 547 # PASTER COMMANDS
548 548 #==============================================================================
549 549 class BasePasterCommand(Command):
550 550 """
551 551 Abstract Base Class for paster commands.
552 552
553 553 The celery commands are somewhat aggressive about loading
554 554 celery.conf, and since our module sets the `CELERY_LOADER`
555 555 environment variable to our loader, we have to bootstrap a bit and
556 556 make sure we've had a chance to load the pylons config off of the
557 557 command line, otherwise everything fails.
558 558 """
559 559 min_args = 1
560 560 min_args_error = "Please provide a paster config file as an argument."
561 561 takes_config_file = 1
562 562 requires_config_file = True
563 563
564 564 def notify_msg(self, msg, log=False):
565 565 """Make a notification to user, additionally if logger is passed
566 566 it logs this action using given logger
567 567
568 568 :param msg: message that will be printed to user
569 569 :param log: logging instance, to use to additionally log this message
570 570
571 571 """
572 572 if log and isinstance(log, logging):
573 573 log(msg)
574 574
575 575 def run(self, args):
576 576 """
577 577 Overrides Command.run
578 578
579 579 Checks for a config file argument and loads it.
580 580 """
581 581 if len(args) < self.min_args:
582 582 raise BadCommand(
583 583 self.min_args_error % {'min_args': self.min_args,
584 584 'actual_args': len(args)})
585 585
586 586 # Decrement because we're going to lob off the first argument.
587 587 # @@ This is hacky
588 588 self.min_args -= 1
589 589 self.bootstrap_config(args[0])
590 590 self.update_parser()
591 591 return super(BasePasterCommand, self).run(args[1:])
592 592
593 593 def update_parser(self):
594 594 """
595 595 Abstract method. Allows for the class's parser to be updated
596 596 before the superclass's `run` method is called. Necessary to
597 597 allow options/arguments to be passed through to the underlying
598 598 celery command.
599 599 """
600 600 raise NotImplementedError("Abstract Method.")
601 601
602 602 def bootstrap_config(self, conf):
603 603 """
604 604 Loads the pylons configuration.
605 605 """
606 606 from pylons import config as pylonsconfig
607 607
608 608 path_to_ini_file = os.path.realpath(conf)
609 609 conf = paste.deploy.appconfig('config:' + path_to_ini_file)
610 610 pylonsconfig.init_app(conf.global_conf, conf.local_conf)
611 611
@@ -1,2749 +1,2749
1 1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
2 2 border:0;
3 3 outline:0;
4 4 font-size:100%;
5 5 vertical-align:baseline;
6 6 background:transparent;
7 7 margin:0;
8 8 padding:0;
9 9 }
10 10
11 11 body {
12 12 line-height:1;
13 13 height:100%;
14 14 background:url("../images/background.png") repeat scroll 0 0 #B0B0B0;
15 15 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
16 16 font-size:12px;
17 17 color:#000;
18 18 margin:0;
19 19 padding:0;
20 20 }
21 21
22 22 ol,ul {
23 23 list-style:none;
24 24 }
25 25
26 26 blockquote,q {
27 27 quotes:none;
28 28 }
29 29
30 30 blockquote:before,blockquote:after,q:before,q:after {
31 31 content:none;
32 32 }
33 33
34 34 :focus {
35 35 outline:0;
36 36 }
37 37
38 38 del {
39 39 text-decoration:line-through;
40 40 }
41 41
42 42 table {
43 43 border-collapse:collapse;
44 44 border-spacing:0;
45 45 }
46 46
47 47 html {
48 48 height:100%;
49 49 }
50 50
51 51 a {
52 52 color:#003367;
53 53 text-decoration:none;
54 54 cursor:pointer;
55 55 }
56 56
57 57 a:hover {
58 58 color:#316293;
59 59 text-decoration:underline;
60 60 }
61 61
62 62 h1,h2,h3,h4,h5,h6 {
63 63 color:#292929;
64 64 font-weight:700;
65 65 }
66 66
67 67 h1 {
68 68 font-size:22px;
69 69 }
70 70
71 71 h2 {
72 72 font-size:20px;
73 73 }
74 74
75 75 h3 {
76 76 font-size:18px;
77 77 }
78 78
79 79 h4 {
80 80 font-size:16px;
81 81 }
82 82
83 83 h5 {
84 84 font-size:14px;
85 85 }
86 86
87 87 h6 {
88 88 font-size:11px;
89 89 }
90 90
91 91 ul.circle {
92 92 list-style-type:circle;
93 93 }
94 94
95 95 ul.disc {
96 96 list-style-type:disc;
97 97 }
98 98
99 99 ul.square {
100 100 list-style-type:square;
101 101 }
102 102
103 103 ol.lower-roman {
104 104 list-style-type:lower-roman;
105 105 }
106 106
107 107 ol.upper-roman {
108 108 list-style-type:upper-roman;
109 109 }
110 110
111 111 ol.lower-alpha {
112 112 list-style-type:lower-alpha;
113 113 }
114 114
115 115 ol.upper-alpha {
116 116 list-style-type:upper-alpha;
117 117 }
118 118
119 119 ol.decimal {
120 120 list-style-type:decimal;
121 121 }
122 122
123 123 div.color {
124 124 clear:both;
125 125 overflow:hidden;
126 126 position:absolute;
127 127 background:#FFF;
128 128 margin:7px 0 0 60px;
129 129 padding:1px 1px 1px 0;
130 130 }
131 131
132 132 div.color a {
133 133 width:15px;
134 134 height:15px;
135 135 display:block;
136 136 float:left;
137 137 margin:0 0 0 1px;
138 138 padding:0;
139 139 }
140 140
141 141 div.options {
142 142 clear:both;
143 143 overflow:hidden;
144 144 position:absolute;
145 145 background:#FFF;
146 146 margin:7px 0 0 162px;
147 147 padding:0;
148 148 }
149 149
150 150 div.options a {
151 151 height:1%;
152 152 display:block;
153 153 text-decoration:none;
154 154 margin:0;
155 155 padding:3px 8px;
156 156 }
157 157
158 158 .top-left-rounded-corner {
159 159 -webkit-border-top-left-radius: 8px;
160 160 -khtml-border-radius-topleft: 8px;
161 161 -moz-border-radius-topleft: 8px;
162 162 border-top-left-radius: 8px;
163 163 }
164 164
165 165 .top-right-rounded-corner {
166 166 -webkit-border-top-right-radius: 8px;
167 167 -khtml-border-radius-topright: 8px;
168 168 -moz-border-radius-topright: 8px;
169 169 border-top-right-radius: 8px;
170 170 }
171 171
172 172 .bottom-left-rounded-corner {
173 173 -webkit-border-bottom-left-radius: 8px;
174 174 -khtml-border-radius-bottomleft: 8px;
175 175 -moz-border-radius-bottomleft: 8px;
176 176 border-bottom-left-radius: 8px;
177 177 }
178 178
179 179 .bottom-right-rounded-corner {
180 180 -webkit-border-bottom-right-radius: 8px;
181 181 -khtml-border-radius-bottomright: 8px;
182 182 -moz-border-radius-bottomright: 8px;
183 183 border-bottom-right-radius: 8px;
184 184 }
185 185
186 186
187 187 #header {
188 188 margin:0;
189 189 padding:0 10px;
190 190 }
191 191
192 192
193 193 #header ul#logged-user{
194 194 margin-bottom:5px !important;
195 195 -webkit-border-radius: 0px 0px 8px 8px;
196 196 -khtml-border-radius: 0px 0px 8px 8px;
197 197 -moz-border-radius: 0px 0px 8px 8px;
198 198 border-radius: 0px 0px 8px 8px;
199 199 height:37px;
200 200 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
201 201 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
202 202 }
203 203
204 204 #header ul#logged-user li {
205 205 list-style:none;
206 206 float:left;
207 207 margin:8px 0 0;
208 208 padding:4px 12px;
209 209 border-left: 1px solid #316293;
210 210 }
211 211
212 212 #header ul#logged-user li.first {
213 213 border-left:none;
214 214 margin:4px;
215 215 }
216 216
217 217 #header ul#logged-user li.first div.gravatar {
218 218 margin-top:-2px;
219 219 }
220 220
221 221 #header ul#logged-user li.first div.account {
222 222 padding-top:4px;
223 223 float:left;
224 224 }
225 225
226 226 #header ul#logged-user li.last {
227 227 border-right:none;
228 228 }
229 229
230 230 #header ul#logged-user li a {
231 231 color:#fff;
232 232 font-weight:700;
233 233 text-decoration:none;
234 234 }
235 235
236 236 #header ul#logged-user li a:hover {
237 237 text-decoration:underline;
238 238 }
239 239
240 240 #header ul#logged-user li.highlight a {
241 241 color:#fff;
242 242 }
243 243
244 244 #header ul#logged-user li.highlight a:hover {
245 245 color:#FFF;
246 246 }
247 247
248 248 #header #header-inner {
249 249 height:40px;
250 250 clear:both;
251 251 position:relative;
252 252 background:#003367 url("../images/header_inner.png") repeat-x;
253 253 margin:0;
254 254 padding:0;
255 255 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
256 256 -webkit-border-radius: 4px 4px 4px 4px;
257 257 -khtml-border-radius: 4px 4px 4px 4px;
258 258 -moz-border-radius: 4px 4px 4px 4px;
259 259 border-radius: 4px 4px 4px 4px;
260 260 }
261 261
262 262 #header #header-inner #home a {
263 263 height:40px;
264 264 width:46px;
265 265 display:block;
266 266 background:url("../images/button_home.png");
267 267 background-position:0 0;
268 268 margin:0;
269 269 padding:0;
270 270 }
271 271
272 272 #header #header-inner #home a:hover {
273 273 background-position:0 -40px;
274 274 }
275 275
276 276 #header #header-inner #logo h1 {
277 277 color:#FFF;
278 278 font-size:18px;
279 279 margin:10px 0 0 13px;
280 280 padding:0;
281 281 }
282 282
283 283 #header #header-inner #logo a {
284 284 color:#fff;
285 285 text-decoration:none;
286 286 }
287 287
288 288 #header #header-inner #logo a:hover {
289 289 color:#bfe3ff;
290 290 }
291 291
292 292 #header #header-inner #quick,#header #header-inner #quick ul {
293 293 position:relative;
294 294 float:right;
295 295 list-style-type:none;
296 296 list-style-position:outside;
297 297 margin:6px 5px 0 0;
298 298 padding:0;
299 299 }
300 300
301 301 #header #header-inner #quick li {
302 302 position:relative;
303 303 float:left;
304 304 margin:0 5px 0 0;
305 305 padding:0;
306 306 }
307 307
308 308 #header #header-inner #quick li a {
309 309 top:0;
310 310 left:0;
311 311 height:1%;
312 312 display:block;
313 313 clear:both;
314 314 overflow:hidden;
315 315 color:#FFF;
316 316 font-weight:700;
317 317 text-decoration:none;
318 318 background:#369;
319 319 padding:0;
320 320 -webkit-border-radius: 4px 4px 4px 4px;
321 321 -khtml-border-radius: 4px 4px 4px 4px;
322 322 -moz-border-radius: 4px 4px 4px 4px;
323 323 border-radius: 4px 4px 4px 4px;
324 324 }
325 325
326 326 #header #header-inner #quick li span.short {
327 327 padding:9px 6px 8px 6px;
328 328 }
329 329
330 330 #header #header-inner #quick li span {
331 331 top:0;
332 332 right:0;
333 333 height:1%;
334 334 display:block;
335 335 float:left;
336 336 border-left:1px solid #3f6f9f;
337 337 margin:0;
338 338 padding:10px 12px 8px 10px;
339 339 }
340 340
341 341 #header #header-inner #quick li span.normal {
342 342 border:none;
343 343 padding:10px 12px 8px;
344 344 }
345 345
346 346 #header #header-inner #quick li span.icon {
347 347 top:0;
348 348 left:0;
349 349 border-left:none;
350 350 border-right:1px solid #2e5c89;
351 351 padding:8px 8px 4px;
352 352 }
353 353
354 354 #header #header-inner #quick li span.icon_short {
355 355 top:0;
356 356 left:0;
357 357 border-left:none;
358 358 border-right:1px solid #2e5c89;
359 359 padding:9px 4px 4px;
360 360 }
361 361
362 362 #header #header-inner #quick li a:hover {
363 363 background:#4e4e4e no-repeat top left;
364 364 }
365 365
366 366 #header #header-inner #quick li a:hover span {
367 367 border-left:1px solid #545454;
368 368 }
369 369
370 370 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short {
371 371 border-left:none;
372 372 border-right:1px solid #464646;
373 373 }
374 374
375 375 #header #header-inner #quick ul {
376 376 top:29px;
377 377 right:0;
378 378 min-width:200px;
379 379 display:none;
380 380 position:absolute;
381 381 background:#FFF;
382 382 border:1px solid #666;
383 383 border-top:1px solid #003367;
384 384 z-index:100;
385 385 margin:0;
386 386 padding:0;
387 387 }
388 388
389 389 #header #header-inner #quick ul.repo_switcher {
390 390 max-height:275px;
391 391 overflow-x:hidden;
392 392 overflow-y:auto;
393 393 }
394 394 #header #header-inner #quick ul.repo_switcher li.qfilter_rs {
395 395 float:none;
396 396 margin:0;
397 397 border-bottom:2px solid #003367;
398 398 }
399 399
400 400
401 401 #header #header-inner #quick .repo_switcher_type{
402 402 position:absolute;
403 403 left:0;
404 404 top:9px;
405 405
406 406 }
407 407 #header #header-inner #quick li ul li {
408 408 border-bottom:1px solid #ddd;
409 409 }
410 410
411 411 #header #header-inner #quick li ul li a {
412 412 width:182px;
413 413 height:auto;
414 414 display:block;
415 415 float:left;
416 416 background:#FFF;
417 417 color:#003367;
418 418 font-weight:400;
419 419 margin:0;
420 420 padding:7px 9px;
421 421 }
422 422
423 423 #header #header-inner #quick li ul li a:hover {
424 424 color:#000;
425 425 background:#FFF;
426 426 }
427 427
428 428 #header #header-inner #quick ul ul {
429 429 top:auto;
430 430 }
431 431
432 432 #header #header-inner #quick li ul ul {
433 433 right:200px;
434 434 max-height:275px;
435 435 overflow:auto;
436 436 overflow-x:hidden;
437 437 white-space:normal;
438 438 }
439 439
440 440 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
441 441 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
442 442 width:167px;
443 443 margin:0;
444 444 padding:12px 9px 7px 24px;
445 445 }
446 446
447 447 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
448 448 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
449 449 min-width:167px;
450 450 margin:0;
451 451 padding:12px 9px 7px 24px;
452 452 }
453 453
454 454 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
455 455 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
456 456 min-width:167px;
457 457 margin:0;
458 458 padding:12px 9px 7px 24px;
459 459 }
460 460
461 461 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover {
462 462 background:url("../images/icons/hgicon.png") no-repeat scroll 4px 9px #FFF;
463 463 min-width:167px;
464 464 margin:0 0 0 14px;
465 465 padding:12px 9px 7px 24px;
466 466 }
467 467
468 468 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover {
469 469 background:url("../images/icons/giticon.png") no-repeat scroll 4px 9px #FFF;
470 470 min-width:167px;
471 471 margin:0 0 0 14px;
472 472 padding:12px 9px 7px 24px;
473 473 }
474 474
475 475 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
476 476 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
477 477 width:167px;
478 478 margin:0;
479 479 padding:12px 9px 7px 24px;
480 480 }
481 481
482 482 #header #header-inner #quick li ul li a.repos_groups,#header #header-inner #quick li ul li a.repos_groups:hover {
483 483 background:url("../images/icons/database_link.png") no-repeat scroll 4px 9px #FFF;
484 484 width:167px;
485 485 margin:0;
486 486 padding:12px 9px 7px 24px;
487 487 }
488 488
489 489 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
490 490 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
491 491 width:167px;
492 492 margin:0;
493 493 padding:12px 9px 7px 24px;
494 494 }
495 495
496 496 #header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover {
497 497 background:#FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
498 498 width:167px;
499 499 margin:0;
500 500 padding:12px 9px 7px 24px;
501 501 }
502 502
503 503 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover {
504 504 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
505 505 width:167px;
506 506 margin:0;
507 507 padding:12px 9px 7px 24px;
508 508 }
509 509
510 510 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
511 511 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
512 512 width:167px;
513 513 margin:0;
514 514 padding:12px 9px 7px 24px;
515 515 }
516 516
517 517 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover {
518 518 background:#FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
519 519 width:167px;
520 520 margin:0;
521 521 padding:12px 9px 7px 24px;
522 522 }
523 523
524 524 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
525 525 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
526 526 width:167px;
527 527 margin:0;
528 528 padding:12px 9px 7px 24px;
529 529 }
530 530
531 531 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
532 532 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
533 533 width:167px;
534 534 margin:0;
535 535 padding:12px 9px 7px 24px;
536 536 }
537 537
538 538 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
539 539 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
540 540 width:167px;
541 541 margin:0;
542 542 padding:12px 9px 7px 24px;
543 543 }
544 544
545 545 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
546 546 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
547 547 width:167px;
548 548 margin:0;
549 549 padding:12px 9px 7px 24px;
550 550 }
551 551
552 552 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
553 553 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
554 554 width:167px;
555 555 margin:0;
556 556 padding:12px 9px 7px 24px;
557 557 }
558 558
559 559 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
560 560 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
561 561 width:167px;
562 562 margin:0;
563 563 padding:12px 9px 7px 24px;
564 564 }
565 565
566 566
567 567 .quick_repo_menu{
568 568 background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important;
569 569 cursor: pointer;
570 570 width: 8px;
571 571 }
572 572 .quick_repo_menu.active{
573 573 background: #FFF url("../images/horizontal-indicator.png") 4px 50% no-repeat !important;
574 574 cursor: pointer;
575 575 }
576 576 .quick_repo_menu .menu_items{
577 577 margin-top:6px;
578 578 width:150px;
579 579 position: absolute;
580 580 background-color:#FFF;
581 581 background: none repeat scroll 0 0 #FFFFFF;
582 582 border-color: #003367 #666666 #666666;
583 583 border-right: 1px solid #666666;
584 584 border-style: solid;
585 585 border-width: 1px;
586 586 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
587 587 }
588 588 .quick_repo_menu .menu_items li{
589 589 padding:0 !important;
590 590 }
591 591 .quick_repo_menu .menu_items a{
592 592 display: block;
593 593 padding: 4px 12px 4px 8px;
594 594 }
595 595 .quick_repo_menu .menu_items a:hover{
596 596 background-color: #EEE;
597 597 text-decoration: none;
598 598
599 599 }
600 600 .quick_repo_menu .menu_items .icon img{
601 601 margin-bottom:-2px;
602 602 }
603 603 .quick_repo_menu .menu_items.hidden{
604 604 display: none;
605 605 }
606 606
607 607 #content #left {
608 608 left:0;
609 609 width:280px;
610 610 position:absolute;
611 611 }
612 612
613 613 #content #right {
614 614 margin:0 60px 10px 290px;
615 615 }
616 616
617 617 #content div.box {
618 618 clear:both;
619 619 overflow:hidden;
620 620 background:#fff;
621 621 margin:0 0 10px;
622 622 padding:0 0 10px;
623 623 -webkit-border-radius: 4px 4px 4px 4px;
624 624 -khtml-border-radius: 4px 4px 4px 4px;
625 625 -moz-border-radius: 4px 4px 4px 4px;
626 626 border-radius: 4px 4px 4px 4px;
627 627 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
628 628
629 629 }
630 630
631 631 #content div.box-left {
632 632 width:49%;
633 633 clear:none;
634 634 float:left;
635 635 margin:0 0 10px;
636 636 }
637 637
638 638 #content div.box-right {
639 639 width:49%;
640 640 clear:none;
641 641 float:right;
642 642 margin:0 0 10px;
643 643 }
644 644
645 645 #content div.box div.title {
646 646 clear:both;
647 647 overflow:hidden;
648 648 background:#369 url("../images/header_inner.png") repeat-x;
649 649 margin:0 0 20px;
650 650 padding:0;
651 651 }
652 652
653 653 #content div.box div.title h5 {
654 654 float:left;
655 655 border:none;
656 656 color:#fff;
657 657 text-transform:uppercase;
658 658 margin:0;
659 659 padding:11px 0 11px 10px;
660 660 }
661 661
662 662 #content div.box div.title ul.links li {
663 663 list-style:none;
664 664 float:left;
665 665 margin:0;
666 666 padding:0;
667 667 }
668 668
669 669 #content div.box div.title ul.links li a {
670 670 border-left: 1px solid #316293;
671 671 color: #FFFFFF;
672 672 display: block;
673 673 float: left;
674 674 font-size: 13px;
675 675 font-weight: 700;
676 676 height: 1%;
677 677 margin: 0;
678 678 padding: 11px 22px 12px;
679 679 text-decoration: none;
680 680 }
681 681
682 682 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
683 683 clear:both;
684 684 overflow:hidden;
685 685 border-bottom:1px solid #DDD;
686 686 margin:10px 20px;
687 687 padding:0 0 15px;
688 688 }
689 689
690 690 #content div.box p {
691 691 color:#5f5f5f;
692 692 font-size:12px;
693 693 line-height:150%;
694 694 margin:0 24px 10px;
695 695 padding:0;
696 696 }
697 697
698 698 #content div.box blockquote {
699 699 border-left:4px solid #DDD;
700 700 color:#5f5f5f;
701 701 font-size:11px;
702 702 line-height:150%;
703 703 margin:0 34px;
704 704 padding:0 0 0 14px;
705 705 }
706 706
707 707 #content div.box blockquote p {
708 708 margin:10px 0;
709 709 padding:0;
710 710 }
711 711
712 712 #content div.box dl {
713 713 margin:10px 24px;
714 714 }
715 715
716 716 #content div.box dt {
717 717 font-size:12px;
718 718 margin:0;
719 719 }
720 720
721 721 #content div.box dd {
722 722 font-size:12px;
723 723 margin:0;
724 724 padding:8px 0 8px 15px;
725 725 }
726 726
727 727 #content div.box li {
728 728 font-size:12px;
729 729 padding:4px 0;
730 730 }
731 731
732 732 #content div.box ul.disc,#content div.box ul.circle {
733 733 margin:10px 24px 10px 38px;
734 734 }
735 735
736 736 #content div.box ul.square {
737 737 margin:10px 24px 10px 40px;
738 738 }
739 739
740 740 #content div.box img.left {
741 741 border:none;
742 742 float:left;
743 743 margin:10px 10px 10px 0;
744 744 }
745 745
746 746 #content div.box img.right {
747 747 border:none;
748 748 float:right;
749 749 margin:10px 0 10px 10px;
750 750 }
751 751
752 752 #content div.box div.messages {
753 753 clear:both;
754 754 overflow:hidden;
755 755 margin:0 20px;
756 756 padding:0;
757 757 }
758 758
759 759 #content div.box div.message {
760 760 clear:both;
761 761 overflow:hidden;
762 762 margin:0;
763 763 padding:10px 0;
764 764 }
765 765
766 766 #content div.box div.message a {
767 767 font-weight:400 !important;
768 768 }
769 769
770 770 #content div.box div.message div.image {
771 771 float:left;
772 772 margin:9px 0 0 5px;
773 773 padding:6px;
774 774 }
775 775
776 776 #content div.box div.message div.image img {
777 777 vertical-align:middle;
778 778 margin:0;
779 779 }
780 780
781 781 #content div.box div.message div.text {
782 782 float:left;
783 783 margin:0;
784 784 padding:9px 6px;
785 785 }
786 786
787 787 #content div.box div.message div.dismiss a {
788 788 height:16px;
789 789 width:16px;
790 790 display:block;
791 791 background:url("../images/icons/cross.png") no-repeat;
792 792 margin:15px 14px 0 0;
793 793 padding:0;
794 794 }
795 795
796 796 #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 {
797 797 border:none;
798 798 margin:0;
799 799 padding:0;
800 800 }
801 801
802 802 #content div.box div.message div.text span {
803 803 height:1%;
804 804 display:block;
805 805 margin:0;
806 806 padding:5px 0 0;
807 807 }
808 808
809 809 #content div.box div.message-error {
810 810 height:1%;
811 811 clear:both;
812 812 overflow:hidden;
813 813 background:#FBE3E4;
814 814 border:1px solid #FBC2C4;
815 815 color:#860006;
816 816 }
817 817
818 818 #content div.box div.message-error h6 {
819 819 color:#860006;
820 820 }
821 821
822 822 #content div.box div.message-warning {
823 823 height:1%;
824 824 clear:both;
825 825 overflow:hidden;
826 826 background:#FFF6BF;
827 827 border:1px solid #FFD324;
828 828 color:#5f5200;
829 829 }
830 830
831 831 #content div.box div.message-warning h6 {
832 832 color:#5f5200;
833 833 }
834 834
835 835 #content div.box div.message-notice {
836 836 height:1%;
837 837 clear:both;
838 838 overflow:hidden;
839 839 background:#8FBDE0;
840 840 border:1px solid #6BACDE;
841 841 color:#003863;
842 842 }
843 843
844 844 #content div.box div.message-notice h6 {
845 845 color:#003863;
846 846 }
847 847
848 848 #content div.box div.message-success {
849 849 height:1%;
850 850 clear:both;
851 851 overflow:hidden;
852 852 background:#E6EFC2;
853 853 border:1px solid #C6D880;
854 854 color:#4e6100;
855 855 }
856 856
857 857 #content div.box div.message-success h6 {
858 858 color:#4e6100;
859 859 }
860 860
861 861 #content div.box div.form div.fields div.field {
862 862 height:1%;
863 863 border-bottom:1px solid #DDD;
864 864 clear:both;
865 865 margin:0;
866 866 padding:10px 0;
867 867 }
868 868
869 869 #content div.box div.form div.fields div.field-first {
870 870 padding:0 0 10px;
871 871 }
872 872
873 873 #content div.box div.form div.fields div.field-noborder {
874 874 border-bottom:0 !important;
875 875 }
876 876
877 877 #content div.box div.form div.fields div.field span.error-message {
878 878 height:1%;
879 879 display:inline-block;
880 880 color:red;
881 881 margin:8px 0 0 4px;
882 882 padding:0;
883 883 }
884 884
885 885 #content div.box div.form div.fields div.field span.success {
886 886 height:1%;
887 887 display:block;
888 888 color:#316309;
889 889 margin:8px 0 0;
890 890 padding:0;
891 891 }
892 892
893 893 #content div.box div.form div.fields div.field div.label {
894 894 left:70px;
895 895 width:155px;
896 896 position:absolute;
897 897 margin:0;
898 898 padding:8px 0 0 5px;
899 899 }
900 900
901 901 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
902 902 clear:both;
903 903 overflow:hidden;
904 904 left:0;
905 905 width:auto;
906 906 position:relative;
907 907 margin:0;
908 908 padding:0 0 8px;
909 909 }
910 910
911 911 #content div.box div.form div.fields div.field div.label-select {
912 912 padding:5px 0 0 5px;
913 913 }
914 914
915 915 #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 {
916 916 padding:0 0 8px;
917 917 }
918 918
919 919 #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 {
920 920 padding:0 0 8px !important;
921 921 }
922 922
923 923 #content div.box div.form div.fields div.field div.label label, div.label label{
924 924 color:#393939;
925 925 font-weight:700;
926 926 }
927 927
928 928 #content div.box div.form div.fields div.field div.input {
929 929 margin:0 0 0 200px;
930 930 }
931 931 #content div.box div.form div.fields div.field div.file {
932 932 margin:0 0 0 200px;
933 933 }
934 934 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
935 935 margin:0 0 0 0px;
936 936 }
937 937
938 938 #content div.box div.form div.fields div.field div.input input {
939 939 background:#FFF;
940 940 border-top:1px solid #b3b3b3;
941 941 border-left:1px solid #b3b3b3;
942 942 border-right:1px solid #eaeaea;
943 943 border-bottom:1px solid #eaeaea;
944 944 color:#000;
945 945 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
946 946 font-size:11px;
947 947 margin:0;
948 948 padding:7px 7px 6px;
949 949 }
950 950
951 951 #content div.box div.form div.fields div.field div.file input {
952 952 background: none repeat scroll 0 0 #FFFFFF;
953 953 border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
954 954 border-style: solid;
955 955 border-width: 1px;
956 956 color: #000000;
957 957 font-family: Lucida Grande,Verdana,Lucida Sans Regular,Lucida Sans Unicode,Arial,sans-serif;
958 958 font-size: 11px;
959 959 margin: 0;
960 960 padding: 7px 7px 6px;
961 961 }
962 962
963 963
964 964 #content div.box div.form div.fields div.field div.input input.small {
965 965 width:30%;
966 966 }
967 967
968 968 #content div.box div.form div.fields div.field div.input input.medium {
969 969 width:55%;
970 970 }
971 971
972 972 #content div.box div.form div.fields div.field div.input input.large {
973 973 width:85%;
974 974 }
975 975
976 976 #content div.box div.form div.fields div.field div.input input.date {
977 977 width:177px;
978 978 }
979 979
980 980 #content div.box div.form div.fields div.field div.input input.button {
981 981 background:#D4D0C8;
982 982 border-top:1px solid #FFF;
983 983 border-left:1px solid #FFF;
984 984 border-right:1px solid #404040;
985 985 border-bottom:1px solid #404040;
986 986 color:#000;
987 987 margin:0;
988 988 padding:4px 8px;
989 989 }
990 990
991 991 #content div.box div.form div.fields div.field div.textarea {
992 992 border-top:1px solid #b3b3b3;
993 993 border-left:1px solid #b3b3b3;
994 994 border-right:1px solid #eaeaea;
995 995 border-bottom:1px solid #eaeaea;
996 996 margin:0 0 0 200px;
997 997 padding:10px;
998 998 }
999 999
1000 1000 #content div.box div.form div.fields div.field div.textarea-editor {
1001 1001 border:1px solid #ddd;
1002 1002 padding:0;
1003 1003 }
1004 1004
1005 1005 #content div.box div.form div.fields div.field div.textarea textarea {
1006 1006 width:100%;
1007 1007 height:220px;
1008 1008 overflow:hidden;
1009 1009 background:#FFF;
1010 1010 color:#000;
1011 1011 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1012 1012 font-size:11px;
1013 1013 outline:none;
1014 1014 border-width:0;
1015 1015 margin:0;
1016 1016 padding:0;
1017 1017 }
1018 1018
1019 1019 #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 {
1020 1020 width:100%;
1021 1021 height:100px;
1022 1022 }
1023 1023
1024 1024 #content div.box div.form div.fields div.field div.textarea table {
1025 1025 width:100%;
1026 1026 border:none;
1027 1027 margin:0;
1028 1028 padding:0;
1029 1029 }
1030 1030
1031 1031 #content div.box div.form div.fields div.field div.textarea table td {
1032 1032 background:#DDD;
1033 1033 border:none;
1034 1034 padding:0;
1035 1035 }
1036 1036
1037 1037 #content div.box div.form div.fields div.field div.textarea table td table {
1038 1038 width:auto;
1039 1039 border:none;
1040 1040 margin:0;
1041 1041 padding:0;
1042 1042 }
1043 1043
1044 1044 #content div.box div.form div.fields div.field div.textarea table td table td {
1045 1045 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1046 1046 font-size:11px;
1047 1047 padding:5px 5px 5px 0;
1048 1048 }
1049 1049
1050 1050 #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 {
1051 1051 background:#f6f6f6;
1052 1052 border-color:#666;
1053 1053 }
1054 1054
1055 1055 div.form div.fields div.field div.button {
1056 1056 margin:0;
1057 1057 padding:0 0 0 8px;
1058 1058 }
1059 1059
1060 1060
1061 1061 #content div.box table {
1062 1062 width:100%;
1063 1063 border-collapse:collapse;
1064 1064 margin:0;
1065 1065 padding:0;
1066 1066 border: 1px solid #eee;
1067 1067 }
1068 1068
1069 1069 #content div.box table th {
1070 1070 background:#eee;
1071 1071 border-bottom:1px solid #ddd;
1072 1072 padding:5px 0px 5px 5px;
1073 1073 }
1074 1074
1075 1075 #content div.box table th.left {
1076 1076 text-align:left;
1077 1077 }
1078 1078
1079 1079 #content div.box table th.right {
1080 1080 text-align:right;
1081 1081 }
1082 1082
1083 1083 #content div.box table th.center {
1084 1084 text-align:center;
1085 1085 }
1086 1086
1087 1087 #content div.box table th.selected {
1088 1088 vertical-align:middle;
1089 1089 padding:0;
1090 1090 }
1091 1091
1092 1092 #content div.box table td {
1093 1093 background:#fff;
1094 1094 border-bottom:1px solid #cdcdcd;
1095 1095 vertical-align:middle;
1096 1096 padding:5px;
1097 1097 }
1098 1098
1099 1099 #content div.box table tr.selected td {
1100 1100 background:#FFC;
1101 1101 }
1102 1102
1103 1103 #content div.box table td.selected {
1104 1104 width:3%;
1105 1105 text-align:center;
1106 1106 vertical-align:middle;
1107 1107 padding:0;
1108 1108 }
1109 1109
1110 1110 #content div.box table td.action {
1111 1111 width:45%;
1112 1112 text-align:left;
1113 1113 }
1114 1114
1115 1115 #content div.box table td.date {
1116 1116 width:33%;
1117 1117 text-align:center;
1118 1118 }
1119 1119
1120 1120 #content div.box div.action {
1121 1121 float:right;
1122 1122 background:#FFF;
1123 1123 text-align:right;
1124 1124 margin:10px 0 0;
1125 1125 padding:0;
1126 1126 }
1127 1127
1128 1128 #content div.box div.action select {
1129 1129 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1130 1130 font-size:11px;
1131 1131 margin:0;
1132 1132 }
1133 1133
1134 1134 #content div.box div.action .ui-selectmenu {
1135 1135 margin:0;
1136 1136 padding:0;
1137 1137 }
1138 1138
1139 1139 #content div.box div.pagination {
1140 1140 height:1%;
1141 1141 clear:both;
1142 1142 overflow:hidden;
1143 1143 margin:10px 0 0;
1144 1144 padding:0;
1145 1145 }
1146 1146
1147 1147 #content div.box div.pagination ul.pager {
1148 1148 float:right;
1149 1149 text-align:right;
1150 1150 margin:0;
1151 1151 padding:0;
1152 1152 }
1153 1153
1154 1154 #content div.box div.pagination ul.pager li {
1155 1155 height:1%;
1156 1156 float:left;
1157 1157 list-style:none;
1158 1158 background:#ebebeb url("../images/pager.png") repeat-x;
1159 1159 border-top:1px solid #dedede;
1160 1160 border-left:1px solid #cfcfcf;
1161 1161 border-right:1px solid #c4c4c4;
1162 1162 border-bottom:1px solid #c4c4c4;
1163 1163 color:#4A4A4A;
1164 1164 font-weight:700;
1165 1165 margin:0 0 0 4px;
1166 1166 padding:0;
1167 1167 }
1168 1168
1169 1169 #content div.box div.pagination ul.pager li.separator {
1170 1170 padding:6px;
1171 1171 }
1172 1172
1173 1173 #content div.box div.pagination ul.pager li.current {
1174 1174 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1175 1175 border-top:1px solid #ccc;
1176 1176 border-left:1px solid #bebebe;
1177 1177 border-right:1px solid #b1b1b1;
1178 1178 border-bottom:1px solid #afafaf;
1179 1179 color:#515151;
1180 1180 padding:6px;
1181 1181 }
1182 1182
1183 1183 #content div.box div.pagination ul.pager li a {
1184 1184 height:1%;
1185 1185 display:block;
1186 1186 float:left;
1187 1187 color:#515151;
1188 1188 text-decoration:none;
1189 1189 margin:0;
1190 1190 padding:6px;
1191 1191 }
1192 1192
1193 1193 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1194 1194 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1195 1195 border-top:1px solid #ccc;
1196 1196 border-left:1px solid #bebebe;
1197 1197 border-right:1px solid #b1b1b1;
1198 1198 border-bottom:1px solid #afafaf;
1199 1199 margin:-1px;
1200 1200 }
1201 1201
1202 1202 #content div.box div.pagination-wh {
1203 1203 height:1%;
1204 1204 clear:both;
1205 1205 overflow:hidden;
1206 1206 text-align:right;
1207 1207 margin:10px 0 0;
1208 1208 padding:0;
1209 1209 }
1210 1210
1211 1211 #content div.box div.pagination-right {
1212 1212 float:right;
1213 1213 }
1214 1214
1215 1215 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1216 1216 height:1%;
1217 1217 float:left;
1218 1218 background:#ebebeb url("../images/pager.png") repeat-x;
1219 1219 border-top:1px solid #dedede;
1220 1220 border-left:1px solid #cfcfcf;
1221 1221 border-right:1px solid #c4c4c4;
1222 1222 border-bottom:1px solid #c4c4c4;
1223 1223 color:#4A4A4A;
1224 1224 font-weight:700;
1225 1225 margin:0 0 0 4px;
1226 1226 padding:6px;
1227 1227 }
1228 1228
1229 1229 #content div.box div.pagination-wh span.pager_curpage {
1230 1230 height:1%;
1231 1231 float:left;
1232 1232 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1233 1233 border-top:1px solid #ccc;
1234 1234 border-left:1px solid #bebebe;
1235 1235 border-right:1px solid #b1b1b1;
1236 1236 border-bottom:1px solid #afafaf;
1237 1237 color:#515151;
1238 1238 font-weight:700;
1239 1239 margin:0 0 0 4px;
1240 1240 padding:6px;
1241 1241 }
1242 1242
1243 1243 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1244 1244 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1245 1245 border-top:1px solid #ccc;
1246 1246 border-left:1px solid #bebebe;
1247 1247 border-right:1px solid #b1b1b1;
1248 1248 border-bottom:1px solid #afafaf;
1249 1249 text-decoration:none;
1250 1250 }
1251 1251
1252 1252 #content div.box div.traffic div.legend {
1253 1253 clear:both;
1254 1254 overflow:hidden;
1255 1255 border-bottom:1px solid #ddd;
1256 1256 margin:0 0 10px;
1257 1257 padding:0 0 10px;
1258 1258 }
1259 1259
1260 1260 #content div.box div.traffic div.legend h6 {
1261 1261 float:left;
1262 1262 border:none;
1263 1263 margin:0;
1264 1264 padding:0;
1265 1265 }
1266 1266
1267 1267 #content div.box div.traffic div.legend li {
1268 1268 list-style:none;
1269 1269 float:left;
1270 1270 font-size:11px;
1271 1271 margin:0;
1272 1272 padding:0 8px 0 4px;
1273 1273 }
1274 1274
1275 1275 #content div.box div.traffic div.legend li.visits {
1276 1276 border-left:12px solid #edc240;
1277 1277 }
1278 1278
1279 1279 #content div.box div.traffic div.legend li.pageviews {
1280 1280 border-left:12px solid #afd8f8;
1281 1281 }
1282 1282
1283 1283 #content div.box div.traffic table {
1284 1284 width:auto;
1285 1285 }
1286 1286
1287 1287 #content div.box div.traffic table td {
1288 1288 background:transparent;
1289 1289 border:none;
1290 1290 padding:2px 3px 3px;
1291 1291 }
1292 1292
1293 1293 #content div.box div.traffic table td.legendLabel {
1294 1294 padding:0 3px 2px;
1295 1295 }
1296 1296
1297 1297 #summary{
1298 1298
1299 1299 }
1300 1300
1301 1301 #summary .desc{
1302 1302 white-space: pre;
1303 1303 width: 100%;
1304 1304 }
1305 1305
1306 1306 #summary .repo_name{
1307 1307 font-size: 1.6em;
1308 1308 font-weight: bold;
1309 1309 vertical-align: baseline;
1310 1310 clear:right
1311 1311 }
1312 1312
1313 1313
1314 1314 #footer {
1315 1315 clear:both;
1316 1316 overflow:hidden;
1317 1317 text-align:right;
1318 1318 margin:0;
1319 1319 padding:0 10px 4px;
1320 1320 margin:-10px 0 0;
1321 1321 }
1322 1322
1323 1323 #footer div#footer-inner {
1324 1324 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1325 1325 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1326 1326 -webkit-border-radius: 4px 4px 4px 4px;
1327 1327 -khtml-border-radius: 4px 4px 4px 4px;
1328 1328 -moz-border-radius: 4px 4px 4px 4px;
1329 1329 border-radius: 4px 4px 4px 4px;
1330 1330 }
1331 1331
1332 1332 #footer div#footer-inner p {
1333 1333 padding:15px 25px 15px 0;
1334 1334 color:#FFF;
1335 1335 font-weight:700;
1336 1336 }
1337 1337 #footer div#footer-inner .footer-link {
1338 1338 float:left;
1339 1339 padding-left:10px;
1340 1340 }
1341 1341 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a {
1342 1342 color:#FFF;
1343 1343 }
1344 1344
1345 1345 #login div.title {
1346 1346 width:420px;
1347 1347 clear:both;
1348 1348 overflow:hidden;
1349 1349 position:relative;
1350 1350 background:#003367 url("../images/header_inner.png") repeat-x;
1351 1351 margin:0 auto;
1352 1352 padding:0;
1353 1353 }
1354 1354
1355 1355 #login div.inner {
1356 1356 width:380px;
1357 1357 background:#FFF url("../images/login.png") no-repeat top left;
1358 1358 border-top:none;
1359 1359 border-bottom:none;
1360 1360 margin:0 auto;
1361 1361 padding:20px;
1362 1362 }
1363 1363
1364 1364 #login div.form div.fields div.field div.label {
1365 1365 width:173px;
1366 1366 float:left;
1367 1367 text-align:right;
1368 1368 margin:2px 10px 0 0;
1369 1369 padding:5px 0 0 5px;
1370 1370 }
1371 1371
1372 1372 #login div.form div.fields div.field div.input input {
1373 1373 width:176px;
1374 1374 background:#FFF;
1375 1375 border-top:1px solid #b3b3b3;
1376 1376 border-left:1px solid #b3b3b3;
1377 1377 border-right:1px solid #eaeaea;
1378 1378 border-bottom:1px solid #eaeaea;
1379 1379 color:#000;
1380 1380 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1381 1381 font-size:11px;
1382 1382 margin:0;
1383 1383 padding:7px 7px 6px;
1384 1384 }
1385 1385
1386 1386 #login div.form div.fields div.buttons {
1387 1387 clear:both;
1388 1388 overflow:hidden;
1389 1389 border-top:1px solid #DDD;
1390 1390 text-align:right;
1391 1391 margin:0;
1392 1392 padding:10px 0 0;
1393 1393 }
1394 1394
1395 1395 #login div.form div.links {
1396 1396 clear:both;
1397 1397 overflow:hidden;
1398 1398 margin:10px 0 0;
1399 1399 padding:0 0 2px;
1400 1400 }
1401 1401
1402 1402 #quick_login{
1403 1403 top: 31px;
1404 1404 background-color: rgb(0, 51, 103);
1405 1405 z-index: 999;
1406 1406 height: 150px;
1407 1407 position: absolute;
1408 1408 margin-left: -16px;
1409 1409 width: 281px;
1410 1410 -webkit-border-radius: 0px 0px 4px 4px;
1411 1411 -khtml-border-radius: 0px 0px 4px 4px;
1412 1412 -moz-border-radius: 0px 0px 4px 4px;
1413 1413 border-radius: 0px 0px 4px 4px;
1414 1414
1415 1415 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1416 1416 }
1417 1417
1418 1418 #quick_login .password_forgoten{
1419 1419 padding-right:10px;
1420 1420 padding-top:0px;
1421 1421 float:left;
1422 1422 }
1423 1423 #quick_login .password_forgoten a{
1424 1424 font-size: 10px
1425 1425 }
1426 1426
1427 1427 #quick_login .register{
1428 1428 padding-right:10px;
1429 1429 padding-top:5px;
1430 1430 float:left;
1431 1431 }
1432 1432
1433 1433 #quick_login .register a{
1434 1434 font-size: 10px
1435 1435 }
1436 1436 #quick_login div.form div.fields{
1437 1437 padding-top: 2px;
1438 1438 padding-left:10px;
1439 1439 }
1440 1440
1441 1441 #quick_login div.form div.fields div.field{
1442 1442 padding: 5px;
1443 1443 }
1444 1444
1445 1445 #quick_login div.form div.fields div.field div.label label{
1446 1446 color:#fff;
1447 1447 padding-bottom: 3px;
1448 1448 }
1449 1449
1450 1450 #quick_login div.form div.fields div.field div.input input {
1451 1451 width:236px;
1452 1452 background:#FFF;
1453 1453 border-top:1px solid #b3b3b3;
1454 1454 border-left:1px solid #b3b3b3;
1455 1455 border-right:1px solid #eaeaea;
1456 1456 border-bottom:1px solid #eaeaea;
1457 1457 color:#000;
1458 1458 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1459 1459 font-size:11px;
1460 1460 margin:0;
1461 1461 padding:5px 7px 4px;
1462 1462 }
1463 1463
1464 1464 #quick_login div.form div.fields div.buttons {
1465 1465 clear:both;
1466 1466 overflow:hidden;
1467 1467 text-align:right;
1468 1468 margin:0;
1469 padding:10px 14px 3px 5px;
1469 padding:10px 14px 0px 5px;
1470 1470 }
1471 1471
1472 1472 #quick_login div.form div.links {
1473 1473 clear:both;
1474 1474 overflow:hidden;
1475 1475 margin:10px 0 0;
1476 1476 padding:0 0 2px;
1477 1477 }
1478 1478
1479 1479 #register div.title {
1480 1480 clear:both;
1481 1481 overflow:hidden;
1482 1482 position:relative;
1483 1483 background:#003367 url("../images/header_inner.png") repeat-x;
1484 1484 margin:0 auto;
1485 1485 padding:0;
1486 1486 }
1487 1487
1488 1488 #register div.inner {
1489 1489 background:#FFF;
1490 1490 border-top:none;
1491 1491 border-bottom:none;
1492 1492 margin:0 auto;
1493 1493 padding:20px;
1494 1494 }
1495 1495
1496 1496 #register div.form div.fields div.field div.label {
1497 1497 width:135px;
1498 1498 float:left;
1499 1499 text-align:right;
1500 1500 margin:2px 10px 0 0;
1501 1501 padding:5px 0 0 5px;
1502 1502 }
1503 1503
1504 1504 #register div.form div.fields div.field div.input input {
1505 1505 width:300px;
1506 1506 background:#FFF;
1507 1507 border-top:1px solid #b3b3b3;
1508 1508 border-left:1px solid #b3b3b3;
1509 1509 border-right:1px solid #eaeaea;
1510 1510 border-bottom:1px solid #eaeaea;
1511 1511 color:#000;
1512 1512 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1513 1513 font-size:11px;
1514 1514 margin:0;
1515 1515 padding:7px 7px 6px;
1516 1516 }
1517 1517
1518 1518 #register div.form div.fields div.buttons {
1519 1519 clear:both;
1520 1520 overflow:hidden;
1521 1521 border-top:1px solid #DDD;
1522 1522 text-align:left;
1523 1523 margin:0;
1524 1524 padding:10px 0 0 150px;
1525 1525 }
1526 1526
1527 1527
1528 1528 #register div.form div.activation_msg {
1529 1529 padding-top:4px;
1530 1530 padding-bottom:4px;
1531 1531 }
1532 1532
1533 1533 #journal .journal_day{
1534 1534 font-size:20px;
1535 1535 padding:10px 0px;
1536 1536 border-bottom:2px solid #DDD;
1537 1537 margin-left:10px;
1538 1538 margin-right:10px;
1539 1539 }
1540 1540
1541 1541 #journal .journal_container{
1542 1542 padding:5px;
1543 1543 clear:both;
1544 1544 margin:0px 5px 0px 10px;
1545 1545 }
1546 1546
1547 1547 #journal .journal_action_container{
1548 1548 padding-left:38px;
1549 1549 }
1550 1550
1551 1551 #journal .journal_user{
1552 1552 color: #747474;
1553 1553 font-size: 14px;
1554 1554 font-weight: bold;
1555 1555 height: 30px;
1556 1556 }
1557 1557 #journal .journal_icon{
1558 1558 clear: both;
1559 1559 float: left;
1560 1560 padding-right: 4px;
1561 1561 padding-top: 3px;
1562 1562 }
1563 1563 #journal .journal_action{
1564 1564 padding-top:4px;
1565 1565 min-height:2px;
1566 1566 float:left
1567 1567 }
1568 1568 #journal .journal_action_params{
1569 1569 clear: left;
1570 1570 padding-left: 22px;
1571 1571 }
1572 1572 #journal .journal_repo{
1573 1573 float: left;
1574 1574 margin-left: 6px;
1575 1575 padding-top: 3px;
1576 1576 }
1577 1577 #journal .date{
1578 1578 clear: both;
1579 1579 color: #777777;
1580 1580 font-size: 11px;
1581 1581 padding-left: 22px;
1582 1582 }
1583 1583 #journal .journal_repo .journal_repo_name{
1584 1584 font-weight: bold;
1585 1585 font-size: 1.1em;
1586 1586 }
1587 1587 #journal .compare_view{
1588 1588 padding: 5px 0px 5px 0px;
1589 1589 width: 95px;
1590 1590 }
1591 1591 .journal_highlight{
1592 1592 font-weight: bold;
1593 1593 padding: 0 2px;
1594 1594 vertical-align: bottom;
1595 1595 }
1596 1596 .trending_language_tbl,.trending_language_tbl td {
1597 1597 border:0 !important;
1598 1598 margin:0 !important;
1599 1599 padding:0 !important;
1600 1600 }
1601 1601
1602 1602 .trending_language {
1603 1603 background-color:#003367;
1604 1604 color:#FFF;
1605 1605 display:block;
1606 1606 min-width:20px;
1607 1607 text-decoration:none;
1608 1608 height:12px;
1609 1609 margin-bottom:4px;
1610 1610 margin-left:5px;
1611 1611 white-space:pre;
1612 1612 padding:3px;
1613 1613 }
1614 1614
1615 1615 h3.files_location {
1616 1616 font-size:1.8em;
1617 1617 font-weight:700;
1618 1618 border-bottom:none !important;
1619 1619 margin:10px 0 !important;
1620 1620 }
1621 1621
1622 1622 #files_data dl dt {
1623 1623 float:left;
1624 1624 width:115px;
1625 1625 margin:0 !important;
1626 1626 padding:5px;
1627 1627 }
1628 1628
1629 1629 #files_data dl dd {
1630 1630 margin:0 !important;
1631 1631 padding:5px !important;
1632 1632 }
1633 1633
1634 1634 #changeset_content {
1635 1635 border:1px solid #CCC;
1636 1636 padding:5px;
1637 1637 }
1638 1638 #changeset_compare_view_content{
1639 1639 border:1px solid #CCC;
1640 1640 padding:5px;
1641 1641 }
1642 1642
1643 1643 #changeset_content .container {
1644 1644 min-height:120px;
1645 1645 font-size:1.2em;
1646 1646 overflow:hidden;
1647 1647 }
1648 1648
1649 1649 #changeset_compare_view_content .compare_view_commits{
1650 1650 width: auto !important;
1651 1651 }
1652 1652
1653 1653 #changeset_compare_view_content .compare_view_commits td{
1654 1654 padding:0px 0px 0px 12px !important;
1655 1655 }
1656 1656
1657 1657 #changeset_content .container .right {
1658 1658 float:right;
1659 1659 width:25%;
1660 1660 text-align:right;
1661 1661 }
1662 1662
1663 1663 #changeset_content .container .left .message {
1664 1664 font-style:italic;
1665 1665 color:#556CB5;
1666 1666 white-space:pre-wrap;
1667 1667 }
1668 1668
1669 1669 .cs_files .cur_cs{
1670 1670 margin:10px 2px;
1671 1671 font-weight: bold;
1672 1672 }
1673 1673
1674 1674 .cs_files .node{
1675 1675 float: left;
1676 1676 }
1677 1677 .cs_files .changes{
1678 1678 float: right;
1679 1679 }
1680 1680 .cs_files .changes .added{
1681 1681 background-color: #BBFFBB;
1682 1682 float: left;
1683 1683 text-align: center;
1684 1684 font-size: 90%;
1685 1685 }
1686 1686 .cs_files .changes .deleted{
1687 1687 background-color: #FF8888;
1688 1688 float: left;
1689 1689 text-align: center;
1690 1690 font-size: 90%;
1691 1691 }
1692 1692 .cs_files .cs_added {
1693 1693 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1694 1694 height:16px;
1695 1695 padding-left:20px;
1696 1696 margin-top:7px;
1697 1697 text-align:left;
1698 1698 }
1699 1699
1700 1700 .cs_files .cs_changed {
1701 1701 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1702 1702 height:16px;
1703 1703 padding-left:20px;
1704 1704 margin-top:7px;
1705 1705 text-align:left;
1706 1706 }
1707 1707
1708 1708 .cs_files .cs_removed {
1709 1709 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1710 1710 height:16px;
1711 1711 padding-left:20px;
1712 1712 margin-top:7px;
1713 1713 text-align:left;
1714 1714 }
1715 1715
1716 1716 #graph {
1717 1717 overflow:hidden;
1718 1718 }
1719 1719
1720 1720 #graph_nodes {
1721 1721 float: left;
1722 1722 margin-right: -6px;
1723 1723 margin-top: -4px;
1724 1724 }
1725 1725
1726 1726 #graph_content {
1727 1727 width:800px;
1728 1728 float:left;
1729 1729
1730 1730 }
1731 1731
1732 1732 #graph_content .container_header {
1733 1733 border:1px solid #CCC;
1734 1734 padding:10px;
1735 1735 }
1736 1736 #graph_content #rev_range_container{
1737 1737 padding:10px 0px;
1738 1738 }
1739 1739 #graph_content .container {
1740 1740 border-bottom:1px solid #CCC;
1741 1741 border-left:1px solid #CCC;
1742 1742 border-right:1px solid #CCC;
1743 1743 min-height:70px;
1744 1744 overflow:hidden;
1745 1745 font-size:1.2em;
1746 1746 }
1747 1747
1748 1748 #graph_content .container .right {
1749 1749 float:right;
1750 1750 width:28%;
1751 1751 text-align:right;
1752 1752 padding-bottom:5px;
1753 1753 }
1754 1754
1755 1755 #graph_content .container .left .date {
1756 1756 font-weight:700;
1757 1757 padding-bottom:5px;
1758 1758 }
1759 1759 #graph_content .container .left .date span{
1760 1760 vertical-align: text-top;
1761 1761 }
1762 1762
1763 1763 #graph_content .container .left .author{
1764 1764 height: 22px;
1765 1765 }
1766 1766 #graph_content .container .left .author .user{
1767 1767 color: #444444;
1768 1768 float: left;
1769 1769 font-size: 12px;
1770 1770 margin-left: -4px;
1771 1771 margin-top: 4px;
1772 1772 }
1773 1773
1774 1774 #graph_content .container .left .message {
1775 1775 font-size:100%;
1776 1776 padding-top:3px;
1777 1777 white-space:pre-wrap;
1778 1778 }
1779 1779
1780 1780 .right div {
1781 1781 clear:both;
1782 1782 }
1783 1783
1784 1784 .right .changes .changed_total{
1785 1785 border:1px solid #DDD;
1786 1786 display:block;
1787 1787 float:right;
1788 1788 text-align:center;
1789 1789 min-width:45px;
1790 1790 cursor: pointer;
1791 1791 background:#FD8;
1792 1792 font-weight: bold;
1793 1793 }
1794 1794 .right .changes .added,.changed,.removed {
1795 1795 border:1px solid #DDD;
1796 1796 display:block;
1797 1797 float:right;
1798 1798 text-align:center;
1799 1799 min-width:15px;
1800 1800 cursor: help;
1801 1801 }
1802 1802 .right .changes .large {
1803 1803 border:1px solid #DDD;
1804 1804 display:block;
1805 1805 float:right;
1806 1806 text-align:center;
1807 1807 min-width:45px;
1808 1808 cursor: help;
1809 1809 background: #54A9F7;
1810 1810 }
1811 1811
1812 1812 .right .changes .added {
1813 1813 background:#BFB;
1814 1814 }
1815 1815
1816 1816 .right .changes .changed {
1817 1817 background:#FD8;
1818 1818 }
1819 1819
1820 1820 .right .changes .removed {
1821 1821 background:#F88;
1822 1822 }
1823 1823
1824 1824 .right .merge {
1825 1825 vertical-align:top;
1826 1826 font-size:0.75em;
1827 1827 font-weight:700;
1828 1828 }
1829 1829
1830 1830 .right .parent {
1831 1831 font-size:90%;
1832 1832 font-family:monospace;
1833 1833 }
1834 1834
1835 1835 .right .logtags .branchtag {
1836 1836 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1837 1837 display:block;
1838 1838 font-size:0.8em;
1839 1839 padding:11px 16px 0 0;
1840 1840 }
1841 1841
1842 1842 .right .logtags .tagtag {
1843 1843 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1844 1844 display:block;
1845 1845 font-size:0.8em;
1846 1846 padding:11px 16px 0 0;
1847 1847 }
1848 1848
1849 1849 div.browserblock {
1850 1850 overflow:hidden;
1851 1851 border:1px solid #ccc;
1852 1852 background:#f8f8f8;
1853 1853 font-size:100%;
1854 1854 line-height:125%;
1855 1855 padding:0;
1856 1856 }
1857 1857
1858 1858 div.browserblock .browser-header {
1859 1859 background:#FFF;
1860 1860 padding:10px 0px 15px 0px;
1861 1861 width: 100%;
1862 1862 }
1863 1863 div.browserblock .browser-nav {
1864 1864 float:left
1865 1865 }
1866 1866
1867 1867 div.browserblock .browser-branch {
1868 1868 float:left;
1869 1869 }
1870 1870
1871 1871 div.browserblock .browser-branch label {
1872 1872 color:#4A4A4A;
1873 1873 vertical-align:text-top;
1874 1874 }
1875 1875
1876 1876 div.browserblock .browser-header span {
1877 1877 margin-left:5px;
1878 1878 font-weight:700;
1879 1879 }
1880 1880
1881 1881 div.browserblock .browser-search{
1882 1882 clear:both;
1883 1883 padding:8px 8px 0px 5px;
1884 1884 height: 20px;
1885 1885 }
1886 1886 div.browserblock #node_filter_box {
1887 1887 }
1888 1888
1889 1889 div.browserblock .search_activate{
1890 1890 float: left
1891 1891 }
1892 1892
1893 1893 div.browserblock .add_node{
1894 1894 float: left;
1895 1895 padding-left: 5px;
1896 1896 }
1897 1897
1898 1898 div.browserblock .search_activate #filter_activate,div.browserblock .add_node a{
1899 1899 vertical-align: sub;
1900 1900 border: 1px solid;
1901 1901 padding:2px;
1902 1902 -webkit-border-radius: 4px 4px 4px 4px;
1903 1903 -khtml-border-radius: 4px 4px 4px 4px;
1904 1904 -moz-border-radius: 4px 4px 4px 4px;
1905 1905 border-radius: 4px 4px 4px 4px;
1906 1906 background: url("../images/button.png") repeat-x scroll 0 0 #E5E3E3;
1907 1907 border-color: #DDDDDD #DDDDDD #C6C6C6 #C6C6C6;
1908 1908 color: #515151;
1909 1909 }
1910 1910
1911 1911 div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover{
1912 1912 text-decoration: none !important;
1913 1913 }
1914 1914
1915 1915 div.browserblock .browser-body {
1916 1916 background:#EEE;
1917 1917 border-top:1px solid #CCC;
1918 1918 }
1919 1919
1920 1920 table.code-browser {
1921 1921 border-collapse:collapse;
1922 1922 width:100%;
1923 1923 }
1924 1924
1925 1925 table.code-browser tr {
1926 1926 margin:3px;
1927 1927 }
1928 1928
1929 1929 table.code-browser thead th {
1930 1930 background-color:#EEE;
1931 1931 height:20px;
1932 1932 font-size:1.1em;
1933 1933 font-weight:700;
1934 1934 text-align:left;
1935 1935 padding-left:10px;
1936 1936 }
1937 1937
1938 1938 table.code-browser tbody td {
1939 1939 padding-left:10px;
1940 1940 height:20px;
1941 1941 }
1942 1942
1943 1943 table.code-browser .browser-file {
1944 1944 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1945 1945 height:16px;
1946 1946 padding-left:20px;
1947 1947 text-align:left;
1948 1948 }
1949 1949 .diffblock .changeset_file{
1950 1950 background:url("../images/icons/file.png") no-repeat scroll 3px;
1951 1951 height:16px;
1952 1952 padding-left:22px;
1953 1953 text-align:left;
1954 1954 font-size: 14px;
1955 1955 }
1956 1956
1957 1957 .diffblock .changeset_header{
1958 1958 margin-left: 6px !important;
1959 1959 }
1960 1960
1961 1961 table.code-browser .browser-dir {
1962 1962 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1963 1963 height:16px;
1964 1964 padding-left:20px;
1965 1965 text-align:left;
1966 1966 }
1967 1967
1968 1968 .box .search {
1969 1969 clear:both;
1970 1970 overflow:hidden;
1971 1971 margin:0;
1972 1972 padding:0 20px 10px;
1973 1973 }
1974 1974
1975 1975 .box .search div.search_path {
1976 1976 background:none repeat scroll 0 0 #EEE;
1977 1977 border:1px solid #CCC;
1978 1978 color:blue;
1979 1979 margin-bottom:10px;
1980 1980 padding:10px 0;
1981 1981 }
1982 1982
1983 1983 .box .search div.search_path div.link {
1984 1984 font-weight:700;
1985 1985 margin-left:25px;
1986 1986 }
1987 1987
1988 1988 .box .search div.search_path div.link a {
1989 1989 color:#003367;
1990 1990 cursor:pointer;
1991 1991 text-decoration:none;
1992 1992 }
1993 1993
1994 1994 #path_unlock {
1995 1995 color:red;
1996 1996 font-size:1.2em;
1997 1997 padding-left:4px;
1998 1998 }
1999 1999
2000 2000 .info_box span {
2001 2001 margin-left:3px;
2002 2002 margin-right:3px;
2003 2003 }
2004 2004
2005 2005 .info_box .rev {
2006 2006 color: #003367;
2007 2007 font-size: 1.6em;
2008 2008 font-weight: bold;
2009 2009 vertical-align: sub;
2010 2010 }
2011 2011
2012 2012
2013 2013 .info_box input#at_rev,.info_box input#size {
2014 2014 background:#FFF;
2015 2015 border-top:1px solid #b3b3b3;
2016 2016 border-left:1px solid #b3b3b3;
2017 2017 border-right:1px solid #eaeaea;
2018 2018 border-bottom:1px solid #eaeaea;
2019 2019 color:#000;
2020 2020 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2021 2021 font-size:12px;
2022 2022 margin:0;
2023 2023 padding:1px 5px 1px;
2024 2024 }
2025 2025
2026 2026 .info_box input#view {
2027 2027 text-align:center;
2028 2028 padding:4px 3px 2px 2px;
2029 2029 }
2030 2030
2031 2031 .yui-overlay,.yui-panel-container {
2032 2032 visibility:hidden;
2033 2033 position:absolute;
2034 2034 z-index:2;
2035 2035 }
2036 2036
2037 2037 .yui-tt {
2038 2038 visibility:hidden;
2039 2039 position:absolute;
2040 2040 color:#666;
2041 2041 background-color:#FFF;
2042 2042 font-family:arial, helvetica, verdana, sans-serif;
2043 2043 border:2px solid #003367;
2044 2044 font:100% sans-serif;
2045 2045 width:auto;
2046 2046 opacity:1px;
2047 2047 padding:8px;
2048 2048 white-space: pre-wrap;
2049 2049 -webkit-border-radius: 8px 8px 8px 8px;
2050 2050 -khtml-border-radius: 8px 8px 8px 8px;
2051 2051 -moz-border-radius: 8px 8px 8px 8px;
2052 2052 border-radius: 8px 8px 8px 8px;
2053 2053 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
2054 2054 }
2055 2055
2056 2056 .ac {
2057 2057 vertical-align:top;
2058 2058 }
2059 2059
2060 2060 .ac .yui-ac {
2061 2061 position:relative;
2062 2062 font-family:arial;
2063 2063 font-size:100%;
2064 2064 }
2065 2065
2066 2066 .ac .perm_ac {
2067 2067 width:15em;
2068 2068 }
2069 2069
2070 2070 .ac .yui-ac-input {
2071 2071 width:100%;
2072 2072 }
2073 2073
2074 2074 .ac .yui-ac-container {
2075 2075 position:absolute;
2076 2076 top:1.6em;
2077 2077 width:100%;
2078 2078 }
2079 2079
2080 2080 .ac .yui-ac-content {
2081 2081 position:absolute;
2082 2082 width:100%;
2083 2083 border:1px solid gray;
2084 2084 background:#fff;
2085 2085 overflow:hidden;
2086 2086 z-index:9050;
2087 2087 }
2088 2088
2089 2089 .ac .yui-ac-shadow {
2090 2090 position:absolute;
2091 2091 width:100%;
2092 2092 background:#000;
2093 2093 -moz-opacity:0.1px;
2094 2094 opacity:.10;
2095 2095 filter:alpha(opacity = 10);
2096 2096 z-index:9049;
2097 2097 margin:.3em;
2098 2098 }
2099 2099
2100 2100 .ac .yui-ac-content ul {
2101 2101 width:100%;
2102 2102 margin:0;
2103 2103 padding:0;
2104 2104 }
2105 2105
2106 2106 .ac .yui-ac-content li {
2107 2107 cursor:default;
2108 2108 white-space:nowrap;
2109 2109 margin:0;
2110 2110 padding:2px 5px;
2111 2111 }
2112 2112
2113 2113 .ac .yui-ac-content li.yui-ac-prehighlight {
2114 2114 background:#B3D4FF;
2115 2115 }
2116 2116
2117 2117 .ac .yui-ac-content li.yui-ac-highlight {
2118 2118 background:#556CB5;
2119 2119 color:#FFF;
2120 2120 }
2121 2121
2122 2122
2123 2123 .follow{
2124 2124 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
2125 2125 height: 16px;
2126 2126 width: 20px;
2127 2127 cursor: pointer;
2128 2128 display: block;
2129 2129 float: right;
2130 2130 margin-top: 2px;
2131 2131 }
2132 2132
2133 2133 .following{
2134 2134 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2135 2135 height: 16px;
2136 2136 width: 20px;
2137 2137 cursor: pointer;
2138 2138 display: block;
2139 2139 float: right;
2140 2140 margin-top: 2px;
2141 2141 }
2142 2142
2143 2143 .currently_following{
2144 2144 padding-left: 10px;
2145 2145 padding-bottom:5px;
2146 2146 }
2147 2147
2148 2148 .add_icon {
2149 2149 background:url("../images/icons/add.png") no-repeat scroll 3px;
2150 2150 padding-left:20px;
2151 2151 padding-top:0px;
2152 2152 text-align:left;
2153 2153 }
2154 2154
2155 2155 .edit_icon {
2156 2156 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
2157 2157 padding-left:20px;
2158 2158 padding-top:0px;
2159 2159 text-align:left;
2160 2160 }
2161 2161
2162 2162 .delete_icon {
2163 2163 background:url("../images/icons/delete.png") no-repeat scroll 3px;
2164 2164 padding-left:20px;
2165 2165 padding-top:0px;
2166 2166 text-align:left;
2167 2167 }
2168 2168
2169 2169 .refresh_icon {
2170 2170 background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
2171 2171 padding-left:20px;
2172 2172 padding-top:0px;
2173 2173 text-align:left;
2174 2174 }
2175 2175
2176 2176 .pull_icon {
2177 2177 background:url("../images/icons/connect.png") no-repeat scroll 3px;
2178 2178 padding-left:20px;
2179 2179 padding-top:0px;
2180 2180 text-align:left;
2181 2181 }
2182 2182
2183 2183 .rss_icon {
2184 2184 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
2185 2185 padding-left:20px;
2186 2186 padding-top:0px;
2187 2187 text-align:left;
2188 2188 }
2189 2189
2190 2190 .atom_icon {
2191 2191 background:url("../images/icons/atom.png") no-repeat scroll 3px;
2192 2192 padding-left:20px;
2193 2193 padding-top:0px;
2194 2194 text-align:left;
2195 2195 }
2196 2196
2197 2197 .archive_icon {
2198 2198 background:url("../images/icons/compress.png") no-repeat scroll 3px;
2199 2199 padding-left:20px;
2200 2200 text-align:left;
2201 2201 padding-top:1px;
2202 2202 }
2203 2203
2204 2204 .start_following_icon {
2205 2205 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
2206 2206 padding-left:20px;
2207 2207 text-align:left;
2208 2208 padding-top:0px;
2209 2209 }
2210 2210
2211 2211 .stop_following_icon {
2212 2212 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2213 2213 padding-left:20px;
2214 2214 text-align:left;
2215 2215 padding-top:0px;
2216 2216 }
2217 2217
2218 2218 .action_button {
2219 2219 border:0;
2220 2220 display:inline;
2221 2221 }
2222 2222
2223 2223 .action_button:hover {
2224 2224 border:0;
2225 2225 text-decoration:underline;
2226 2226 cursor:pointer;
2227 2227 }
2228 2228
2229 2229 #switch_repos {
2230 2230 position:absolute;
2231 2231 height:25px;
2232 2232 z-index:1;
2233 2233 }
2234 2234
2235 2235 #switch_repos select {
2236 2236 min-width:150px;
2237 2237 max-height:250px;
2238 2238 z-index:1;
2239 2239 }
2240 2240
2241 2241 .breadcrumbs {
2242 2242 border:medium none;
2243 2243 color:#FFF;
2244 2244 float:left;
2245 2245 text-transform:uppercase;
2246 2246 font-weight:700;
2247 2247 font-size:14px;
2248 2248 margin:0;
2249 2249 padding:11px 0 11px 10px;
2250 2250 }
2251 2251
2252 2252 .breadcrumbs a {
2253 2253 color:#FFF;
2254 2254 }
2255 2255
2256 2256 .flash_msg ul {
2257 2257 margin:0;
2258 2258 padding:0 0 10px;
2259 2259 }
2260 2260
2261 2261 .error_msg {
2262 2262 background-color:#FFCFCF;
2263 2263 background-image:url("../images/icons/error_msg.png");
2264 2264 border:1px solid #FF9595;
2265 2265 color:#C30;
2266 2266 }
2267 2267
2268 2268 .warning_msg {
2269 2269 background-color:#FFFBCC;
2270 2270 background-image:url("../images/icons/warning_msg.png");
2271 2271 border:1px solid #FFF35E;
2272 2272 color:#C69E00;
2273 2273 }
2274 2274
2275 2275 .success_msg {
2276 2276 background-color:#D5FFCF;
2277 2277 background-image:url("../images/icons/success_msg.png");
2278 2278 border:1px solid #97FF88;
2279 2279 color:#090;
2280 2280 }
2281 2281
2282 2282 .notice_msg {
2283 2283 background-color:#DCE3FF;
2284 2284 background-image:url("../images/icons/notice_msg.png");
2285 2285 border:1px solid #93A8FF;
2286 2286 color:#556CB5;
2287 2287 }
2288 2288
2289 2289 .success_msg,.error_msg,.notice_msg,.warning_msg {
2290 2290 background-position:10px center;
2291 2291 background-repeat:no-repeat;
2292 2292 font-size:12px;
2293 2293 font-weight:700;
2294 2294 min-height:14px;
2295 2295 line-height:14px;
2296 2296 margin-bottom:0;
2297 2297 margin-top:0;
2298 2298 display:block;
2299 2299 overflow:auto;
2300 2300 padding:6px 10px 6px 40px;
2301 2301 }
2302 2302
2303 2303 #msg_close {
2304 2304 background:transparent url("../icons/cross_grey_small.png") no-repeat scroll 0 0;
2305 2305 cursor:pointer;
2306 2306 height:16px;
2307 2307 position:absolute;
2308 2308 right:5px;
2309 2309 top:5px;
2310 2310 width:16px;
2311 2311 }
2312 2312
2313 2313 div#legend_container table,div#legend_choices table {
2314 2314 width:auto !important;
2315 2315 }
2316 2316
2317 2317 table#permissions_manage {
2318 2318 width:0 !important;
2319 2319 }
2320 2320
2321 2321 table#permissions_manage span.private_repo_msg {
2322 2322 font-size:0.8em;
2323 2323 opacity:0.6px;
2324 2324 }
2325 2325
2326 2326 table#permissions_manage td.private_repo_msg {
2327 2327 font-size:0.8em;
2328 2328 }
2329 2329
2330 2330 table#permissions_manage tr#add_perm_input td {
2331 2331 vertical-align:middle;
2332 2332 }
2333 2333
2334 2334 div.gravatar {
2335 2335 background-color:#FFF;
2336 2336 border:1px solid #D0D0D0;
2337 2337 float:left;
2338 2338 margin-right:0.7em;
2339 2339 padding:2px 2px 0;
2340 2340
2341 2341 -webkit-border-radius: 6px;
2342 2342 -khtml-border-radius: 6px;
2343 2343 -moz-border-radius: 6px;
2344 2344 border-radius: 6px;
2345 2345
2346 2346 }
2347 2347
2348 2348 div.gravatar img {
2349 2349 -webkit-border-radius: 4px;
2350 2350 -khtml-border-radius: 4px;
2351 2351 -moz-border-radius: 4px;
2352 2352 border-radius: 4px;
2353 2353 }
2354 2354
2355 2355 #header,#content,#footer {
2356 2356 min-width:978px;
2357 2357 }
2358 2358
2359 2359 #content {
2360 2360 clear:both;
2361 2361 overflow:hidden;
2362 2362 padding:14px 10px;
2363 2363 }
2364 2364
2365 2365 #content div.box div.title div.search {
2366 2366 background:url("../images/title_link.png") no-repeat top left;
2367 2367 border-left:1px solid #316293;
2368 2368 }
2369 2369
2370 2370 #content div.box div.title div.search div.input input {
2371 2371 border:1px solid #316293;
2372 2372 }
2373 2373
2374 2374
2375 2375 input.ui-button-small {
2376 2376 background:#e5e3e3 url("../images/button.png") repeat-x !important;
2377 2377 border-top:1px solid #DDD !important;
2378 2378 border-left:1px solid #c6c6c6 !important;
2379 2379 border-right:1px solid #DDD !important;
2380 2380 border-bottom:1px solid #c6c6c6 !important;
2381 2381 color:#515151 !important;
2382 2382 outline:none !important;
2383 2383 margin:0 !important;
2384 2384 -webkit-border-radius: 4px 4px 4px 4px !important;
2385 2385 -khtml-border-radius: 4px 4px 4px 4px !important;
2386 2386 -moz-border-radius: 4px 4px 4px 4px !important;
2387 2387 border-radius: 4px 4px 4px 4px !important;
2388 2388 box-shadow: 0 1px 0 #ececec !important;
2389 2389 cursor: pointer !important;
2390 2390 }
2391 2391
2392 2392 input.ui-button-small:hover {
2393 2393 background:#b4b4b4 url("../images/button_selected.png") repeat-x !important;
2394 2394 border-top:1px solid #ccc !important;
2395 2395 border-left:1px solid #bebebe !important;
2396 2396 border-right:1px solid #b1b1b1 !important;
2397 2397 border-bottom:1px solid #afafaf !important;
2398 2398 }
2399 2399
2400 2400 input.ui-button-small-blue {
2401 2401 background:#4e85bb url("../images/button_highlight.png") repeat-x;
2402 2402 border-top:1px solid #5c91a4;
2403 2403 border-left:1px solid #2a6f89;
2404 2404 border-right:1px solid #2b7089;
2405 2405 border-bottom:1px solid #1a6480;
2406 2406 color:#fff;
2407 2407 -webkit-border-radius: 4px 4px 4px 4px;
2408 2408 -khtml-border-radius: 4px 4px 4px 4px;
2409 2409 -moz-border-radius: 4px 4px 4px 4px;
2410 2410 border-radius: 4px 4px 4px 4px;
2411 2411 box-shadow: 0 1px 0 #ececec;
2412 2412 cursor: pointer;
2413 2413 }
2414 2414
2415 2415 input.ui-button-small-blue:hover {
2416 2416
2417 2417 }
2418 2418
2419 2419
2420 2420 ins,div.options a:hover {
2421 2421 text-decoration:none;
2422 2422 }
2423 2423
2424 2424 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 {
2425 2425 border:none;
2426 2426 }
2427 2427
2428 2428 img.icon,.right .merge img {
2429 2429 vertical-align:bottom;
2430 2430 }
2431 2431
2432 2432 #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 {
2433 2433 float:right;
2434 2434 margin:0;
2435 2435 padding:0;
2436 2436 }
2437 2437
2438 2438
2439 2439 #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 {
2440 2440 float:left;
2441 2441 }
2442 2442
2443 2443 #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 {
2444 2444 display:none;
2445 2445 }
2446 2446
2447 2447 #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 {
2448 2448 display:block;
2449 2449 }
2450 2450
2451 2451 #content div.graph{
2452 2452 padding:0 10px 10px;
2453 2453 }
2454 2454
2455 2455 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2456 2456 color:#bfe3ff;
2457 2457 }
2458 2458
2459 2459 #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 {
2460 2460 margin:10px 24px 10px 44px;
2461 2461 }
2462 2462
2463 2463 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2464 2464 clear:both;
2465 2465 overflow:hidden;
2466 2466 margin:0;
2467 2467 padding:0 20px 10px;
2468 2468 }
2469 2469
2470 2470 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2471 2471 clear:both;
2472 2472 overflow:hidden;
2473 2473 margin:0;
2474 2474 padding:0;
2475 2475 }
2476 2476
2477 2477 #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 {
2478 2478 height:1%;
2479 2479 display:block;
2480 2480 color:#363636;
2481 2481 margin:0;
2482 2482 padding:2px 0 0;
2483 2483 }
2484 2484
2485 2485 #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 {
2486 2486 background:#FBE3E4;
2487 2487 border-top:1px solid #e1b2b3;
2488 2488 border-left:1px solid #e1b2b3;
2489 2489 border-right:1px solid #FBC2C4;
2490 2490 border-bottom:1px solid #FBC2C4;
2491 2491 }
2492 2492
2493 2493 #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 {
2494 2494 background:#E6EFC2;
2495 2495 border-top:1px solid #cebb98;
2496 2496 border-left:1px solid #cebb98;
2497 2497 border-right:1px solid #c6d880;
2498 2498 border-bottom:1px solid #c6d880;
2499 2499 }
2500 2500
2501 2501 #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 {
2502 2502 margin:0;
2503 2503 }
2504 2504
2505 2505 #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{
2506 2506 margin:0 0 0 0px !important;
2507 2507 padding:0;
2508 2508 }
2509 2509
2510 2510 #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 {
2511 2511 margin:0 0 0 200px;
2512 2512 padding:0;
2513 2513 }
2514 2514
2515 2515
2516 2516 #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 {
2517 2517 color:#000;
2518 2518 text-decoration:none;
2519 2519 }
2520 2520
2521 2521 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2522 2522 border:1px solid #666;
2523 2523 }
2524 2524
2525 2525 #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 {
2526 2526 clear:both;
2527 2527 overflow:hidden;
2528 2528 margin:0;
2529 2529 padding:8px 0 2px;
2530 2530 }
2531 2531
2532 2532 #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 {
2533 2533 float:left;
2534 2534 margin:0;
2535 2535 }
2536 2536
2537 2537 #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 {
2538 2538 height:1%;
2539 2539 display:block;
2540 2540 float:left;
2541 2541 margin:2px 0 0 4px;
2542 2542 }
2543 2543
2544 2544 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 {
2545 2545 color:#000;
2546 2546 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2547 2547 font-size:11px;
2548 2548 font-weight:700;
2549 2549 margin:0;
2550 2550 }
2551 2551
2552 2552 input.ui-button {
2553 2553 background:#e5e3e3 url("../images/button.png") repeat-x;
2554 2554 border-top:1px solid #DDD;
2555 2555 border-left:1px solid #c6c6c6;
2556 2556 border-right:1px solid #DDD;
2557 2557 border-bottom:1px solid #c6c6c6;
2558 color:#515151;
2558 color:#515151 !important;
2559 2559 outline:none;
2560 2560 margin:0;
2561 2561 padding:6px 12px;
2562 2562 -webkit-border-radius: 4px 4px 4px 4px;
2563 2563 -khtml-border-radius: 4px 4px 4px 4px;
2564 2564 -moz-border-radius: 4px 4px 4px 4px;
2565 2565 border-radius: 4px 4px 4px 4px;
2566 2566 box-shadow: 0 1px 0 #ececec;
2567 2567 cursor: pointer;
2568 2568 }
2569 2569
2570 2570 input.ui-button:hover {
2571 2571 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2572 2572 border-top:1px solid #ccc;
2573 2573 border-left:1px solid #bebebe;
2574 2574 border-right:1px solid #b1b1b1;
2575 2575 border-bottom:1px solid #afafaf;
2576 2576 }
2577 2577
2578 2578 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2579 2579 display:inline;
2580 2580 }
2581 2581
2582 2582 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2583 2583 margin:10px 0 0 200px;
2584 2584 padding:0;
2585 2585 }
2586 2586
2587 2587 #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 {
2588 2588 margin:10px 0 0;
2589 2589 }
2590 2590
2591 2591 #content div.box table td.user,#content div.box table td.address {
2592 2592 width:10%;
2593 2593 text-align:center;
2594 2594 }
2595 2595
2596 2596 #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 {
2597 2597 text-align:right;
2598 2598 margin:6px 0 0;
2599 2599 padding:0;
2600 2600 }
2601 2601
2602 2602
2603 2603 #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 {
2604 2604 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2605 2605 border-top:1px solid #ccc;
2606 2606 border-left:1px solid #bebebe;
2607 2607 border-right:1px solid #b1b1b1;
2608 2608 border-bottom:1px solid #afafaf;
2609 2609 color:#515151;
2610 2610 margin:0;
2611 2611 padding:6px 12px;
2612 2612 }
2613 2613
2614 2614 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2615 2615 text-align:left;
2616 2616 float:left;
2617 2617 margin:0;
2618 2618 padding:0;
2619 2619 }
2620 2620
2621 2621 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2622 2622 height:1%;
2623 2623 display:block;
2624 2624 float:left;
2625 2625 background:#ebebeb url("../images/pager.png") repeat-x;
2626 2626 border-top:1px solid #dedede;
2627 2627 border-left:1px solid #cfcfcf;
2628 2628 border-right:1px solid #c4c4c4;
2629 2629 border-bottom:1px solid #c4c4c4;
2630 2630 color:#4A4A4A;
2631 2631 font-weight:700;
2632 2632 margin:0;
2633 2633 padding:6px 8px;
2634 2634 }
2635 2635
2636 2636 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2637 2637 color:#B4B4B4;
2638 2638 padding:6px;
2639 2639 }
2640 2640
2641 2641 #login,#register {
2642 2642 width:520px;
2643 2643 margin:10% auto 0;
2644 2644 padding:0;
2645 2645 }
2646 2646
2647 2647 #login div.color,#register div.color {
2648 2648 clear:both;
2649 2649 overflow:hidden;
2650 2650 background:#FFF;
2651 2651 margin:10px auto 0;
2652 2652 padding:3px 3px 3px 0;
2653 2653 }
2654 2654
2655 2655 #login div.color a,#register div.color a {
2656 2656 width:20px;
2657 2657 height:20px;
2658 2658 display:block;
2659 2659 float:left;
2660 2660 margin:0 0 0 3px;
2661 2661 padding:0;
2662 2662 }
2663 2663
2664 2664 #login div.title h5,#register div.title h5 {
2665 2665 color:#fff;
2666 2666 margin:10px;
2667 2667 padding:0;
2668 2668 }
2669 2669
2670 2670 #login div.form div.fields div.field,#register div.form div.fields div.field {
2671 2671 clear:both;
2672 2672 overflow:hidden;
2673 2673 margin:0;
2674 2674 padding:0 0 10px;
2675 2675 }
2676 2676
2677 2677 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2678 2678 height:1%;
2679 2679 display:block;
2680 2680 color:red;
2681 2681 margin:8px 0 0;
2682 2682 padding:0;
2683 2683 max-width: 320px;
2684 2684 }
2685 2685
2686 2686 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2687 2687 color:#000;
2688 2688 font-weight:700;
2689 2689 }
2690 2690
2691 2691 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2692 2692 float:left;
2693 2693 margin:0;
2694 2694 padding:0;
2695 2695 }
2696 2696
2697 2697 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2698 2698 margin:0 0 0 184px;
2699 2699 padding:0;
2700 2700 }
2701 2701
2702 2702 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2703 2703 color:#565656;
2704 2704 font-weight:700;
2705 2705 }
2706 2706
2707 2707 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2708 2708 color:#000;
2709 2709 font-size:1em;
2710 2710 font-weight:700;
2711 2711 font-family:Verdana, Helvetica, Sans-Serif;
2712 2712 margin:0;
2713 2713 }
2714 2714
2715 2715 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2716 2716 width:600px;
2717 2717 }
2718 2718
2719 2719 #changeset_content .container .left,#graph_content .container .left {
2720 2720 float:left;
2721 2721 width:70%;
2722 2722 padding-left:5px;
2723 2723 }
2724 2724
2725 2725 #changeset_content .container .left .date,.ac .match {
2726 2726 font-weight:700;
2727 2727 padding-top: 5px;
2728 2728 padding-bottom:5px;
2729 2729 }
2730 2730
2731 2731 div#legend_container table td,div#legend_choices table td {
2732 2732 border:none !important;
2733 2733 height:20px !important;
2734 2734 padding:0 !important;
2735 2735 }
2736 2736
2737 2737 #q_filter{
2738 2738 border:0 none;
2739 2739 color:#AAAAAA;
2740 2740 margin-bottom:-4px;
2741 2741 margin-top:-4px;
2742 2742 padding-left:3px;
2743 2743 }
2744 2744
2745 2745 #node_filter{
2746 2746 border:0px solid #545454;
2747 2747 color:#AAAAAA;
2748 2748 padding-left:3px;
2749 2749 }
General Comments 0
You need to be logged in to leave comments. Login now