##// END OF EJS Templates
merged latest fixes for stable
marcink -
r1250:cc425162 default
parent child Browse files
Show More
@@ -1,263 +1,266 b''
1 .. _changelog:
1 .. _changelog:
2
2
3 Changelog
3 Changelog
4 =========
4 =========
5
5
6
6
7 1.1.8 (**2011-04-XX**)
7 1.1.8 (**2011-04-XX**)
8 ======================
8 ======================
9
9
10 news
10 news
11 ----
11 ----
12
12
13 fixes
13 fixes
14 -----
14 -----
15
15
16 - fixed #140 freeze of python dateutil library, since new version is python2.x
16 - fixed #140 freeze of python dateutil library, since new version is python2.x
17 incompatible
17 incompatible
18 - setup-app will check for write permission in given path
18 - setup-app will check for write permission in given path
19 - cleaned up license info issue #149
19 - cleaned up license info issue #149
20 - fixes for issues #137,#116 and #116, problems with unicode and
20 - fixes for issues #137,#116 and #116, problems with unicode and
21 accented characters.
21 accented characters.
22 - fixes crashes on gravatar, when passed in email as unicode
22 - fixes crashes on gravatar, when passed in email as unicode
23 - fixed tooltip flickering problems
23 - fixed tooltip flickering problems
24 - fixed came_from redirection on windows
24 - fixed came_from redirection on windows
25 - fixed logging modules,and sql formatters
25 - fixed logging modules,and sql formatters
26 - windows fixes for os.kill #133
26 - windows fixes for os.kill #133
27 - fixes path splitting for windows issues #148
27 - fixes path splitting for windows issues #148
28 - fixed issue #143 wrong import on migration to 1.1.X
28 - fixed issue #143 wrong import on migration to 1.1.X
29 - fixed problems with displaying binary files, thanks to Thomas Waldmann
29 - fixed problems with displaying binary files, thanks to Thomas Waldmann
30 - removed name from archive files since it's breaking ui for long names
30 - removed name from archive files since it's breaking ui for long names
31 - fixed issue witg archive headers sent to browser, thanks to Thomas Waldmann
31 - fixed issue witg archive headers sent to browser, thanks to Thomas Waldmann
32 - fixed compatibility for 1024px displays, and larger dpi settings, thanks to
33 Thomas Waldmann
34 - fixed issue #166 summary pager was skipping 10 revisions on second page
32
35
33 1.1.7 (**2011-03-23**)
36 1.1.7 (**2011-03-23**)
34 ======================
37 ======================
35
38
36 news
39 news
37 ----
40 ----
38
41
39 fixes
42 fixes
40 -----
43 -----
41
44
42 - fixed (again) #136 installation support for FreeBSD
45 - fixed (again) #136 installation support for FreeBSD
43
46
44
47
45 1.1.6 (**2011-03-21**)
48 1.1.6 (**2011-03-21**)
46 ======================
49 ======================
47
50
48 news
51 news
49 ----
52 ----
50
53
51 fixes
54 fixes
52 -----
55 -----
53
56
54 - fixed #136 installation support for FreeBSD
57 - fixed #136 installation support for FreeBSD
55 - RhodeCode will check for python version during installation
58 - RhodeCode will check for python version during installation
56
59
57 1.1.5 (**2011-03-17**)
60 1.1.5 (**2011-03-17**)
58 ======================
61 ======================
59
62
60 news
63 news
61 ----
64 ----
62
65
63 - basic windows support, by exchanging pybcrypt into sha256 for windows only
66 - basic windows support, by exchanging pybcrypt into sha256 for windows only
64 highly inspired by idea of mantis406
67 highly inspired by idea of mantis406
65
68
66 fixes
69 fixes
67 -----
70 -----
68
71
69 - fixed sorting by author in main page
72 - fixed sorting by author in main page
70 - fixed crashes with diffs on binary files
73 - fixed crashes with diffs on binary files
71 - fixed #131 problem with boolean values for LDAP
74 - fixed #131 problem with boolean values for LDAP
72 - fixed #122 mysql problems thanks to striker69
75 - fixed #122 mysql problems thanks to striker69
73 - fixed problem with errors on calling raw/raw_files/annotate functions
76 - fixed problem with errors on calling raw/raw_files/annotate functions
74 with unknown revisions
77 with unknown revisions
75 - fixed returned rawfiles attachment names with international character
78 - fixed returned rawfiles attachment names with international character
76 - cleaned out docs, big thanks to Jason Harris
79 - cleaned out docs, big thanks to Jason Harris
77
80
78 1.1.4 (**2011-02-19**)
81 1.1.4 (**2011-02-19**)
79 ======================
82 ======================
80
83
81 news
84 news
82 ----
85 ----
83
86
84 fixes
87 fixes
85 -----
88 -----
86
89
87 - fixed formencode import problem on settings page, that caused server crash
90 - fixed formencode import problem on settings page, that caused server crash
88 when that page was accessed as first after server start
91 when that page was accessed as first after server start
89 - journal fixes
92 - journal fixes
90 - fixed option to access repository just by entering http://server/<repo_name>
93 - fixed option to access repository just by entering http://server/<repo_name>
91
94
92
95
93 1.1.3 (**2011-02-16**)
96 1.1.3 (**2011-02-16**)
94 ======================
97 ======================
95
98
96 news
99 news
97 ----
100 ----
98
101
99 - implemented #102 allowing the '.' character in username
102 - implemented #102 allowing the '.' character in username
100 - added option to access repository just by entering http://server/<repo_name>
103 - added option to access repository just by entering http://server/<repo_name>
101 - celery task ignores result for better performance
104 - celery task ignores result for better performance
102
105
103 fixes
106 fixes
104 -----
107 -----
105
108
106 - fixed ehlo command and non auth mail servers on smtp_lib. Thanks to
109 - fixed ehlo command and non auth mail servers on smtp_lib. Thanks to
107 apollo13 and Johan Walles
110 apollo13 and Johan Walles
108 - small fixes in journal
111 - small fixes in journal
109 - fixed problems with getting setting for celery from .ini files
112 - fixed problems with getting setting for celery from .ini files
110 - registration, password reset and login boxes share the same title as main
113 - registration, password reset and login boxes share the same title as main
111 application now
114 application now
112 - fixed #113: to high permissions to fork repository
115 - fixed #113: to high permissions to fork repository
113 - fixed problem with '[' chars in commit messages in journal
116 - fixed problem with '[' chars in commit messages in journal
114 - removed issue with space inside renamed repository after deletion
117 - removed issue with space inside renamed repository after deletion
115 - db transaction fixes when filesystem repository creation failed
118 - db transaction fixes when filesystem repository creation failed
116 - fixed #106 relation issues on databases different than sqlite
119 - fixed #106 relation issues on databases different than sqlite
117 - fixed static files paths links to use of url() method
120 - fixed static files paths links to use of url() method
118
121
119 1.1.2 (**2011-01-12**)
122 1.1.2 (**2011-01-12**)
120 ======================
123 ======================
121
124
122 news
125 news
123 ----
126 ----
124
127
125
128
126 fixes
129 fixes
127 -----
130 -----
128
131
129 - fixes #98 protection against float division of percentage stats
132 - fixes #98 protection against float division of percentage stats
130 - fixed graph bug
133 - fixed graph bug
131 - forced webhelpers version since it was making troubles during installation
134 - forced webhelpers version since it was making troubles during installation
132
135
133 1.1.1 (**2011-01-06**)
136 1.1.1 (**2011-01-06**)
134 ======================
137 ======================
135
138
136 news
139 news
137 ----
140 ----
138
141
139 - added force https option into ini files for easier https usage (no need to
142 - added force https option into ini files for easier https usage (no need to
140 set server headers with this options)
143 set server headers with this options)
141 - small css updates
144 - small css updates
142
145
143 fixes
146 fixes
144 -----
147 -----
145
148
146 - fixed #96 redirect loop on files view on repositories without changesets
149 - fixed #96 redirect loop on files view on repositories without changesets
147 - fixed #97 unicode string passed into server header in special cases (mod_wsgi)
150 - fixed #97 unicode string passed into server header in special cases (mod_wsgi)
148 and server crashed with errors
151 and server crashed with errors
149 - fixed large tooltips problems on main page
152 - fixed large tooltips problems on main page
150 - fixed #92 whoosh indexer is more error proof
153 - fixed #92 whoosh indexer is more error proof
151
154
152 1.1.0 (**2010-12-18**)
155 1.1.0 (**2010-12-18**)
153 ======================
156 ======================
154
157
155 news
158 news
156 ----
159 ----
157
160
158 - rewrite of internals for vcs >=0.1.10
161 - rewrite of internals for vcs >=0.1.10
159 - uses mercurial 1.7 with dotencode disabled for maintaining compatibility
162 - uses mercurial 1.7 with dotencode disabled for maintaining compatibility
160 with older clients
163 with older clients
161 - anonymous access, authentication via ldap
164 - anonymous access, authentication via ldap
162 - performance upgrade for cached repos list - each repository has it's own
165 - performance upgrade for cached repos list - each repository has it's own
163 cache that's invalidated when needed.
166 cache that's invalidated when needed.
164 - performance upgrades on repositories with large amount of commits (20K+)
167 - performance upgrades on repositories with large amount of commits (20K+)
165 - main page quick filter for filtering repositories
168 - main page quick filter for filtering repositories
166 - user dashboards with ability to follow chosen repositories actions
169 - user dashboards with ability to follow chosen repositories actions
167 - sends email to admin on new user registration
170 - sends email to admin on new user registration
168 - added cache/statistics reset options into repository settings
171 - added cache/statistics reset options into repository settings
169 - more detailed action logger (based on hooks) with pushed changesets lists
172 - more detailed action logger (based on hooks) with pushed changesets lists
170 and options to disable those hooks from admin panel
173 and options to disable those hooks from admin panel
171 - introduced new enhanced changelog for merges that shows more accurate results
174 - introduced new enhanced changelog for merges that shows more accurate results
172 - new improved and faster code stats (based on pygments lexers mapping tables,
175 - new improved and faster code stats (based on pygments lexers mapping tables,
173 showing up to 10 trending sources for each repository. Additionally stats
176 showing up to 10 trending sources for each repository. Additionally stats
174 can be disabled in repository settings.
177 can be disabled in repository settings.
175 - gui optimizations, fixed application width to 1024px
178 - gui optimizations, fixed application width to 1024px
176 - added cut off (for large files/changesets) limit into config files
179 - added cut off (for large files/changesets) limit into config files
177 - whoosh, celeryd, upgrade moved to paster command
180 - whoosh, celeryd, upgrade moved to paster command
178 - other than sqlite database backends can be used
181 - other than sqlite database backends can be used
179
182
180 fixes
183 fixes
181 -----
184 -----
182
185
183 - fixes #61 forked repo was showing only after cache expired
186 - fixes #61 forked repo was showing only after cache expired
184 - fixes #76 no confirmation on user deletes
187 - fixes #76 no confirmation on user deletes
185 - fixes #66 Name field misspelled
188 - fixes #66 Name field misspelled
186 - fixes #72 block user removal when he owns repositories
189 - fixes #72 block user removal when he owns repositories
187 - fixes #69 added password confirmation fields
190 - fixes #69 added password confirmation fields
188 - fixes #87 RhodeCode crashes occasionally on updating repository owner
191 - fixes #87 RhodeCode crashes occasionally on updating repository owner
189 - fixes #82 broken annotations on files with more than 1 blank line at the end
192 - fixes #82 broken annotations on files with more than 1 blank line at the end
190 - a lot of fixes and tweaks for file browser
193 - a lot of fixes and tweaks for file browser
191 - fixed detached session issues
194 - fixed detached session issues
192 - fixed when user had no repos he would see all repos listed in my account
195 - fixed when user had no repos he would see all repos listed in my account
193 - fixed ui() instance bug when global hgrc settings was loaded for server
196 - fixed ui() instance bug when global hgrc settings was loaded for server
194 instance and all hgrc options were merged with our db ui() object
197 instance and all hgrc options were merged with our db ui() object
195 - numerous small bugfixes
198 - numerous small bugfixes
196
199
197 (special thanks for TkSoh for detailed feedback)
200 (special thanks for TkSoh for detailed feedback)
198
201
199
202
200 1.0.2 (**2010-11-12**)
203 1.0.2 (**2010-11-12**)
201 ======================
204 ======================
202
205
203 news
206 news
204 ----
207 ----
205
208
206 - tested under python2.7
209 - tested under python2.7
207 - bumped sqlalchemy and celery versions
210 - bumped sqlalchemy and celery versions
208
211
209 fixes
212 fixes
210 -----
213 -----
211
214
212 - fixed #59 missing graph.js
215 - fixed #59 missing graph.js
213 - fixed repo_size crash when repository had broken symlinks
216 - fixed repo_size crash when repository had broken symlinks
214 - fixed python2.5 crashes.
217 - fixed python2.5 crashes.
215
218
216
219
217 1.0.1 (**2010-11-10**)
220 1.0.1 (**2010-11-10**)
218 ======================
221 ======================
219
222
220 news
223 news
221 ----
224 ----
222
225
223 - small css updated
226 - small css updated
224
227
225 fixes
228 fixes
226 -----
229 -----
227
230
228 - fixed #53 python2.5 incompatible enumerate calls
231 - fixed #53 python2.5 incompatible enumerate calls
229 - fixed #52 disable mercurial extension for web
232 - fixed #52 disable mercurial extension for web
230 - fixed #51 deleting repositories don't delete it's dependent objects
233 - fixed #51 deleting repositories don't delete it's dependent objects
231
234
232
235
233 1.0.0 (**2010-11-02**)
236 1.0.0 (**2010-11-02**)
234 ======================
237 ======================
235
238
236 - security bugfix simplehg wasn't checking for permissions on commands
239 - security bugfix simplehg wasn't checking for permissions on commands
237 other than pull or push.
240 other than pull or push.
238 - fixed doubled messages after push or pull in admin journal
241 - fixed doubled messages after push or pull in admin journal
239 - templating and css corrections, fixed repo switcher on chrome, updated titles
242 - templating and css corrections, fixed repo switcher on chrome, updated titles
240 - admin menu accessible from options menu on repository view
243 - admin menu accessible from options menu on repository view
241 - permissions cached queries
244 - permissions cached queries
242
245
243 1.0.0rc4 (**2010-10-12**)
246 1.0.0rc4 (**2010-10-12**)
244 ==========================
247 ==========================
245
248
246 - fixed python2.5 missing simplejson imports (thanks to Jens BΓ€ckman)
249 - fixed python2.5 missing simplejson imports (thanks to Jens BΓ€ckman)
247 - removed cache_manager settings from sqlalchemy meta
250 - removed cache_manager settings from sqlalchemy meta
248 - added sqlalchemy cache settings to ini files
251 - added sqlalchemy cache settings to ini files
249 - validated password length and added second try of failure on paster setup-app
252 - validated password length and added second try of failure on paster setup-app
250 - fixed setup database destroy prompt even when there was no db
253 - fixed setup database destroy prompt even when there was no db
251
254
252
255
253 1.0.0rc3 (**2010-10-11**)
256 1.0.0rc3 (**2010-10-11**)
254 =========================
257 =========================
255
258
256 - fixed i18n during installation.
259 - fixed i18n during installation.
257
260
258 1.0.0rc2 (**2010-10-11**)
261 1.0.0rc2 (**2010-10-11**)
259 =========================
262 =========================
260
263
261 - Disabled dirsize in file browser, it's causing nasty bug when dir renames
264 - Disabled dirsize in file browser, it's causing nasty bug when dir renames
262 occure. After vcs is fixed it'll be put back again.
265 occure. After vcs is fixed it'll be put back again.
263 - templating/css rewrites, optimized css. No newline at end of file
266 - templating/css rewrites, optimized css.
@@ -1,54 +1,61 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.controllers.shortlog
3 rhodecode.controllers.shortlog
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
5
6 Shortlog controller for rhodecode
6 Shortlog controller for rhodecode
7
7
8 :created_on: Apr 18, 2010
8 :created_on: Apr 18, 2010
9 :author: marcink
9 :author: marcink
10 :copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 :license: GPLv3, see COPYING for more details.
11 :license: GPLv3, see COPYING for more details.
12 """
12 """
13 # This program is free software: you can redistribute it and/or modify
13 # This program is free software: you can redistribute it and/or modify
14 # it under the terms of the GNU General Public License as published by
14 # it under the terms of the GNU General Public License as published by
15 # the Free Software Foundation, either version 3 of the License, or
15 # the Free Software Foundation, either version 3 of the License, or
16 # (at your option) any later version.
16 # (at your option) any later version.
17 #
17 #
18 # This program is distributed in the hope that it will be useful,
18 # This program is distributed in the hope that it will be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 # GNU General Public License for more details.
21 # GNU General Public License for more details.
22 #
22 #
23 # You should have received a copy of the GNU General Public License
23 # You should have received a copy of the GNU General Public License
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25
25
26 import logging
26 import logging
27
27
28 from pylons import tmpl_context as c, request
28 from pylons import tmpl_context as c, request, url
29
29
30 from webhelpers.paginate import Page
30 from webhelpers.paginate import Page
31
31
32 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
32 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
33 from rhodecode.lib.base import BaseController, render
33 from rhodecode.lib.base import BaseController, render
34 from rhodecode.model.scm import ScmModel
34 from rhodecode.model.scm import ScmModel
35
35
36 log = logging.getLogger(__name__)
36 log = logging.getLogger(__name__)
37
37
38 class ShortlogController(BaseController):
38 class ShortlogController(BaseController):
39
39
40 @LoginRequired()
40 @LoginRequired()
41 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
41 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
42 'repository.admin')
42 'repository.admin')
43 def __before__(self):
43 def __before__(self):
44 super(ShortlogController, self).__before__()
44 super(ShortlogController, self).__before__()
45
45
46 def index(self):
46 def index(self, repo_name):
47 p = int(request.params.get('page', 1))
47 p = int(request.params.get('page', 1))
48 size = int(request.params.get('size', 20))
49
50 print repo_name
51 def url_generator(**kw):
52 return url('shortlog_home', repo_name=repo_name, size=size, **kw)
53
48 repo = ScmModel().get_repo(c.repo_name)
54 repo = ScmModel().get_repo(c.repo_name)
49 c.repo_changesets = Page(repo, page=p, items_per_page=20)
55 c.repo_changesets = Page(repo, page=p, items_per_page=size,
56 url=url_generator)
50 c.shortlog_data = render('shortlog/shortlog_data.html')
57 c.shortlog_data = render('shortlog/shortlog_data.html')
51 if request.params.get('partial'):
58 if request.params.get('partial'):
52 return c.shortlog_data
59 return c.shortlog_data
53 r = render('shortlog/shortlog.html')
60 r = render('shortlog/shortlog.html')
54 return r
61 return r
@@ -1,141 +1,141 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.controllers.summary
3 rhodecode.controllers.summary
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
5
6 Summary controller for Rhodecode
6 Summary controller for Rhodecode
7
7
8 :created_on: Apr 18, 2010
8 :created_on: Apr 18, 2010
9 :author: marcink
9 :author: marcink
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 :license: GPLv3, see COPYING for more details.
11 :license: GPLv3, see COPYING for more details.
12 """
12 """
13 # This program is free software: you can redistribute it and/or modify
13 # This program is free software: you can redistribute it and/or modify
14 # it under the terms of the GNU General Public License as published by
14 # it under the terms of the GNU General Public License as published by
15 # the Free Software Foundation, either version 3 of the License, or
15 # the Free Software Foundation, either version 3 of the License, or
16 # (at your option) any later version.
16 # (at your option) any later version.
17 #
17 #
18 # This program is distributed in the hope that it will be useful,
18 # This program is distributed in the hope that it will be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 # GNU General Public License for more details.
21 # GNU General Public License for more details.
22 #
22 #
23 # You should have received a copy of the GNU General Public License
23 # You should have received a copy of the GNU General Public License
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25
25
26 import calendar
26 import calendar
27 import logging
27 import logging
28 from time import mktime
28 from time import mktime
29 from datetime import datetime, timedelta, date
29 from datetime import datetime, timedelta, date
30
30
31 from vcs.exceptions import ChangesetError
31 from vcs.exceptions import ChangesetError
32
32
33 from pylons import tmpl_context as c, request, url
33 from pylons import tmpl_context as c, request, url
34 from pylons.i18n.translation import _
34 from pylons.i18n.translation import _
35
35
36 from rhodecode.model.scm import ScmModel
36 from rhodecode.model.scm import ScmModel
37 from rhodecode.model.db import Statistics
37 from rhodecode.model.db import Statistics
38
38
39 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
39 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
40 from rhodecode.lib.base import BaseController, render
40 from rhodecode.lib.base import BaseController, render
41 from rhodecode.lib.utils import OrderedDict, EmptyChangeset
41 from rhodecode.lib.utils import OrderedDict, EmptyChangeset
42
42
43 from rhodecode.lib.celerylib import run_task
43 from rhodecode.lib.celerylib import run_task
44 from rhodecode.lib.celerylib.tasks import get_commits_stats
44 from rhodecode.lib.celerylib.tasks import get_commits_stats
45
45
46 from webhelpers.paginate import Page
46 from webhelpers.paginate import Page
47
47
48 try:
48 try:
49 import json
49 import json
50 except ImportError:
50 except ImportError:
51 #python 2.5 compatibility
51 #python 2.5 compatibility
52 import simplejson as json
52 import simplejson as json
53 log = logging.getLogger(__name__)
53 log = logging.getLogger(__name__)
54
54
55 class SummaryController(BaseController):
55 class SummaryController(BaseController):
56
56
57 @LoginRequired()
57 @LoginRequired()
58 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
58 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
59 'repository.admin')
59 'repository.admin')
60 def __before__(self):
60 def __before__(self):
61 super(SummaryController, self).__before__()
61 super(SummaryController, self).__before__()
62
62
63 def index(self):
63 def index(self, repo_name):
64 scm_model = ScmModel()
64 scm_model = ScmModel()
65 c.repo_info = scm_model.get_repo(c.repo_name)
65 c.repo_info = scm_model.get_repo(c.repo_name)
66 c.following = scm_model.is_following_repo(c.repo_name,
66 c.following = scm_model.is_following_repo(c.repo_name,
67 c.rhodecode_user.user_id)
67 c.rhodecode_user.user_id)
68 def url_generator(**kw):
68 def url_generator(**kw):
69 return url('shortlog_home', repo_name=c.repo_name, **kw)
69 return url('shortlog_home', repo_name=repo_name, size=10, **kw)
70
70
71 c.repo_changesets = Page(c.repo_info, page=1, items_per_page=10,
71 c.repo_changesets = Page(c.repo_info, page=1,
72 url=url_generator)
72 items_per_page=10, url=url_generator)
73
73
74 e = request.environ
74 e = request.environ
75
75
76 if self.rhodecode_user.username == 'default':
76 if self.rhodecode_user.username == 'default':
77 password = ':default'
77 password = ':default'
78 else:
78 else:
79 password = ''
79 password = ''
80
80
81 uri = u'%(protocol)s://%(user)s%(password)s@%(host)s%(prefix)s/%(repo_name)s' % {
81 uri = u'%(protocol)s://%(user)s%(password)s@%(host)s%(prefix)s/%(repo_name)s' % {
82 'protocol': e.get('wsgi.url_scheme'),
82 'protocol': e.get('wsgi.url_scheme'),
83 'user':str(c.rhodecode_user.username),
83 'user':str(c.rhodecode_user.username),
84 'password':password,
84 'password':password,
85 'host':e.get('HTTP_HOST'),
85 'host':e.get('HTTP_HOST'),
86 'prefix':e.get('SCRIPT_NAME'),
86 'prefix':e.get('SCRIPT_NAME'),
87 'repo_name':c.repo_name, }
87 'repo_name':c.repo_name, }
88 c.clone_repo_url = uri
88 c.clone_repo_url = uri
89 c.repo_tags = OrderedDict()
89 c.repo_tags = OrderedDict()
90 for name, hash in c.repo_info.tags.items()[:10]:
90 for name, hash in c.repo_info.tags.items()[:10]:
91 try:
91 try:
92 c.repo_tags[name] = c.repo_info.get_changeset(hash)
92 c.repo_tags[name] = c.repo_info.get_changeset(hash)
93 except ChangesetError:
93 except ChangesetError:
94 c.repo_tags[name] = EmptyChangeset(hash)
94 c.repo_tags[name] = EmptyChangeset(hash)
95
95
96 c.repo_branches = OrderedDict()
96 c.repo_branches = OrderedDict()
97 for name, hash in c.repo_info.branches.items()[:10]:
97 for name, hash in c.repo_info.branches.items()[:10]:
98 try:
98 try:
99 c.repo_branches[name] = c.repo_info.get_changeset(hash)
99 c.repo_branches[name] = c.repo_info.get_changeset(hash)
100 except ChangesetError:
100 except ChangesetError:
101 c.repo_branches[name] = EmptyChangeset(hash)
101 c.repo_branches[name] = EmptyChangeset(hash)
102
102
103 td = date.today() + timedelta(days=1)
103 td = date.today() + timedelta(days=1)
104 td_1m = td - timedelta(days=calendar.mdays[td.month])
104 td_1m = td - timedelta(days=calendar.mdays[td.month])
105 td_1y = td - timedelta(days=365)
105 td_1y = td - timedelta(days=365)
106
106
107 ts_min_m = mktime(td_1m.timetuple())
107 ts_min_m = mktime(td_1m.timetuple())
108 ts_min_y = mktime(td_1y.timetuple())
108 ts_min_y = mktime(td_1y.timetuple())
109 ts_max_y = mktime(td.timetuple())
109 ts_max_y = mktime(td.timetuple())
110
110
111 if c.repo_info.dbrepo.enable_statistics:
111 if c.repo_info.dbrepo.enable_statistics:
112 c.no_data_msg = _('No data loaded yet')
112 c.no_data_msg = _('No data loaded yet')
113 run_task(get_commits_stats, c.repo_info.name, ts_min_y, ts_max_y)
113 run_task(get_commits_stats, c.repo_info.name, ts_min_y, ts_max_y)
114 else:
114 else:
115 c.no_data_msg = _('Statistics update are disabled for this repository')
115 c.no_data_msg = _('Statistics update are disabled for this repository')
116 c.ts_min = ts_min_m
116 c.ts_min = ts_min_m
117 c.ts_max = ts_max_y
117 c.ts_max = ts_max_y
118
118
119 stats = self.sa.query(Statistics)\
119 stats = self.sa.query(Statistics)\
120 .filter(Statistics.repository == c.repo_info.dbrepo)\
120 .filter(Statistics.repository == c.repo_info.dbrepo)\
121 .scalar()
121 .scalar()
122
122
123
123
124 if stats and stats.languages:
124 if stats and stats.languages:
125 c.no_data = False is c.repo_info.dbrepo.enable_statistics
125 c.no_data = False is c.repo_info.dbrepo.enable_statistics
126 lang_stats = json.loads(stats.languages)
126 lang_stats = json.loads(stats.languages)
127 c.commit_data = stats.commit_activity
127 c.commit_data = stats.commit_activity
128 c.overview_data = stats.commit_activity_combined
128 c.overview_data = stats.commit_activity_combined
129 c.trending_languages = json.dumps(OrderedDict(
129 c.trending_languages = json.dumps(OrderedDict(
130 sorted(lang_stats.items(), reverse=True,
130 sorted(lang_stats.items(), reverse=True,
131 key=lambda k: k[1])[:10]
131 key=lambda k: k[1])[:10]
132 )
132 )
133 )
133 )
134 else:
134 else:
135 c.commit_data = json.dumps({})
135 c.commit_data = json.dumps({})
136 c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 10] ])
136 c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 10] ])
137 c.trending_languages = json.dumps({})
137 c.trending_languages = json.dumps({})
138 c.no_data = True
138 c.no_data = True
139
139
140 return render('summary/summary.html')
140 return render('summary/summary.html')
141
141
@@ -1,403 +1,403 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.lib.celerylib.tasks
3 rhodecode.lib.celerylib.tasks
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
5
6 RhodeCode task modules, containing all task that suppose to be run
6 RhodeCode task modules, containing all task that suppose to be run
7 by celery daemon
7 by celery daemon
8
8
9 :created_on: Oct 6, 2010
9 :created_on: Oct 6, 2010
10 :author: marcink
10 :author: marcink
11 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
12 :license: GPLv3, see COPYING for more details.
12 :license: GPLv3, see COPYING for more details.
13 """
13 """
14 # This program is free software: you can redistribute it and/or modify
14 # This program is free software: you can redistribute it and/or modify
15 # it under the terms of the GNU General Public License as published by
15 # it under the terms of the GNU General Public License as published by
16 # the Free Software Foundation, either version 3 of the License, or
16 # the Free Software Foundation, either version 3 of the License, or
17 # (at your option) any later version.
17 # (at your option) any later version.
18 #
18 #
19 # This program is distributed in the hope that it will be useful,
19 # This program is distributed in the hope that it will be useful,
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 # GNU General Public License for more details.
22 # GNU General Public License for more details.
23 #
23 #
24 # You should have received a copy of the GNU General Public License
24 # You should have received a copy of the GNU General Public License
25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
26 from celery.decorators import task
26 from celery.decorators import task
27
27
28 import os
28 import os
29 import traceback
29 import traceback
30 import logging
30 import logging
31
31
32 from time import mktime
32 from time import mktime
33 from operator import itemgetter
33 from operator import itemgetter
34
34
35 from pylons import config
35 from pylons import config
36 from pylons.i18n.translation import _
36 from pylons.i18n.translation import _
37
37
38 from rhodecode.lib.celerylib import run_task, locked_task, str2bool
38 from rhodecode.lib.celerylib import run_task, locked_task, str2bool
39 from rhodecode.lib.helpers import person
39 from rhodecode.lib.helpers import person
40 from rhodecode.lib.smtp_mailer import SmtpMailer
40 from rhodecode.lib.smtp_mailer import SmtpMailer
41 from rhodecode.lib.utils import OrderedDict, add_cache
41 from rhodecode.lib.utils import OrderedDict, add_cache
42 from rhodecode.model import init_model
42 from rhodecode.model import init_model
43 from rhodecode.model import meta
43 from rhodecode.model import meta
44 from rhodecode.model.db import RhodeCodeUi
44 from rhodecode.model.db import RhodeCodeUi
45
45
46 from vcs.backends import get_repo
46 from vcs.backends import get_repo
47
47
48 from sqlalchemy import engine_from_config
48 from sqlalchemy import engine_from_config
49
49
50 add_cache(config)
50 add_cache(config)
51
51
52 try:
52 try:
53 import json
53 import json
54 except ImportError:
54 except ImportError:
55 #python 2.5 compatibility
55 #python 2.5 compatibility
56 import simplejson as json
56 import simplejson as json
57
57
58 __all__ = ['whoosh_index', 'get_commits_stats',
58 __all__ = ['whoosh_index', 'get_commits_stats',
59 'reset_user_password', 'send_email']
59 'reset_user_password', 'send_email']
60
60
61 CELERY_ON = str2bool(config['app_conf'].get('use_celery'))
61 CELERY_ON = str2bool(config['app_conf'].get('use_celery'))
62
62
63 def get_session():
63 def get_session():
64 if CELERY_ON:
64 if CELERY_ON:
65 engine = engine_from_config(config, 'sqlalchemy.db1.')
65 engine = engine_from_config(config, 'sqlalchemy.db1.')
66 init_model(engine)
66 init_model(engine)
67 sa = meta.Session()
67 sa = meta.Session()
68 return sa
68 return sa
69
69
70 def get_repos_path():
70 def get_repos_path():
71 sa = get_session()
71 sa = get_session()
72 q = sa.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == '/').one()
72 q = sa.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == '/').one()
73 return q.ui_value
73 return q.ui_value
74
74
75 @task(ignore_result=True)
75 @task(ignore_result=True)
76 @locked_task
76 @locked_task
77 def whoosh_index(repo_location, full_index):
77 def whoosh_index(repo_location, full_index):
78 #log = whoosh_index.get_logger()
78 #log = whoosh_index.get_logger()
79 from rhodecode.lib.indexers.daemon import WhooshIndexingDaemon
79 from rhodecode.lib.indexers.daemon import WhooshIndexingDaemon
80 index_location = config['index_dir']
80 index_location = config['index_dir']
81 WhooshIndexingDaemon(index_location=index_location,
81 WhooshIndexingDaemon(index_location=index_location,
82 repo_location=repo_location, sa=get_session())\
82 repo_location=repo_location, sa=get_session())\
83 .run(full_index=full_index)
83 .run(full_index=full_index)
84
84
85 @task(ignore_result=True)
85 @task(ignore_result=True)
86 @locked_task
86 @locked_task
87 def get_commits_stats(repo_name, ts_min_y, ts_max_y):
87 def get_commits_stats(repo_name, ts_min_y, ts_max_y):
88 try:
88 try:
89 log = get_commits_stats.get_logger()
89 log = get_commits_stats.get_logger()
90 except:
90 except:
91 log = logging.getLogger(__name__)
91 log = logging.getLogger(__name__)
92
92
93 from rhodecode.model.db import Statistics, Repository
93 from rhodecode.model.db import Statistics, Repository
94
94
95 #for js data compatibilty
95 #for js data compatibilty
96 author_key_cleaner = lambda k: person(k).replace('"', "")
96 author_key_cleaner = lambda k: person(k).replace('"', "")
97
97
98 commits_by_day_author_aggregate = {}
98 commits_by_day_author_aggregate = {}
99 commits_by_day_aggregate = {}
99 commits_by_day_aggregate = {}
100 repos_path = get_repos_path()
100 repos_path = get_repos_path()
101 p = os.path.join(repos_path, repo_name)
101 p = os.path.join(repos_path, repo_name)
102 repo = get_repo(p)
102 repo = get_repo(p)
103
103
104 skip_date_limit = True
104 skip_date_limit = True
105 parse_limit = 250 #limit for single task changeset parsing optimal for
105 parse_limit = 250 #limit for single task changeset parsing optimal for
106 last_rev = 0
106 last_rev = 0
107 last_cs = None
107 last_cs = None
108 timegetter = itemgetter('time')
108 timegetter = itemgetter('time')
109
109
110 sa = get_session()
110 sa = get_session()
111
111
112 dbrepo = sa.query(Repository)\
112 dbrepo = sa.query(Repository)\
113 .filter(Repository.repo_name == repo_name).scalar()
113 .filter(Repository.repo_name == repo_name).scalar()
114 cur_stats = sa.query(Statistics)\
114 cur_stats = sa.query(Statistics)\
115 .filter(Statistics.repository == dbrepo).scalar()
115 .filter(Statistics.repository == dbrepo).scalar()
116 if cur_stats:
116 if cur_stats:
117 last_rev = cur_stats.stat_on_revision
117 last_rev = cur_stats.stat_on_revision
118 if not repo.revisions:
118 if not repo.revisions:
119 return True
119 return True
120
120
121 if last_rev == repo.revisions[-1] and len(repo.revisions) > 1:
121 if last_rev == repo.revisions[-1] and len(repo.revisions) > 1:
122 #pass silently without any work if we're not on first revision or
122 #pass silently without any work if we're not on first revision or
123 #current state of parsing revision(from db marker) is the last revision
123 #current state of parsing revision(from db marker) is the last revision
124 return True
124 return True
125
125
126 if cur_stats:
126 if cur_stats:
127 commits_by_day_aggregate = OrderedDict(
127 commits_by_day_aggregate = OrderedDict(
128 json.loads(
128 json.loads(
129 cur_stats.commit_activity_combined))
129 cur_stats.commit_activity_combined))
130 commits_by_day_author_aggregate = json.loads(cur_stats.commit_activity)
130 commits_by_day_author_aggregate = json.loads(cur_stats.commit_activity)
131
131
132 log.debug('starting parsing %s', parse_limit)
132 log.debug('starting parsing %s', parse_limit)
133 lmktime = mktime
133 lmktime = mktime
134
134
135 last_rev = last_rev + 1 if last_rev > 0 else last_rev
135 last_rev = last_rev + 1 if last_rev > 0 else last_rev
136 for rev in repo.revisions[last_rev:last_rev + parse_limit]:
136 for rev in repo.revisions[last_rev:last_rev + parse_limit]:
137 last_cs = cs = repo.get_changeset(rev)
137 last_cs = cs = repo.get_changeset(rev)
138 k = lmktime([cs.date.timetuple()[0], cs.date.timetuple()[1],
138 k = lmktime([cs.date.timetuple()[0], cs.date.timetuple()[1],
139 cs.date.timetuple()[2], 0, 0, 0, 0, 0, 0])
139 cs.date.timetuple()[2], 0, 0, 0, 0, 0, 0])
140
140
141 if commits_by_day_author_aggregate.has_key(author_key_cleaner(cs.author)):
141 if commits_by_day_author_aggregate.has_key(author_key_cleaner(cs.author)):
142 try:
142 try:
143 l = [timegetter(x) for x in commits_by_day_author_aggregate\
143 l = [timegetter(x) for x in commits_by_day_author_aggregate\
144 [author_key_cleaner(cs.author)]['data']]
144 [author_key_cleaner(cs.author)]['data']]
145 time_pos = l.index(k)
145 time_pos = l.index(k)
146 except ValueError:
146 except ValueError:
147 time_pos = False
147 time_pos = False
148
148
149 if time_pos >= 0 and time_pos is not False:
149 if time_pos >= 0 and time_pos is not False:
150
150
151 datadict = commits_by_day_author_aggregate\
151 datadict = commits_by_day_author_aggregate\
152 [author_key_cleaner(cs.author)]['data'][time_pos]
152 [author_key_cleaner(cs.author)]['data'][time_pos]
153
153
154 datadict["commits"] += 1
154 datadict["commits"] += 1
155 datadict["added"] += len(cs.added)
155 datadict["added"] += len(cs.added)
156 datadict["changed"] += len(cs.changed)
156 datadict["changed"] += len(cs.changed)
157 datadict["removed"] += len(cs.removed)
157 datadict["removed"] += len(cs.removed)
158
158
159 else:
159 else:
160 if k >= ts_min_y and k <= ts_max_y or skip_date_limit:
160 if k >= ts_min_y and k <= ts_max_y or skip_date_limit:
161
161
162 datadict = {"time":k,
162 datadict = {"time":k,
163 "commits":1,
163 "commits":1,
164 "added":len(cs.added),
164 "added":len(cs.added),
165 "changed":len(cs.changed),
165 "changed":len(cs.changed),
166 "removed":len(cs.removed),
166 "removed":len(cs.removed),
167 }
167 }
168 commits_by_day_author_aggregate\
168 commits_by_day_author_aggregate\
169 [author_key_cleaner(cs.author)]['data'].append(datadict)
169 [author_key_cleaner(cs.author)]['data'].append(datadict)
170
170
171 else:
171 else:
172 if k >= ts_min_y and k <= ts_max_y or skip_date_limit:
172 if k >= ts_min_y and k <= ts_max_y or skip_date_limit:
173 commits_by_day_author_aggregate[author_key_cleaner(cs.author)] = {
173 commits_by_day_author_aggregate[author_key_cleaner(cs.author)] = {
174 "label":author_key_cleaner(cs.author),
174 "label":author_key_cleaner(cs.author),
175 "data":[{"time":k,
175 "data":[{"time":k,
176 "commits":1,
176 "commits":1,
177 "added":len(cs.added),
177 "added":len(cs.added),
178 "changed":len(cs.changed),
178 "changed":len(cs.changed),
179 "removed":len(cs.removed),
179 "removed":len(cs.removed),
180 }],
180 }],
181 "schema":["commits"],
181 "schema":["commits"],
182 }
182 }
183
183
184 #gather all data by day
184 #gather all data by day
185 if commits_by_day_aggregate.has_key(k):
185 if commits_by_day_aggregate.has_key(k):
186 commits_by_day_aggregate[k] += 1
186 commits_by_day_aggregate[k] += 1
187 else:
187 else:
188 commits_by_day_aggregate[k] = 1
188 commits_by_day_aggregate[k] = 1
189
189
190 overview_data = sorted(commits_by_day_aggregate.items(), key=itemgetter(0))
190 overview_data = sorted(commits_by_day_aggregate.items(), key=itemgetter(0))
191 if not commits_by_day_author_aggregate:
191 if not commits_by_day_author_aggregate:
192 commits_by_day_author_aggregate[author_key_cleaner(repo.contact)] = {
192 commits_by_day_author_aggregate[author_key_cleaner(repo.contact)] = {
193 "label":author_key_cleaner(repo.contact),
193 "label":author_key_cleaner(repo.contact),
194 "data":[0, 1],
194 "data":[0, 1],
195 "schema":["commits"],
195 "schema":["commits"],
196 }
196 }
197
197
198 stats = cur_stats if cur_stats else Statistics()
198 stats = cur_stats if cur_stats else Statistics()
199 stats.commit_activity = json.dumps(commits_by_day_author_aggregate)
199 stats.commit_activity = json.dumps(commits_by_day_author_aggregate)
200 stats.commit_activity_combined = json.dumps(overview_data)
200 stats.commit_activity_combined = json.dumps(overview_data)
201
201
202 log.debug('last revison %s', last_rev)
202 log.debug('last revison %s', last_rev)
203 leftovers = len(repo.revisions[last_rev:])
203 leftovers = len(repo.revisions[last_rev:])
204 log.debug('revisions to parse %s', leftovers)
204 log.debug('revisions to parse %s', leftovers)
205
205
206 if last_rev == 0 or leftovers < parse_limit:
206 if last_rev == 0 or leftovers < parse_limit:
207 log.debug('getting code trending stats')
207 log.debug('getting code trending stats')
208 stats.languages = json.dumps(__get_codes_stats(repo_name))
208 stats.languages = json.dumps(__get_codes_stats(repo_name))
209
209
210 stats.repository = dbrepo
210 stats.repository = dbrepo
211 stats.stat_on_revision = last_cs.revision
211 stats.stat_on_revision = last_cs.revision if last_cs else 0
212
212
213 try:
213 try:
214 sa.add(stats)
214 sa.add(stats)
215 sa.commit()
215 sa.commit()
216 except:
216 except:
217 log.error(traceback.format_exc())
217 log.error(traceback.format_exc())
218 sa.rollback()
218 sa.rollback()
219 return False
219 return False
220 if len(repo.revisions) > 1:
220 if len(repo.revisions) > 1:
221 run_task(get_commits_stats, repo_name, ts_min_y, ts_max_y)
221 run_task(get_commits_stats, repo_name, ts_min_y, ts_max_y)
222
222
223 return True
223 return True
224
224
225 @task(ignore_result=True)
225 @task(ignore_result=True)
226 def reset_user_password(user_email):
226 def reset_user_password(user_email):
227 try:
227 try:
228 log = reset_user_password.get_logger()
228 log = reset_user_password.get_logger()
229 except:
229 except:
230 log = logging.getLogger(__name__)
230 log = logging.getLogger(__name__)
231
231
232 from rhodecode.lib import auth
232 from rhodecode.lib import auth
233 from rhodecode.model.db import User
233 from rhodecode.model.db import User
234
234
235 try:
235 try:
236 try:
236 try:
237 sa = get_session()
237 sa = get_session()
238 user = sa.query(User).filter(User.email == user_email).scalar()
238 user = sa.query(User).filter(User.email == user_email).scalar()
239 new_passwd = auth.PasswordGenerator().gen_password(8,
239 new_passwd = auth.PasswordGenerator().gen_password(8,
240 auth.PasswordGenerator.ALPHABETS_BIG_SMALL)
240 auth.PasswordGenerator.ALPHABETS_BIG_SMALL)
241 if user:
241 if user:
242 user.password = auth.get_crypt_password(new_passwd)
242 user.password = auth.get_crypt_password(new_passwd)
243 sa.add(user)
243 sa.add(user)
244 sa.commit()
244 sa.commit()
245 log.info('change password for %s', user_email)
245 log.info('change password for %s', user_email)
246 if new_passwd is None:
246 if new_passwd is None:
247 raise Exception('unable to generate new password')
247 raise Exception('unable to generate new password')
248
248
249 except:
249 except:
250 log.error(traceback.format_exc())
250 log.error(traceback.format_exc())
251 sa.rollback()
251 sa.rollback()
252
252
253 run_task(send_email, user_email,
253 run_task(send_email, user_email,
254 "Your new rhodecode password",
254 "Your new rhodecode password",
255 'Your new rhodecode password:%s' % (new_passwd))
255 'Your new rhodecode password:%s' % (new_passwd))
256 log.info('send new password mail to %s', user_email)
256 log.info('send new password mail to %s', user_email)
257
257
258
258
259 except:
259 except:
260 log.error('Failed to update user password')
260 log.error('Failed to update user password')
261 log.error(traceback.format_exc())
261 log.error(traceback.format_exc())
262
262
263 return True
263 return True
264
264
265 @task(ignore_result=True)
265 @task(ignore_result=True)
266 def send_email(recipients, subject, body):
266 def send_email(recipients, subject, body):
267 """
267 """
268 Sends an email with defined parameters from the .ini files.
268 Sends an email with defined parameters from the .ini files.
269
269
270
270
271 :param recipients: list of recipients, it this is empty the defined email
271 :param recipients: list of recipients, it this is empty the defined email
272 address from field 'email_to' is used instead
272 address from field 'email_to' is used instead
273 :param subject: subject of the mail
273 :param subject: subject of the mail
274 :param body: body of the mail
274 :param body: body of the mail
275 """
275 """
276 try:
276 try:
277 log = send_email.get_logger()
277 log = send_email.get_logger()
278 except:
278 except:
279 log = logging.getLogger(__name__)
279 log = logging.getLogger(__name__)
280
280
281 email_config = config
281 email_config = config
282
282
283 if not recipients:
283 if not recipients:
284 recipients = [email_config.get('email_to')]
284 recipients = [email_config.get('email_to')]
285
285
286 mail_from = email_config.get('app_email_from')
286 mail_from = email_config.get('app_email_from')
287 user = email_config.get('smtp_username')
287 user = email_config.get('smtp_username')
288 passwd = email_config.get('smtp_password')
288 passwd = email_config.get('smtp_password')
289 mail_server = email_config.get('smtp_server')
289 mail_server = email_config.get('smtp_server')
290 mail_port = email_config.get('smtp_port')
290 mail_port = email_config.get('smtp_port')
291 tls = str2bool(email_config.get('smtp_use_tls'))
291 tls = str2bool(email_config.get('smtp_use_tls'))
292 ssl = str2bool(email_config.get('smtp_use_ssl'))
292 ssl = str2bool(email_config.get('smtp_use_ssl'))
293
293
294 try:
294 try:
295 m = SmtpMailer(mail_from, user, passwd, mail_server,
295 m = SmtpMailer(mail_from, user, passwd, mail_server,
296 mail_port, ssl, tls)
296 mail_port, ssl, tls)
297 m.send(recipients, subject, body)
297 m.send(recipients, subject, body)
298 except:
298 except:
299 log.error('Mail sending failed')
299 log.error('Mail sending failed')
300 log.error(traceback.format_exc())
300 log.error(traceback.format_exc())
301 return False
301 return False
302 return True
302 return True
303
303
304 @task(ignore_result=True)
304 @task(ignore_result=True)
305 def create_repo_fork(form_data, cur_user):
305 def create_repo_fork(form_data, cur_user):
306 try:
306 try:
307 log = create_repo_fork.get_logger()
307 log = create_repo_fork.get_logger()
308 except:
308 except:
309 log = logging.getLogger(__name__)
309 log = logging.getLogger(__name__)
310
310
311 from rhodecode.model.repo import RepoModel
311 from rhodecode.model.repo import RepoModel
312 from vcs import get_backend
312 from vcs import get_backend
313
313
314 repo_model = RepoModel(get_session())
314 repo_model = RepoModel(get_session())
315 repo_model.create(form_data, cur_user, just_db=True, fork=True)
315 repo_model.create(form_data, cur_user, just_db=True, fork=True)
316 repo_name = form_data['repo_name']
316 repo_name = form_data['repo_name']
317 repos_path = get_repos_path()
317 repos_path = get_repos_path()
318 repo_path = os.path.join(repos_path, repo_name)
318 repo_path = os.path.join(repos_path, repo_name)
319 repo_fork_path = os.path.join(repos_path, form_data['fork_name'])
319 repo_fork_path = os.path.join(repos_path, form_data['fork_name'])
320 alias = form_data['repo_type']
320 alias = form_data['repo_type']
321
321
322 log.info('creating repo fork %s as %s', repo_name, repo_path)
322 log.info('creating repo fork %s as %s', repo_name, repo_path)
323 backend = get_backend(alias)
323 backend = get_backend(alias)
324 backend(str(repo_fork_path), create=True, src_url=str(repo_path))
324 backend(str(repo_fork_path), create=True, src_url=str(repo_path))
325
325
326 def __get_codes_stats(repo_name):
326 def __get_codes_stats(repo_name):
327 LANGUAGES_EXTENSIONS_MAP = {'scm': 'Scheme', 'asmx': 'VbNetAspx', 'Rout':
327 LANGUAGES_EXTENSIONS_MAP = {'scm': 'Scheme', 'asmx': 'VbNetAspx', 'Rout':
328 'RConsole', 'rest': 'Rst', 'abap': 'ABAP', 'go': 'Go', 'phtml': 'HtmlPhp',
328 'RConsole', 'rest': 'Rst', 'abap': 'ABAP', 'go': 'Go', 'phtml': 'HtmlPhp',
329 'ns2': 'Newspeak', 'xml': 'EvoqueXml', 'sh-session': 'BashSession', 'ads':
329 'ns2': 'Newspeak', 'xml': 'EvoqueXml', 'sh-session': 'BashSession', 'ads':
330 'Ada', 'clj': 'Clojure', 'll': 'Llvm', 'ebuild': 'Bash', 'adb': 'Ada',
330 'Ada', 'clj': 'Clojure', 'll': 'Llvm', 'ebuild': 'Bash', 'adb': 'Ada',
331 'ada': 'Ada', 'c++-objdump': 'CppObjdump', 'aspx':
331 'ada': 'Ada', 'c++-objdump': 'CppObjdump', 'aspx':
332 'VbNetAspx', 'ksh': 'Bash', 'coffee': 'CoffeeScript', 'vert': 'GLShader',
332 'VbNetAspx', 'ksh': 'Bash', 'coffee': 'CoffeeScript', 'vert': 'GLShader',
333 'Makefile.*': 'Makefile', 'di': 'D', 'dpatch': 'DarcsPatch', 'rake':
333 'Makefile.*': 'Makefile', 'di': 'D', 'dpatch': 'DarcsPatch', 'rake':
334 'Ruby', 'moo': 'MOOCode', 'erl-sh': 'ErlangShell', 'geo': 'GLShader',
334 'Ruby', 'moo': 'MOOCode', 'erl-sh': 'ErlangShell', 'geo': 'GLShader',
335 'pov': 'Povray', 'bas': 'VbNet', 'bat': 'Batch', 'd': 'D', 'lisp':
335 'pov': 'Povray', 'bas': 'VbNet', 'bat': 'Batch', 'd': 'D', 'lisp':
336 'CommonLisp', 'h': 'C', 'rbx': 'Ruby', 'tcl': 'Tcl', 'c++': 'Cpp', 'md':
336 'CommonLisp', 'h': 'C', 'rbx': 'Ruby', 'tcl': 'Tcl', 'c++': 'Cpp', 'md':
337 'MiniD', '.vimrc': 'Vim', 'xsd': 'Xml', 'ml': 'Ocaml', 'el': 'CommonLisp',
337 'MiniD', '.vimrc': 'Vim', 'xsd': 'Xml', 'ml': 'Ocaml', 'el': 'CommonLisp',
338 'befunge': 'Befunge', 'xsl': 'Xslt', 'pyx': 'Cython', 'cfm':
338 'befunge': 'Befunge', 'xsl': 'Xslt', 'pyx': 'Cython', 'cfm':
339 'ColdfusionHtml', 'evoque': 'Evoque', 'cfg': 'Ini', 'htm': 'Html',
339 'ColdfusionHtml', 'evoque': 'Evoque', 'cfg': 'Ini', 'htm': 'Html',
340 'Makefile': 'Makefile', 'cfc': 'ColdfusionHtml', 'tex': 'Tex', 'cs':
340 'Makefile': 'Makefile', 'cfc': 'ColdfusionHtml', 'tex': 'Tex', 'cs':
341 'CSharp', 'mxml': 'Mxml', 'patch': 'Diff', 'apache.conf': 'ApacheConf',
341 'CSharp', 'mxml': 'Mxml', 'patch': 'Diff', 'apache.conf': 'ApacheConf',
342 'scala': 'Scala', 'applescript': 'AppleScript', 'GNUmakefile': 'Makefile',
342 'scala': 'Scala', 'applescript': 'AppleScript', 'GNUmakefile': 'Makefile',
343 'c-objdump': 'CObjdump', 'lua': 'Lua', 'apache2.conf': 'ApacheConf', 'rb':
343 'c-objdump': 'CObjdump', 'lua': 'Lua', 'apache2.conf': 'ApacheConf', 'rb':
344 'Ruby', 'gemspec': 'Ruby', 'rl': 'RagelObjectiveC', 'vala': 'Vala', 'tmpl':
344 'Ruby', 'gemspec': 'Ruby', 'rl': 'RagelObjectiveC', 'vala': 'Vala', 'tmpl':
345 'Cheetah', 'bf': 'Brainfuck', 'plt': 'Gnuplot', 'G': 'AntlrRuby', 'xslt':
345 'Cheetah', 'bf': 'Brainfuck', 'plt': 'Gnuplot', 'G': 'AntlrRuby', 'xslt':
346 'Xslt', 'flxh': 'Felix', 'asax': 'VbNetAspx', 'Rakefile': 'Ruby', 'S': 'S',
346 'Xslt', 'flxh': 'Felix', 'asax': 'VbNetAspx', 'Rakefile': 'Ruby', 'S': 'S',
347 'wsdl': 'Xml', 'js': 'Javascript', 'autodelegate': 'Myghty', 'properties':
347 'wsdl': 'Xml', 'js': 'Javascript', 'autodelegate': 'Myghty', 'properties':
348 'Ini', 'bash': 'Bash', 'c': 'C', 'g': 'AntlrRuby', 'r3': 'Rebol', 's':
348 'Ini', 'bash': 'Bash', 'c': 'C', 'g': 'AntlrRuby', 'r3': 'Rebol', 's':
349 'Gas', 'ashx': 'VbNetAspx', 'cxx': 'Cpp', 'boo': 'Boo', 'prolog': 'Prolog',
349 'Gas', 'ashx': 'VbNetAspx', 'cxx': 'Cpp', 'boo': 'Boo', 'prolog': 'Prolog',
350 'sqlite3-console': 'SqliteConsole', 'cl': 'CommonLisp', 'cc': 'Cpp', 'pot':
350 'sqlite3-console': 'SqliteConsole', 'cl': 'CommonLisp', 'cc': 'Cpp', 'pot':
351 'Gettext', 'vim': 'Vim', 'pxi': 'Cython', 'yaml': 'Yaml', 'SConstruct':
351 'Gettext', 'vim': 'Vim', 'pxi': 'Cython', 'yaml': 'Yaml', 'SConstruct':
352 'Python', 'diff': 'Diff', 'txt': 'Text', 'cw': 'Redcode', 'pxd': 'Cython',
352 'Python', 'diff': 'Diff', 'txt': 'Text', 'cw': 'Redcode', 'pxd': 'Cython',
353 'plot': 'Gnuplot', 'java': 'Java', 'hrl': 'Erlang', 'py': 'Python',
353 'plot': 'Gnuplot', 'java': 'Java', 'hrl': 'Erlang', 'py': 'Python',
354 'makefile': 'Makefile', 'squid.conf': 'SquidConf', 'asm': 'Nasm', 'toc':
354 'makefile': 'Makefile', 'squid.conf': 'SquidConf', 'asm': 'Nasm', 'toc':
355 'Tex', 'kid': 'Genshi', 'rhtml': 'Rhtml', 'po': 'Gettext', 'pl': 'Prolog',
355 'Tex', 'kid': 'Genshi', 'rhtml': 'Rhtml', 'po': 'Gettext', 'pl': 'Prolog',
356 'pm': 'Perl', 'hx': 'Haxe', 'ascx': 'VbNetAspx', 'ooc': 'Ooc', 'asy':
356 'pm': 'Perl', 'hx': 'Haxe', 'ascx': 'VbNetAspx', 'ooc': 'Ooc', 'asy':
357 'Asymptote', 'hs': 'Haskell', 'SConscript': 'Python', 'pytb':
357 'Asymptote', 'hs': 'Haskell', 'SConscript': 'Python', 'pytb':
358 'PythonTraceback', 'myt': 'Myghty', 'hh': 'Cpp', 'R': 'S', 'aux': 'Tex',
358 'PythonTraceback', 'myt': 'Myghty', 'hh': 'Cpp', 'R': 'S', 'aux': 'Tex',
359 'rst': 'Rst', 'cpp-objdump': 'CppObjdump', 'lgt': 'Logtalk', 'rss': 'Xml',
359 'rst': 'Rst', 'cpp-objdump': 'CppObjdump', 'lgt': 'Logtalk', 'rss': 'Xml',
360 'flx': 'Felix', 'b': 'Brainfuck', 'f': 'Fortran', 'rbw': 'Ruby',
360 'flx': 'Felix', 'b': 'Brainfuck', 'f': 'Fortran', 'rbw': 'Ruby',
361 '.htaccess': 'ApacheConf', 'cxx-objdump': 'CppObjdump', 'j': 'ObjectiveJ',
361 '.htaccess': 'ApacheConf', 'cxx-objdump': 'CppObjdump', 'j': 'ObjectiveJ',
362 'mll': 'Ocaml', 'yml': 'Yaml', 'mu': 'MuPAD', 'r': 'Rebol', 'ASM': 'Nasm',
362 'mll': 'Ocaml', 'yml': 'Yaml', 'mu': 'MuPAD', 'r': 'Rebol', 'ASM': 'Nasm',
363 'erl': 'Erlang', 'mly': 'Ocaml', 'mo': 'Modelica', 'def': 'Modula2', 'ini':
363 'erl': 'Erlang', 'mly': 'Ocaml', 'mo': 'Modelica', 'def': 'Modula2', 'ini':
364 'Ini', 'control': 'DebianControl', 'vb': 'VbNet', 'vapi': 'Vala', 'pro':
364 'Ini', 'control': 'DebianControl', 'vb': 'VbNet', 'vapi': 'Vala', 'pro':
365 'Prolog', 'spt': 'Cheetah', 'mli': 'Ocaml', 'as': 'ActionScript3', 'cmd':
365 'Prolog', 'spt': 'Cheetah', 'mli': 'Ocaml', 'as': 'ActionScript3', 'cmd':
366 'Batch', 'cpp': 'Cpp', 'io': 'Io', 'tac': 'Python', 'haml': 'Haml', 'rkt':
366 'Batch', 'cpp': 'Cpp', 'io': 'Io', 'tac': 'Python', 'haml': 'Haml', 'rkt':
367 'Racket', 'st':'Smalltalk', 'inc': 'Povray', 'pas': 'Delphi', 'cmake':
367 'Racket', 'st':'Smalltalk', 'inc': 'Povray', 'pas': 'Delphi', 'cmake':
368 'CMake', 'csh':'Tcsh', 'hpp': 'Cpp', 'feature': 'Gherkin', 'html': 'Html',
368 'CMake', 'csh':'Tcsh', 'hpp': 'Cpp', 'feature': 'Gherkin', 'html': 'Html',
369 'php':'Php', 'php3':'Php', 'php4':'Php', 'php5':'Php', 'xhtml': 'Html',
369 'php':'Php', 'php3':'Php', 'php4':'Php', 'php5':'Php', 'xhtml': 'Html',
370 'hxx': 'Cpp', 'eclass': 'Bash', 'css': 'Css',
370 'hxx': 'Cpp', 'eclass': 'Bash', 'css': 'Css',
371 'frag': 'GLShader', 'd-objdump': 'DObjdump', 'weechatlog': 'IrcLogs',
371 'frag': 'GLShader', 'd-objdump': 'DObjdump', 'weechatlog': 'IrcLogs',
372 'tcsh': 'Tcsh', 'objdump': 'Objdump', 'pyw': 'Python', 'h++': 'Cpp',
372 'tcsh': 'Tcsh', 'objdump': 'Objdump', 'pyw': 'Python', 'h++': 'Cpp',
373 'py3tb': 'Python3Traceback', 'jsp': 'Jsp', 'sql': 'Sql', 'mak': 'Makefile',
373 'py3tb': 'Python3Traceback', 'jsp': 'Jsp', 'sql': 'Sql', 'mak': 'Makefile',
374 'php': 'Php', 'mao': 'Mako', 'man': 'Groff', 'dylan': 'Dylan', 'sass':
374 'php': 'Php', 'mao': 'Mako', 'man': 'Groff', 'dylan': 'Dylan', 'sass':
375 'Sass', 'cfml': 'ColdfusionHtml', 'darcspatch': 'DarcsPatch', 'tpl':
375 'Sass', 'cfml': 'ColdfusionHtml', 'darcspatch': 'DarcsPatch', 'tpl':
376 'Smarty', 'm': 'ObjectiveC', 'f90': 'Fortran', 'mod': 'Modula2', 'sh':
376 'Smarty', 'm': 'ObjectiveC', 'f90': 'Fortran', 'mod': 'Modula2', 'sh':
377 'Bash', 'lhs': 'LiterateHaskell', 'sources.list': 'SourcesList', 'axd':
377 'Bash', 'lhs': 'LiterateHaskell', 'sources.list': 'SourcesList', 'axd':
378 'VbNetAspx', 'sc': 'Python'}
378 'VbNetAspx', 'sc': 'Python'}
379
379
380 repos_path = get_repos_path()
380 repos_path = get_repos_path()
381 p = os.path.join(repos_path, repo_name)
381 p = os.path.join(repos_path, repo_name)
382 repo = get_repo(p)
382 repo = get_repo(p)
383 tip = repo.get_changeset()
383 tip = repo.get_changeset()
384 code_stats = {}
384 code_stats = {}
385
385
386 def aggregate(cs):
386 def aggregate(cs):
387 for f in cs[2]:
387 for f in cs[2]:
388 ext = f.extension
388 ext = f.extension
389 key = LANGUAGES_EXTENSIONS_MAP.get(ext, ext)
389 key = LANGUAGES_EXTENSIONS_MAP.get(ext, ext)
390 key = key or ext
390 key = key or ext
391 if ext in LANGUAGES_EXTENSIONS_MAP.keys() and not f.is_binary:
391 if ext in LANGUAGES_EXTENSIONS_MAP.keys() and not f.is_binary:
392 if code_stats.has_key(key):
392 if code_stats.has_key(key):
393 code_stats[key] += 1
393 code_stats[key] += 1
394 else:
394 else:
395 code_stats[key] = 1
395 code_stats[key] = 1
396
396
397 map(aggregate, tip.walk('/'))
397 map(aggregate, tip.walk('/'))
398
398
399 return code_stats or {}
399 return code_stats or {}
400
400
401
401
402
402
403
403
@@ -1,2525 +1,2522 b''
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
2 border:0;
2 border:0;
3 outline:0;
3 outline:0;
4 font-size:100%;
4 font-size:100%;
5 vertical-align:baseline;
5 vertical-align:baseline;
6 background:transparent;
6 background:transparent;
7 margin:0;
7 margin:0;
8 padding:0;
8 padding:0;
9 }
9 }
10
10
11 body {
11 body {
12 line-height:1;
12 line-height:1;
13 height:100%;
13 height:100%;
14 background:url("../images/background.png") repeat scroll 0 0 #B0B0B0;
14 background:url("../images/background.png") repeat scroll 0 0 #B0B0B0;
15 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
15 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
16 font-size:12px;
16 font-size:12px;
17 color:#000;
17 color:#000;
18 margin:0;
18 margin:0;
19 padding:0;
19 padding:0;
20 }
20 }
21
21
22 ol,ul {
22 ol,ul {
23 list-style:none;
23 list-style:none;
24 }
24 }
25
25
26 blockquote,q {
26 blockquote,q {
27 quotes:none;
27 quotes:none;
28 }
28 }
29
29
30 blockquote:before,blockquote:after,q:before,q:after {
30 blockquote:before,blockquote:after,q:before,q:after {
31 content:none;
31 content:none;
32 }
32 }
33
33
34 :focus {
34 :focus {
35 outline:0;
35 outline:0;
36 }
36 }
37
37
38 del {
38 del {
39 text-decoration:line-through;
39 text-decoration:line-through;
40 }
40 }
41
41
42 table {
42 table {
43 border-collapse:collapse;
43 border-collapse:collapse;
44 border-spacing:0;
44 border-spacing:0;
45 }
45 }
46
46
47 html {
47 html {
48 height:100%;
48 height:100%;
49 }
49 }
50
50
51 a {
51 a {
52 color:#003367;
52 color:#003367;
53 text-decoration:none;
53 text-decoration:none;
54 cursor:pointer;
54 cursor:pointer;
55 font-weight:700;
55 font-weight:700;
56 }
56 }
57
57
58 a:hover {
58 a:hover {
59 color:#316293;
59 color:#316293;
60 text-decoration:underline;
60 text-decoration:underline;
61 }
61 }
62
62
63 h1,h2,h3,h4,h5,h6 {
63 h1,h2,h3,h4,h5,h6 {
64 color:#292929;
64 color:#292929;
65 font-weight:700;
65 font-weight:700;
66 }
66 }
67
67
68 h1 {
68 h1 {
69 font-size:22px;
69 font-size:22px;
70 }
70 }
71
71
72 h2 {
72 h2 {
73 font-size:20px;
73 font-size:20px;
74 }
74 }
75
75
76 h3 {
76 h3 {
77 font-size:18px;
77 font-size:18px;
78 }
78 }
79
79
80 h4 {
80 h4 {
81 font-size:16px;
81 font-size:16px;
82 }
82 }
83
83
84 h5 {
84 h5 {
85 font-size:14px;
85 font-size:14px;
86 }
86 }
87
87
88 h6 {
88 h6 {
89 font-size:11px;
89 font-size:11px;
90 }
90 }
91
91
92 ul.circle {
92 ul.circle {
93 list-style-type:circle;
93 list-style-type:circle;
94 }
94 }
95
95
96 ul.disc {
96 ul.disc {
97 list-style-type:disc;
97 list-style-type:disc;
98 }
98 }
99
99
100 ul.square {
100 ul.square {
101 list-style-type:square;
101 list-style-type:square;
102 }
102 }
103
103
104 ol.lower-roman {
104 ol.lower-roman {
105 list-style-type:lower-roman;
105 list-style-type:lower-roman;
106 }
106 }
107
107
108 ol.upper-roman {
108 ol.upper-roman {
109 list-style-type:upper-roman;
109 list-style-type:upper-roman;
110 }
110 }
111
111
112 ol.lower-alpha {
112 ol.lower-alpha {
113 list-style-type:lower-alpha;
113 list-style-type:lower-alpha;
114 }
114 }
115
115
116 ol.upper-alpha {
116 ol.upper-alpha {
117 list-style-type:upper-alpha;
117 list-style-type:upper-alpha;
118 }
118 }
119
119
120 ol.decimal {
120 ol.decimal {
121 list-style-type:decimal;
121 list-style-type:decimal;
122 }
122 }
123
123
124 div.color {
124 div.color {
125 clear:both;
125 clear:both;
126 overflow:hidden;
126 overflow:hidden;
127 position:absolute;
127 position:absolute;
128 background:#FFF;
128 background:#FFF;
129 margin:7px 0 0 60px;
129 margin:7px 0 0 60px;
130 padding:1px 1px 1px 0;
130 padding:1px 1px 1px 0;
131 }
131 }
132
132
133 div.color a {
133 div.color a {
134 width:15px;
134 width:15px;
135 height:15px;
135 height:15px;
136 display:block;
136 display:block;
137 float:left;
137 float:left;
138 margin:0 0 0 1px;
138 margin:0 0 0 1px;
139 padding:0;
139 padding:0;
140 }
140 }
141
141
142 div.options {
142 div.options {
143 clear:both;
143 clear:both;
144 overflow:hidden;
144 overflow:hidden;
145 position:absolute;
145 position:absolute;
146 background:#FFF;
146 background:#FFF;
147 margin:7px 0 0 162px;
147 margin:7px 0 0 162px;
148 padding:0;
148 padding:0;
149 }
149 }
150
150
151 div.options a {
151 div.options a {
152 height:1%;
152 height:1%;
153 display:block;
153 display:block;
154 text-decoration:none;
154 text-decoration:none;
155 margin:0;
155 margin:0;
156 padding:3px 8px;
156 padding:3px 8px;
157 }
157 }
158
158
159 .top-left-rounded-corner {
159 .top-left-rounded-corner {
160 -webkit-border-top-left-radius: 8px;
160 -webkit-border-top-left-radius: 8px;
161 -khtml-border-radius-topleft: 8px;
161 -khtml-border-radius-topleft: 8px;
162 -moz-border-radius-topleft: 8px;
162 -moz-border-radius-topleft: 8px;
163 border-top-left-radius: 8px;
163 border-top-left-radius: 8px;
164 }
164 }
165
165
166 .top-right-rounded-corner {
166 .top-right-rounded-corner {
167 -webkit-border-top-right-radius: 8px;
167 -webkit-border-top-right-radius: 8px;
168 -khtml-border-radius-topright: 8px;
168 -khtml-border-radius-topright: 8px;
169 -moz-border-radius-topright: 8px;
169 -moz-border-radius-topright: 8px;
170 border-top-right-radius: 8px;
170 border-top-right-radius: 8px;
171 }
171 }
172
172
173 .bottom-left-rounded-corner {
173 .bottom-left-rounded-corner {
174 -webkit-border-bottom-left-radius: 8px;
174 -webkit-border-bottom-left-radius: 8px;
175 -khtml-border-radius-bottomleft: 8px;
175 -khtml-border-radius-bottomleft: 8px;
176 -moz-border-radius-bottomleft: 8px;
176 -moz-border-radius-bottomleft: 8px;
177 border-bottom-left-radius: 8px;
177 border-bottom-left-radius: 8px;
178 }
178 }
179
179
180 .bottom-right-rounded-corner {
180 .bottom-right-rounded-corner {
181 -webkit-border-bottom-right-radius: 8px;
181 -webkit-border-bottom-right-radius: 8px;
182 -khtml-border-radius-bottomright: 8px;
182 -khtml-border-radius-bottomright: 8px;
183 -moz-border-radius-bottomright: 8px;
183 -moz-border-radius-bottomright: 8px;
184 border-bottom-right-radius: 8px;
184 border-bottom-right-radius: 8px;
185 }
185 }
186
186
187
187
188 #header {
188 #header {
189 margin:0;
189 margin:0;
190 padding:0 30px;
190 padding:0 10px;
191 }
191 }
192
192
193
193
194 #header ul#logged-user{
194 #header ul#logged-user{
195 margin-bottom:5px !important;
195 margin-bottom:5px !important;
196 -webkit-border-radius: 0px 0px 8px 8px;
196 -webkit-border-radius: 0px 0px 8px 8px;
197 -khtml-border-radius: 0px 0px 8px 8px;
197 -khtml-border-radius: 0px 0px 8px 8px;
198 -moz-border-radius: 0px 0px 8px 8px;
198 -moz-border-radius: 0px 0px 8px 8px;
199 border-radius: 0px 0px 8px 8px;
199 border-radius: 0px 0px 8px 8px;
200 height:37px;
200 height:37px;
201 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367
201 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367
202 }
202 }
203
203
204 #header ul#logged-user li {
204 #header ul#logged-user li {
205 list-style:none;
205 list-style:none;
206 float:left;
206 float:left;
207 margin:8px 0 0;
207 margin:8px 0 0;
208 padding:4px 12px;
208 padding:4px 12px;
209 border-left: 1px solid #316293;
209 border-left: 1px solid #316293;
210 }
210 }
211
211
212 #header ul#logged-user li.first {
212 #header ul#logged-user li.first {
213 border-left:none;
213 border-left:none;
214 margin:4px;
214 margin:4px;
215 }
215 }
216
216
217 #header ul#logged-user li.first div.gravatar {
217 #header ul#logged-user li.first div.gravatar {
218 margin-top:-2px;
218 margin-top:-2px;
219 }
219 }
220
220
221 #header ul#logged-user li.first div.account {
221 #header ul#logged-user li.first div.account {
222 padding-top:4px;
222 padding-top:4px;
223 float:left;
223 float:left;
224 }
224 }
225
225
226 #header ul#logged-user li.last {
226 #header ul#logged-user li.last {
227 border-right:none;
227 border-right:none;
228 }
228 }
229
229
230 #header ul#logged-user li a {
230 #header ul#logged-user li a {
231 color:#fff;
231 color:#fff;
232 font-weight:700;
232 font-weight:700;
233 text-decoration:none;
233 text-decoration:none;
234 }
234 }
235
235
236 #header ul#logged-user li a:hover {
236 #header ul#logged-user li a:hover {
237 text-decoration:underline;
237 text-decoration:underline;
238 }
238 }
239
239
240 #header ul#logged-user li.highlight a {
240 #header ul#logged-user li.highlight a {
241 color:#fff;
241 color:#fff;
242 }
242 }
243
243
244 #header ul#logged-user li.highlight a:hover {
244 #header ul#logged-user li.highlight a:hover {
245 color:#FFF;
245 color:#FFF;
246 }
246 }
247
247
248 #header #header-inner {
248 #header #header-inner {
249 height:40px;
249 height:40px;
250 clear:both;
250 clear:both;
251 position:relative;
251 position:relative;
252 background:#003367 url("../images/header_inner.png") repeat-x;
252 background:#003367 url("../images/header_inner.png") repeat-x;
253 border-bottom:2px solid #fff;
253 border-bottom:2px solid #fff;
254 margin:0;
254 margin:0;
255 padding:0;
255 padding:0;
256 }
256 }
257
257
258 #header #header-inner #home a {
258 #header #header-inner #home a {
259 height:40px;
259 height:40px;
260 width:46px;
260 width:46px;
261 display:block;
261 display:block;
262 background:url("../images/button_home.png");
262 background:url("../images/button_home.png");
263 background-position:0 0;
263 background-position:0 0;
264 margin:0;
264 margin:0;
265 padding:0;
265 padding:0;
266 }
266 }
267
267
268 #header #header-inner #home a:hover {
268 #header #header-inner #home a:hover {
269 background-position:0 -40px;
269 background-position:0 -40px;
270 }
270 }
271
271
272 #header #header-inner #logo h1 {
272 #header #header-inner #logo h1 {
273 color:#FFF;
273 color:#FFF;
274 font-size:18px;
274 font-size:18px;
275 margin:10px 0 0 13px;
275 margin:10px 0 0 13px;
276 padding:0;
276 padding:0;
277 }
277 }
278
278
279 #header #header-inner #logo a {
279 #header #header-inner #logo a {
280 color:#fff;
280 color:#fff;
281 text-decoration:none;
281 text-decoration:none;
282 }
282 }
283
283
284 #header #header-inner #logo a:hover {
284 #header #header-inner #logo a:hover {
285 color:#bfe3ff;
285 color:#bfe3ff;
286 }
286 }
287
287
288 #header #header-inner #quick,#header #header-inner #quick ul {
288 #header #header-inner #quick,#header #header-inner #quick ul {
289 position:relative;
289 position:relative;
290 float:right;
290 float:right;
291 list-style-type:none;
291 list-style-type:none;
292 list-style-position:outside;
292 list-style-position:outside;
293 margin:10px 5px 0 0;
293 margin:10px 5px 0 0;
294 padding:0;
294 padding:0;
295 }
295 }
296
296
297 #header #header-inner #quick li {
297 #header #header-inner #quick li {
298 position:relative;
298 position:relative;
299 float:left;
299 float:left;
300 margin:0 5px 0 0;
300 margin:0 5px 0 0;
301 padding:0;
301 padding:0;
302 }
302 }
303
303
304 #header #header-inner #quick li a {
304 #header #header-inner #quick li a {
305 top:0;
305 top:0;
306 left:0;
306 left:0;
307 height:1%;
307 height:1%;
308 display:block;
308 display:block;
309 clear:both;
309 clear:both;
310 overflow:hidden;
310 overflow:hidden;
311 color:#FFF;
311 color:#FFF;
312 font-weight:700;
312 font-weight:700;
313 text-decoration:none;
313 text-decoration:none;
314 background:#369 url("../images/quick_l.png") no-repeat top left;
314 background:#369 url("../images/quick_l.png") no-repeat top left;
315 padding:0;
315 padding:0;
316 }
316 }
317
317
318 #header #header-inner #quick li span.short {
318 #header #header-inner #quick li span.short {
319 padding:9px 6px 8px 6px;
319 padding:9px 6px 8px 6px;
320 }
320 }
321
321
322 #header #header-inner #quick li span {
322 #header #header-inner #quick li span {
323 top:0;
323 top:0;
324 right:0;
324 right:0;
325 height:1%;
325 height:1%;
326 display:block;
326 display:block;
327 float:left;
327 float:left;
328 background:url("../images/quick_r.png") no-repeat top right;
328 background:url("../images/quick_r.png") no-repeat top right;
329 border-left:1px solid #3f6f9f;
329 border-left:1px solid #3f6f9f;
330 margin:0;
330 margin:0;
331 padding:10px 12px 8px 10px;
331 padding:10px 12px 8px 10px;
332 }
332 }
333
333
334 #header #header-inner #quick li span.normal {
334 #header #header-inner #quick li span.normal {
335 border:none;
335 border:none;
336 padding:10px 12px 8px;
336 padding:10px 12px 8px;
337 }
337 }
338
338
339 #header #header-inner #quick li span.icon {
339 #header #header-inner #quick li span.icon {
340 top:0;
340 top:0;
341 left:0;
341 left:0;
342 border-left:none;
342 border-left:none;
343 background:url("../images/quick_l.png") no-repeat top left;
343 background:url("../images/quick_l.png") no-repeat top left;
344 border-right:1px solid #2e5c89;
344 border-right:1px solid #2e5c89;
345 padding:8px 8px 4px;
345 padding:8px 8px 4px;
346 }
346 }
347
347
348 #header #header-inner #quick li span.icon_short {
348 #header #header-inner #quick li span.icon_short {
349 top:0;
349 top:0;
350 left:0;
350 left:0;
351 border-left:none;
351 border-left:none;
352 background:url("../images/quick_l.png") no-repeat top left;
352 background:url("../images/quick_l.png") no-repeat top left;
353 border-right:1px solid #2e5c89;
353 border-right:1px solid #2e5c89;
354 padding:9px 4px 4px;
354 padding:9px 4px 4px;
355 }
355 }
356
356
357 #header #header-inner #quick li a:hover {
357 #header #header-inner #quick li a:hover {
358 background:#4e4e4e url("../images/quick_l_selected.png") no-repeat top left;
358 background:#4e4e4e url("../images/quick_l_selected.png") no-repeat top left;
359 }
359 }
360
360
361 #header #header-inner #quick li a:hover span {
361 #header #header-inner #quick li a:hover span {
362 border-left:1px solid #545454;
362 border-left:1px solid #545454;
363 background:url("../images/quick_r_selected.png") no-repeat top right;
363 background:url("../images/quick_r_selected.png") no-repeat top right;
364 }
364 }
365
365
366 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short {
366 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short {
367 border-left:none;
367 border-left:none;
368 border-right:1px solid #464646;
368 border-right:1px solid #464646;
369 background:url("../images/quick_l_selected.png") no-repeat top left;
369 background:url("../images/quick_l_selected.png") no-repeat top left;
370 }
370 }
371
371
372
372
373 #header #header-inner #quick ul {
373 #header #header-inner #quick ul {
374 top:29px;
374 top:29px;
375 right:0;
375 right:0;
376 min-width:200px;
376 min-width:200px;
377 display:none;
377 display:none;
378 position:absolute;
378 position:absolute;
379 background:#FFF;
379 background:#FFF;
380 border:1px solid #666;
380 border:1px solid #666;
381 border-top:1px solid #003367;
381 border-top:1px solid #003367;
382 z-index:100;
382 z-index:100;
383 margin:0;
383 margin:0;
384 padding:0;
384 padding:0;
385 }
385 }
386
386
387 #header #header-inner #quick ul.repo_switcher {
387 #header #header-inner #quick ul.repo_switcher {
388 max-height:275px;
388 max-height:275px;
389 overflow-x:hidden;
389 overflow-x:hidden;
390 overflow-y:auto;
390 overflow-y:auto;
391 }
391 }
392
392
393 #header #header-inner #quick .repo_switcher_type{
393 #header #header-inner #quick .repo_switcher_type{
394 position:absolute;
394 position:absolute;
395 left:0;
395 left:0;
396 top:9px;
396 top:9px;
397
397
398 }
398 }
399 #header #header-inner #quick li ul li {
399 #header #header-inner #quick li ul li {
400 border-bottom:1px solid #ddd;
400 border-bottom:1px solid #ddd;
401 }
401 }
402
402
403 #header #header-inner #quick li ul li a {
403 #header #header-inner #quick li ul li a {
404 width:182px;
404 width:182px;
405 height:auto;
405 height:auto;
406 display:block;
406 display:block;
407 float:left;
407 float:left;
408 background:#FFF;
408 background:#FFF;
409 color:#003367;
409 color:#003367;
410 font-weight:400;
410 font-weight:400;
411 margin:0;
411 margin:0;
412 padding:7px 9px;
412 padding:7px 9px;
413 }
413 }
414
414
415 #header #header-inner #quick li ul li a:hover {
415 #header #header-inner #quick li ul li a:hover {
416 color:#000;
416 color:#000;
417 background:#FFF;
417 background:#FFF;
418 }
418 }
419
419
420 #header #header-inner #quick ul ul {
420 #header #header-inner #quick ul ul {
421 top:auto;
421 top:auto;
422 }
422 }
423
423
424 #header #header-inner #quick li ul ul {
424 #header #header-inner #quick li ul ul {
425 right:200px;
425 right:200px;
426 max-height:275px;
426 max-height:275px;
427 overflow:auto;
427 overflow:auto;
428 overflow-x:hidden;
428 overflow-x:hidden;
429 white-space:normal;
429 white-space:normal;
430 }
430 }
431
431
432 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
432 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
433 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
433 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
434 width:167px;
434 width:167px;
435 margin:0;
435 margin:0;
436 padding:12px 9px 7px 24px;
436 padding:12px 9px 7px 24px;
437 }
437 }
438
438
439 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
439 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
440 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
440 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
441 min-width:167px;
441 min-width:167px;
442 margin:0;
442 margin:0;
443 padding:12px 9px 7px 24px;
443 padding:12px 9px 7px 24px;
444 }
444 }
445
445
446 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
446 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
447 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
447 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
448 min-width:167px;
448 min-width:167px;
449 margin:0;
449 margin:0;
450 padding:12px 9px 7px 24px;
450 padding:12px 9px 7px 24px;
451 }
451 }
452
452
453 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover {
453 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover {
454 background:url("../images/icons/hgicon.png") no-repeat scroll 4px 9px #FFF;
454 background:url("../images/icons/hgicon.png") no-repeat scroll 4px 9px #FFF;
455 min-width:167px;
455 min-width:167px;
456 margin:0 0 0 14px;
456 margin:0 0 0 14px;
457 padding:12px 9px 7px 24px;
457 padding:12px 9px 7px 24px;
458 }
458 }
459
459
460 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover {
460 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover {
461 background:url("../images/icons/giticon.png") no-repeat scroll 4px 9px #FFF;
461 background:url("../images/icons/giticon.png") no-repeat scroll 4px 9px #FFF;
462 min-width:167px;
462 min-width:167px;
463 margin:0 0 0 14px;
463 margin:0 0 0 14px;
464 padding:12px 9px 7px 24px;
464 padding:12px 9px 7px 24px;
465 }
465 }
466
466
467 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
467 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
468 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
468 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
469 width:167px;
469 width:167px;
470 margin:0;
470 margin:0;
471 padding:12px 9px 7px 24px;
471 padding:12px 9px 7px 24px;
472 }
472 }
473
473
474 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
474 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
475 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
475 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
476 width:167px;
476 width:167px;
477 margin:0;
477 margin:0;
478 padding:12px 9px 7px 24px;
478 padding:12px 9px 7px 24px;
479 }
479 }
480
480
481 #header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover {
481 #header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover {
482 background:#FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
482 background:#FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
483 width:167px;
483 width:167px;
484 margin:0;
484 margin:0;
485 padding:12px 9px 7px 24px;
485 padding:12px 9px 7px 24px;
486 }
486 }
487
487
488 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover {
488 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover {
489 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
489 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
490 width:167px;
490 width:167px;
491 margin:0;
491 margin:0;
492 padding:12px 9px 7px 24px;
492 padding:12px 9px 7px 24px;
493 }
493 }
494
494
495 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
495 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
496 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
496 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
497 width:167px;
497 width:167px;
498 margin:0;
498 margin:0;
499 padding:12px 9px 7px 24px;
499 padding:12px 9px 7px 24px;
500 }
500 }
501
501
502 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover {
502 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover {
503 background:#FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
503 background:#FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
504 width:167px;
504 width:167px;
505 margin:0;
505 margin:0;
506 padding:12px 9px 7px 24px;
506 padding:12px 9px 7px 24px;
507 }
507 }
508
508
509 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
509 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
510 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
510 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
511 width:167px;
511 width:167px;
512 margin:0;
512 margin:0;
513 padding:12px 9px 7px 24px;
513 padding:12px 9px 7px 24px;
514 }
514 }
515
515
516 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
516 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
517 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
517 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
518 width:167px;
518 width:167px;
519 margin:0;
519 margin:0;
520 padding:12px 9px 7px 24px;
520 padding:12px 9px 7px 24px;
521 }
521 }
522
522
523 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
523 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
524 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
524 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
525 width:167px;
525 width:167px;
526 margin:0;
526 margin:0;
527 padding:12px 9px 7px 24px;
527 padding:12px 9px 7px 24px;
528 }
528 }
529
529
530 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
530 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
531 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
531 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
532 width:167px;
532 width:167px;
533 margin:0;
533 margin:0;
534 padding:12px 9px 7px 24px;
534 padding:12px 9px 7px 24px;
535 }
535 }
536
536
537 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
537 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
538 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
538 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
539 width:167px;
539 width:167px;
540 margin:0;
540 margin:0;
541 padding:12px 9px 7px 24px;
541 padding:12px 9px 7px 24px;
542 }
542 }
543
543
544 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
544 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
545 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
545 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
546 width:167px;
546 width:167px;
547 margin:0;
547 margin:0;
548 padding:12px 9px 7px 24px;
548 padding:12px 9px 7px 24px;
549 }
549 }
550
550
551 #content #left {
551 #content #left {
552 left:0;
552 left:0;
553 width:280px;
553 width:280px;
554 position:absolute;
554 position:absolute;
555 }
555 }
556
556
557 #content #right {
557 #content #right {
558 margin:0 60px 10px 290px;
558 margin:0 60px 10px 290px;
559 }
559 }
560
560
561 #content div.box {
561 #content div.box {
562 clear:both;
562 clear:both;
563 overflow:hidden;
563 overflow:hidden;
564 background:#fff;
564 background:#fff;
565 margin:0 0 10px;
565 margin:0 0 10px;
566 padding:0 0 10px;
566 padding:0 0 10px;
567 }
567 }
568
568
569 #content div.box-left {
569 #content div.box-left {
570 width:49%;
570 width:49%;
571 clear:none;
571 clear:none;
572 float:left;
572 float:left;
573 margin:0 0 10px;
573 margin:0 0 10px;
574 }
574 }
575
575
576 #content div.box-right {
576 #content div.box-right {
577 width:49%;
577 width:49%;
578 clear:none;
578 clear:none;
579 float:right;
579 float:right;
580 margin:0 0 10px;
580 margin:0 0 10px;
581 }
581 }
582
582
583 #content div.box div.title {
583 #content div.box div.title {
584 clear:both;
584 clear:both;
585 overflow:hidden;
585 overflow:hidden;
586 background:#369 url("../images/header_inner.png") repeat-x;
586 background:#369 url("../images/header_inner.png") repeat-x;
587 margin:0 0 20px;
587 margin:0 0 20px;
588 padding:0;
588 padding:0;
589 }
589 }
590
590
591 #content div.box div.title h5 {
591 #content div.box div.title h5 {
592 float:left;
592 float:left;
593 border:none;
593 border:none;
594 color:#fff;
594 color:#fff;
595 text-transform:uppercase;
595 text-transform:uppercase;
596 margin:0;
596 margin:0;
597 padding:11px 0 11px 10px;
597 padding:11px 0 11px 10px;
598 }
598 }
599
599
600 #content div.box div.title ul.links li {
600 #content div.box div.title ul.links li {
601 list-style:none;
601 list-style:none;
602 float:left;
602 float:left;
603 margin:0;
603 margin:0;
604 padding:0;
604 padding:0;
605 }
605 }
606
606
607 #content div.box div.title ul.links li a {
607 #content div.box div.title ul.links li a {
608 border-left: 1px solid #316293;
608 border-left: 1px solid #316293;
609 color: #FFFFFF;
609 color: #FFFFFF;
610 display: block;
610 display: block;
611 float: left;
611 float: left;
612 font-size: 13px;
612 font-size: 13px;
613 font-weight: 700;
613 font-weight: 700;
614 height: 1%;
614 height: 1%;
615 margin: 0;
615 margin: 0;
616 padding: 11px 22px 12px;
616 padding: 11px 22px 12px;
617 text-decoration: none;
617 text-decoration: none;
618 }
618 }
619
619
620 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
620 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
621 clear:both;
621 clear:both;
622 overflow:hidden;
622 overflow:hidden;
623 border-bottom:1px solid #DDD;
623 border-bottom:1px solid #DDD;
624 margin:10px 20px;
624 margin:10px 20px;
625 padding:0 0 15px;
625 padding:0 0 15px;
626 }
626 }
627
627
628 #content div.box p {
628 #content div.box p {
629 color:#5f5f5f;
629 color:#5f5f5f;
630 font-size:12px;
630 font-size:12px;
631 line-height:150%;
631 line-height:150%;
632 margin:0 24px 10px;
632 margin:0 24px 10px;
633 padding:0;
633 padding:0;
634 }
634 }
635
635
636 #content div.box blockquote {
636 #content div.box blockquote {
637 border-left:4px solid #DDD;
637 border-left:4px solid #DDD;
638 color:#5f5f5f;
638 color:#5f5f5f;
639 font-size:11px;
639 font-size:11px;
640 line-height:150%;
640 line-height:150%;
641 margin:0 34px;
641 margin:0 34px;
642 padding:0 0 0 14px;
642 padding:0 0 0 14px;
643 }
643 }
644
644
645 #content div.box blockquote p {
645 #content div.box blockquote p {
646 margin:10px 0;
646 margin:10px 0;
647 padding:0;
647 padding:0;
648 }
648 }
649
649
650 #content div.box dl {
650 #content div.box dl {
651 margin:10px 24px;
651 margin:10px 24px;
652 }
652 }
653
653
654 #content div.box dt {
654 #content div.box dt {
655 font-size:12px;
655 font-size:12px;
656 margin:0;
656 margin:0;
657 }
657 }
658
658
659 #content div.box dd {
659 #content div.box dd {
660 font-size:12px;
660 font-size:12px;
661 margin:0;
661 margin:0;
662 padding:8px 0 8px 15px;
662 padding:8px 0 8px 15px;
663 }
663 }
664
664
665 #content div.box li {
665 #content div.box li {
666 font-size:12px;
666 font-size:12px;
667 padding:4px 0;
667 padding:4px 0;
668 }
668 }
669
669
670 #content div.box ul.disc,#content div.box ul.circle {
670 #content div.box ul.disc,#content div.box ul.circle {
671 margin:10px 24px 10px 38px;
671 margin:10px 24px 10px 38px;
672 }
672 }
673
673
674 #content div.box ul.square {
674 #content div.box ul.square {
675 margin:10px 24px 10px 40px;
675 margin:10px 24px 10px 40px;
676 }
676 }
677
677
678 #content div.box img.left {
678 #content div.box img.left {
679 border:none;
679 border:none;
680 float:left;
680 float:left;
681 margin:10px 10px 10px 0;
681 margin:10px 10px 10px 0;
682 }
682 }
683
683
684 #content div.box img.right {
684 #content div.box img.right {
685 border:none;
685 border:none;
686 float:right;
686 float:right;
687 margin:10px 0 10px 10px;
687 margin:10px 0 10px 10px;
688 }
688 }
689
689
690 #content div.box div.messages {
690 #content div.box div.messages {
691 clear:both;
691 clear:both;
692 overflow:hidden;
692 overflow:hidden;
693 margin:0 20px;
693 margin:0 20px;
694 padding:0;
694 padding:0;
695 }
695 }
696
696
697 #content div.box div.message {
697 #content div.box div.message {
698 clear:both;
698 clear:both;
699 overflow:hidden;
699 overflow:hidden;
700 margin:0;
700 margin:0;
701 padding:10px 0;
701 padding:10px 0;
702 }
702 }
703
703
704 #content div.box div.message a {
704 #content div.box div.message a {
705 font-weight:400 !important;
705 font-weight:400 !important;
706 }
706 }
707
707
708 #content div.box div.message div.image {
708 #content div.box div.message div.image {
709 float:left;
709 float:left;
710 margin:9px 0 0 5px;
710 margin:9px 0 0 5px;
711 padding:6px;
711 padding:6px;
712 }
712 }
713
713
714 #content div.box div.message div.image img {
714 #content div.box div.message div.image img {
715 vertical-align:middle;
715 vertical-align:middle;
716 margin:0;
716 margin:0;
717 }
717 }
718
718
719 #content div.box div.message div.text {
719 #content div.box div.message div.text {
720 float:left;
720 float:left;
721 margin:0;
721 margin:0;
722 padding:9px 6px;
722 padding:9px 6px;
723 }
723 }
724
724
725 #content div.box div.message div.dismiss a {
725 #content div.box div.message div.dismiss a {
726 height:16px;
726 height:16px;
727 width:16px;
727 width:16px;
728 display:block;
728 display:block;
729 background:url("../images/icons/cross.png") no-repeat;
729 background:url("../images/icons/cross.png") no-repeat;
730 margin:15px 14px 0 0;
730 margin:15px 14px 0 0;
731 padding:0;
731 padding:0;
732 }
732 }
733
733
734 #content div.box div.message div.text h1,#content div.box div.message div.text h2,#content div.box div.message div.text h3,#content div.box div.message div.text h4,#content div.box div.message div.text h5,#content div.box div.message div.text h6 {
734 #content div.box div.message div.text h1,#content div.box div.message div.text h2,#content div.box div.message div.text h3,#content div.box div.message div.text h4,#content div.box div.message div.text h5,#content div.box div.message div.text h6 {
735 border:none;
735 border:none;
736 margin:0;
736 margin:0;
737 padding:0;
737 padding:0;
738 }
738 }
739
739
740 #content div.box div.message div.text span {
740 #content div.box div.message div.text span {
741 height:1%;
741 height:1%;
742 display:block;
742 display:block;
743 margin:0;
743 margin:0;
744 padding:5px 0 0;
744 padding:5px 0 0;
745 }
745 }
746
746
747 #content div.box div.message-error {
747 #content div.box div.message-error {
748 height:1%;
748 height:1%;
749 clear:both;
749 clear:both;
750 overflow:hidden;
750 overflow:hidden;
751 background:#FBE3E4;
751 background:#FBE3E4;
752 border:1px solid #FBC2C4;
752 border:1px solid #FBC2C4;
753 color:#860006;
753 color:#860006;
754 }
754 }
755
755
756 #content div.box div.message-error h6 {
756 #content div.box div.message-error h6 {
757 color:#860006;
757 color:#860006;
758 }
758 }
759
759
760 #content div.box div.message-warning {
760 #content div.box div.message-warning {
761 height:1%;
761 height:1%;
762 clear:both;
762 clear:both;
763 overflow:hidden;
763 overflow:hidden;
764 background:#FFF6BF;
764 background:#FFF6BF;
765 border:1px solid #FFD324;
765 border:1px solid #FFD324;
766 color:#5f5200;
766 color:#5f5200;
767 }
767 }
768
768
769 #content div.box div.message-warning h6 {
769 #content div.box div.message-warning h6 {
770 color:#5f5200;
770 color:#5f5200;
771 }
771 }
772
772
773 #content div.box div.message-notice {
773 #content div.box div.message-notice {
774 height:1%;
774 height:1%;
775 clear:both;
775 clear:both;
776 overflow:hidden;
776 overflow:hidden;
777 background:#8FBDE0;
777 background:#8FBDE0;
778 border:1px solid #6BACDE;
778 border:1px solid #6BACDE;
779 color:#003863;
779 color:#003863;
780 }
780 }
781
781
782 #content div.box div.message-notice h6 {
782 #content div.box div.message-notice h6 {
783 color:#003863;
783 color:#003863;
784 }
784 }
785
785
786 #content div.box div.message-success {
786 #content div.box div.message-success {
787 height:1%;
787 height:1%;
788 clear:both;
788 clear:both;
789 overflow:hidden;
789 overflow:hidden;
790 background:#E6EFC2;
790 background:#E6EFC2;
791 border:1px solid #C6D880;
791 border:1px solid #C6D880;
792 color:#4e6100;
792 color:#4e6100;
793 }
793 }
794
794
795 #content div.box div.message-success h6 {
795 #content div.box div.message-success h6 {
796 color:#4e6100;
796 color:#4e6100;
797 }
797 }
798
798
799 #content div.box div.form div.fields div.field {
799 #content div.box div.form div.fields div.field {
800 height:1%;
800 height:1%;
801 border-bottom:1px solid #DDD;
801 border-bottom:1px solid #DDD;
802 clear:both;
802 clear:both;
803 margin:0;
803 margin:0;
804 padding:10px 0;
804 padding:10px 0;
805 }
805 }
806
806
807 #content div.box div.form div.fields div.field-first {
807 #content div.box div.form div.fields div.field-first {
808 padding:0 0 10px;
808 padding:0 0 10px;
809 }
809 }
810
810
811 #content div.box div.form div.fields div.field-noborder {
811 #content div.box div.form div.fields div.field-noborder {
812 border-bottom:0 !important;
812 border-bottom:0 !important;
813 }
813 }
814
814
815 #content div.box div.form div.fields div.field span.error-message {
815 #content div.box div.form div.fields div.field span.error-message {
816 height:1%;
816 height:1%;
817 display:inline-block;
817 display:inline-block;
818 color:red;
818 color:red;
819 margin:8px 0 0 4px;
819 margin:8px 0 0 4px;
820 padding:0;
820 padding:0;
821 }
821 }
822
822
823 #content div.box div.form div.fields div.field span.success {
823 #content div.box div.form div.fields div.field span.success {
824 height:1%;
824 height:1%;
825 display:block;
825 display:block;
826 color:#316309;
826 color:#316309;
827 margin:8px 0 0;
827 margin:8px 0 0;
828 padding:0;
828 padding:0;
829 }
829 }
830
830
831 #content div.box div.form div.fields div.field div.label {
831 #content div.box div.form div.fields div.field div.label {
832 left:80px;
832 left:80px;
833 width:auto;
833 width:auto;
834 position:absolute;
834 position:absolute;
835 margin:0;
835 margin:0;
836 padding:8px 0 0 5px;
836 padding:8px 0 0 5px;
837 }
837 }
838
838
839 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
839 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
840 clear:both;
840 clear:both;
841 overflow:hidden;
841 overflow:hidden;
842 left:0;
842 left:0;
843 width:auto;
843 width:auto;
844 position:relative;
844 position:relative;
845 margin:0;
845 margin:0;
846 padding:0 0 8px;
846 padding:0 0 8px;
847 }
847 }
848
848
849 #content div.box div.form div.fields div.field div.label-select {
849 #content div.box div.form div.fields div.field div.label-select {
850 padding:5px 0 0 5px;
850 padding:5px 0 0 5px;
851 }
851 }
852
852
853 #content div.box-left div.form div.fields div.field div.label-select,#content div.box-right div.form div.fields div.field div.label-select {
853 #content div.box-left div.form div.fields div.field div.label-select,#content div.box-right div.form div.fields div.field div.label-select {
854 padding:0 0 8px;
854 padding:0 0 8px;
855 }
855 }
856
856
857 #content div.box-left div.form div.fields div.field div.label-textarea,#content div.box-right div.form div.fields div.field div.label-textarea {
857 #content div.box-left div.form div.fields div.field div.label-textarea,#content div.box-right div.form div.fields div.field div.label-textarea {
858 padding:0 0 8px !important;
858 padding:0 0 8px !important;
859 }
859 }
860
860
861 #content div.box div.form div.fields div.field div.label label, div.label label{
861 #content div.box div.form div.fields div.field div.label label, div.label label{
862 color:#393939;
862 color:#393939;
863 font-weight:700;
863 font-weight:700;
864 }
864 }
865
865
866 #content div.box div.form div.fields div.field div.input {
866 #content div.box div.form div.fields div.field div.input {
867 margin:0 0 0 200px;
867 margin:0 0 0 200px;
868 }
868 }
869 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
869 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
870 margin:0 0 0 0px;
870 margin:0 0 0 0px;
871 }
871 }
872
872
873 #content div.box div.form div.fields div.field div.input input {
873 #content div.box div.form div.fields div.field div.input input {
874 background:#FFF;
874 background:#FFF;
875 border-top:1px solid #b3b3b3;
875 border-top:1px solid #b3b3b3;
876 border-left:1px solid #b3b3b3;
876 border-left:1px solid #b3b3b3;
877 border-right:1px solid #eaeaea;
877 border-right:1px solid #eaeaea;
878 border-bottom:1px solid #eaeaea;
878 border-bottom:1px solid #eaeaea;
879 color:#000;
879 color:#000;
880 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
880 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
881 font-size:11px;
881 font-size:11px;
882 margin:0;
882 margin:0;
883 padding:7px 7px 6px;
883 padding:7px 7px 6px;
884 }
884 }
885
885
886
886
887
887
888 #content div.box div.form div.fields div.field div.input input.small {
888 #content div.box div.form div.fields div.field div.input input.small {
889 width:30%;
889 width:30%;
890 }
890 }
891
891
892 #content div.box div.form div.fields div.field div.input input.medium {
892 #content div.box div.form div.fields div.field div.input input.medium {
893 width:55%;
893 width:55%;
894 }
894 }
895
895
896 #content div.box div.form div.fields div.field div.input input.large {
896 #content div.box div.form div.fields div.field div.input input.large {
897 width:85%;
897 width:85%;
898 }
898 }
899
899
900 #content div.box div.form div.fields div.field div.input input.date {
900 #content div.box div.form div.fields div.field div.input input.date {
901 width:177px;
901 width:177px;
902 }
902 }
903
903
904 #content div.box div.form div.fields div.field div.input input.button {
904 #content div.box div.form div.fields div.field div.input input.button {
905 background:#D4D0C8;
905 background:#D4D0C8;
906 border-top:1px solid #FFF;
906 border-top:1px solid #FFF;
907 border-left:1px solid #FFF;
907 border-left:1px solid #FFF;
908 border-right:1px solid #404040;
908 border-right:1px solid #404040;
909 border-bottom:1px solid #404040;
909 border-bottom:1px solid #404040;
910 color:#000;
910 color:#000;
911 margin:0;
911 margin:0;
912 padding:4px 8px;
912 padding:4px 8px;
913 }
913 }
914
914
915 #content div.box div.form div.fields div.field div.textarea {
915 #content div.box div.form div.fields div.field div.textarea {
916 border-top:1px solid #b3b3b3;
916 border-top:1px solid #b3b3b3;
917 border-left:1px solid #b3b3b3;
917 border-left:1px solid #b3b3b3;
918 border-right:1px solid #eaeaea;
918 border-right:1px solid #eaeaea;
919 border-bottom:1px solid #eaeaea;
919 border-bottom:1px solid #eaeaea;
920 margin:0 0 0 200px;
920 margin:0 0 0 200px;
921 padding:10px;
921 padding:10px;
922 }
922 }
923
923
924 #content div.box div.form div.fields div.field div.textarea-editor {
924 #content div.box div.form div.fields div.field div.textarea-editor {
925 border:1px solid #ddd;
925 border:1px solid #ddd;
926 padding:0;
926 padding:0;
927 }
927 }
928
928
929 #content div.box div.form div.fields div.field div.textarea textarea {
929 #content div.box div.form div.fields div.field div.textarea textarea {
930 width:100%;
930 width:100%;
931 height:220px;
931 height:220px;
932 overflow:hidden;
932 overflow:hidden;
933 background:#FFF;
933 background:#FFF;
934 color:#000;
934 color:#000;
935 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
935 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
936 font-size:11px;
936 font-size:11px;
937 outline:none;
937 outline:none;
938 border-width:0;
938 border-width:0;
939 margin:0;
939 margin:0;
940 padding:0;
940 padding:0;
941 }
941 }
942
942
943 #content div.box-left div.form div.fields div.field div.textarea textarea,#content div.box-right div.form div.fields div.field div.textarea textarea {
943 #content div.box-left div.form div.fields div.field div.textarea textarea,#content div.box-right div.form div.fields div.field div.textarea textarea {
944 width:100%;
944 width:100%;
945 height:100px;
945 height:100px;
946 }
946 }
947
947
948 #content div.box div.form div.fields div.field div.textarea table {
948 #content div.box div.form div.fields div.field div.textarea table {
949 width:100%;
949 width:100%;
950 border:none;
950 border:none;
951 margin:0;
951 margin:0;
952 padding:0;
952 padding:0;
953 }
953 }
954
954
955 #content div.box div.form div.fields div.field div.textarea table td {
955 #content div.box div.form div.fields div.field div.textarea table td {
956 background:#DDD;
956 background:#DDD;
957 border:none;
957 border:none;
958 padding:0;
958 padding:0;
959 }
959 }
960
960
961 #content div.box div.form div.fields div.field div.textarea table td table {
961 #content div.box div.form div.fields div.field div.textarea table td table {
962 width:auto;
962 width:auto;
963 border:none;
963 border:none;
964 margin:0;
964 margin:0;
965 padding:0;
965 padding:0;
966 }
966 }
967
967
968 #content div.box div.form div.fields div.field div.textarea table td table td {
968 #content div.box div.form div.fields div.field div.textarea table td table td {
969 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
969 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
970 font-size:11px;
970 font-size:11px;
971 padding:5px 5px 5px 0;
971 padding:5px 5px 5px 0;
972 }
972 }
973
973
974 #content div.box div.form div.fields div.field input[type=text]:focus,#content div.box div.form div.fields div.field input[type=password]:focus,#content div.box div.form div.fields div.field input[type=file]:focus,#content div.box div.form div.fields div.field textarea:focus,#content div.box div.form div.fields div.field select:focus {
974 #content div.box div.form div.fields div.field input[type=text]:focus,#content div.box div.form div.fields div.field input[type=password]:focus,#content div.box div.form div.fields div.field input[type=file]:focus,#content div.box div.form div.fields div.field textarea:focus,#content div.box div.form div.fields div.field select:focus {
975 background:#f6f6f6;
975 background:#f6f6f6;
976 border-color:#666;
976 border-color:#666;
977 }
977 }
978
978
979 div.form div.fields div.field div.button {
979 div.form div.fields div.field div.button {
980 margin:0;
980 margin:0;
981 padding:0 0 0 8px;
981 padding:0 0 0 8px;
982 }
982 }
983
983
984 div.form div.fields div.field div.highlight .ui-button {
984 div.form div.fields div.field div.highlight .ui-button {
985 background:#4e85bb url("../images/button_highlight.png") repeat-x;
985 background:#4e85bb url("../images/button_highlight.png") repeat-x;
986 border-top:1px solid #5c91a4;
986 border-top:1px solid #5c91a4;
987 border-left:1px solid #2a6f89;
987 border-left:1px solid #2a6f89;
988 border-right:1px solid #2b7089;
988 border-right:1px solid #2b7089;
989 border-bottom:1px solid #1a6480;
989 border-bottom:1px solid #1a6480;
990 color:#FFF;
990 color:#FFF;
991 margin:0;
991 margin:0;
992 padding:6px 12px;
992 padding:6px 12px;
993 }
993 }
994
994
995 div.form div.fields div.field div.highlight .ui-state-hover {
995 div.form div.fields div.field div.highlight .ui-state-hover {
996 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
996 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
997 border-top:1px solid #78acbf;
997 border-top:1px solid #78acbf;
998 border-left:1px solid #34819e;
998 border-left:1px solid #34819e;
999 border-right:1px solid #35829f;
999 border-right:1px solid #35829f;
1000 border-bottom:1px solid #257897;
1000 border-bottom:1px solid #257897;
1001 color:#FFF;
1001 color:#FFF;
1002 margin:0;
1002 margin:0;
1003 padding:6px 12px;
1003 padding:6px 12px;
1004 }
1004 }
1005
1005
1006 #content div.box div.form div.fields div.buttons div.highlight input.ui-button {
1006 #content div.box div.form div.fields div.buttons div.highlight input.ui-button {
1007 background:#4e85bb url("../images/button_highlight.png") repeat-x;
1007 background:#4e85bb url("../images/button_highlight.png") repeat-x;
1008 border-top:1px solid #5c91a4;
1008 border-top:1px solid #5c91a4;
1009 border-left:1px solid #2a6f89;
1009 border-left:1px solid #2a6f89;
1010 border-right:1px solid #2b7089;
1010 border-right:1px solid #2b7089;
1011 border-bottom:1px solid #1a6480;
1011 border-bottom:1px solid #1a6480;
1012 color:#fff;
1012 color:#fff;
1013 margin:0;
1013 margin:0;
1014 padding:6px 12px;
1014 padding:6px 12px;
1015 }
1015 }
1016
1016
1017 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-hover {
1017 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-hover {
1018 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
1018 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
1019 border-top:1px solid #78acbf;
1019 border-top:1px solid #78acbf;
1020 border-left:1px solid #34819e;
1020 border-left:1px solid #34819e;
1021 border-right:1px solid #35829f;
1021 border-right:1px solid #35829f;
1022 border-bottom:1px solid #257897;
1022 border-bottom:1px solid #257897;
1023 color:#fff;
1023 color:#fff;
1024 margin:0;
1024 margin:0;
1025 padding:6px 12px;
1025 padding:6px 12px;
1026 }
1026 }
1027
1027
1028 #content div.box table {
1028 #content div.box table {
1029 width:100%;
1029 width:100%;
1030 border-collapse:collapse;
1030 border-collapse:collapse;
1031 margin:0;
1031 margin:0;
1032 padding:0;
1032 padding:0;
1033 }
1033 }
1034
1034
1035 #content div.box table th {
1035 #content div.box table th {
1036 background:#eee;
1036 background:#eee;
1037 border-bottom:1px solid #ddd;
1037 border-bottom:1px solid #ddd;
1038 padding:5px 0px 5px 5px;
1038 padding:5px 0px 5px 5px;
1039 }
1039 }
1040
1040
1041 #content div.box table th.left {
1041 #content div.box table th.left {
1042 text-align:left;
1042 text-align:left;
1043 }
1043 }
1044
1044
1045 #content div.box table th.right {
1045 #content div.box table th.right {
1046 text-align:right;
1046 text-align:right;
1047 }
1047 }
1048
1048
1049 #content div.box table th.center {
1049 #content div.box table th.center {
1050 text-align:center;
1050 text-align:center;
1051 }
1051 }
1052
1052
1053 #content div.box table th.selected {
1053 #content div.box table th.selected {
1054 vertical-align:middle;
1054 vertical-align:middle;
1055 padding:0;
1055 padding:0;
1056 }
1056 }
1057
1057
1058 #content div.box table td {
1058 #content div.box table td {
1059 background:#fff;
1059 background:#fff;
1060 border-bottom:1px solid #cdcdcd;
1060 border-bottom:1px solid #cdcdcd;
1061 vertical-align:middle;
1061 vertical-align:middle;
1062 padding:5px;
1062 padding:5px;
1063 }
1063 }
1064
1064
1065 #content div.box table tr.selected td {
1065 #content div.box table tr.selected td {
1066 background:#FFC;
1066 background:#FFC;
1067 }
1067 }
1068
1068
1069 #content div.box table td.selected {
1069 #content div.box table td.selected {
1070 width:3%;
1070 width:3%;
1071 text-align:center;
1071 text-align:center;
1072 vertical-align:middle;
1072 vertical-align:middle;
1073 padding:0;
1073 padding:0;
1074 }
1074 }
1075
1075
1076 #content div.box table td.action {
1076 #content div.box table td.action {
1077 width:45%;
1077 width:45%;
1078 text-align:left;
1078 text-align:left;
1079 }
1079 }
1080
1080
1081 #content div.box table td.date {
1081 #content div.box table td.date {
1082 width:33%;
1082 width:33%;
1083 text-align:center;
1083 text-align:center;
1084 }
1084 }
1085
1085
1086 #content div.box div.action {
1086 #content div.box div.action {
1087 float:right;
1087 float:right;
1088 background:#FFF;
1088 background:#FFF;
1089 text-align:right;
1089 text-align:right;
1090 margin:10px 0 0;
1090 margin:10px 0 0;
1091 padding:0;
1091 padding:0;
1092 }
1092 }
1093
1093
1094 #content div.box div.action select {
1094 #content div.box div.action select {
1095 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1095 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1096 font-size:11px;
1096 font-size:11px;
1097 margin:0;
1097 margin:0;
1098 }
1098 }
1099
1099
1100 #content div.box div.action .ui-selectmenu {
1100 #content div.box div.action .ui-selectmenu {
1101 margin:0;
1101 margin:0;
1102 padding:0;
1102 padding:0;
1103 }
1103 }
1104
1104
1105 #content div.box div.pagination {
1105 #content div.box div.pagination {
1106 height:1%;
1106 height:1%;
1107 clear:both;
1107 clear:both;
1108 overflow:hidden;
1108 overflow:hidden;
1109 margin:10px 0 0;
1109 margin:10px 0 0;
1110 padding:0;
1110 padding:0;
1111 }
1111 }
1112
1112
1113 #content div.box div.pagination ul.pager {
1113 #content div.box div.pagination ul.pager {
1114 float:right;
1114 float:right;
1115 text-align:right;
1115 text-align:right;
1116 margin:0;
1116 margin:0;
1117 padding:0;
1117 padding:0;
1118 }
1118 }
1119
1119
1120 #content div.box div.pagination ul.pager li {
1120 #content div.box div.pagination ul.pager li {
1121 height:1%;
1121 height:1%;
1122 float:left;
1122 float:left;
1123 list-style:none;
1123 list-style:none;
1124 background:#ebebeb url("../images/pager.png") repeat-x;
1124 background:#ebebeb url("../images/pager.png") repeat-x;
1125 border-top:1px solid #dedede;
1125 border-top:1px solid #dedede;
1126 border-left:1px solid #cfcfcf;
1126 border-left:1px solid #cfcfcf;
1127 border-right:1px solid #c4c4c4;
1127 border-right:1px solid #c4c4c4;
1128 border-bottom:1px solid #c4c4c4;
1128 border-bottom:1px solid #c4c4c4;
1129 color:#4A4A4A;
1129 color:#4A4A4A;
1130 font-weight:700;
1130 font-weight:700;
1131 margin:0 0 0 4px;
1131 margin:0 0 0 4px;
1132 padding:0;
1132 padding:0;
1133 }
1133 }
1134
1134
1135 #content div.box div.pagination ul.pager li.separator {
1135 #content div.box div.pagination ul.pager li.separator {
1136 padding:6px;
1136 padding:6px;
1137 }
1137 }
1138
1138
1139 #content div.box div.pagination ul.pager li.current {
1139 #content div.box div.pagination ul.pager li.current {
1140 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1140 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1141 border-top:1px solid #ccc;
1141 border-top:1px solid #ccc;
1142 border-left:1px solid #bebebe;
1142 border-left:1px solid #bebebe;
1143 border-right:1px solid #b1b1b1;
1143 border-right:1px solid #b1b1b1;
1144 border-bottom:1px solid #afafaf;
1144 border-bottom:1px solid #afafaf;
1145 color:#515151;
1145 color:#515151;
1146 padding:6px;
1146 padding:6px;
1147 }
1147 }
1148
1148
1149 #content div.box div.pagination ul.pager li a {
1149 #content div.box div.pagination ul.pager li a {
1150 height:1%;
1150 height:1%;
1151 display:block;
1151 display:block;
1152 float:left;
1152 float:left;
1153 color:#515151;
1153 color:#515151;
1154 text-decoration:none;
1154 text-decoration:none;
1155 margin:0;
1155 margin:0;
1156 padding:6px;
1156 padding:6px;
1157 }
1157 }
1158
1158
1159 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1159 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1160 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1160 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1161 border-top:1px solid #ccc;
1161 border-top:1px solid #ccc;
1162 border-left:1px solid #bebebe;
1162 border-left:1px solid #bebebe;
1163 border-right:1px solid #b1b1b1;
1163 border-right:1px solid #b1b1b1;
1164 border-bottom:1px solid #afafaf;
1164 border-bottom:1px solid #afafaf;
1165 margin:-1px;
1165 margin:-1px;
1166 }
1166 }
1167
1167
1168 #content div.box div.pagination-wh {
1168 #content div.box div.pagination-wh {
1169 height:1%;
1169 height:1%;
1170 clear:both;
1170 clear:both;
1171 overflow:hidden;
1171 overflow:hidden;
1172 text-align:right;
1172 text-align:right;
1173 margin:10px 0 0;
1173 margin:10px 0 0;
1174 padding:0;
1174 padding:0;
1175 }
1175 }
1176
1176
1177 #content div.box div.pagination-right {
1177 #content div.box div.pagination-right {
1178 float:right;
1178 float:right;
1179 }
1179 }
1180
1180
1181 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1181 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1182 height:1%;
1182 height:1%;
1183 float:left;
1183 float:left;
1184 background:#ebebeb url("../images/pager.png") repeat-x;
1184 background:#ebebeb url("../images/pager.png") repeat-x;
1185 border-top:1px solid #dedede;
1185 border-top:1px solid #dedede;
1186 border-left:1px solid #cfcfcf;
1186 border-left:1px solid #cfcfcf;
1187 border-right:1px solid #c4c4c4;
1187 border-right:1px solid #c4c4c4;
1188 border-bottom:1px solid #c4c4c4;
1188 border-bottom:1px solid #c4c4c4;
1189 color:#4A4A4A;
1189 color:#4A4A4A;
1190 font-weight:700;
1190 font-weight:700;
1191 margin:0 0 0 4px;
1191 margin:0 0 0 4px;
1192 padding:6px;
1192 padding:6px;
1193 }
1193 }
1194
1194
1195 #content div.box div.pagination-wh span.pager_curpage {
1195 #content div.box div.pagination-wh span.pager_curpage {
1196 height:1%;
1196 height:1%;
1197 float:left;
1197 float:left;
1198 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1198 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1199 border-top:1px solid #ccc;
1199 border-top:1px solid #ccc;
1200 border-left:1px solid #bebebe;
1200 border-left:1px solid #bebebe;
1201 border-right:1px solid #b1b1b1;
1201 border-right:1px solid #b1b1b1;
1202 border-bottom:1px solid #afafaf;
1202 border-bottom:1px solid #afafaf;
1203 color:#515151;
1203 color:#515151;
1204 font-weight:700;
1204 font-weight:700;
1205 margin:0 0 0 4px;
1205 margin:0 0 0 4px;
1206 padding:6px;
1206 padding:6px;
1207 }
1207 }
1208
1208
1209 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1209 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1210 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1210 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1211 border-top:1px solid #ccc;
1211 border-top:1px solid #ccc;
1212 border-left:1px solid #bebebe;
1212 border-left:1px solid #bebebe;
1213 border-right:1px solid #b1b1b1;
1213 border-right:1px solid #b1b1b1;
1214 border-bottom:1px solid #afafaf;
1214 border-bottom:1px solid #afafaf;
1215 text-decoration:none;
1215 text-decoration:none;
1216 }
1216 }
1217
1217
1218 #content div.box div.traffic div.legend {
1218 #content div.box div.traffic div.legend {
1219 clear:both;
1219 clear:both;
1220 overflow:hidden;
1220 overflow:hidden;
1221 border-bottom:1px solid #ddd;
1221 border-bottom:1px solid #ddd;
1222 margin:0 0 10px;
1222 margin:0 0 10px;
1223 padding:0 0 10px;
1223 padding:0 0 10px;
1224 }
1224 }
1225
1225
1226 #content div.box div.traffic div.legend h6 {
1226 #content div.box div.traffic div.legend h6 {
1227 float:left;
1227 float:left;
1228 border:none;
1228 border:none;
1229 margin:0;
1229 margin:0;
1230 padding:0;
1230 padding:0;
1231 }
1231 }
1232
1232
1233 #content div.box div.traffic div.legend li {
1233 #content div.box div.traffic div.legend li {
1234 list-style:none;
1234 list-style:none;
1235 float:left;
1235 float:left;
1236 font-size:11px;
1236 font-size:11px;
1237 margin:0;
1237 margin:0;
1238 padding:0 8px 0 4px;
1238 padding:0 8px 0 4px;
1239 }
1239 }
1240
1240
1241 #content div.box div.traffic div.legend li.visits {
1241 #content div.box div.traffic div.legend li.visits {
1242 border-left:12px solid #edc240;
1242 border-left:12px solid #edc240;
1243 }
1243 }
1244
1244
1245 #content div.box div.traffic div.legend li.pageviews {
1245 #content div.box div.traffic div.legend li.pageviews {
1246 border-left:12px solid #afd8f8;
1246 border-left:12px solid #afd8f8;
1247 }
1247 }
1248
1248
1249 #content div.box div.traffic table {
1249 #content div.box div.traffic table {
1250 width:auto;
1250 width:auto;
1251 }
1251 }
1252
1252
1253 #content div.box div.traffic table td {
1253 #content div.box div.traffic table td {
1254 background:transparent;
1254 background:transparent;
1255 border:none;
1255 border:none;
1256 padding:2px 3px 3px;
1256 padding:2px 3px 3px;
1257 }
1257 }
1258
1258
1259 #content div.box div.traffic table td.legendLabel {
1259 #content div.box div.traffic table td.legendLabel {
1260 padding:0 3px 2px;
1260 padding:0 3px 2px;
1261 }
1261 }
1262
1262
1263 #footer {
1263 #footer {
1264 clear:both;
1264 clear:both;
1265 overflow:hidden;
1265 overflow:hidden;
1266 text-align:right;
1266 text-align:right;
1267 margin:0;
1267 margin:0;
1268 padding:0 30px 4px;
1268 padding:0 10px 4px;
1269 margin:-10px 0 0;
1269 margin:-10px 0 0;
1270 }
1270 }
1271
1271
1272 #footer div#footer-inner {
1272 #footer div#footer-inner {
1273 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1273 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1274 border-top:2px solid #FFFFFF;
1274 border-top:2px solid #FFFFFF;
1275 }
1275 }
1276
1276
1277 #footer div#footer-inner p {
1277 #footer div#footer-inner p {
1278 padding:15px 25px 15px 0;
1278 padding:15px 25px 15px 0;
1279 color:#FFF;
1279 color:#FFF;
1280 font-weight:700;
1280 font-weight:700;
1281 }
1281 }
1282 #footer div#footer-inner .footer-link {
1282 #footer div#footer-inner .footer-link {
1283 float:left;
1283 float:left;
1284 padding-left:10px;
1284 padding-left:10px;
1285 }
1285 }
1286 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a {
1286 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a {
1287 color:#FFF;
1287 color:#FFF;
1288 }
1288 }
1289
1289
1290 #login div.title {
1290 #login div.title {
1291 width:420px;
1291 width:420px;
1292 clear:both;
1292 clear:both;
1293 overflow:hidden;
1293 overflow:hidden;
1294 position:relative;
1294 position:relative;
1295 background:#003367 url("../images/header_inner.png") repeat-x;
1295 background:#003367 url("../images/header_inner.png") repeat-x;
1296 margin:0 auto;
1296 margin:0 auto;
1297 padding:0;
1297 padding:0;
1298 }
1298 }
1299
1299
1300 #login div.inner {
1300 #login div.inner {
1301 width:380px;
1301 width:380px;
1302 background:#FFF url("../images/login.png") no-repeat top left;
1302 background:#FFF url("../images/login.png") no-repeat top left;
1303 border-top:none;
1303 border-top:none;
1304 border-bottom:none;
1304 border-bottom:none;
1305 margin:0 auto;
1305 margin:0 auto;
1306 padding:20px;
1306 padding:20px;
1307 }
1307 }
1308
1308
1309 #login div.form div.fields div.field div.label {
1309 #login div.form div.fields div.field div.label {
1310 width:173px;
1310 width:173px;
1311 float:left;
1311 float:left;
1312 text-align:right;
1312 text-align:right;
1313 margin:2px 10px 0 0;
1313 margin:2px 10px 0 0;
1314 padding:5px 0 0 5px;
1314 padding:5px 0 0 5px;
1315 }
1315 }
1316
1316
1317 #login div.form div.fields div.field div.input input {
1317 #login div.form div.fields div.field div.input input {
1318 width:176px;
1318 width:176px;
1319 background:#FFF;
1319 background:#FFF;
1320 border-top:1px solid #b3b3b3;
1320 border-top:1px solid #b3b3b3;
1321 border-left:1px solid #b3b3b3;
1321 border-left:1px solid #b3b3b3;
1322 border-right:1px solid #eaeaea;
1322 border-right:1px solid #eaeaea;
1323 border-bottom:1px solid #eaeaea;
1323 border-bottom:1px solid #eaeaea;
1324 color:#000;
1324 color:#000;
1325 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1325 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1326 font-size:11px;
1326 font-size:11px;
1327 margin:0;
1327 margin:0;
1328 padding:7px 7px 6px;
1328 padding:7px 7px 6px;
1329 }
1329 }
1330
1330
1331 #login div.form div.fields div.buttons {
1331 #login div.form div.fields div.buttons {
1332 clear:both;
1332 clear:both;
1333 overflow:hidden;
1333 overflow:hidden;
1334 border-top:1px solid #DDD;
1334 border-top:1px solid #DDD;
1335 text-align:right;
1335 text-align:right;
1336 margin:0;
1336 margin:0;
1337 padding:10px 0 0;
1337 padding:10px 0 0;
1338 }
1338 }
1339
1339
1340 #login div.form div.links {
1340 #login div.form div.links {
1341 clear:both;
1341 clear:both;
1342 overflow:hidden;
1342 overflow:hidden;
1343 margin:10px 0 0;
1343 margin:10px 0 0;
1344 padding:0 0 2px;
1344 padding:0 0 2px;
1345 }
1345 }
1346
1346
1347 #register div.title {
1347 #register div.title {
1348 clear:both;
1348 clear:both;
1349 overflow:hidden;
1349 overflow:hidden;
1350 position:relative;
1350 position:relative;
1351 background:#003367 url("../images/header_inner.png") repeat-x;
1351 background:#003367 url("../images/header_inner.png") repeat-x;
1352 margin:0 auto;
1352 margin:0 auto;
1353 padding:0;
1353 padding:0;
1354 }
1354 }
1355
1355
1356 #register div.inner {
1356 #register div.inner {
1357 background:#FFF;
1357 background:#FFF;
1358 border-top:none;
1358 border-top:none;
1359 border-bottom:none;
1359 border-bottom:none;
1360 margin:0 auto;
1360 margin:0 auto;
1361 padding:20px;
1361 padding:20px;
1362 }
1362 }
1363
1363
1364 #register div.form div.fields div.field div.label {
1364 #register div.form div.fields div.field div.label {
1365 width:135px;
1365 width:135px;
1366 float:left;
1366 float:left;
1367 text-align:right;
1367 text-align:right;
1368 margin:2px 10px 0 0;
1368 margin:2px 10px 0 0;
1369 padding:5px 0 0 5px;
1369 padding:5px 0 0 5px;
1370 }
1370 }
1371
1371
1372 #register div.form div.fields div.field div.input input {
1372 #register div.form div.fields div.field div.input input {
1373 width:300px;
1373 width:300px;
1374 background:#FFF;
1374 background:#FFF;
1375 border-top:1px solid #b3b3b3;
1375 border-top:1px solid #b3b3b3;
1376 border-left:1px solid #b3b3b3;
1376 border-left:1px solid #b3b3b3;
1377 border-right:1px solid #eaeaea;
1377 border-right:1px solid #eaeaea;
1378 border-bottom:1px solid #eaeaea;
1378 border-bottom:1px solid #eaeaea;
1379 color:#000;
1379 color:#000;
1380 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1380 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1381 font-size:11px;
1381 font-size:11px;
1382 margin:0;
1382 margin:0;
1383 padding:7px 7px 6px;
1383 padding:7px 7px 6px;
1384 }
1384 }
1385
1385
1386 #register div.form div.fields div.buttons {
1386 #register div.form div.fields div.buttons {
1387 clear:both;
1387 clear:both;
1388 overflow:hidden;
1388 overflow:hidden;
1389 border-top:1px solid #DDD;
1389 border-top:1px solid #DDD;
1390 text-align:left;
1390 text-align:left;
1391 margin:0;
1391 margin:0;
1392 padding:10px 0 0 150px;
1392 padding:10px 0 0 150px;
1393 }
1393 }
1394
1394
1395 #register div.form div.fields div.buttons div.highlight input.ui-button {
1395 #register div.form div.fields div.buttons div.highlight input.ui-button {
1396 background:url("../images/button_highlight.png") repeat-x scroll 0 0 #4E85BB;
1396 background:url("../images/button_highlight.png") repeat-x scroll 0 0 #4E85BB;
1397 color:#FFF;
1397 color:#FFF;
1398 border-color:#5C91A4 #2B7089 #1A6480 #2A6F89;
1398 border-color:#5C91A4 #2B7089 #1A6480 #2A6F89;
1399 border-style:solid;
1399 border-style:solid;
1400 border-width:1px;
1400 border-width:1px;
1401 }
1401 }
1402
1402
1403 #register div.form div.activation_msg {
1403 #register div.form div.activation_msg {
1404 padding-top:4px;
1404 padding-top:4px;
1405 padding-bottom:4px;
1405 padding-bottom:4px;
1406 }
1406 }
1407
1407
1408 #journal .journal_day{
1408 #journal .journal_day{
1409 font-size:20px;
1409 font-size:20px;
1410 padding:10px 0px;
1410 padding:10px 0px;
1411 border-bottom:2px solid #DDD;
1411 border-bottom:2px solid #DDD;
1412 margin-left:10px;
1412 margin-left:10px;
1413 margin-right:10px;
1413 margin-right:10px;
1414 }
1414 }
1415
1415
1416 #journal .journal_container{
1416 #journal .journal_container{
1417 padding:5px;
1417 padding:5px;
1418 clear:both;
1418 clear:both;
1419 margin:0px 5px 0px 10px;
1419 margin:0px 5px 0px 10px;
1420 }
1420 }
1421
1421
1422 #journal .journal_action_container{
1422 #journal .journal_action_container{
1423 padding-left:38px;
1423 padding-left:38px;
1424 }
1424 }
1425
1425
1426 #journal .journal_user{
1426 #journal .journal_user{
1427 color: #747474;
1427 color: #747474;
1428 font-size: 14px;
1428 font-size: 14px;
1429 font-weight: bold;
1429 font-weight: bold;
1430 height: 30px;
1430 height: 30px;
1431 }
1431 }
1432 #journal .journal_icon{
1432 #journal .journal_icon{
1433 clear: both;
1433 clear: both;
1434 float: left;
1434 float: left;
1435 padding-right: 4px;
1435 padding-right: 4px;
1436 padding-top: 3px;
1436 padding-top: 3px;
1437 }
1437 }
1438 #journal .journal_action{
1438 #journal .journal_action{
1439 padding-top:4px;
1439 padding-top:4px;
1440 min-height:2px;
1440 min-height:2px;
1441 float:left
1441 float:left
1442 }
1442 }
1443 #journal .journal_action_params{
1443 #journal .journal_action_params{
1444 clear: left;
1444 clear: left;
1445 padding-left: 22px;
1445 padding-left: 22px;
1446 }
1446 }
1447 #journal .journal_repo{
1447 #journal .journal_repo{
1448 float: left;
1448 float: left;
1449 margin-left: 6px;
1449 margin-left: 6px;
1450 padding-top: 3px;
1450 padding-top: 3px;
1451 }
1451 }
1452 #journal .date{
1452 #journal .date{
1453 clear: both;
1453 clear: both;
1454 color: #777777;
1454 color: #777777;
1455 font-size: 11px;
1455 font-size: 11px;
1456 padding-left: 22px;
1456 padding-left: 22px;
1457 }
1457 }
1458 #journal .journal_repo .journal_repo_name{
1458 #journal .journal_repo .journal_repo_name{
1459 font-weight: bold;
1459 font-weight: bold;
1460 font-size: 1.1em;
1460 font-size: 1.1em;
1461 }
1461 }
1462 #journal .compare_view{
1462 #journal .compare_view{
1463 padding: 5px 0px 5px 0px;
1463 padding: 5px 0px 5px 0px;
1464 width: 95px;
1464 width: 95px;
1465 }
1465 }
1466 .journal_highlight{
1466 .journal_highlight{
1467 font-weight: bold;
1467 font-weight: bold;
1468 padding: 0 2px;
1468 padding: 0 2px;
1469 vertical-align: bottom;
1469 vertical-align: bottom;
1470 }
1470 }
1471 .trending_language_tbl,.trending_language_tbl td {
1471 .trending_language_tbl,.trending_language_tbl td {
1472 border:0 !important;
1472 border:0 !important;
1473 margin:0 !important;
1473 margin:0 !important;
1474 padding:0 !important;
1474 padding:0 !important;
1475 }
1475 }
1476
1476
1477 .trending_language {
1477 .trending_language {
1478 background-color:#003367;
1478 background-color:#003367;
1479 color:#FFF;
1479 color:#FFF;
1480 display:block;
1480 display:block;
1481 min-width:20px;
1481 min-width:20px;
1482 text-decoration:none;
1482 text-decoration:none;
1483 height:12px;
1483 height:12px;
1484 margin-bottom:4px;
1484 margin-bottom:4px;
1485 margin-left:5px;
1485 margin-left:5px;
1486 white-space:pre;
1486 white-space:pre;
1487 padding:3px;
1487 padding:3px;
1488 }
1488 }
1489
1489
1490 h3.files_location {
1490 h3.files_location {
1491 font-size:1.8em;
1491 font-size:1.8em;
1492 font-weight:700;
1492 font-weight:700;
1493 border-bottom:none !important;
1493 border-bottom:none !important;
1494 margin:10px 0 !important;
1494 margin:10px 0 !important;
1495 }
1495 }
1496
1496
1497 #files_data dl dt {
1497 #files_data dl dt {
1498 float:left;
1498 float:left;
1499 width:115px;
1499 width:115px;
1500 margin:0 !important;
1500 margin:0 !important;
1501 padding:5px;
1501 padding:5px;
1502 }
1502 }
1503
1503
1504 #files_data dl dd {
1504 #files_data dl dd {
1505 margin:0 !important;
1505 margin:0 !important;
1506 padding:5px !important;
1506 padding:5px !important;
1507 }
1507 }
1508
1508
1509 #changeset_content {
1509 #changeset_content {
1510 border:1px solid #CCC;
1510 border:1px solid #CCC;
1511 padding:5px;
1511 padding:5px;
1512 }
1512 }
1513 #changeset_compare_view_content{
1513 #changeset_compare_view_content{
1514 border:1px solid #CCC;
1514 border:1px solid #CCC;
1515 padding:5px;
1515 padding:5px;
1516 }
1516 }
1517
1517
1518 #changeset_content .container {
1518 #changeset_content .container {
1519 min-height:120px;
1519 min-height:120px;
1520 font-size:1.2em;
1520 font-size:1.2em;
1521 overflow:hidden;
1521 overflow:hidden;
1522 }
1522 }
1523
1523
1524 #changeset_compare_view_content .compare_view_commits{
1524 #changeset_compare_view_content .compare_view_commits{
1525 width: auto !important;
1525 width: auto !important;
1526 }
1526 }
1527
1527
1528 #changeset_compare_view_content .compare_view_commits td{
1528 #changeset_compare_view_content .compare_view_commits td{
1529 padding:0px 0px 0px 12px !important;
1529 padding:0px 0px 0px 12px !important;
1530 }
1530 }
1531
1531
1532 #changeset_content .container .right {
1532 #changeset_content .container .right {
1533 float:right;
1533 float:right;
1534 width:25%;
1534 width:25%;
1535 text-align:right;
1535 text-align:right;
1536 }
1536 }
1537
1537
1538 #changeset_content .container .left .message {
1538 #changeset_content .container .left .message {
1539 font-style:italic;
1539 font-style:italic;
1540 color:#556CB5;
1540 color:#556CB5;
1541 white-space:pre-wrap;
1541 white-space:pre-wrap;
1542 }
1542 }
1543
1543
1544 .cs_files .cur_cs{
1544 .cs_files .cur_cs{
1545 margin:10px 2px;
1545 margin:10px 2px;
1546 font-weight: bold;
1546 font-weight: bold;
1547 }
1547 }
1548
1548
1549 .cs_files .cs_added {
1549 .cs_files .cs_added {
1550 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1550 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1551 height:16px;
1551 height:16px;
1552 padding-left:20px;
1552 padding-left:20px;
1553 margin-top:7px;
1553 margin-top:7px;
1554 text-align:left;
1554 text-align:left;
1555 }
1555 }
1556
1556
1557 .cs_files .cs_changed {
1557 .cs_files .cs_changed {
1558 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1558 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1559 height:16px;
1559 height:16px;
1560 padding-left:20px;
1560 padding-left:20px;
1561 margin-top:7px;
1561 margin-top:7px;
1562 text-align:left;
1562 text-align:left;
1563 }
1563 }
1564
1564
1565 .cs_files .cs_removed {
1565 .cs_files .cs_removed {
1566 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1566 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1567 height:16px;
1567 height:16px;
1568 padding-left:20px;
1568 padding-left:20px;
1569 margin-top:7px;
1569 margin-top:7px;
1570 text-align:left;
1570 text-align:left;
1571 }
1571 }
1572
1572
1573 #graph {
1573 #graph {
1574 overflow:hidden;
1574 overflow:hidden;
1575 }
1575 }
1576
1576
1577 #graph_nodes {
1577 #graph_nodes {
1578 width:160px;
1578 width:160px;
1579 float:left;
1579 float:left;
1580 margin-left:-50px;
1580 margin-left:-50px;
1581 margin-top:5px;
1581 margin-top:5px;
1582 }
1582 }
1583
1583
1584 #graph_content {
1584 #graph_content {
1585 width:800px;
1585 width:800px;
1586 float:left;
1586 float:left;
1587 }
1587 }
1588
1588
1589 #graph_content .container_header {
1589 #graph_content .container_header {
1590 border:1px solid #CCC;
1590 border:1px solid #CCC;
1591 padding:10px;
1591 padding:10px;
1592 }
1592 }
1593 #graph_content #rev_range_container{
1593 #graph_content #rev_range_container{
1594 padding:10px 0px;
1594 padding:10px 0px;
1595 }
1595 }
1596 #graph_content .container {
1596 #graph_content .container {
1597 border-bottom:1px solid #CCC;
1597 border-bottom:1px solid #CCC;
1598 border-left:1px solid #CCC;
1598 border-left:1px solid #CCC;
1599 border-right:1px solid #CCC;
1599 border-right:1px solid #CCC;
1600 min-height:80px;
1600 min-height:80px;
1601 overflow:hidden;
1601 overflow:hidden;
1602 font-size:1.2em;
1602 font-size:1.2em;
1603 }
1603 }
1604
1604
1605 #graph_content .container .right {
1605 #graph_content .container .right {
1606 float:right;
1606 float:right;
1607 width:28%;
1607 width:28%;
1608 text-align:right;
1608 text-align:right;
1609 padding-bottom:5px;
1609 padding-bottom:5px;
1610 }
1610 }
1611
1611
1612 #graph_content .container .left .date {
1612 #graph_content .container .left .date {
1613 font-weight:700;
1613 font-weight:700;
1614 padding-bottom:5px;
1614 padding-bottom:5px;
1615 }
1615 }
1616 #graph_content .container .left .date span{
1616 #graph_content .container .left .date span{
1617 vertical-align: text-top;
1617 vertical-align: text-top;
1618 }
1618 }
1619
1619
1620 #graph_content .container .left .message {
1620 #graph_content .container .left .message {
1621 font-size:100%;
1621 font-size:100%;
1622 padding-top:3px;
1622 padding-top:3px;
1623 white-space:pre-wrap;
1623 white-space:pre-wrap;
1624 }
1624 }
1625
1625
1626 .right div {
1626 .right div {
1627 clear:both;
1627 clear:both;
1628 }
1628 }
1629
1629
1630 .right .changes .added,.changed,.removed {
1630 .right .changes .added,.changed,.removed {
1631 border:1px solid #DDD;
1631 border:1px solid #DDD;
1632 display:block;
1632 display:block;
1633 float:right;
1633 float:right;
1634 text-align:center;
1634 text-align:center;
1635 min-width:15px;
1635 min-width:15px;
1636 cursor: help;
1636 cursor: help;
1637 }
1637 }
1638 .right .changes .large {
1638 .right .changes .large {
1639 border:1px solid #DDD;
1639 border:1px solid #DDD;
1640 display:block;
1640 display:block;
1641 float:right;
1641 float:right;
1642 text-align:center;
1642 text-align:center;
1643 min-width:45px;
1643 min-width:45px;
1644 cursor: help;
1644 cursor: help;
1645 background: #54A9F7;
1645 background: #54A9F7;
1646 }
1646 }
1647
1647
1648 .right .changes .added {
1648 .right .changes .added {
1649 background:#BFB;
1649 background:#BFB;
1650 }
1650 }
1651
1651
1652 .right .changes .changed {
1652 .right .changes .changed {
1653 background:#FD8;
1653 background:#FD8;
1654 }
1654 }
1655
1655
1656 .right .changes .removed {
1656 .right .changes .removed {
1657 background:#F88;
1657 background:#F88;
1658 }
1658 }
1659
1659
1660 .right .merge {
1660 .right .merge {
1661 vertical-align:top;
1661 vertical-align:top;
1662 font-size:0.75em;
1662 font-size:0.75em;
1663 font-weight:700;
1663 font-weight:700;
1664 }
1664 }
1665
1665
1666 .right .parent {
1666 .right .parent {
1667 font-size:90%;
1667 font-size:90%;
1668 font-family:monospace;
1668 font-family:monospace;
1669 }
1669 }
1670
1670
1671 .right .logtags .branchtag {
1671 .right .logtags .branchtag {
1672 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1672 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1673 display:block;
1673 display:block;
1674 font-size:0.8em;
1674 font-size:0.8em;
1675 padding:11px 16px 0 0;
1675 padding:11px 16px 0 0;
1676 }
1676 }
1677
1677
1678 .right .logtags .tagtag {
1678 .right .logtags .tagtag {
1679 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1679 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1680 display:block;
1680 display:block;
1681 font-size:0.8em;
1681 font-size:0.8em;
1682 padding:11px 16px 0 0;
1682 padding:11px 16px 0 0;
1683 }
1683 }
1684
1684
1685 div.browserblock {
1685 div.browserblock {
1686 overflow:hidden;
1686 overflow:hidden;
1687 border:1px solid #ccc;
1687 border:1px solid #ccc;
1688 background:#f8f8f8;
1688 background:#f8f8f8;
1689 font-size:100%;
1689 font-size:100%;
1690 line-height:125%;
1690 line-height:125%;
1691 padding:0;
1691 padding:0;
1692 }
1692 }
1693
1693
1694 div.browserblock .browser-header {
1694 div.browserblock .browser-header {
1695 background:#FFF;
1695 background:#FFF;
1696 padding:10px 0px 35px 0px;
1696 padding:10px 0px 35px 0px;
1697 width: 100%;
1697 width: 100%;
1698 }
1698 }
1699 div.browserblock .browser-nav {
1699 div.browserblock .browser-nav {
1700 float:left
1700 float:left
1701 }
1701 }
1702
1702
1703 div.browserblock .browser-branch {
1703 div.browserblock .browser-branch {
1704 padding:10px 0 0 0;
1704 padding:10px 0 0 0;
1705 float:left;
1705 float:left;
1706 }
1706 }
1707 div.browserblock .browser-branch label {
1707 div.browserblock .browser-branch label {
1708 color:#4A4A4A;
1708 color:#4A4A4A;
1709 vertical-align:text-top;
1709 vertical-align:text-top;
1710 }
1710 }
1711
1711
1712 div.browserblock .browser-header span {
1712 div.browserblock .browser-header span {
1713 margin-left:25px;
1713 margin-left:25px;
1714 font-weight:700;
1714 font-weight:700;
1715 }
1715 }
1716
1716
1717 div.browserblock .browser-body {
1717 div.browserblock .browser-body {
1718 background:#EEE;
1718 background:#EEE;
1719 border-top:1px solid #CCC;
1719 border-top:1px solid #CCC;
1720 }
1720 }
1721
1721
1722 table.code-browser {
1722 table.code-browser {
1723 border-collapse:collapse;
1723 border-collapse:collapse;
1724 width:100%;
1724 width:100%;
1725 }
1725 }
1726
1726
1727 table.code-browser tr {
1727 table.code-browser tr {
1728 margin:3px;
1728 margin:3px;
1729 }
1729 }
1730
1730
1731 table.code-browser thead th {
1731 table.code-browser thead th {
1732 background-color:#EEE;
1732 background-color:#EEE;
1733 height:20px;
1733 height:20px;
1734 font-size:1.1em;
1734 font-size:1.1em;
1735 font-weight:700;
1735 font-weight:700;
1736 text-align:left;
1736 text-align:left;
1737 padding-left:10px;
1737 padding-left:10px;
1738 }
1738 }
1739
1739
1740 table.code-browser tbody td {
1740 table.code-browser tbody td {
1741 padding-left:10px;
1741 padding-left:10px;
1742 height:20px;
1742 height:20px;
1743 }
1743 }
1744
1744
1745 table.code-browser .browser-file {
1745 table.code-browser .browser-file {
1746 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1746 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1747 height:16px;
1747 height:16px;
1748 padding-left:20px;
1748 padding-left:20px;
1749 text-align:left;
1749 text-align:left;
1750 }
1750 }
1751 .diffblock .changeset_file{
1751 .diffblock .changeset_file{
1752 background:url("../images/icons/file.png") no-repeat scroll 3px;
1752 background:url("../images/icons/file.png") no-repeat scroll 3px;
1753 height:16px;
1753 height:16px;
1754 padding-left:22px;
1754 padding-left:22px;
1755 text-align:left;
1755 text-align:left;
1756 font-size: 14px;
1756 font-size: 14px;
1757 }
1757 }
1758
1758
1759 .diffblock .changeset_header{
1759 .diffblock .changeset_header{
1760 margin-left: 6px !important;
1760 margin-left: 6px !important;
1761 }
1761 }
1762
1762
1763 table.code-browser .browser-dir {
1763 table.code-browser .browser-dir {
1764 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1764 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1765 height:16px;
1765 height:16px;
1766 padding-left:20px;
1766 padding-left:20px;
1767 text-align:left;
1767 text-align:left;
1768 }
1768 }
1769
1769
1770 .box .search {
1770 .box .search {
1771 clear:both;
1771 clear:both;
1772 overflow:hidden;
1772 overflow:hidden;
1773 margin:0;
1773 margin:0;
1774 padding:0 20px 10px;
1774 padding:0 20px 10px;
1775 }
1775 }
1776
1776
1777 .box .search div.search_path {
1777 .box .search div.search_path {
1778 background:none repeat scroll 0 0 #EEE;
1778 background:none repeat scroll 0 0 #EEE;
1779 border:1px solid #CCC;
1779 border:1px solid #CCC;
1780 color:blue;
1780 color:blue;
1781 margin-bottom:10px;
1781 margin-bottom:10px;
1782 padding:10px 0;
1782 padding:10px 0;
1783 }
1783 }
1784
1784
1785 .box .search div.search_path div.link {
1785 .box .search div.search_path div.link {
1786 font-weight:700;
1786 font-weight:700;
1787 margin-left:25px;
1787 margin-left:25px;
1788 }
1788 }
1789
1789
1790 .box .search div.search_path div.link a {
1790 .box .search div.search_path div.link a {
1791 color:#003367;
1791 color:#003367;
1792 cursor:pointer;
1792 cursor:pointer;
1793 text-decoration:none;
1793 text-decoration:none;
1794 }
1794 }
1795
1795
1796 #path_unlock {
1796 #path_unlock {
1797 color:red;
1797 color:red;
1798 font-size:1.2em;
1798 font-size:1.2em;
1799 padding-left:4px;
1799 padding-left:4px;
1800 }
1800 }
1801
1801
1802 .info_box * {
1802 .info_box * {
1803 background:url("../images/pager.png") repeat-x scroll 0 0 #EBEBEB;
1803 background:url("../images/pager.png") repeat-x scroll 0 0 #EBEBEB;
1804 color:#4A4A4A;
1804 color:#4A4A4A;
1805 font-weight:700;
1805 font-weight:700;
1806 height:1%;
1806 height:1%;
1807 display:inline;
1807 display:inline;
1808 border-color:#DEDEDE #C4C4C4 #C4C4C4 #CFCFCF;
1808 border-color:#DEDEDE #C4C4C4 #C4C4C4 #CFCFCF;
1809 border-style:solid;
1809 border-style:solid;
1810 border-width:1px;
1810 border-width:1px;
1811 padding:4px 6px;
1811 padding:4px 6px;
1812 }
1812 }
1813
1813
1814 .info_box span {
1814 .info_box span {
1815 margin-left:3px;
1815 margin-left:3px;
1816 margin-right:3px;
1816 margin-right:3px;
1817 }
1817 }
1818
1818
1819 .info_box input#at_rev {
1819 .info_box input#at_rev {
1820 text-align:center;
1820 text-align:center;
1821 padding:5px 3px 3px 2px;
1821 padding:5px 3px 3px 2px;
1822 }
1822 }
1823
1823
1824 .info_box input#view {
1824 .info_box input#view {
1825 text-align:center;
1825 text-align:center;
1826 padding:4px 3px 2px 2px;
1826 padding:4px 3px 2px 2px;
1827 }
1827 }
1828
1828
1829 .yui-overlay,.yui-panel-container {
1829 .yui-overlay,.yui-panel-container {
1830 visibility:hidden;
1830 visibility:hidden;
1831 position:absolute;
1831 position:absolute;
1832 z-index:2;
1832 z-index:2;
1833 }
1833 }
1834
1834
1835 .yui-tt {
1835 .yui-tt {
1836 visibility:hidden;
1836 visibility:hidden;
1837 position:absolute;
1837 position:absolute;
1838 color:#666;
1838 color:#666;
1839 background-color:#FFF;
1839 background-color:#FFF;
1840 font-family:arial, helvetica, verdana, sans-serif;
1840 font-family:arial, helvetica, verdana, sans-serif;
1841 border:2px solid #003367;
1841 border:2px solid #003367;
1842 font:100% sans-serif;
1842 font:100% sans-serif;
1843 width:auto;
1843 width:auto;
1844 opacity:1px;
1844 opacity:1px;
1845 padding:8px;
1845 padding:8px;
1846 white-space: pre;
1846 white-space: pre;
1847 -webkit-border-radius: 8px 8px 8px 8px;
1847 -webkit-border-radius: 8px 8px 8px 8px;
1848 -khtml-border-radius: 8px 8px 8px 8px;
1848 -khtml-border-radius: 8px 8px 8px 8px;
1849 -moz-border-radius: 8px 8px 8px 8px;
1849 -moz-border-radius: 8px 8px 8px 8px;
1850 border-radius: 8px 8px 8px 8px;
1850 border-radius: 8px 8px 8px 8px;
1851 }
1851 }
1852
1852
1853 .ac {
1853 .ac {
1854 vertical-align:top;
1854 vertical-align:top;
1855 }
1855 }
1856
1856
1857 .ac .yui-ac {
1857 .ac .yui-ac {
1858 position:relative;
1858 position:relative;
1859 font-family:arial;
1859 font-family:arial;
1860 font-size:100%;
1860 font-size:100%;
1861 }
1861 }
1862
1862
1863 .ac .perm_ac {
1863 .ac .perm_ac {
1864 width:15em;
1864 width:15em;
1865 }
1865 }
1866
1866
1867 .ac .yui-ac-input {
1867 .ac .yui-ac-input {
1868 width:100%;
1868 width:100%;
1869 }
1869 }
1870
1870
1871 .ac .yui-ac-container {
1871 .ac .yui-ac-container {
1872 position:absolute;
1872 position:absolute;
1873 top:1.6em;
1873 top:1.6em;
1874 width:100%;
1874 width:100%;
1875 }
1875 }
1876
1876
1877 .ac .yui-ac-content {
1877 .ac .yui-ac-content {
1878 position:absolute;
1878 position:absolute;
1879 width:100%;
1879 width:100%;
1880 border:1px solid gray;
1880 border:1px solid gray;
1881 background:#fff;
1881 background:#fff;
1882 overflow:hidden;
1882 overflow:hidden;
1883 z-index:9050;
1883 z-index:9050;
1884 }
1884 }
1885
1885
1886 .ac .yui-ac-shadow {
1886 .ac .yui-ac-shadow {
1887 position:absolute;
1887 position:absolute;
1888 width:100%;
1888 width:100%;
1889 background:#000;
1889 background:#000;
1890 -moz-opacity:0.1px;
1890 -moz-opacity:0.1px;
1891 opacity:.10;
1891 opacity:.10;
1892 filter:alpha(opacity = 10);
1892 filter:alpha(opacity = 10);
1893 z-index:9049;
1893 z-index:9049;
1894 margin:.3em;
1894 margin:.3em;
1895 }
1895 }
1896
1896
1897 .ac .yui-ac-content ul {
1897 .ac .yui-ac-content ul {
1898 width:100%;
1898 width:100%;
1899 margin:0;
1899 margin:0;
1900 padding:0;
1900 padding:0;
1901 }
1901 }
1902
1902
1903 .ac .yui-ac-content li {
1903 .ac .yui-ac-content li {
1904 cursor:default;
1904 cursor:default;
1905 white-space:nowrap;
1905 white-space:nowrap;
1906 margin:0;
1906 margin:0;
1907 padding:2px 5px;
1907 padding:2px 5px;
1908 }
1908 }
1909
1909
1910 .ac .yui-ac-content li.yui-ac-prehighlight {
1910 .ac .yui-ac-content li.yui-ac-prehighlight {
1911 background:#B3D4FF;
1911 background:#B3D4FF;
1912 }
1912 }
1913
1913
1914 .ac .yui-ac-content li.yui-ac-highlight {
1914 .ac .yui-ac-content li.yui-ac-highlight {
1915 background:#556CB5;
1915 background:#556CB5;
1916 color:#FFF;
1916 color:#FFF;
1917 }
1917 }
1918
1918
1919
1919 .follow{
1920 .follow{
1920 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
1921 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
1921 height: 16px;
1922 height: 16px;
1922 width: 20px;
1923 width: 20px;
1923 cursor: pointer;
1924 cursor: pointer;
1924 display: block;
1925 display: block;
1925 float: right;
1926 float: right;
1926 margin-top: 2px;
1927 margin-top: 2px;
1927 }
1928 }
1928
1929
1929 .following{
1930 .following{
1930 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
1931 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
1931 height: 16px;
1932 height: 16px;
1932 width: 20px;
1933 width: 20px;
1933 cursor: pointer;
1934 cursor: pointer;
1934 display: block;
1935 display: block;
1935 float: right;
1936 float: right;
1936 margin-top: 2px;
1937 margin-top: 2px;
1937 }
1938 }
1938
1939
1939 .currently_following{
1940 .currently_following{
1940 padding-left: 10px;
1941 padding-left: 10px;
1941 padding-bottom:5px;
1942 padding-bottom:5px;
1942 }
1943 }
1943
1944
1944 .add_icon {
1945 .add_icon {
1945 background:url("../images/icons/add.png") no-repeat scroll 3px;
1946 background:url("../images/icons/add.png") no-repeat scroll 3px;
1946 height:16px;
1947 padding-left:20px;
1947 padding-left:20px;
1948 padding-top:1px;
1948 padding-top:0px;
1949 text-align:left;
1949 text-align:left;
1950 }
1950 }
1951
1951
1952 .edit_icon {
1952 .edit_icon {
1953 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
1953 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
1954 height:16px;
1955 padding-left:20px;
1954 padding-left:20px;
1956 padding-top:1px;
1955 padding-top:0px;
1957 text-align:left;
1956 text-align:left;
1958 }
1957 }
1959
1958
1960 .delete_icon {
1959 .delete_icon {
1961 background:url("../images/icons/delete.png") no-repeat scroll 3px;
1960 background:url("../images/icons/delete.png") no-repeat scroll 3px;
1962 height:16px;
1963 padding-left:20px;
1961 padding-left:20px;
1964 padding-top:1px;
1962 padding-top:0px;
1965 text-align:left;
1963 text-align:left;
1966 }
1964 }
1967
1965
1968 .refresh_icon {
1966 .refresh_icon {
1969 background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
1967 background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
1970 height:16px;
1971 padding-left:20px;
1968 padding-left:20px;
1972 padding-top:1px;
1969 padding-top:0px;
1973 text-align:left;
1970 text-align:left;
1974 }
1971 }
1975
1972
1976 .pull_icon {
1973 .pull_icon {
1977 background:url("../images/icons/connect.png") no-repeat scroll 3px;
1974 background:url("../images/icons/connect.png") no-repeat scroll 3px;
1978 height:16px;
1979 padding-left:20px;
1975 padding-left:20px;
1980 padding-top:1px;
1976 padding-top:0px;
1981 text-align:left;
1977 text-align:left;
1982 }
1978 }
1983
1979
1984 .rss_icon {
1980 .rss_icon {
1985 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
1981 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
1986 height:16px;
1987 padding-left:20px;
1982 padding-left:20px;
1988 padding-top:1px;
1983 padding-top:0px;
1989 text-align:left;
1984 text-align:left;
1990 }
1985 }
1991
1986
1992 .atom_icon {
1987 .atom_icon {
1993 background:url("../images/icons/atom.png") no-repeat scroll 3px;
1988 background:url("../images/icons/atom.png") no-repeat scroll 3px;
1994 height:16px;
1995 padding-left:20px;
1989 padding-left:20px;
1996 padding-top:1px;
1990 padding-top:0px;
1997 text-align:left;
1991 text-align:left;
1998 }
1992 }
1999
1993
2000 .archive_icon {
1994 .archive_icon {
2001 background:url("../images/icons/compress.png") no-repeat scroll 3px;
1995 background:url("../images/icons/compress.png") no-repeat scroll 3px;
2002 height:16px;
2003 padding-left:20px;
1996 padding-left:20px;
2004 text-align:left;
1997 text-align:left;
2005 padding-top:1px;
1998 padding-top:1px;
2006 }
1999 }
2000
2007 .start_following_icon {
2001 .start_following_icon {
2008 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
2002 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
2009 height:16px;
2010 padding-left:20px;
2003 padding-left:20px;
2011 text-align:left;
2004 text-align:left;
2012 padding-top:1px;
2005 padding-top:0px;
2013 }
2006 }
2007
2014 .stop_following_icon {
2008 .stop_following_icon {
2015 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2009 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2016 height:16px;
2017 padding-left:20px;
2010 padding-left:20px;
2018 text-align:left;
2011 text-align:left;
2019 padding-top:1px;
2012 padding-top:0px;
2020 }
2013 }
2021
2014
2022 .action_button {
2015 .action_button {
2023 border:0;
2016 border:0;
2024 display:block;
2017 display:block;
2025 }
2018 }
2026
2019
2027 .action_button:hover {
2020 .action_button:hover {
2028 border:0;
2021 border:0;
2029 text-decoration:underline;
2022 text-decoration:underline;
2030 cursor:pointer;
2023 cursor:pointer;
2031 }
2024 }
2032
2025
2033 #switch_repos {
2026 #switch_repos {
2034 position:absolute;
2027 position:absolute;
2035 height:25px;
2028 height:25px;
2036 z-index:1;
2029 z-index:1;
2037 }
2030 }
2038
2031
2039 #switch_repos select {
2032 #switch_repos select {
2040 min-width:150px;
2033 min-width:150px;
2041 max-height:250px;
2034 max-height:250px;
2042 z-index:1;
2035 z-index:1;
2043 }
2036 }
2044
2037
2045 .breadcrumbs {
2038 .breadcrumbs {
2046 border:medium none;
2039 border:medium none;
2047 color:#FFF;
2040 color:#FFF;
2048 float:left;
2041 float:left;
2049 text-transform:uppercase;
2042 text-transform:uppercase;
2050 font-weight:700;
2043 font-weight:700;
2051 font-size:14px;
2044 font-size:14px;
2052 margin:0;
2045 margin:0;
2053 padding:11px 0 11px 10px;
2046 padding:11px 0 11px 10px;
2054 }
2047 }
2055
2048
2056 .breadcrumbs a {
2049 .breadcrumbs a {
2057 color:#FFF;
2050 color:#FFF;
2058 }
2051 }
2059
2052
2060 .flash_msg ul {
2053 .flash_msg ul {
2061 margin:0;
2054 margin:0;
2062 padding:0 0 10px;
2055 padding:0 0 10px;
2063 }
2056 }
2064
2057
2065 .error_msg {
2058 .error_msg {
2066 background-color:#FFCFCF;
2059 background-color:#FFCFCF;
2067 background-image:url("../images/icons/error_msg.png");
2060 background-image:url("../images/icons/error_msg.png");
2068 border:1px solid #FF9595;
2061 border:1px solid #FF9595;
2069 color:#C30;
2062 color:#C30;
2070 }
2063 }
2071
2064
2072 .warning_msg {
2065 .warning_msg {
2073 background-color:#FFFBCC;
2066 background-color:#FFFBCC;
2074 background-image:url("../images/icons/warning_msg.png");
2067 background-image:url("../images/icons/warning_msg.png");
2075 border:1px solid #FFF35E;
2068 border:1px solid #FFF35E;
2076 color:#C69E00;
2069 color:#C69E00;
2077 }
2070 }
2078
2071
2079 .success_msg {
2072 .success_msg {
2080 background-color:#D5FFCF;
2073 background-color:#D5FFCF;
2081 background-image:url("../images/icons/success_msg.png");
2074 background-image:url("../images/icons/success_msg.png");
2082 border:1px solid #97FF88;
2075 border:1px solid #97FF88;
2083 color:#090;
2076 color:#090;
2084 }
2077 }
2085
2078
2086 .notice_msg {
2079 .notice_msg {
2087 background-color:#DCE3FF;
2080 background-color:#DCE3FF;
2088 background-image:url("../images/icons/notice_msg.png");
2081 background-image:url("../images/icons/notice_msg.png");
2089 border:1px solid #93A8FF;
2082 border:1px solid #93A8FF;
2090 color:#556CB5;
2083 color:#556CB5;
2091 }
2084 }
2092
2085
2093 .success_msg,.error_msg,.notice_msg,.warning_msg {
2086 .success_msg,.error_msg,.notice_msg,.warning_msg {
2094 background-position:10px center;
2087 background-position:10px center;
2095 background-repeat:no-repeat;
2088 background-repeat:no-repeat;
2096 font-size:12px;
2089 font-size:12px;
2097 font-weight:700;
2090 font-weight:700;
2098 min-height:14px;
2091 min-height:14px;
2099 line-height:14px;
2092 line-height:14px;
2100 margin-bottom:0;
2093 margin-bottom:0;
2101 margin-top:0;
2094 margin-top:0;
2102 display:block;
2095 display:block;
2103 overflow:auto;
2096 overflow:auto;
2104 padding:6px 10px 6px 40px;
2097 padding:6px 10px 6px 40px;
2105 }
2098 }
2106
2099
2107 #msg_close {
2100 #msg_close {
2108 background:transparent url("../icons/cross_grey_small.png") no-repeat scroll 0 0;
2101 background:transparent url("../icons/cross_grey_small.png") no-repeat scroll 0 0;
2109 cursor:pointer;
2102 cursor:pointer;
2110 height:16px;
2103 height:16px;
2111 position:absolute;
2104 position:absolute;
2112 right:5px;
2105 right:5px;
2113 top:5px;
2106 top:5px;
2114 width:16px;
2107 width:16px;
2115 }
2108 }
2116
2109
2117 div#legend_container table,div#legend_choices table {
2110 div#legend_container table,div#legend_choices table {
2118 width:auto !important;
2111 width:auto !important;
2119 }
2112 }
2120
2113
2121 table#permissions_manage {
2114 table#permissions_manage {
2122 width:0 !important;
2115 width:0 !important;
2123 }
2116 }
2124
2117
2125 table#permissions_manage span.private_repo_msg {
2118 table#permissions_manage span.private_repo_msg {
2126 font-size:0.8em;
2119 font-size:0.8em;
2127 opacity:0.6px;
2120 opacity:0.6px;
2128 }
2121 }
2129
2122
2130 table#permissions_manage td.private_repo_msg {
2123 table#permissions_manage td.private_repo_msg {
2131 font-size:0.8em;
2124 font-size:0.8em;
2132 }
2125 }
2133
2126
2134 table#permissions_manage tr#add_perm_input td {
2127 table#permissions_manage tr#add_perm_input td {
2135 vertical-align:middle;
2128 vertical-align:middle;
2136 }
2129 }
2137
2130
2138 div.gravatar {
2131 div.gravatar {
2139 background-color:#FFF;
2132 background-color:#FFF;
2140 border:1px solid #D0D0D0;
2133 border:1px solid #D0D0D0;
2141 float:left;
2134 float:left;
2142 margin-right:0.7em;
2135 margin-right:0.7em;
2143 padding:2px 2px 0;
2136 padding:2px 2px 0;
2144 }
2137 }
2145
2138
2146 #header,#content,#footer {
2139 #header,#content,#footer {
2147 min-width:1024px;
2140 min-width:978px;
2148 }
2141 }
2149
2142
2150 #content {
2143 #content {
2151 min-height:100%;
2144 min-height:100%;
2152 clear:both;
2145 clear:both;
2153 overflow:hidden;
2146 overflow:hidden;
2154 padding:14px 30px;
2147 padding:14px 10px;
2155 }
2148 }
2156
2149
2157 #content div.box div.title div.search {
2150 #content div.box div.title div.search {
2158 background:url("../images/title_link.png") no-repeat top left;
2151 background:url("../images/title_link.png") no-repeat top left;
2159 border-left:1px solid #316293;
2152 border-left:1px solid #316293;
2160 }
2153 }
2161
2154
2162 #content div.box div.title div.search div.input input {
2155 #content div.box div.title div.search div.input input {
2163 border:1px solid #316293;
2156 border:1px solid #316293;
2164 }
2157 }
2165
2158
2166 #content div.box div.title div.search div.button input.ui-button {
2159 #content div.box div.title div.search div.button input.ui-button {
2167 background:#4e85bb url("../images/button_highlight.png") repeat-x;
2160 background:#4e85bb url("../images/button_highlight.png") repeat-x;
2168 border:1px solid #316293;
2161 border:1px solid #316293;
2169 border-left:none;
2162 border-left:none;
2170 color:#FFF;
2163 color:#FFF;
2171 }
2164 }
2172
2165
2173 #content div.box div.title div.search div.button input.ui-state-hover {
2166 #content div.box div.title div.search div.button input.ui-state-hover {
2174 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
2167 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
2175 border:1px solid #316293;
2168 border:1px solid #316293;
2176 border-left:none;
2169 border-left:none;
2177 color:#FFF;
2170 color:#FFF;
2178 }
2171 }
2179
2172
2180 #content div.box div.form div.fields div.field div.highlight .ui-button {
2173 #content div.box div.form div.fields div.field div.highlight .ui-button {
2181 background:#4e85bb url("../images/button_highlight.png") repeat-x;
2174 background:#4e85bb url("../images/button_highlight.png") repeat-x;
2182 border-top:1px solid #5c91a4;
2175 border-top:1px solid #5c91a4;
2183 border-left:1px solid #2a6f89;
2176 border-left:1px solid #2a6f89;
2184 border-right:1px solid #2b7089;
2177 border-right:1px solid #2b7089;
2185 border-bottom:1px solid #1a6480;
2178 border-bottom:1px solid #1a6480;
2186 color:#fff;
2179 color:#fff;
2187 }
2180 }
2188
2181
2189 #content div.box div.form div.fields div.field div.highlight .ui-state-hover {
2182 #content div.box div.form div.fields div.field div.highlight .ui-state-hover {
2190 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
2183 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
2191 border-top:1px solid #78acbf;
2184 border-top:1px solid #78acbf;
2192 border-left:1px solid #34819e;
2185 border-left:1px solid #34819e;
2193 border-right:1px solid #35829f;
2186 border-right:1px solid #35829f;
2194 border-bottom:1px solid #257897;
2187 border-bottom:1px solid #257897;
2195 color:#fff;
2188 color:#fff;
2196 }
2189 }
2197
2190
2198 ins,div.options a:hover {
2191 ins,div.options a:hover {
2199 text-decoration:none;
2192 text-decoration:none;
2200 }
2193 }
2201
2194
2202 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 {
2195 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 {
2203 border:none;
2196 border:none;
2204 }
2197 }
2205
2198
2206 img.icon,.right .merge img {
2199 img.icon,.right .merge img {
2207 vertical-align:bottom;
2200 vertical-align:bottom;
2208 }
2201 }
2209
2202
2210 #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 {
2203 #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 {
2211 float:right;
2204 float:right;
2212 margin:0;
2205 margin:0;
2213 padding:0;
2206 padding:0;
2214 }
2207 }
2215
2208
2216 #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 {
2209 #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 {
2217 float:left;
2210 float:left;
2218 }
2211 }
2219
2212
2220 #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 {
2213 #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 {
2221 display:none;
2214 display:none;
2222 }
2215 }
2223
2216
2224 #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 {
2217 #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 {
2225 display:block;
2218 display:block;
2226 }
2219 }
2227
2220
2221 #content div.graph{
2222 padding:0 10px 10px;
2223 }
2224
2228 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2225 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2229 color:#bfe3ff;
2226 color:#bfe3ff;
2230 }
2227 }
2231
2228
2232 #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 {
2229 #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 {
2233 margin:10px 24px 10px 44px;
2230 margin:10px 24px 10px 44px;
2234 }
2231 }
2235
2232
2236 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2233 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2237 clear:both;
2234 clear:both;
2238 overflow:hidden;
2235 overflow:hidden;
2239 margin:0;
2236 margin:0;
2240 padding:0 20px 10px;
2237 padding:0 20px 10px;
2241 }
2238 }
2242
2239
2243 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2240 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2244 clear:both;
2241 clear:both;
2245 overflow:hidden;
2242 overflow:hidden;
2246 margin:0;
2243 margin:0;
2247 padding:0;
2244 padding:0;
2248 }
2245 }
2249
2246
2250 #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 {
2247 #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 {
2251 height:1%;
2248 height:1%;
2252 display:block;
2249 display:block;
2253 color:#363636;
2250 color:#363636;
2254 margin:0;
2251 margin:0;
2255 padding:2px 0 0;
2252 padding:2px 0 0;
2256 }
2253 }
2257
2254
2258 #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 {
2255 #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 {
2259 background:#FBE3E4;
2256 background:#FBE3E4;
2260 border-top:1px solid #e1b2b3;
2257 border-top:1px solid #e1b2b3;
2261 border-left:1px solid #e1b2b3;
2258 border-left:1px solid #e1b2b3;
2262 border-right:1px solid #FBC2C4;
2259 border-right:1px solid #FBC2C4;
2263 border-bottom:1px solid #FBC2C4;
2260 border-bottom:1px solid #FBC2C4;
2264 }
2261 }
2265
2262
2266 #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 {
2263 #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 {
2267 background:#E6EFC2;
2264 background:#E6EFC2;
2268 border-top:1px solid #cebb98;
2265 border-top:1px solid #cebb98;
2269 border-left:1px solid #cebb98;
2266 border-left:1px solid #cebb98;
2270 border-right:1px solid #c6d880;
2267 border-right:1px solid #c6d880;
2271 border-bottom:1px solid #c6d880;
2268 border-bottom:1px solid #c6d880;
2272 }
2269 }
2273
2270
2274 #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 {
2271 #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 {
2275 margin:0;
2272 margin:0;
2276 }
2273 }
2277
2274
2278 #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{
2275 #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{
2279 margin:0 0 0 0px !important;
2276 margin:0 0 0 0px !important;
2280 padding:0;
2277 padding:0;
2281 }
2278 }
2282
2279
2283 #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 {
2280 #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 {
2284 margin:0 0 0 200px;
2281 margin:0 0 0 200px;
2285 padding:0;
2282 padding:0;
2286 }
2283 }
2287
2284
2288
2285
2289 #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 {
2286 #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 {
2290 color:#000;
2287 color:#000;
2291 text-decoration:none;
2288 text-decoration:none;
2292 }
2289 }
2293
2290
2294 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2291 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2295 border:1px solid #666;
2292 border:1px solid #666;
2296 }
2293 }
2297
2294
2298 #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 {
2295 #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 {
2299 clear:both;
2296 clear:both;
2300 overflow:hidden;
2297 overflow:hidden;
2301 margin:0;
2298 margin:0;
2302 padding:8px 0 2px;
2299 padding:8px 0 2px;
2303 }
2300 }
2304
2301
2305 #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 {
2302 #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 {
2306 float:left;
2303 float:left;
2307 margin:0;
2304 margin:0;
2308 }
2305 }
2309
2306
2310 #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 {
2307 #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 {
2311 height:1%;
2308 height:1%;
2312 display:block;
2309 display:block;
2313 float:left;
2310 float:left;
2314 margin:2px 0 0 4px;
2311 margin:2px 0 0 4px;
2315 }
2312 }
2316
2313
2317 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 {
2314 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 {
2318 color:#000;
2315 color:#000;
2319 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2316 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2320 font-size:11px;
2317 font-size:11px;
2321 font-weight:700;
2318 font-weight:700;
2322 margin:0;
2319 margin:0;
2323 }
2320 }
2324
2321
2325 div.form div.fields div.field div.button .ui-button,#content div.box div.form div.fields div.buttons input.ui-button {
2322 div.form div.fields div.field div.button .ui-button,#content div.box div.form div.fields div.buttons input.ui-button {
2326 background:#e5e3e3 url("../images/button.png") repeat-x;
2323 background:#e5e3e3 url("../images/button.png") repeat-x;
2327 border-top:1px solid #DDD;
2324 border-top:1px solid #DDD;
2328 border-left:1px solid #c6c6c6;
2325 border-left:1px solid #c6c6c6;
2329 border-right:1px solid #DDD;
2326 border-right:1px solid #DDD;
2330 border-bottom:1px solid #c6c6c6;
2327 border-bottom:1px solid #c6c6c6;
2331 color:#515151;
2328 color:#515151;
2332 outline:none;
2329 outline:none;
2333 margin:0;
2330 margin:0;
2334 padding:6px 12px;
2331 padding:6px 12px;
2335 }
2332 }
2336
2333
2337 div.form div.fields div.field div.button .ui-state-hover,#content div.box div.form div.fields div.buttons input.ui-state-hover {
2334 div.form div.fields div.field div.button .ui-state-hover,#content div.box div.form div.fields div.buttons input.ui-state-hover {
2338 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2335 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2339 border-top:1px solid #ccc;
2336 border-top:1px solid #ccc;
2340 border-left:1px solid #bebebe;
2337 border-left:1px solid #bebebe;
2341 border-right:1px solid #b1b1b1;
2338 border-right:1px solid #b1b1b1;
2342 border-bottom:1px solid #afafaf;
2339 border-bottom:1px solid #afafaf;
2343 color:#515151;
2340 color:#515151;
2344 outline:none;
2341 outline:none;
2345 margin:0;
2342 margin:0;
2346 padding:6px 12px;
2343 padding:6px 12px;
2347 }
2344 }
2348
2345
2349 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2346 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2350 display:inline;
2347 display:inline;
2351 }
2348 }
2352
2349
2353 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2350 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2354 margin:10px 0 0 200px;
2351 margin:10px 0 0 200px;
2355 padding:0;
2352 padding:0;
2356 }
2353 }
2357
2354
2358 #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 {
2355 #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 {
2359 margin:10px 0 0;
2356 margin:10px 0 0;
2360 }
2357 }
2361
2358
2362 #content div.box table td.user,#content div.box table td.address {
2359 #content div.box table td.user,#content div.box table td.address {
2363 width:10%;
2360 width:10%;
2364 text-align:center;
2361 text-align:center;
2365 }
2362 }
2366
2363
2367 #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 {
2364 #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 {
2368 text-align:right;
2365 text-align:right;
2369 margin:6px 0 0;
2366 margin:6px 0 0;
2370 padding:0;
2367 padding:0;
2371 }
2368 }
2372
2369
2373 #content div.box div.action div.button input.ui-button,#login div.form div.fields div.buttons input.ui-button,#register div.form div.fields div.buttons input.ui-button {
2370 #content div.box div.action div.button input.ui-button,#login div.form div.fields div.buttons input.ui-button,#register div.form div.fields div.buttons input.ui-button {
2374 background:#e5e3e3 url("../images/button.png") repeat-x;
2371 background:#e5e3e3 url("../images/button.png") repeat-x;
2375 border-top:1px solid #DDD;
2372 border-top:1px solid #DDD;
2376 border-left:1px solid #c6c6c6;
2373 border-left:1px solid #c6c6c6;
2377 border-right:1px solid #DDD;
2374 border-right:1px solid #DDD;
2378 border-bottom:1px solid #c6c6c6;
2375 border-bottom:1px solid #c6c6c6;
2379 color:#515151;
2376 color:#515151;
2380 margin:0;
2377 margin:0;
2381 padding:6px 12px;
2378 padding:6px 12px;
2382 }
2379 }
2383
2380
2384 #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 {
2381 #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 {
2385 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2382 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2386 border-top:1px solid #ccc;
2383 border-top:1px solid #ccc;
2387 border-left:1px solid #bebebe;
2384 border-left:1px solid #bebebe;
2388 border-right:1px solid #b1b1b1;
2385 border-right:1px solid #b1b1b1;
2389 border-bottom:1px solid #afafaf;
2386 border-bottom:1px solid #afafaf;
2390 color:#515151;
2387 color:#515151;
2391 margin:0;
2388 margin:0;
2392 padding:6px 12px;
2389 padding:6px 12px;
2393 }
2390 }
2394
2391
2395 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2392 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2396 text-align:left;
2393 text-align:left;
2397 float:left;
2394 float:left;
2398 margin:0;
2395 margin:0;
2399 padding:0;
2396 padding:0;
2400 }
2397 }
2401
2398
2402 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2399 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2403 height:1%;
2400 height:1%;
2404 display:block;
2401 display:block;
2405 float:left;
2402 float:left;
2406 background:#ebebeb url("../images/pager.png") repeat-x;
2403 background:#ebebeb url("../images/pager.png") repeat-x;
2407 border-top:1px solid #dedede;
2404 border-top:1px solid #dedede;
2408 border-left:1px solid #cfcfcf;
2405 border-left:1px solid #cfcfcf;
2409 border-right:1px solid #c4c4c4;
2406 border-right:1px solid #c4c4c4;
2410 border-bottom:1px solid #c4c4c4;
2407 border-bottom:1px solid #c4c4c4;
2411 color:#4A4A4A;
2408 color:#4A4A4A;
2412 font-weight:700;
2409 font-weight:700;
2413 margin:0;
2410 margin:0;
2414 padding:6px 8px;
2411 padding:6px 8px;
2415 }
2412 }
2416
2413
2417 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2414 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2418 color:#B4B4B4;
2415 color:#B4B4B4;
2419 padding:6px;
2416 padding:6px;
2420 }
2417 }
2421
2418
2422 #login,#register {
2419 #login,#register {
2423 width:520px;
2420 width:520px;
2424 margin:10% auto 0;
2421 margin:10% auto 0;
2425 padding:0;
2422 padding:0;
2426 }
2423 }
2427
2424
2428 #login div.color,#register div.color {
2425 #login div.color,#register div.color {
2429 clear:both;
2426 clear:both;
2430 overflow:hidden;
2427 overflow:hidden;
2431 background:#FFF;
2428 background:#FFF;
2432 margin:10px auto 0;
2429 margin:10px auto 0;
2433 padding:3px 3px 3px 0;
2430 padding:3px 3px 3px 0;
2434 }
2431 }
2435
2432
2436 #login div.color a,#register div.color a {
2433 #login div.color a,#register div.color a {
2437 width:20px;
2434 width:20px;
2438 height:20px;
2435 height:20px;
2439 display:block;
2436 display:block;
2440 float:left;
2437 float:left;
2441 margin:0 0 0 3px;
2438 margin:0 0 0 3px;
2442 padding:0;
2439 padding:0;
2443 }
2440 }
2444
2441
2445 #login div.title h5,#register div.title h5 {
2442 #login div.title h5,#register div.title h5 {
2446 color:#fff;
2443 color:#fff;
2447 margin:10px;
2444 margin:10px;
2448 padding:0;
2445 padding:0;
2449 }
2446 }
2450
2447
2451 #login div.form div.fields div.field,#register div.form div.fields div.field {
2448 #login div.form div.fields div.field,#register div.form div.fields div.field {
2452 clear:both;
2449 clear:both;
2453 overflow:hidden;
2450 overflow:hidden;
2454 margin:0;
2451 margin:0;
2455 padding:0 0 10px;
2452 padding:0 0 10px;
2456 }
2453 }
2457
2454
2458 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2455 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2459 height:1%;
2456 height:1%;
2460 display:block;
2457 display:block;
2461 color:red;
2458 color:red;
2462 margin:8px 0 0;
2459 margin:8px 0 0;
2463 padding:0;
2460 padding:0;
2464 max-width: 320px;
2461 max-width: 320px;
2465 }
2462 }
2466
2463
2467 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2464 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2468 color:#000;
2465 color:#000;
2469 font-weight:700;
2466 font-weight:700;
2470 }
2467 }
2471
2468
2472 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2469 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2473 float:left;
2470 float:left;
2474 margin:0;
2471 margin:0;
2475 padding:0;
2472 padding:0;
2476 }
2473 }
2477
2474
2478 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2475 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2479 margin:0 0 0 184px;
2476 margin:0 0 0 184px;
2480 padding:0;
2477 padding:0;
2481 }
2478 }
2482
2479
2483 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2480 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2484 color:#565656;
2481 color:#565656;
2485 font-weight:700;
2482 font-weight:700;
2486 }
2483 }
2487
2484
2488 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2485 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2489 color:#000;
2486 color:#000;
2490 font-size:1em;
2487 font-size:1em;
2491 font-weight:700;
2488 font-weight:700;
2492 font-family:Verdana, Helvetica, Sans-Serif;
2489 font-family:Verdana, Helvetica, Sans-Serif;
2493 margin:0;
2490 margin:0;
2494 }
2491 }
2495
2492
2496 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2493 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2497 width:600px;
2494 width:600px;
2498 }
2495 }
2499
2496
2500 #changeset_content .container .left,#graph_content .container .left {
2497 #changeset_content .container .left,#graph_content .container .left {
2501 float:left;
2498 float:left;
2502 width:70%;
2499 width:70%;
2503 padding-left:5px;
2500 padding-left:5px;
2504 }
2501 }
2505
2502
2506 #changeset_content .container .left .date,.ac .match {
2503 #changeset_content .container .left .date,.ac .match {
2507 font-weight:700;
2504 font-weight:700;
2508 padding-top: 5px;
2505 padding-top: 5px;
2509 padding-bottom:5px;
2506 padding-bottom:5px;
2510 }
2507 }
2511
2508
2512 div#legend_container table td,div#legend_choices table td {
2509 div#legend_container table td,div#legend_choices table td {
2513 border:none !important;
2510 border:none !important;
2514 height:20px !important;
2511 height:20px !important;
2515 padding:0 !important;
2512 padding:0 !important;
2516 }
2513 }
2517
2514
2518 #q_filter{
2515 #q_filter{
2519 border:0 none;
2516 border:0 none;
2520 color:#AAAAAA;
2517 color:#AAAAAA;
2521 margin-bottom:-4px;
2518 margin-bottom:-4px;
2522 margin-top:-4px;
2519 margin-top:-4px;
2523 padding-left:3px;
2520 padding-left:3px;
2524 }
2521 }
2525
2522
@@ -1,643 +1,643 b''
1 <%inherit file="/base/base.html"/>
1 <%inherit file="/base/base.html"/>
2
2
3 <%def name="title()">
3 <%def name="title()">
4 ${c.repo_name} ${_('Summary')} - ${c.rhodecode_name}
4 ${c.repo_name} ${_('Summary')} - ${c.rhodecode_name}
5 </%def>
5 </%def>
6
6
7 <%def name="breadcrumbs_links()">
7 <%def name="breadcrumbs_links()">
8 ${h.link_to(u'Home',h.url('/'))}
8 ${h.link_to(u'Home',h.url('/'))}
9 &raquo;
9 &raquo;
10 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
10 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
11 &raquo;
11 &raquo;
12 ${_('summary')}
12 ${_('summary')}
13 </%def>
13 </%def>
14
14
15 <%def name="page_nav()">
15 <%def name="page_nav()">
16 ${self.menu('summary')}
16 ${self.menu('summary')}
17 </%def>
17 </%def>
18
18
19 <%def name="main()">
19 <%def name="main()">
20 <div class="box box-left">
20 <div class="box box-left">
21 <!-- box / title -->
21 <!-- box / title -->
22 <div class="title">
22 <div class="title">
23 ${self.breadcrumbs()}
23 ${self.breadcrumbs()}
24 </div>
24 </div>
25 <!-- end box / title -->
25 <!-- end box / title -->
26 <div class="form">
26 <div class="form">
27 <div class="fields">
27 <div class="fields">
28
28
29 <div class="field">
29 <div class="field">
30 <div class="label">
30 <div class="label">
31 <label>${_('Name')}:</label>
31 <label>${_('Name')}:</label>
32 </div>
32 </div>
33 <div class="input-short">
33 <div class="input-short">
34 %if c.repo_info.dbrepo.repo_type =='hg':
34 %if c.repo_info.dbrepo.repo_type =='hg':
35 <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url("/images/icons/hgicon.png")}"/>
35 <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url("/images/icons/hgicon.png")}"/>
36 %endif
36 %endif
37 %if c.repo_info.dbrepo.repo_type =='git':
37 %if c.repo_info.dbrepo.repo_type =='git':
38 <img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url("/images/icons/giticon.png")}"/>
38 <img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url("/images/icons/giticon.png")}"/>
39 %endif
39 %endif
40
40
41 %if c.repo_info.dbrepo.private:
41 %if c.repo_info.dbrepo.private:
42 <img style="margin-bottom:2px" class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url("/images/icons/lock.png")}"/>
42 <img style="margin-bottom:2px" class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url("/images/icons/lock.png")}"/>
43 %else:
43 %else:
44 <img style="margin-bottom:2px" class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url("/images/icons/lock_open.png")}"/>
44 <img style="margin-bottom:2px" class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url("/images/icons/lock_open.png")}"/>
45 %endif
45 %endif
46 <span style="font-size: 1.6em;font-weight: bold;vertical-align: baseline;">${c.repo_info.name}</span>
46 <span style="font-size: 1.6em;font-weight: bold;vertical-align: baseline;">${c.repo_info.name}</span>
47 %if c.rhodecode_user.username != 'default':
47 %if c.rhodecode_user.username != 'default':
48 %if c.following:
48 %if c.following:
49 <span id="follow_toggle" class="following" title="${_('Stop following this repository')}"
49 <span id="follow_toggle" class="following" title="${_('Stop following this repository')}"
50 onclick="javascript:toggleFollowingRepo(this,${c.repo_info.dbrepo.repo_id},'${str(h.get_token())}')">
50 onclick="javascript:toggleFollowingRepo(this,${c.repo_info.dbrepo.repo_id},'${str(h.get_token())}')">
51 </span>
51 </span>
52 %else:
52 %else:
53 <span id="follow_toggle" class="follow" title="${_('Start following this repository')}"
53 <span id="follow_toggle" class="follow" title="${_('Start following this repository')}"
54 onclick="javascript:toggleFollowingRepo(this,${c.repo_info.dbrepo.repo_id},'${str(h.get_token())}')">
54 onclick="javascript:toggleFollowingRepo(this,${c.repo_info.dbrepo.repo_id},'${str(h.get_token())}')">
55 </span>
55 </span>
56 %endif
56 %endif
57 %endif:
57 %endif:
58 <br/>
58 <br/>
59 %if c.repo_info.dbrepo.fork:
59 %if c.repo_info.dbrepo.fork:
60 <span style="margin-top:5px">
60 <span style="margin-top:5px">
61 <a href="${h.url('summary_home',repo_name=c.repo_info.dbrepo.fork.repo_name)}">
61 <a href="${h.url('summary_home',repo_name=c.repo_info.dbrepo.fork.repo_name)}">
62 <img class="icon" alt="${_('public')}"
62 <img class="icon" alt="${_('public')}"
63 title="${_('Fork of')} ${c.repo_info.dbrepo.fork.repo_name}"
63 title="${_('Fork of')} ${c.repo_info.dbrepo.fork.repo_name}"
64 src="${h.url("/images/icons/arrow_divide.png")}"/>
64 src="${h.url("/images/icons/arrow_divide.png")}"/>
65 ${_('Fork of')} ${c.repo_info.dbrepo.fork.repo_name}
65 ${_('Fork of')} ${c.repo_info.dbrepo.fork.repo_name}
66 </a>
66 </a>
67 </span>
67 </span>
68 %endif
68 %endif
69 </div>
69 </div>
70 </div>
70 </div>
71
71
72
72
73 <div class="field">
73 <div class="field">
74 <div class="label">
74 <div class="label">
75 <label>${_('Description')}:</label>
75 <label>${_('Description')}:</label>
76 </div>
76 </div>
77 <div class="input-short">
77 <div class="input-short">
78 ${c.repo_info.dbrepo.description}
78 ${c.repo_info.dbrepo.description}
79 </div>
79 </div>
80 </div>
80 </div>
81
81
82
82
83 <div class="field">
83 <div class="field">
84 <div class="label">
84 <div class="label">
85 <label>${_('Contact')}:</label>
85 <label>${_('Contact')}:</label>
86 </div>
86 </div>
87 <div class="input-short">
87 <div class="input-short">
88 <div class="gravatar">
88 <div class="gravatar">
89 <img alt="gravatar" src="${h.gravatar_url(c.repo_info.dbrepo.user.email)}"/>
89 <img alt="gravatar" src="${h.gravatar_url(c.repo_info.dbrepo.user.email)}"/>
90 </div>
90 </div>
91 ${_('Username')}: ${c.repo_info.dbrepo.user.username}<br/>
91 ${_('Username')}: ${c.repo_info.dbrepo.user.username}<br/>
92 ${_('Name')}: ${c.repo_info.dbrepo.user.name} ${c.repo_info.dbrepo.user.lastname}<br/>
92 ${_('Name')}: ${c.repo_info.dbrepo.user.name} ${c.repo_info.dbrepo.user.lastname}<br/>
93 ${_('Email')}: <a href="mailto:${c.repo_info.dbrepo.user.email}">${c.repo_info.dbrepo.user.email}</a>
93 ${_('Email')}: <a href="mailto:${c.repo_info.dbrepo.user.email}">${c.repo_info.dbrepo.user.email}</a>
94 </div>
94 </div>
95 </div>
95 </div>
96
96
97 <div class="field">
97 <div class="field">
98 <div class="label">
98 <div class="label">
99 <label>${_('Last change')}:</label>
99 <label>${_('Last change')}:</label>
100 </div>
100 </div>
101 <div class="input-short">
101 <div class="input-short">
102 ${h.age(c.repo_info.last_change)} - ${c.repo_info.last_change}
102 ${h.age(c.repo_info.last_change)} - ${c.repo_info.last_change}
103 ${_('by')} ${h.get_changeset_safe(c.repo_info,'tip').author}
103 ${_('by')} ${h.get_changeset_safe(c.repo_info,'tip').author}
104
104
105 </div>
105 </div>
106 </div>
106 </div>
107
107
108 <div class="field">
108 <div class="field">
109 <div class="label">
109 <div class="label">
110 <label>${_('Clone url')}:</label>
110 <label>${_('Clone url')}:</label>
111 </div>
111 </div>
112 <div class="input-short">
112 <div class="input-short">
113 <input type="text" id="clone_url" readonly="readonly" value="hg clone ${c.clone_repo_url}" size="70"/>
113 <input type="text" id="clone_url" readonly="readonly" value="hg clone ${c.clone_repo_url}" size="70"/>
114 </div>
114 </div>
115 </div>
115 </div>
116
116
117 <div class="field">
117 <div class="field">
118 <div class="label">
118 <div class="label">
119 <label>${_('Trending source files')}:</label>
119 <label>${_('Trending source files')}:</label>
120 </div>
120 </div>
121 <div class="input-short">
121 <div class="input-short">
122 <div id="lang_stats">
122 <div id="lang_stats">
123
123
124 </div>
124 </div>
125 <script type="text/javascript">
125 <script type="text/javascript">
126 YUE.onDOMReady(function(e){
126 YUE.onDOMReady(function(e){
127 id = 'clone_url';
127 id = 'clone_url';
128 YUE.on(id,'click',function(e){
128 YUE.on(id,'click',function(e){
129 YUD.get('clone_url').select();
129 YUD.get('clone_url').select();
130 })
130 })
131 })
131 })
132 var data = ${c.trending_languages|n};
132 var data = ${c.trending_languages|n};
133 var total = 0;
133 var total = 0;
134 var no_data = true;
134 var no_data = true;
135 for (k in data){
135 for (k in data){
136 total += data[k];
136 total += data[k];
137 no_data = false;
137 no_data = false;
138 }
138 }
139 var tbl = document.createElement('table');
139 var tbl = document.createElement('table');
140 tbl.setAttribute('class','trending_language_tbl');
140 tbl.setAttribute('class','trending_language_tbl');
141 var cnt =0;
141 var cnt =0;
142 for (k in data){
142 for (k in data){
143 cnt+=1;
143 cnt+=1;
144 var hide = cnt>2;
144 var hide = cnt>2;
145 var tr = document.createElement('tr');
145 var tr = document.createElement('tr');
146 if (hide){
146 if (hide){
147 tr.setAttribute('style','display:none');
147 tr.setAttribute('style','display:none');
148 tr.setAttribute('class','stats_hidden');
148 tr.setAttribute('class','stats_hidden');
149 }
149 }
150 var percentage = Math.round((data[k]/total*100),2);
150 var percentage = Math.round((data[k]/total*100),2);
151 var value = data[k];
151 var value = data[k];
152 var td1 = document.createElement('td');
152 var td1 = document.createElement('td');
153 td1.width=150;
153 td1.width=150;
154 var trending_language_label = document.createElement('div');
154 var trending_language_label = document.createElement('div');
155 trending_language_label.innerHTML = k;
155 trending_language_label.innerHTML = k;
156 td1.appendChild(trending_language_label);
156 td1.appendChild(trending_language_label);
157
157
158 var td2 = document.createElement('td');
158 var td2 = document.createElement('td');
159 td2.setAttribute('style','padding-right:14px !important');
159 td2.setAttribute('style','padding-right:14px !important');
160 var trending_language = document.createElement('div');
160 var trending_language = document.createElement('div');
161 var nr_files = value+" ${_('files')}";
161 var nr_files = value+" ${_('files')}";
162
162
163 trending_language.title = k+" "+nr_files;
163 trending_language.title = k+" "+nr_files;
164
164
165 if (percentage>20){
165 if (percentage>20){
166 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";
166 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";
167 }
167 }
168 else{
168 else{
169 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
169 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
170 }
170 }
171
171
172 trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
172 trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
173 trending_language.style.width=percentage+"%";
173 trending_language.style.width=percentage+"%";
174 td2.appendChild(trending_language);
174 td2.appendChild(trending_language);
175
175
176 tr.appendChild(td1);
176 tr.appendChild(td1);
177 tr.appendChild(td2);
177 tr.appendChild(td2);
178 tbl.appendChild(tr);
178 tbl.appendChild(tr);
179 if(cnt == 2){
179 if(cnt == 2){
180 var show_more = document.createElement('tr');
180 var show_more = document.createElement('tr');
181 var td=document.createElement('td');
181 var td=document.createElement('td');
182 lnk = document.createElement('a');
182 lnk = document.createElement('a');
183 lnk.href='#';
183 lnk.href='#';
184 lnk.innerHTML = "${_("show more")}";
184 lnk.innerHTML = "${_("show more")}";
185 lnk.id='code_stats_show_more';
185 lnk.id='code_stats_show_more';
186 td.appendChild(lnk);
186 td.appendChild(lnk);
187 show_more.appendChild(td);
187 show_more.appendChild(td);
188 show_more.appendChild(document.createElement('td'));
188 show_more.appendChild(document.createElement('td'));
189 tbl.appendChild(show_more);
189 tbl.appendChild(show_more);
190 }
190 }
191
191
192 }
192 }
193 if(no_data){
193 if(no_data){
194 var tr = document.createElement('tr');
194 var tr = document.createElement('tr');
195 var td1 = document.createElement('td');
195 var td1 = document.createElement('td');
196 td1.innerHTML = "${c.no_data_msg}";
196 td1.innerHTML = "${c.no_data_msg}";
197 tr.appendChild(td1);
197 tr.appendChild(td1);
198 tbl.appendChild(tr);
198 tbl.appendChild(tr);
199 }
199 }
200 YUD.get('lang_stats').appendChild(tbl);
200 YUD.get('lang_stats').appendChild(tbl);
201 YUE.on('code_stats_show_more','click',function(){
201 YUE.on('code_stats_show_more','click',function(){
202 l = YUD.getElementsByClassName('stats_hidden')
202 l = YUD.getElementsByClassName('stats_hidden')
203 for (e in l){
203 for (e in l){
204 YUD.setStyle(l[e],'display','');
204 YUD.setStyle(l[e],'display','');
205 };
205 };
206 YUD.setStyle(YUD.get('code_stats_show_more'),
206 YUD.setStyle(YUD.get('code_stats_show_more'),
207 'display','none');
207 'display','none');
208 })
208 })
209
209
210 </script>
210 </script>
211
211
212 </div>
212 </div>
213 </div>
213 </div>
214
214
215 <div class="field">
215 <div class="field">
216 <div class="label">
216 <div class="label">
217 <label>${_('Download')}:</label>
217 <label>${_('Download')}:</label>
218 </div>
218 </div>
219 <div class="input-short">
219 <div class="input-short">
220 %for cnt,archive in enumerate(c.repo_info._get_archives()):
220 %for cnt,archive in enumerate(c.repo_info._get_archives()):
221 %if cnt >=1:
221 %if cnt >=1:
222 |
222 |
223 %endif
223 %endif
224 ${h.link_to(archive['type'],
224 ${h.link_to(archive['type'],
225 h.url('files_archive_home',repo_name=c.repo_info.name,
225 h.url('files_archive_home',repo_name=c.repo_info.name,
226 revision='tip',fileformat=archive['extension']),class_="archive_icon")}
226 revision='tip',fileformat=archive['extension']),class_="archive_icon")}
227 %endfor
227 %endfor
228 </div>
228 </div>
229 </div>
229 </div>
230
230
231 <div class="field">
231 <div class="field">
232 <div class="label">
232 <div class="label">
233 <label>${_('Feeds')}:</label>
233 <label>${_('Feeds')}:</label>
234 </div>
234 </div>
235 <div class="input-short">
235 <div class="input-short">
236 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.repo_info.name),class_='rss_icon')}
236 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.repo_info.name),class_='rss_icon')}
237 ${h.link_to(_('Atom'),h.url('atom_feed_home',repo_name=c.repo_info.name),class_='atom_icon')}
237 ${h.link_to(_('Atom'),h.url('atom_feed_home',repo_name=c.repo_info.name),class_='atom_icon')}
238 </div>
238 </div>
239 </div>
239 </div>
240 </div>
240 </div>
241 </div>
241 </div>
242 </div>
242 </div>
243
243
244 <div class="box box-right" style="min-height:455px">
244 <div class="box box-right" style="min-height:455px">
245 <!-- box / title -->
245 <!-- box / title -->
246 <div class="title">
246 <div class="title">
247 <h5>${_('Commit activity by day / author')}</h5>
247 <h5>${_('Commit activity by day / author')}</h5>
248 </div>
248 </div>
249
249
250 <div class="table">
250 <div class="graph">
251
251
252 %if c.no_data:
252 %if c.no_data:
253 <div style="padding:0 10px 10px 15px;font-size: 1.2em;">${c.no_data_msg}</div>
253 <div style="padding:0 10px 10px 15px;font-size: 1.2em;">${c.no_data_msg}</div>
254 %endif:
254 %endif:
255 <div id="commit_history" style="width:460px;height:300px;float:left"></div>
255 <div id="commit_history" style="width:450px;height:300px;float:left"></div>
256 <div style="clear: both;height: 10px"></div>
256 <div style="clear: both;height: 10px"></div>
257 <div id="overview" style="width:460px;height:100px;float:left"></div>
257 <div id="overview" style="width:450px;height:100px;float:left"></div>
258
258
259 <div id="legend_data" style="clear:both;margin-top:10px;">
259 <div id="legend_data" style="clear:both;margin-top:10px;">
260 <div id="legend_container"></div>
260 <div id="legend_container"></div>
261 <div id="legend_choices">
261 <div id="legend_choices">
262 <table id="legend_choices_tables" style="font-size:smaller;color:#545454"></table>
262 <table id="legend_choices_tables" style="font-size:smaller;color:#545454"></table>
263 </div>
263 </div>
264 </div>
264 </div>
265 <script type="text/javascript">
265 <script type="text/javascript">
266 /**
266 /**
267 * Plots summary graph
267 * Plots summary graph
268 *
268 *
269 * @class SummaryPlot
269 * @class SummaryPlot
270 * @param {from} initial from for detailed graph
270 * @param {from} initial from for detailed graph
271 * @param {to} initial to for detailed graph
271 * @param {to} initial to for detailed graph
272 * @param {dataset}
272 * @param {dataset}
273 * @param {overview_dataset}
273 * @param {overview_dataset}
274 */
274 */
275 function SummaryPlot(from,to,dataset,overview_dataset) {
275 function SummaryPlot(from,to,dataset,overview_dataset) {
276 var initial_ranges = {
276 var initial_ranges = {
277 "xaxis":{
277 "xaxis":{
278 "from":from,
278 "from":from,
279 "to":to,
279 "to":to,
280 },
280 },
281 };
281 };
282 var dataset = dataset;
282 var dataset = dataset;
283 var overview_dataset = [overview_dataset];
283 var overview_dataset = [overview_dataset];
284 var choiceContainer = YUD.get("legend_choices");
284 var choiceContainer = YUD.get("legend_choices");
285 var choiceContainerTable = YUD.get("legend_choices_tables");
285 var choiceContainerTable = YUD.get("legend_choices_tables");
286 var plotContainer = YUD.get('commit_history');
286 var plotContainer = YUD.get('commit_history');
287 var overviewContainer = YUD.get('overview');
287 var overviewContainer = YUD.get('overview');
288
288
289 var plot_options = {
289 var plot_options = {
290 bars: {show:true,align:'center',lineWidth:4},
290 bars: {show:true,align:'center',lineWidth:4},
291 legend: {show:true, container:"legend_container"},
291 legend: {show:true, container:"legend_container"},
292 points: {show:true,radius:0,fill:false},
292 points: {show:true,radius:0,fill:false},
293 yaxis: {tickDecimals:0,},
293 yaxis: {tickDecimals:0,},
294 xaxis: {
294 xaxis: {
295 mode: "time",
295 mode: "time",
296 timeformat: "%d/%m",
296 timeformat: "%d/%m",
297 min:from,
297 min:from,
298 max:to,
298 max:to,
299 },
299 },
300 grid: {
300 grid: {
301 hoverable: true,
301 hoverable: true,
302 clickable: true,
302 clickable: true,
303 autoHighlight:true,
303 autoHighlight:true,
304 color: "#999"
304 color: "#999"
305 },
305 },
306 //selection: {mode: "x"}
306 //selection: {mode: "x"}
307 };
307 };
308 var overview_options = {
308 var overview_options = {
309 legend:{show:false},
309 legend:{show:false},
310 bars: {show:true,barWidth: 2,},
310 bars: {show:true,barWidth: 2,},
311 shadowSize: 0,
311 shadowSize: 0,
312 xaxis: {mode: "time", timeformat: "%d/%m/%y",},
312 xaxis: {mode: "time", timeformat: "%d/%m/%y",},
313 yaxis: {ticks: 3, min: 0,tickDecimals:0,},
313 yaxis: {ticks: 3, min: 0,tickDecimals:0,},
314 grid: {color: "#999",},
314 grid: {color: "#999",},
315 selection: {mode: "x"}
315 selection: {mode: "x"}
316 };
316 };
317
317
318 /**
318 /**
319 *get dummy data needed in few places
319 *get dummy data needed in few places
320 */
320 */
321 function getDummyData(label){
321 function getDummyData(label){
322 return {"label":label,
322 return {"label":label,
323 "data":[{"time":0,
323 "data":[{"time":0,
324 "commits":0,
324 "commits":0,
325 "added":0,
325 "added":0,
326 "changed":0,
326 "changed":0,
327 "removed":0,
327 "removed":0,
328 }],
328 }],
329 "schema":["commits"],
329 "schema":["commits"],
330 "color":'#ffffff',
330 "color":'#ffffff',
331 }
331 }
332 }
332 }
333
333
334 /**
334 /**
335 * generate checkboxes accordindly to data
335 * generate checkboxes accordindly to data
336 * @param keys
336 * @param keys
337 * @returns
337 * @returns
338 */
338 */
339 function generateCheckboxes(data) {
339 function generateCheckboxes(data) {
340 //append checkboxes
340 //append checkboxes
341 var i = 0;
341 var i = 0;
342 choiceContainerTable.innerHTML = '';
342 choiceContainerTable.innerHTML = '';
343 for(var pos in data) {
343 for(var pos in data) {
344
344
345 data[pos].color = i;
345 data[pos].color = i;
346 i++;
346 i++;
347 if(data[pos].label != ''){
347 if(data[pos].label != ''){
348 choiceContainerTable.innerHTML += '<tr><td>'+
348 choiceContainerTable.innerHTML += '<tr><td>'+
349 '<input type="checkbox" name="' + data[pos].label +'" checked="checked" />'
349 '<input type="checkbox" name="' + data[pos].label +'" checked="checked" />'
350 +data[pos].label+
350 +data[pos].label+
351 '</td></tr>';
351 '</td></tr>';
352 }
352 }
353 }
353 }
354 }
354 }
355
355
356 /**
356 /**
357 * ToolTip show
357 * ToolTip show
358 */
358 */
359 function showTooltip(x, y, contents) {
359 function showTooltip(x, y, contents) {
360 var div=document.getElementById('tooltip');
360 var div=document.getElementById('tooltip');
361 if(!div) {
361 if(!div) {
362 div = document.createElement('div');
362 div = document.createElement('div');
363 div.id="tooltip";
363 div.id="tooltip";
364 div.style.position="absolute";
364 div.style.position="absolute";
365 div.style.border='1px solid #fdd';
365 div.style.border='1px solid #fdd';
366 div.style.padding='2px';
366 div.style.padding='2px';
367 div.style.backgroundColor='#fee';
367 div.style.backgroundColor='#fee';
368 document.body.appendChild(div);
368 document.body.appendChild(div);
369 }
369 }
370 YUD.setStyle(div, 'opacity', 0);
370 YUD.setStyle(div, 'opacity', 0);
371 div.innerHTML = contents;
371 div.innerHTML = contents;
372 div.style.top=(y + 5) + "px";
372 div.style.top=(y + 5) + "px";
373 div.style.left=(x + 5) + "px";
373 div.style.left=(x + 5) + "px";
374
374
375 var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
375 var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
376 anim.animate();
376 anim.animate();
377 }
377 }
378
378
379 /**
379 /**
380 * This function will detect if selected period has some changesets
380 * This function will detect if selected period has some changesets
381 for this user if it does this data is then pushed for displaying
381 for this user if it does this data is then pushed for displaying
382 Additionally it will only display users that are selected by the checkbox
382 Additionally it will only display users that are selected by the checkbox
383 */
383 */
384 function getDataAccordingToRanges(ranges) {
384 function getDataAccordingToRanges(ranges) {
385
385
386 var data = [];
386 var data = [];
387 var keys = [];
387 var keys = [];
388 for(var key in dataset){
388 for(var key in dataset){
389 var push = false;
389 var push = false;
390
390
391 //method1 slow !!
391 //method1 slow !!
392 //*
392 //*
393 for(var ds in dataset[key].data){
393 for(var ds in dataset[key].data){
394 commit_data = dataset[key].data[ds];
394 commit_data = dataset[key].data[ds];
395 if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
395 if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
396 push = true;
396 push = true;
397 break;
397 break;
398 }
398 }
399 }
399 }
400 //*/
400 //*/
401
401
402 /*//method2 sorted commit data !!!
402 /*//method2 sorted commit data !!!
403
403
404 var first_commit = dataset[key].data[0].time;
404 var first_commit = dataset[key].data[0].time;
405 var last_commit = dataset[key].data[dataset[key].data.length-1].time;
405 var last_commit = dataset[key].data[dataset[key].data.length-1].time;
406
406
407 if (first_commit >= ranges.xaxis.from && last_commit <= ranges.xaxis.to){
407 if (first_commit >= ranges.xaxis.from && last_commit <= ranges.xaxis.to){
408 push = true;
408 push = true;
409 }
409 }
410 //*/
410 //*/
411
411
412 if(push){
412 if(push){
413 data.push(dataset[key]);
413 data.push(dataset[key]);
414 }
414 }
415 }
415 }
416 if(data.length >= 1){
416 if(data.length >= 1){
417 return data;
417 return data;
418 }
418 }
419 else{
419 else{
420 //just return dummy data for graph to plot itself
420 //just return dummy data for graph to plot itself
421 return [getDummyData('')];
421 return [getDummyData('')];
422 }
422 }
423
423
424 }
424 }
425
425
426 /**
426 /**
427 * redraw using new checkbox data
427 * redraw using new checkbox data
428 */
428 */
429 function plotchoiced(e,args){
429 function plotchoiced(e,args){
430 var cur_data = args[0];
430 var cur_data = args[0];
431 var cur_ranges = args[1];
431 var cur_ranges = args[1];
432
432
433 var new_data = [];
433 var new_data = [];
434 var inputs = choiceContainer.getElementsByTagName("input");
434 var inputs = choiceContainer.getElementsByTagName("input");
435
435
436 //show only checked labels
436 //show only checked labels
437 for(var i=0; i<inputs.length; i++) {
437 for(var i=0; i<inputs.length; i++) {
438 var checkbox_key = inputs[i].name;
438 var checkbox_key = inputs[i].name;
439
439
440 if(inputs[i].checked){
440 if(inputs[i].checked){
441 for(var d in cur_data){
441 for(var d in cur_data){
442 if(cur_data[d].label == checkbox_key){
442 if(cur_data[d].label == checkbox_key){
443 new_data.push(cur_data[d]);
443 new_data.push(cur_data[d]);
444 }
444 }
445 }
445 }
446 }
446 }
447 else{
447 else{
448 //push dummy data to not hide the label
448 //push dummy data to not hide the label
449 new_data.push(getDummyData(checkbox_key));
449 new_data.push(getDummyData(checkbox_key));
450 }
450 }
451 }
451 }
452
452
453 var new_options = YAHOO.lang.merge(plot_options, {
453 var new_options = YAHOO.lang.merge(plot_options, {
454 xaxis: {
454 xaxis: {
455 min: cur_ranges.xaxis.from,
455 min: cur_ranges.xaxis.from,
456 max: cur_ranges.xaxis.to,
456 max: cur_ranges.xaxis.to,
457 mode:"time",
457 mode:"time",
458 timeformat: "%d/%m",
458 timeformat: "%d/%m",
459 },
459 },
460 });
460 });
461 if (!new_data){
461 if (!new_data){
462 new_data = [[0,1]];
462 new_data = [[0,1]];
463 }
463 }
464 // do the zooming
464 // do the zooming
465 plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
465 plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
466
466
467 plot.subscribe("plotselected", plotselected);
467 plot.subscribe("plotselected", plotselected);
468
468
469 //resubscribe plothover
469 //resubscribe plothover
470 plot.subscribe("plothover", plothover);
470 plot.subscribe("plothover", plothover);
471
471
472 // don't fire event on the overview to prevent eternal loop
472 // don't fire event on the overview to prevent eternal loop
473 overview.setSelection(cur_ranges, true);
473 overview.setSelection(cur_ranges, true);
474
474
475 }
475 }
476
476
477 /**
477 /**
478 * plot only selected items from overview
478 * plot only selected items from overview
479 * @param ranges
479 * @param ranges
480 * @returns
480 * @returns
481 */
481 */
482 function plotselected(ranges,cur_data) {
482 function plotselected(ranges,cur_data) {
483 //updates the data for new plot
483 //updates the data for new plot
484 data = getDataAccordingToRanges(ranges);
484 data = getDataAccordingToRanges(ranges);
485 generateCheckboxes(data);
485 generateCheckboxes(data);
486
486
487 var new_options = YAHOO.lang.merge(plot_options, {
487 var new_options = YAHOO.lang.merge(plot_options, {
488 xaxis: {
488 xaxis: {
489 min: ranges.xaxis.from,
489 min: ranges.xaxis.from,
490 max: ranges.xaxis.to,
490 max: ranges.xaxis.to,
491 mode:"time",
491 mode:"time",
492 timeformat: "%d/%m",
492 timeformat: "%d/%m",
493 },
493 },
494 yaxis: {
494 yaxis: {
495 min: ranges.yaxis.from,
495 min: ranges.yaxis.from,
496 max: ranges.yaxis.to,
496 max: ranges.yaxis.to,
497 },
497 },
498
498
499 });
499 });
500 // do the zooming
500 // do the zooming
501 plot = YAHOO.widget.Flot(plotContainer, data, new_options);
501 plot = YAHOO.widget.Flot(plotContainer, data, new_options);
502
502
503 plot.subscribe("plotselected", plotselected);
503 plot.subscribe("plotselected", plotselected);
504
504
505 //resubscribe plothover
505 //resubscribe plothover
506 plot.subscribe("plothover", plothover);
506 plot.subscribe("plothover", plothover);
507
507
508 // don't fire event on the overview to prevent eternal loop
508 // don't fire event on the overview to prevent eternal loop
509 overview.setSelection(ranges, true);
509 overview.setSelection(ranges, true);
510
510
511 //resubscribe choiced
511 //resubscribe choiced
512 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
512 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
513 }
513 }
514
514
515 var previousPoint = null;
515 var previousPoint = null;
516
516
517 function plothover(o) {
517 function plothover(o) {
518 var pos = o.pos;
518 var pos = o.pos;
519 var item = o.item;
519 var item = o.item;
520
520
521 //YUD.get("x").innerHTML = pos.x.toFixed(2);
521 //YUD.get("x").innerHTML = pos.x.toFixed(2);
522 //YUD.get("y").innerHTML = pos.y.toFixed(2);
522 //YUD.get("y").innerHTML = pos.y.toFixed(2);
523 if (item) {
523 if (item) {
524 if (previousPoint != item.datapoint) {
524 if (previousPoint != item.datapoint) {
525 previousPoint = item.datapoint;
525 previousPoint = item.datapoint;
526
526
527 var tooltip = YUD.get("tooltip");
527 var tooltip = YUD.get("tooltip");
528 if(tooltip) {
528 if(tooltip) {
529 tooltip.parentNode.removeChild(tooltip);
529 tooltip.parentNode.removeChild(tooltip);
530 }
530 }
531 var x = item.datapoint.x.toFixed(2);
531 var x = item.datapoint.x.toFixed(2);
532 var y = item.datapoint.y.toFixed(2);
532 var y = item.datapoint.y.toFixed(2);
533
533
534 if (!item.series.label){
534 if (!item.series.label){
535 item.series.label = 'commits';
535 item.series.label = 'commits';
536 }
536 }
537 var d = new Date(x*1000);
537 var d = new Date(x*1000);
538 var fd = d.toDateString()
538 var fd = d.toDateString()
539 var nr_commits = parseInt(y);
539 var nr_commits = parseInt(y);
540
540
541 var cur_data = dataset[item.series.label].data[item.dataIndex];
541 var cur_data = dataset[item.series.label].data[item.dataIndex];
542 var added = cur_data.added;
542 var added = cur_data.added;
543 var changed = cur_data.changed;
543 var changed = cur_data.changed;
544 var removed = cur_data.removed;
544 var removed = cur_data.removed;
545
545
546 var nr_commits_suffix = " ${_('commits')} ";
546 var nr_commits_suffix = " ${_('commits')} ";
547 var added_suffix = " ${_('files added')} ";
547 var added_suffix = " ${_('files added')} ";
548 var changed_suffix = " ${_('files changed')} ";
548 var changed_suffix = " ${_('files changed')} ";
549 var removed_suffix = " ${_('files removed')} ";
549 var removed_suffix = " ${_('files removed')} ";
550
550
551
551
552 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
552 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
553 if(added==1){added_suffix=" ${_('file added')} ";}
553 if(added==1){added_suffix=" ${_('file added')} ";}
554 if(changed==1){changed_suffix=" ${_('file changed')} ";}
554 if(changed==1){changed_suffix=" ${_('file changed')} ";}
555 if(removed==1){removed_suffix=" ${_('file removed')} ";}
555 if(removed==1){removed_suffix=" ${_('file removed')} ";}
556
556
557 showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
557 showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
558 +'<br/>'+
558 +'<br/>'+
559 nr_commits + nr_commits_suffix+'<br/>'+
559 nr_commits + nr_commits_suffix+'<br/>'+
560 added + added_suffix +'<br/>'+
560 added + added_suffix +'<br/>'+
561 changed + changed_suffix + '<br/>'+
561 changed + changed_suffix + '<br/>'+
562 removed + removed_suffix + '<br/>');
562 removed + removed_suffix + '<br/>');
563 }
563 }
564 }
564 }
565 else {
565 else {
566 var tooltip = YUD.get("tooltip");
566 var tooltip = YUD.get("tooltip");
567
567
568 if(tooltip) {
568 if(tooltip) {
569 tooltip.parentNode.removeChild(tooltip);
569 tooltip.parentNode.removeChild(tooltip);
570 }
570 }
571 previousPoint = null;
571 previousPoint = null;
572 }
572 }
573 }
573 }
574
574
575 /**
575 /**
576 * MAIN EXECUTION
576 * MAIN EXECUTION
577 */
577 */
578
578
579 var data = getDataAccordingToRanges(initial_ranges);
579 var data = getDataAccordingToRanges(initial_ranges);
580 generateCheckboxes(data);
580 generateCheckboxes(data);
581
581
582 //main plot
582 //main plot
583 var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
583 var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
584
584
585 //overview
585 //overview
586 var overview = YAHOO.widget.Flot(overviewContainer, overview_dataset, overview_options);
586 var overview = YAHOO.widget.Flot(overviewContainer, overview_dataset, overview_options);
587
587
588 //show initial selection on overview
588 //show initial selection on overview
589 overview.setSelection(initial_ranges);
589 overview.setSelection(initial_ranges);
590
590
591 plot.subscribe("plotselected", plotselected);
591 plot.subscribe("plotselected", plotselected);
592
592
593 overview.subscribe("plotselected", function (ranges) {
593 overview.subscribe("plotselected", function (ranges) {
594 plot.setSelection(ranges);
594 plot.setSelection(ranges);
595 });
595 });
596
596
597 plot.subscribe("plothover", plothover);
597 plot.subscribe("plothover", plothover);
598
598
599 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
599 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
600 }
600 }
601 SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});
601 SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});
602 </script>
602 </script>
603
603
604 </div>
604 </div>
605 </div>
605 </div>
606
606
607 <div class="box">
607 <div class="box">
608 <div class="title">
608 <div class="title">
609 <div class="breadcrumbs">${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}</div>
609 <div class="breadcrumbs">${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}</div>
610 </div>
610 </div>
611 <div class="table">
611 <div class="table">
612 <div id="shortlog_data">
612 <div id="shortlog_data">
613 <%include file='../shortlog/shortlog_data.html'/>
613 <%include file='../shortlog/shortlog_data.html'/>
614 </div>
614 </div>
615 ##%if c.repo_changesets:
615 ##%if c.repo_changesets:
616 ## ${h.link_to(_('show more'),h.url('changelog_home',repo_name=c.repo_name))}
616 ## ${h.link_to(_('show more'),h.url('changelog_home',repo_name=c.repo_name))}
617 ##%endif
617 ##%endif
618 </div>
618 </div>
619 </div>
619 </div>
620 <div class="box">
620 <div class="box">
621 <div class="title">
621 <div class="title">
622 <div class="breadcrumbs">${h.link_to(_('Tags'),h.url('tags_home',repo_name=c.repo_name))}</div>
622 <div class="breadcrumbs">${h.link_to(_('Tags'),h.url('tags_home',repo_name=c.repo_name))}</div>
623 </div>
623 </div>
624 <div class="table">
624 <div class="table">
625 <%include file='../tags/tags_data.html'/>
625 <%include file='../tags/tags_data.html'/>
626 %if c.repo_changesets:
626 %if c.repo_changesets:
627 ${h.link_to(_('show more'),h.url('tags_home',repo_name=c.repo_name))}
627 ${h.link_to(_('show more'),h.url('tags_home',repo_name=c.repo_name))}
628 %endif
628 %endif
629 </div>
629 </div>
630 </div>
630 </div>
631 <div class="box">
631 <div class="box">
632 <div class="title">
632 <div class="title">
633 <div class="breadcrumbs">${h.link_to(_('Branches'),h.url('branches_home',repo_name=c.repo_name))}</div>
633 <div class="breadcrumbs">${h.link_to(_('Branches'),h.url('branches_home',repo_name=c.repo_name))}</div>
634 </div>
634 </div>
635 <div class="table">
635 <div class="table">
636 <%include file='../branches/branches_data.html'/>
636 <%include file='../branches/branches_data.html'/>
637 %if c.repo_changesets:
637 %if c.repo_changesets:
638 ${h.link_to(_('show more'),h.url('branches_home',repo_name=c.repo_name))}
638 ${h.link_to(_('show more'),h.url('branches_home',repo_name=c.repo_name))}
639 %endif
639 %endif
640 </div>
640 </div>
641 </div>
641 </div>
642
642
643 </%def>
643 </%def>
General Comments 0
You need to be logged in to leave comments. Login now