##// END OF EJS Templates
implements #215 Repository view uses a README (text/markdown + rst)
marcink -
r1605:df59c050 beta
parent child Browse files
Show More
@@ -1,183 +1,214 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 traceback
26 import calendar
27 import calendar
27 import logging
28 import logging
28 from time import mktime
29 from time import mktime
29 from datetime import datetime, timedelta, date
30 from datetime import timedelta, date
31 from itertools import product
30
32
31 from vcs.exceptions import ChangesetError
33 from vcs.exceptions import ChangesetError, EmptyRepositoryError, \
34 NodeDoesNotExistError
32
35
33 from pylons import tmpl_context as c, request, url
36 from pylons import tmpl_context as c, request, url
34 from pylons.i18n.translation import _
37 from pylons.i18n.translation import _
35
38
36 from rhodecode.model.db import Statistics, Repository
39 from rhodecode.model.db import Statistics
37 from rhodecode.model.repo import RepoModel
40 from rhodecode.lib import ALL_READMES, ALL_EXTS
38
39 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
41 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
40 from rhodecode.lib.base import BaseRepoController, render
42 from rhodecode.lib.base import BaseRepoController, render
41 from rhodecode.lib.utils import EmptyChangeset
43 from rhodecode.lib.utils import EmptyChangeset
42
44 from rhodecode.lib.markup_renderer import MarkupRenderer
43 from rhodecode.lib.celerylib import run_task
45 from rhodecode.lib.celerylib import run_task
44 from rhodecode.lib.celerylib.tasks import get_commits_stats, \
46 from rhodecode.lib.celerylib.tasks import get_commits_stats, \
45 LANGUAGES_EXTENSIONS_MAP
47 LANGUAGES_EXTENSIONS_MAP
46 from rhodecode.lib.helpers import RepoPage
48 from rhodecode.lib.helpers import RepoPage
47 from rhodecode.lib.compat import json, OrderedDict
49 from rhodecode.lib.compat import json, OrderedDict
48
50
49 log = logging.getLogger(__name__)
51 log = logging.getLogger(__name__)
50
52
53 README_FILES = [''.join([x[0][0], x[1][0]]) for x in
54 sorted(list(product(ALL_READMES, ALL_EXTS)),
55 key=lambda y:y[0][1] + y[1][1])]
51
56
52 class SummaryController(BaseRepoController):
57 class SummaryController(BaseRepoController):
53
58
54 @LoginRequired()
59 @LoginRequired()
55 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
60 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
56 'repository.admin')
61 'repository.admin')
57 def __before__(self):
62 def __before__(self):
58 super(SummaryController, self).__before__()
63 super(SummaryController, self).__before__()
59
64
60 def index(self, repo_name):
65 def index(self, repo_name):
61
66
62 e = request.environ
67 e = request.environ
63 c.dbrepo = dbrepo = c.rhodecode_db_repo
68 c.dbrepo = dbrepo = c.rhodecode_db_repo
64
69
65 c.following = self.scm_model.is_following_repo(repo_name,
70 c.following = self.scm_model.is_following_repo(repo_name,
66 self.rhodecode_user.user_id)
71 self.rhodecode_user.user_id)
67
72
68 def url_generator(**kw):
73 def url_generator(**kw):
69 return url('shortlog_home', repo_name=repo_name, size=10, **kw)
74 return url('shortlog_home', repo_name=repo_name, size=10, **kw)
70
75
71 c.repo_changesets = RepoPage(c.rhodecode_repo, page=1,
76 c.repo_changesets = RepoPage(c.rhodecode_repo, page=1,
72 items_per_page=10, url=url_generator)
77 items_per_page=10, url=url_generator)
73
78
74 if self.rhodecode_user.username == 'default':
79 if self.rhodecode_user.username == 'default':
75 #for default(anonymous) user we don't need to pass credentials
80 #for default(anonymous) user we don't need to pass credentials
76 username = ''
81 username = ''
77 password = ''
82 password = ''
78 else:
83 else:
79 username = str(self.rhodecode_user.username)
84 username = str(self.rhodecode_user.username)
80 password = '@'
85 password = '@'
81
86
82 if e.get('wsgi.url_scheme') == 'https':
87 if e.get('wsgi.url_scheme') == 'https':
83 split_s = 'https://'
88 split_s = 'https://'
84 else:
89 else:
85 split_s = 'http://'
90 split_s = 'http://'
86
91
87 qualified_uri = [split_s] + [url.current(qualified=True)\
92 qualified_uri = [split_s] + [url.current(qualified=True)\
88 .split(split_s)[-1]]
93 .split(split_s)[-1]]
89 uri = u'%(proto)s%(user)s%(pass)s%(rest)s' \
94 uri = u'%(proto)s%(user)s%(pass)s%(rest)s' \
90 % {'user': username,
95 % {'user': username,
91 'pass': password,
96 'pass': password,
92 'proto': qualified_uri[0],
97 'proto': qualified_uri[0],
93 'rest': qualified_uri[1]}
98 'rest': qualified_uri[1]}
94 c.clone_repo_url = uri
99 c.clone_repo_url = uri
95 c.repo_tags = OrderedDict()
100 c.repo_tags = OrderedDict()
96 for name, hash in c.rhodecode_repo.tags.items()[:10]:
101 for name, hash in c.rhodecode_repo.tags.items()[:10]:
97 try:
102 try:
98 c.repo_tags[name] = c.rhodecode_repo.get_changeset(hash)
103 c.repo_tags[name] = c.rhodecode_repo.get_changeset(hash)
99 except ChangesetError:
104 except ChangesetError:
100 c.repo_tags[name] = EmptyChangeset(hash)
105 c.repo_tags[name] = EmptyChangeset(hash)
101
106
102 c.repo_branches = OrderedDict()
107 c.repo_branches = OrderedDict()
103 for name, hash in c.rhodecode_repo.branches.items()[:10]:
108 for name, hash in c.rhodecode_repo.branches.items()[:10]:
104 try:
109 try:
105 c.repo_branches[name] = c.rhodecode_repo.get_changeset(hash)
110 c.repo_branches[name] = c.rhodecode_repo.get_changeset(hash)
106 except ChangesetError:
111 except ChangesetError:
107 c.repo_branches[name] = EmptyChangeset(hash)
112 c.repo_branches[name] = EmptyChangeset(hash)
108
113
109 td = date.today() + timedelta(days=1)
114 td = date.today() + timedelta(days=1)
110 td_1m = td - timedelta(days=calendar.mdays[td.month])
115 td_1m = td - timedelta(days=calendar.mdays[td.month])
111 td_1y = td - timedelta(days=365)
116 td_1y = td - timedelta(days=365)
112
117
113 ts_min_m = mktime(td_1m.timetuple())
118 ts_min_m = mktime(td_1m.timetuple())
114 ts_min_y = mktime(td_1y.timetuple())
119 ts_min_y = mktime(td_1y.timetuple())
115 ts_max_y = mktime(td.timetuple())
120 ts_max_y = mktime(td.timetuple())
116
121
117 if dbrepo.enable_statistics:
122 if dbrepo.enable_statistics:
118 c.no_data_msg = _('No data loaded yet')
123 c.no_data_msg = _('No data loaded yet')
119 run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, ts_max_y)
124 run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, ts_max_y)
120 else:
125 else:
121 c.no_data_msg = _('Statistics are disabled for this repository')
126 c.no_data_msg = _('Statistics are disabled for this repository')
122 c.ts_min = ts_min_m
127 c.ts_min = ts_min_m
123 c.ts_max = ts_max_y
128 c.ts_max = ts_max_y
124
129
125 stats = self.sa.query(Statistics)\
130 stats = self.sa.query(Statistics)\
126 .filter(Statistics.repository == dbrepo)\
131 .filter(Statistics.repository == dbrepo)\
127 .scalar()
132 .scalar()
128
133
129 c.stats_percentage = 0
134 c.stats_percentage = 0
130
135
131 if stats and stats.languages:
136 if stats and stats.languages:
132 c.no_data = False is dbrepo.enable_statistics
137 c.no_data = False is dbrepo.enable_statistics
133 lang_stats_d = json.loads(stats.languages)
138 lang_stats_d = json.loads(stats.languages)
134 c.commit_data = stats.commit_activity
139 c.commit_data = stats.commit_activity
135 c.overview_data = stats.commit_activity_combined
140 c.overview_data = stats.commit_activity_combined
136
141
137 lang_stats = ((x, {"count": y,
142 lang_stats = ((x, {"count": y,
138 "desc": LANGUAGES_EXTENSIONS_MAP.get(x)})
143 "desc": LANGUAGES_EXTENSIONS_MAP.get(x)})
139 for x, y in lang_stats_d.items())
144 for x, y in lang_stats_d.items())
140
145
141 c.trending_languages = json.dumps(OrderedDict(
146 c.trending_languages = json.dumps(OrderedDict(
142 sorted(lang_stats, reverse=True,
147 sorted(lang_stats, reverse=True,
143 key=lambda k: k[1])[:10]
148 key=lambda k: k[1])[:10]
144 )
149 )
145 )
150 )
146 last_rev = stats.stat_on_revision
151 last_rev = stats.stat_on_revision
147 c.repo_last_rev = c.rhodecode_repo.count() - 1 \
152 c.repo_last_rev = c.rhodecode_repo.count() - 1 \
148 if c.rhodecode_repo.revisions else 0
153 if c.rhodecode_repo.revisions else 0
149 if last_rev == 0 or c.repo_last_rev == 0:
154 if last_rev == 0 or c.repo_last_rev == 0:
150 pass
155 pass
151 else:
156 else:
152 c.stats_percentage = '%.2f' % ((float((last_rev)) /
157 c.stats_percentage = '%.2f' % ((float((last_rev)) /
153 c.repo_last_rev) * 100)
158 c.repo_last_rev) * 100)
154 else:
159 else:
155 c.commit_data = json.dumps({})
160 c.commit_data = json.dumps({})
156 c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 10]])
161 c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 10]])
157 c.trending_languages = json.dumps({})
162 c.trending_languages = json.dumps({})
158 c.no_data = True
163 c.no_data = True
159
164
160 c.enable_downloads = dbrepo.enable_downloads
165 c.enable_downloads = dbrepo.enable_downloads
161 if c.enable_downloads:
166 if c.enable_downloads:
162 c.download_options = self._get_download_links(c.rhodecode_repo)
167 c.download_options = self._get_download_links(c.rhodecode_repo)
163
168
169 c.readme_data,c.readme_file = self.__get_readme_data()
164 return render('summary/summary.html')
170 return render('summary/summary.html')
165
171
172 def __get_readme_data(self):
173 readme_data = None
174 readme_file = None
175
176 try:
177 cs = c.rhodecode_repo.get_changeset('tip')
178 renderer = MarkupRenderer()
179 for f in README_FILES:
180 try:
181 readme = cs.get_node(f)
182 readme_file = f
183 readme_data = renderer.render(readme.content, f)
184 break
185 except NodeDoesNotExistError:
186 continue
187 except ChangesetError:
188 pass
189 except EmptyRepositoryError:
190 pass
191 except Exception:
192 log.error(traceback.format_exc())
193
194 return readme_data, readme_file
195
166 def _get_download_links(self, repo):
196 def _get_download_links(self, repo):
167
197
168 download_l = []
198 download_l = []
169
199
170 branches_group = ([], _("Branches"))
200 branches_group = ([], _("Branches"))
171 tags_group = ([], _("Tags"))
201 tags_group = ([], _("Tags"))
172
202
173 for name, chs in c.rhodecode_repo.branches.items():
203 for name, chs in c.rhodecode_repo.branches.items():
174 #chs = chs.split(':')[-1]
204 #chs = chs.split(':')[-1]
175 branches_group[0].append((chs, name),)
205 branches_group[0].append((chs, name),)
176 download_l.append(branches_group)
206 download_l.append(branches_group)
177
207
178 for name, chs in c.rhodecode_repo.tags.items():
208 for name, chs in c.rhodecode_repo.tags.items():
179 #chs = chs.split(':')[-1]
209 #chs = chs.split(':')[-1]
180 tags_group[0].append((chs, name),)
210 tags_group[0].append((chs, name),)
181 download_l.append(tags_group)
211 download_l.append(tags_group)
182
212
183 return download_l
213 return download_l
214
@@ -1,407 +1,435 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.lib.__init__
3 rhodecode.lib.__init__
4 ~~~~~~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~~~~~~
5
5
6 Some simple helper functions
6 Some simple helper functions
7
7
8 :created_on: Jan 5, 2011
8 :created_on: Jan 5, 2011
9 :author: marcink
9 :author: marcink
10 :copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
10 :copyright: (C) 2009-2010 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 os
26 import os
27
27
28 def __get_lem():
28 def __get_lem():
29 from pygments import lexers
29 from pygments import lexers
30 from string import lower
30 from string import lower
31 from collections import defaultdict
31 from collections import defaultdict
32
32
33 d = defaultdict(lambda: [])
33 d = defaultdict(lambda: [])
34
34
35 def __clean(s):
35 def __clean(s):
36 s = s.lstrip('*')
36 s = s.lstrip('*')
37 s = s.lstrip('.')
37 s = s.lstrip('.')
38
38
39 if s.find('[') != -1:
39 if s.find('[') != -1:
40 exts = []
40 exts = []
41 start, stop = s.find('['), s.find(']')
41 start, stop = s.find('['), s.find(']')
42
42
43 for suffix in s[start + 1:stop]:
43 for suffix in s[start + 1:stop]:
44 exts.append(s[:s.find('[')] + suffix)
44 exts.append(s[:s.find('[')] + suffix)
45 return map(lower, exts)
45 return map(lower, exts)
46 else:
46 else:
47 return map(lower, [s])
47 return map(lower, [s])
48
48
49 for lx, t in sorted(lexers.LEXERS.items()):
49 for lx, t in sorted(lexers.LEXERS.items()):
50 m = map(__clean, t[-2])
50 m = map(__clean, t[-2])
51 if m:
51 if m:
52 m = reduce(lambda x, y: x + y, m)
52 m = reduce(lambda x, y: x + y, m)
53 for ext in m:
53 for ext in m:
54 desc = lx.replace('Lexer', '')
54 desc = lx.replace('Lexer', '')
55 d[ext].append(desc)
55 d[ext].append(desc)
56
56
57 return dict(d)
57 return dict(d)
58
58
59 # language map is also used by whoosh indexer, which for those specified
59 # language map is also used by whoosh indexer, which for those specified
60 # extensions will index it's content
60 # extensions will index it's content
61 LANGUAGES_EXTENSIONS_MAP = __get_lem()
61 LANGUAGES_EXTENSIONS_MAP = __get_lem()
62
62
63 # Additional mappings that are not present in the pygments lexers
63 # Additional mappings that are not present in the pygments lexers
64 # NOTE: that this will overide any mappings in LANGUAGES_EXTENSIONS_MAP
64 # NOTE: that this will overide any mappings in LANGUAGES_EXTENSIONS_MAP
65 ADDITIONAL_MAPPINGS = {'xaml': 'XAML'}
65 ADDITIONAL_MAPPINGS = {'xaml': 'XAML'}
66
66
67 LANGUAGES_EXTENSIONS_MAP.update(ADDITIONAL_MAPPINGS)
67 LANGUAGES_EXTENSIONS_MAP.update(ADDITIONAL_MAPPINGS)
68
68
69 # list of readme files to search in file tree and display in summary
70 # attached weights defines the search order lower is first
71 ALL_READMES = [
72 ('readme', 0), ('README', 0), ('Readme', 0),
73 ('doc/readme', 1), ('doc/README', 1), ('doc/Readme', 1),
74 ('Docs/readme', 2), ('Docs/README', 2), ('Docs/Readme', 2),
75 ('DOCS/readme', 2), ('DOCS/README', 2), ('DOCS/Readme', 2),
76 ('docs/readme', 2), ('docs/README', 2), ('docs/Readme', 2),
77 ]
78
79 # extension together with weights to search lower is first
80 RST_EXTS = [
81 ('', 0), ('.rst', 1),('.rest', 1),
82 ('.RST', 2) ,('.REST', 2),
83 ('.txt', 3), ('.TXT', 3)
84 ]
85
86 MARKDOWN_EXTS = [
87 ('.md', 1), ('.MD', 1),
88 ('.mkdn', 2), ('.MKDN', 2),
89 ('.mdown', 3), ('.MDOWN', 3),
90 ('.markdown', 4), ('.MARKDOWN', 4)
91 ]
92
93 PLAIN_EXTS = [('.text', 2),('.TEXT', 2)]
94
95 ALL_EXTS = MARKDOWN_EXTS + RST_EXTS + PLAIN_EXTS
96
69
97
70 def str2bool(_str):
98 def str2bool(_str):
71 """
99 """
72 returs True/False value from given string, it tries to translate the
100 returs True/False value from given string, it tries to translate the
73 string into boolean
101 string into boolean
74
102
75 :param _str: string value to translate into boolean
103 :param _str: string value to translate into boolean
76 :rtype: boolean
104 :rtype: boolean
77 :returns: boolean from given string
105 :returns: boolean from given string
78 """
106 """
79 if _str is None:
107 if _str is None:
80 return False
108 return False
81 if _str in (True, False):
109 if _str in (True, False):
82 return _str
110 return _str
83 _str = str(_str).strip().lower()
111 _str = str(_str).strip().lower()
84 return _str in ('t', 'true', 'y', 'yes', 'on', '1')
112 return _str in ('t', 'true', 'y', 'yes', 'on', '1')
85
113
86
114
87 def convert_line_endings(line, mode):
115 def convert_line_endings(line, mode):
88 """
116 """
89 Converts a given line "line end" accordingly to given mode
117 Converts a given line "line end" accordingly to given mode
90
118
91 Available modes are::
119 Available modes are::
92 0 - Unix
120 0 - Unix
93 1 - Mac
121 1 - Mac
94 2 - DOS
122 2 - DOS
95
123
96 :param line: given line to convert
124 :param line: given line to convert
97 :param mode: mode to convert to
125 :param mode: mode to convert to
98 :rtype: str
126 :rtype: str
99 :return: converted line according to mode
127 :return: converted line according to mode
100 """
128 """
101 from string import replace
129 from string import replace
102
130
103 if mode == 0:
131 if mode == 0:
104 line = replace(line, '\r\n', '\n')
132 line = replace(line, '\r\n', '\n')
105 line = replace(line, '\r', '\n')
133 line = replace(line, '\r', '\n')
106 elif mode == 1:
134 elif mode == 1:
107 line = replace(line, '\r\n', '\r')
135 line = replace(line, '\r\n', '\r')
108 line = replace(line, '\n', '\r')
136 line = replace(line, '\n', '\r')
109 elif mode == 2:
137 elif mode == 2:
110 import re
138 import re
111 line = re.sub("\r(?!\n)|(?<!\r)\n", "\r\n", line)
139 line = re.sub("\r(?!\n)|(?<!\r)\n", "\r\n", line)
112 return line
140 return line
113
141
114
142
115 def detect_mode(line, default):
143 def detect_mode(line, default):
116 """
144 """
117 Detects line break for given line, if line break couldn't be found
145 Detects line break for given line, if line break couldn't be found
118 given default value is returned
146 given default value is returned
119
147
120 :param line: str line
148 :param line: str line
121 :param default: default
149 :param default: default
122 :rtype: int
150 :rtype: int
123 :return: value of line end on of 0 - Unix, 1 - Mac, 2 - DOS
151 :return: value of line end on of 0 - Unix, 1 - Mac, 2 - DOS
124 """
152 """
125 if line.endswith('\r\n'):
153 if line.endswith('\r\n'):
126 return 2
154 return 2
127 elif line.endswith('\n'):
155 elif line.endswith('\n'):
128 return 0
156 return 0
129 elif line.endswith('\r'):
157 elif line.endswith('\r'):
130 return 1
158 return 1
131 else:
159 else:
132 return default
160 return default
133
161
134
162
135 def generate_api_key(username, salt=None):
163 def generate_api_key(username, salt=None):
136 """
164 """
137 Generates unique API key for given username, if salt is not given
165 Generates unique API key for given username, if salt is not given
138 it'll be generated from some random string
166 it'll be generated from some random string
139
167
140 :param username: username as string
168 :param username: username as string
141 :param salt: salt to hash generate KEY
169 :param salt: salt to hash generate KEY
142 :rtype: str
170 :rtype: str
143 :returns: sha1 hash from username+salt
171 :returns: sha1 hash from username+salt
144 """
172 """
145 from tempfile import _RandomNameSequence
173 from tempfile import _RandomNameSequence
146 import hashlib
174 import hashlib
147
175
148 if salt is None:
176 if salt is None:
149 salt = _RandomNameSequence().next()
177 salt = _RandomNameSequence().next()
150
178
151 return hashlib.sha1(username + salt).hexdigest()
179 return hashlib.sha1(username + salt).hexdigest()
152
180
153
181
154 def safe_unicode(str_, from_encoding='utf8'):
182 def safe_unicode(str_, from_encoding='utf8'):
155 """
183 """
156 safe unicode function. Does few trick to turn str_ into unicode
184 safe unicode function. Does few trick to turn str_ into unicode
157
185
158 In case of UnicodeDecode error we try to return it with encoding detected
186 In case of UnicodeDecode error we try to return it with encoding detected
159 by chardet library if it fails fallback to unicode with errors replaced
187 by chardet library if it fails fallback to unicode with errors replaced
160
188
161 :param str_: string to decode
189 :param str_: string to decode
162 :rtype: unicode
190 :rtype: unicode
163 :returns: unicode object
191 :returns: unicode object
164 """
192 """
165 if isinstance(str_, unicode):
193 if isinstance(str_, unicode):
166 return str_
194 return str_
167
195
168 try:
196 try:
169 return unicode(str_)
197 return unicode(str_)
170 except UnicodeDecodeError:
198 except UnicodeDecodeError:
171 pass
199 pass
172
200
173 try:
201 try:
174 return unicode(str_, from_encoding)
202 return unicode(str_, from_encoding)
175 except UnicodeDecodeError:
203 except UnicodeDecodeError:
176 pass
204 pass
177
205
178 try:
206 try:
179 import chardet
207 import chardet
180 encoding = chardet.detect(str_)['encoding']
208 encoding = chardet.detect(str_)['encoding']
181 if encoding is None:
209 if encoding is None:
182 raise Exception()
210 raise Exception()
183 return str_.decode(encoding)
211 return str_.decode(encoding)
184 except (ImportError, UnicodeDecodeError, Exception):
212 except (ImportError, UnicodeDecodeError, Exception):
185 return unicode(str_, from_encoding, 'replace')
213 return unicode(str_, from_encoding, 'replace')
186
214
187 def safe_str(unicode_, to_encoding='utf8'):
215 def safe_str(unicode_, to_encoding='utf8'):
188 """
216 """
189 safe str function. Does few trick to turn unicode_ into string
217 safe str function. Does few trick to turn unicode_ into string
190
218
191 In case of UnicodeEncodeError we try to return it with encoding detected
219 In case of UnicodeEncodeError we try to return it with encoding detected
192 by chardet library if it fails fallback to string with errors replaced
220 by chardet library if it fails fallback to string with errors replaced
193
221
194 :param unicode_: unicode to encode
222 :param unicode_: unicode to encode
195 :rtype: str
223 :rtype: str
196 :returns: str object
224 :returns: str object
197 """
225 """
198
226
199 if isinstance(unicode_, str):
227 if isinstance(unicode_, str):
200 return unicode_
228 return unicode_
201
229
202 try:
230 try:
203 return unicode_.encode(to_encoding)
231 return unicode_.encode(to_encoding)
204 except UnicodeEncodeError:
232 except UnicodeEncodeError:
205 pass
233 pass
206
234
207 try:
235 try:
208 import chardet
236 import chardet
209 encoding = chardet.detect(unicode_)['encoding']
237 encoding = chardet.detect(unicode_)['encoding']
210 print encoding
238 print encoding
211 if encoding is None:
239 if encoding is None:
212 raise UnicodeEncodeError()
240 raise UnicodeEncodeError()
213
241
214 return unicode_.encode(encoding)
242 return unicode_.encode(encoding)
215 except (ImportError, UnicodeEncodeError):
243 except (ImportError, UnicodeEncodeError):
216 return unicode_.encode(to_encoding, 'replace')
244 return unicode_.encode(to_encoding, 'replace')
217
245
218 return safe_str
246 return safe_str
219
247
220
248
221
249
222 def engine_from_config(configuration, prefix='sqlalchemy.', **kwargs):
250 def engine_from_config(configuration, prefix='sqlalchemy.', **kwargs):
223 """
251 """
224 Custom engine_from_config functions that makes sure we use NullPool for
252 Custom engine_from_config functions that makes sure we use NullPool for
225 file based sqlite databases. This prevents errors on sqlite. This only
253 file based sqlite databases. This prevents errors on sqlite. This only
226 applies to sqlalchemy versions < 0.7.0
254 applies to sqlalchemy versions < 0.7.0
227
255
228 """
256 """
229 import sqlalchemy
257 import sqlalchemy
230 from sqlalchemy import engine_from_config as efc
258 from sqlalchemy import engine_from_config as efc
231 import logging
259 import logging
232
260
233 if int(sqlalchemy.__version__.split('.')[1]) < 7:
261 if int(sqlalchemy.__version__.split('.')[1]) < 7:
234
262
235 # This solution should work for sqlalchemy < 0.7.0, and should use
263 # This solution should work for sqlalchemy < 0.7.0, and should use
236 # proxy=TimerProxy() for execution time profiling
264 # proxy=TimerProxy() for execution time profiling
237
265
238 from sqlalchemy.pool import NullPool
266 from sqlalchemy.pool import NullPool
239 url = configuration[prefix + 'url']
267 url = configuration[prefix + 'url']
240
268
241 if url.startswith('sqlite'):
269 if url.startswith('sqlite'):
242 kwargs.update({'poolclass': NullPool})
270 kwargs.update({'poolclass': NullPool})
243 return efc(configuration, prefix, **kwargs)
271 return efc(configuration, prefix, **kwargs)
244 else:
272 else:
245 import time
273 import time
246 from sqlalchemy import event
274 from sqlalchemy import event
247 from sqlalchemy.engine import Engine
275 from sqlalchemy.engine import Engine
248
276
249 log = logging.getLogger('sqlalchemy.engine')
277 log = logging.getLogger('sqlalchemy.engine')
250 BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = xrange(30, 38)
278 BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = xrange(30, 38)
251 engine = efc(configuration, prefix, **kwargs)
279 engine = efc(configuration, prefix, **kwargs)
252
280
253 def color_sql(sql):
281 def color_sql(sql):
254 COLOR_SEQ = "\033[1;%dm"
282 COLOR_SEQ = "\033[1;%dm"
255 COLOR_SQL = YELLOW
283 COLOR_SQL = YELLOW
256 normal = '\x1b[0m'
284 normal = '\x1b[0m'
257 return ''.join([COLOR_SEQ % COLOR_SQL, sql, normal])
285 return ''.join([COLOR_SEQ % COLOR_SQL, sql, normal])
258
286
259 if configuration['debug']:
287 if configuration['debug']:
260 #attach events only for debug configuration
288 #attach events only for debug configuration
261
289
262 def before_cursor_execute(conn, cursor, statement,
290 def before_cursor_execute(conn, cursor, statement,
263 parameters, context, executemany):
291 parameters, context, executemany):
264 context._query_start_time = time.time()
292 context._query_start_time = time.time()
265 log.info(color_sql(">>>>> STARTING QUERY >>>>>"))
293 log.info(color_sql(">>>>> STARTING QUERY >>>>>"))
266
294
267
295
268 def after_cursor_execute(conn, cursor, statement,
296 def after_cursor_execute(conn, cursor, statement,
269 parameters, context, executemany):
297 parameters, context, executemany):
270 total = time.time() - context._query_start_time
298 total = time.time() - context._query_start_time
271 log.info(color_sql("<<<<< TOTAL TIME: %f <<<<<" % total))
299 log.info(color_sql("<<<<< TOTAL TIME: %f <<<<<" % total))
272
300
273 event.listen(engine, "before_cursor_execute",
301 event.listen(engine, "before_cursor_execute",
274 before_cursor_execute)
302 before_cursor_execute)
275 event.listen(engine, "after_cursor_execute",
303 event.listen(engine, "after_cursor_execute",
276 after_cursor_execute)
304 after_cursor_execute)
277
305
278 return engine
306 return engine
279
307
280
308
281 def age(curdate):
309 def age(curdate):
282 """
310 """
283 turns a datetime into an age string.
311 turns a datetime into an age string.
284
312
285 :param curdate: datetime object
313 :param curdate: datetime object
286 :rtype: unicode
314 :rtype: unicode
287 :returns: unicode words describing age
315 :returns: unicode words describing age
288 """
316 """
289
317
290 from datetime import datetime
318 from datetime import datetime
291 from webhelpers.date import time_ago_in_words
319 from webhelpers.date import time_ago_in_words
292
320
293 _ = lambda s:s
321 _ = lambda s:s
294
322
295 if not curdate:
323 if not curdate:
296 return ''
324 return ''
297
325
298 agescales = [(_(u"year"), 3600 * 24 * 365),
326 agescales = [(_(u"year"), 3600 * 24 * 365),
299 (_(u"month"), 3600 * 24 * 30),
327 (_(u"month"), 3600 * 24 * 30),
300 (_(u"day"), 3600 * 24),
328 (_(u"day"), 3600 * 24),
301 (_(u"hour"), 3600),
329 (_(u"hour"), 3600),
302 (_(u"minute"), 60),
330 (_(u"minute"), 60),
303 (_(u"second"), 1), ]
331 (_(u"second"), 1), ]
304
332
305 age = datetime.now() - curdate
333 age = datetime.now() - curdate
306 age_seconds = (age.days * agescales[2][1]) + age.seconds
334 age_seconds = (age.days * agescales[2][1]) + age.seconds
307 pos = 1
335 pos = 1
308 for scale in agescales:
336 for scale in agescales:
309 if scale[1] <= age_seconds:
337 if scale[1] <= age_seconds:
310 if pos == 6:pos = 5
338 if pos == 6:pos = 5
311 return '%s %s' % (time_ago_in_words(curdate,
339 return '%s %s' % (time_ago_in_words(curdate,
312 agescales[pos][0]), _('ago'))
340 agescales[pos][0]), _('ago'))
313 pos += 1
341 pos += 1
314
342
315 return _(u'just now')
343 return _(u'just now')
316
344
317
345
318 def uri_filter(uri):
346 def uri_filter(uri):
319 """
347 """
320 Removes user:password from given url string
348 Removes user:password from given url string
321
349
322 :param uri:
350 :param uri:
323 :rtype: unicode
351 :rtype: unicode
324 :returns: filtered list of strings
352 :returns: filtered list of strings
325 """
353 """
326 if not uri:
354 if not uri:
327 return ''
355 return ''
328
356
329 proto = ''
357 proto = ''
330
358
331 for pat in ('https://', 'http://'):
359 for pat in ('https://', 'http://'):
332 if uri.startswith(pat):
360 if uri.startswith(pat):
333 uri = uri[len(pat):]
361 uri = uri[len(pat):]
334 proto = pat
362 proto = pat
335 break
363 break
336
364
337 # remove passwords and username
365 # remove passwords and username
338 uri = uri[uri.find('@') + 1:]
366 uri = uri[uri.find('@') + 1:]
339
367
340 # get the port
368 # get the port
341 cred_pos = uri.find(':')
369 cred_pos = uri.find(':')
342 if cred_pos == -1:
370 if cred_pos == -1:
343 host, port = uri, None
371 host, port = uri, None
344 else:
372 else:
345 host, port = uri[:cred_pos], uri[cred_pos + 1:]
373 host, port = uri[:cred_pos], uri[cred_pos + 1:]
346
374
347 return filter(None, [proto, host, port])
375 return filter(None, [proto, host, port])
348
376
349
377
350 def credentials_filter(uri):
378 def credentials_filter(uri):
351 """
379 """
352 Returns a url with removed credentials
380 Returns a url with removed credentials
353
381
354 :param uri:
382 :param uri:
355 """
383 """
356
384
357 uri = uri_filter(uri)
385 uri = uri_filter(uri)
358 #check if we have port
386 #check if we have port
359 if len(uri) > 2 and uri[2]:
387 if len(uri) > 2 and uri[2]:
360 uri[2] = ':' + uri[2]
388 uri[2] = ':' + uri[2]
361
389
362 return ''.join(uri)
390 return ''.join(uri)
363
391
364 def get_changeset_safe(repo, rev):
392 def get_changeset_safe(repo, rev):
365 """
393 """
366 Safe version of get_changeset if this changeset doesn't exists for a
394 Safe version of get_changeset if this changeset doesn't exists for a
367 repo it returns a Dummy one instead
395 repo it returns a Dummy one instead
368
396
369 :param repo:
397 :param repo:
370 :param rev:
398 :param rev:
371 """
399 """
372 from vcs.backends.base import BaseRepository
400 from vcs.backends.base import BaseRepository
373 from vcs.exceptions import RepositoryError
401 from vcs.exceptions import RepositoryError
374 if not isinstance(repo, BaseRepository):
402 if not isinstance(repo, BaseRepository):
375 raise Exception('You must pass an Repository '
403 raise Exception('You must pass an Repository '
376 'object as first argument got %s', type(repo))
404 'object as first argument got %s', type(repo))
377
405
378 try:
406 try:
379 cs = repo.get_changeset(rev)
407 cs = repo.get_changeset(rev)
380 except RepositoryError:
408 except RepositoryError:
381 from rhodecode.lib.utils import EmptyChangeset
409 from rhodecode.lib.utils import EmptyChangeset
382 cs = EmptyChangeset(requested_revision=rev)
410 cs = EmptyChangeset(requested_revision=rev)
383 return cs
411 return cs
384
412
385
413
386 def get_current_revision(quiet=False):
414 def get_current_revision(quiet=False):
387 """
415 """
388 Returns tuple of (number, id) from repository containing this package
416 Returns tuple of (number, id) from repository containing this package
389 or None if repository could not be found.
417 or None if repository could not be found.
390
418
391 :param quiet: prints error for fetching revision if True
419 :param quiet: prints error for fetching revision if True
392 """
420 """
393
421
394 try:
422 try:
395 from vcs import get_repo
423 from vcs import get_repo
396 from vcs.utils.helpers import get_scm
424 from vcs.utils.helpers import get_scm
397 repopath = os.path.join(os.path.dirname(__file__), '..', '..')
425 repopath = os.path.join(os.path.dirname(__file__), '..', '..')
398 scm = get_scm(repopath)[0]
426 scm = get_scm(repopath)[0]
399 repo = get_repo(path=repopath, alias=scm)
427 repo = get_repo(path=repopath, alias=scm)
400 tip = repo.get_changeset()
428 tip = repo.get_changeset()
401 return (tip.revision, tip.short_id)
429 return (tip.revision, tip.short_id)
402 except Exception, err:
430 except Exception, err:
403 if not quiet:
431 if not quiet:
404 print ("Cannot retrieve rhodecode's revision. Original error "
432 print ("Cannot retrieve rhodecode's revision. Original error "
405 "was: %s" % err)
433 "was: %s" % err)
406 return None
434 return None
407
435
@@ -1,3014 +1,3106 b''
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td
2 {
2 {
3 border: 0;
3 border: 0;
4 outline: 0;
4 outline: 0;
5 font-size: 100%;
5 font-size: 100%;
6 vertical-align: baseline;
6 vertical-align: baseline;
7 background: transparent;
7 background: transparent;
8 margin: 0;
8 margin: 0;
9 padding: 0;
9 padding: 0;
10 }
10 }
11
11
12 body {
12 body {
13 line-height: 1;
13 line-height: 1;
14 height: 100%;
14 height: 100%;
15 background: url("../images/background.png") repeat scroll 0 0 #B0B0B0;
15 background: url("../images/background.png") repeat scroll 0 0 #B0B0B0;
16 font-family: Lucida Grande, Verdana, Lucida Sans Regular,
16 font-family: Lucida Grande, Verdana, Lucida Sans Regular,
17 Lucida Sans Unicode, Arial, sans-serif; font-size : 12px;
17 Lucida Sans Unicode, Arial, sans-serif; font-size : 12px;
18 color: #000;
18 color: #000;
19 margin: 0;
19 margin: 0;
20 padding: 0;
20 padding: 0;
21 font-size: 12px;
21 font-size: 12px;
22 }
22 }
23
23
24 ol,ul {
24 ol,ul {
25 list-style: none;
25 list-style: none;
26 }
26 }
27
27
28 blockquote,q {
28 blockquote,q {
29 quotes: none;
29 quotes: none;
30 }
30 }
31
31
32 blockquote:before,blockquote:after,q:before,q:after {
32 blockquote:before,blockquote:after,q:before,q:after {
33 content: none;
33 content: none;
34 }
34 }
35
35
36 :focus {
36 :focus {
37 outline: 0;
37 outline: 0;
38 }
38 }
39
39
40 del {
40 del {
41 text-decoration: line-through;
41 text-decoration: line-through;
42 }
42 }
43
43
44 table {
44 table {
45 border-collapse: collapse;
45 border-collapse: collapse;
46 border-spacing: 0;
46 border-spacing: 0;
47 }
47 }
48
48
49 html {
49 html {
50 height: 100%;
50 height: 100%;
51 }
51 }
52
52
53 a {
53 a {
54 color: #003367;
54 color: #003367;
55 text-decoration: none;
55 text-decoration: none;
56 cursor: pointer;
56 cursor: pointer;
57 }
57 }
58
58
59 a:hover {
59 a:hover {
60 color: #316293;
60 color: #316293;
61 text-decoration: underline;
61 text-decoration: underline;
62 }
62 }
63
63
64 h1,h2,h3,h4,h5,h6 {
64 h1,h2,h3,h4,h5,h6 {
65 color: #292929;
65 color: #292929;
66 font-weight: 700;
66 font-weight: 700;
67 }
67 }
68
68
69 h1 {
69 h1 {
70 font-size: 22px;
70 font-size: 22px;
71 }
71 }
72
72
73 h2 {
73 h2 {
74 font-size: 20px;
74 font-size: 20px;
75 }
75 }
76
76
77 h3 {
77 h3 {
78 font-size: 18px;
78 font-size: 18px;
79 }
79 }
80
80
81 h4 {
81 h4 {
82 font-size: 16px;
82 font-size: 16px;
83 }
83 }
84
84
85 h5 {
85 h5 {
86 font-size: 14px;
86 font-size: 14px;
87 }
87 }
88
88
89 h6 {
89 h6 {
90 font-size: 11px;
90 font-size: 11px;
91 }
91 }
92
92
93 ul.circle {
93 ul.circle {
94 list-style-type: circle;
94 list-style-type: circle;
95 }
95 }
96
96
97 ul.disc {
97 ul.disc {
98 list-style-type: disc;
98 list-style-type: disc;
99 }
99 }
100
100
101 ul.square {
101 ul.square {
102 list-style-type: square;
102 list-style-type: square;
103 }
103 }
104
104
105 ol.lower-roman {
105 ol.lower-roman {
106 list-style-type: lower-roman;
106 list-style-type: lower-roman;
107 }
107 }
108
108
109 ol.upper-roman {
109 ol.upper-roman {
110 list-style-type: upper-roman;
110 list-style-type: upper-roman;
111 }
111 }
112
112
113 ol.lower-alpha {
113 ol.lower-alpha {
114 list-style-type: lower-alpha;
114 list-style-type: lower-alpha;
115 }
115 }
116
116
117 ol.upper-alpha {
117 ol.upper-alpha {
118 list-style-type: upper-alpha;
118 list-style-type: upper-alpha;
119 }
119 }
120
120
121 ol.decimal {
121 ol.decimal {
122 list-style-type: decimal;
122 list-style-type: decimal;
123 }
123 }
124
124
125 div.color {
125 div.color {
126 clear: both;
126 clear: both;
127 overflow: hidden;
127 overflow: hidden;
128 position: absolute;
128 position: absolute;
129 background: #FFF;
129 background: #FFF;
130 margin: 7px 0 0 60px;
130 margin: 7px 0 0 60px;
131 padding: 1px 1px 1px 0;
131 padding: 1px 1px 1px 0;
132 }
132 }
133
133
134 div.color a {
134 div.color a {
135 width: 15px;
135 width: 15px;
136 height: 15px;
136 height: 15px;
137 display: block;
137 display: block;
138 float: left;
138 float: left;
139 margin: 0 0 0 1px;
139 margin: 0 0 0 1px;
140 padding: 0;
140 padding: 0;
141 }
141 }
142
142
143 div.options {
143 div.options {
144 clear: both;
144 clear: both;
145 overflow: hidden;
145 overflow: hidden;
146 position: absolute;
146 position: absolute;
147 background: #FFF;
147 background: #FFF;
148 margin: 7px 0 0 162px;
148 margin: 7px 0 0 162px;
149 padding: 0;
149 padding: 0;
150 }
150 }
151
151
152 div.options a {
152 div.options a {
153 height: 1%;
153 height: 1%;
154 display: block;
154 display: block;
155 text-decoration: none;
155 text-decoration: none;
156 margin: 0;
156 margin: 0;
157 padding: 3px 8px;
157 padding: 3px 8px;
158 }
158 }
159
159
160 .top-left-rounded-corner {
160 .top-left-rounded-corner {
161 -webkit-border-top-left-radius: 8px;
161 -webkit-border-top-left-radius: 8px;
162 -khtml-border-radius-topleft: 8px;
162 -khtml-border-radius-topleft: 8px;
163 -moz-border-radius-topleft: 8px;
163 -moz-border-radius-topleft: 8px;
164 border-top-left-radius: 8px;
164 border-top-left-radius: 8px;
165 }
165 }
166
166
167 .top-right-rounded-corner {
167 .top-right-rounded-corner {
168 -webkit-border-top-right-radius: 8px;
168 -webkit-border-top-right-radius: 8px;
169 -khtml-border-radius-topright: 8px;
169 -khtml-border-radius-topright: 8px;
170 -moz-border-radius-topright: 8px;
170 -moz-border-radius-topright: 8px;
171 border-top-right-radius: 8px;
171 border-top-right-radius: 8px;
172 }
172 }
173
173
174 .bottom-left-rounded-corner {
174 .bottom-left-rounded-corner {
175 -webkit-border-bottom-left-radius: 8px;
175 -webkit-border-bottom-left-radius: 8px;
176 -khtml-border-radius-bottomleft: 8px;
176 -khtml-border-radius-bottomleft: 8px;
177 -moz-border-radius-bottomleft: 8px;
177 -moz-border-radius-bottomleft: 8px;
178 border-bottom-left-radius: 8px;
178 border-bottom-left-radius: 8px;
179 }
179 }
180
180
181 .bottom-right-rounded-corner {
181 .bottom-right-rounded-corner {
182 -webkit-border-bottom-right-radius: 8px;
182 -webkit-border-bottom-right-radius: 8px;
183 -khtml-border-radius-bottomright: 8px;
183 -khtml-border-radius-bottomright: 8px;
184 -moz-border-radius-bottomright: 8px;
184 -moz-border-radius-bottomright: 8px;
185 border-bottom-right-radius: 8px;
185 border-bottom-right-radius: 8px;
186 }
186 }
187
187
188 #header {
188 #header {
189 margin: 0;
189 margin: 0;
190 padding: 0 10px;
190 padding: 0 10px;
191 }
191 }
192
192
193 #header ul#logged-user {
193 #header ul#logged-user {
194 margin-bottom: 5px !important;
194 margin-bottom: 5px !important;
195 -webkit-border-radius: 0px 0px 8px 8px;
195 -webkit-border-radius: 0px 0px 8px 8px;
196 -khtml-border-radius: 0px 0px 8px 8px;
196 -khtml-border-radius: 0px 0px 8px 8px;
197 -moz-border-radius: 0px 0px 8px 8px;
197 -moz-border-radius: 0px 0px 8px 8px;
198 border-radius: 0px 0px 8px 8px;
198 border-radius: 0px 0px 8px 8px;
199 height: 37px;
199 height: 37px;
200 background-color: #eedc94;
200 background-color: #eedc94;
201 background-repeat: repeat-x;
201 background-repeat: repeat-x;
202 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
202 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
203 to(#eedc94) );
203 to(#eedc94) );
204 background-image: -moz-linear-gradient(top, #003b76, #00376e);
204 background-image: -moz-linear-gradient(top, #003b76, #00376e);
205 background-image: -ms-linear-gradient(top, #003b76, #00376e);
205 background-image: -ms-linear-gradient(top, #003b76, #00376e);
206 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
206 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
207 color-stop(100%, #00376e) );
207 color-stop(100%, #00376e) );
208 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
208 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
209 background-image: -o-linear-gradient(top, #003b76, #00376e) );
209 background-image: -o-linear-gradient(top, #003b76, #00376e) );
210 background-image: linear-gradient(top, #003b76, #00376e);
210 background-image: linear-gradient(top, #003b76, #00376e);
211 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
211 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
212 endColorstr='#00376e', GradientType=0 );
212 endColorstr='#00376e', GradientType=0 );
213 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
213 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
214 }
214 }
215
215
216 #header ul#logged-user li {
216 #header ul#logged-user li {
217 list-style: none;
217 list-style: none;
218 float: left;
218 float: left;
219 margin: 8px 0 0;
219 margin: 8px 0 0;
220 padding: 4px 12px;
220 padding: 4px 12px;
221 border-left: 1px solid #316293;
221 border-left: 1px solid #316293;
222 }
222 }
223
223
224 #header ul#logged-user li.first {
224 #header ul#logged-user li.first {
225 border-left: none;
225 border-left: none;
226 margin: 4px;
226 margin: 4px;
227 }
227 }
228
228
229 #header ul#logged-user li.first div.gravatar {
229 #header ul#logged-user li.first div.gravatar {
230 margin-top: -2px;
230 margin-top: -2px;
231 }
231 }
232
232
233 #header ul#logged-user li.first div.account {
233 #header ul#logged-user li.first div.account {
234 padding-top: 4px;
234 padding-top: 4px;
235 float: left;
235 float: left;
236 }
236 }
237
237
238 #header ul#logged-user li.last {
238 #header ul#logged-user li.last {
239 border-right: none;
239 border-right: none;
240 }
240 }
241
241
242 #header ul#logged-user li a {
242 #header ul#logged-user li a {
243 color: #fff;
243 color: #fff;
244 font-weight: 700;
244 font-weight: 700;
245 text-decoration: none;
245 text-decoration: none;
246 }
246 }
247
247
248 #header ul#logged-user li a:hover {
248 #header ul#logged-user li a:hover {
249 text-decoration: underline;
249 text-decoration: underline;
250 }
250 }
251
251
252 #header ul#logged-user li.highlight a {
252 #header ul#logged-user li.highlight a {
253 color: #fff;
253 color: #fff;
254 }
254 }
255
255
256 #header ul#logged-user li.highlight a:hover {
256 #header ul#logged-user li.highlight a:hover {
257 color: #FFF;
257 color: #FFF;
258 }
258 }
259
259
260 #header #header-inner {
260 #header #header-inner {
261 min-height: 40px;
261 min-height: 40px;
262 clear: both;
262 clear: both;
263 position: relative;
263 position: relative;
264 background-color: #eedc94;
264 background-color: #eedc94;
265 background-repeat: repeat-x;
265 background-repeat: repeat-x;
266 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
266 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
267 to(#eedc94) );
267 to(#eedc94) );
268 background-image: -moz-linear-gradient(top, #003b76, #00376e);
268 background-image: -moz-linear-gradient(top, #003b76, #00376e);
269 background-image: -ms-linear-gradient(top, #003b76, #00376e);
269 background-image: -ms-linear-gradient(top, #003b76, #00376e);
270 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
270 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
271 color-stop(100%, #00376e) );
271 color-stop(100%, #00376e) );
272 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
272 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
273 background-image: -o-linear-gradient(top, #003b76, #00376e) );
273 background-image: -o-linear-gradient(top, #003b76, #00376e) );
274 background-image: linear-gradient(top, #003b76, #00376e);
274 background-image: linear-gradient(top, #003b76, #00376e);
275 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
275 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
276 endColorstr='#00376e', GradientType=0 );
276 endColorstr='#00376e', GradientType=0 );
277 margin: 0;
277 margin: 0;
278 padding: 0;
278 padding: 0;
279 display: block;
279 display: block;
280 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
280 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
281 -webkit-border-radius: 4px 4px 4px 4px;
281 -webkit-border-radius: 4px 4px 4px 4px;
282 -khtml-border-radius: 4px 4px 4px 4px;
282 -khtml-border-radius: 4px 4px 4px 4px;
283 -moz-border-radius: 4px 4px 4px 4px;
283 -moz-border-radius: 4px 4px 4px 4px;
284 border-radius: 4px 4px 4px 4px;
284 border-radius: 4px 4px 4px 4px;
285 }
285 }
286
286
287 #header #header-inner #home a {
287 #header #header-inner #home a {
288 height: 40px;
288 height: 40px;
289 width: 46px;
289 width: 46px;
290 display: block;
290 display: block;
291 background: url("../images/button_home.png");
291 background: url("../images/button_home.png");
292 background-position: 0 0;
292 background-position: 0 0;
293 margin: 0;
293 margin: 0;
294 padding: 0;
294 padding: 0;
295 }
295 }
296
296
297 #header #header-inner #home a:hover {
297 #header #header-inner #home a:hover {
298 background-position: 0 -40px;
298 background-position: 0 -40px;
299 }
299 }
300
300
301 #header #header-inner #logo {
301 #header #header-inner #logo {
302 float: left;
302 float: left;
303 position: absolute;
303 position: absolute;
304 }
304 }
305
305
306 #header #header-inner #logo h1 {
306 #header #header-inner #logo h1 {
307 color: #FFF;
307 color: #FFF;
308 font-size: 18px;
308 font-size: 18px;
309 margin: 10px 0 0 13px;
309 margin: 10px 0 0 13px;
310 padding: 0;
310 padding: 0;
311 }
311 }
312
312
313 #header #header-inner #logo a {
313 #header #header-inner #logo a {
314 color: #fff;
314 color: #fff;
315 text-decoration: none;
315 text-decoration: none;
316 }
316 }
317
317
318 #header #header-inner #logo a:hover {
318 #header #header-inner #logo a:hover {
319 color: #bfe3ff;
319 color: #bfe3ff;
320 }
320 }
321
321
322 #header #header-inner #quick,#header #header-inner #quick ul {
322 #header #header-inner #quick,#header #header-inner #quick ul {
323 position: relative;
323 position: relative;
324 float: right;
324 float: right;
325 list-style-type: none;
325 list-style-type: none;
326 list-style-position: outside;
326 list-style-position: outside;
327 margin: 6px 5px 0 0;
327 margin: 6px 5px 0 0;
328 padding: 0;
328 padding: 0;
329 }
329 }
330
330
331 #header #header-inner #quick li {
331 #header #header-inner #quick li {
332 position: relative;
332 position: relative;
333 float: left;
333 float: left;
334 margin: 0 5px 0 0;
334 margin: 0 5px 0 0;
335 padding: 0;
335 padding: 0;
336 }
336 }
337
337
338 #header #header-inner #quick li a {
338 #header #header-inner #quick li a {
339 top: 0;
339 top: 0;
340 left: 0;
340 left: 0;
341 height: 1%;
341 height: 1%;
342 display: block;
342 display: block;
343 clear: both;
343 clear: both;
344 overflow: hidden;
344 overflow: hidden;
345 color: #FFF;
345 color: #FFF;
346 font-weight: 700;
346 font-weight: 700;
347 text-decoration: none;
347 text-decoration: none;
348 background: #369;
348 background: #369;
349 padding: 0;
349 padding: 0;
350 -webkit-border-radius: 4px 4px 4px 4px;
350 -webkit-border-radius: 4px 4px 4px 4px;
351 -khtml-border-radius: 4px 4px 4px 4px;
351 -khtml-border-radius: 4px 4px 4px 4px;
352 -moz-border-radius: 4px 4px 4px 4px;
352 -moz-border-radius: 4px 4px 4px 4px;
353 border-radius: 4px 4px 4px 4px;
353 border-radius: 4px 4px 4px 4px;
354 }
354 }
355
355
356 #header #header-inner #quick li span.short {
356 #header #header-inner #quick li span.short {
357 padding: 9px 6px 8px 6px;
357 padding: 9px 6px 8px 6px;
358 }
358 }
359
359
360 #header #header-inner #quick li span {
360 #header #header-inner #quick li span {
361 top: 0;
361 top: 0;
362 right: 0;
362 right: 0;
363 height: 1%;
363 height: 1%;
364 display: block;
364 display: block;
365 float: left;
365 float: left;
366 border-left: 1px solid #3f6f9f;
366 border-left: 1px solid #3f6f9f;
367 margin: 0;
367 margin: 0;
368 padding: 10px 12px 8px 10px;
368 padding: 10px 12px 8px 10px;
369 }
369 }
370
370
371 #header #header-inner #quick li span.normal {
371 #header #header-inner #quick li span.normal {
372 border: none;
372 border: none;
373 padding: 10px 12px 8px;
373 padding: 10px 12px 8px;
374 }
374 }
375
375
376 #header #header-inner #quick li span.icon {
376 #header #header-inner #quick li span.icon {
377 top: 0;
377 top: 0;
378 left: 0;
378 left: 0;
379 border-left: none;
379 border-left: none;
380 border-right: 1px solid #2e5c89;
380 border-right: 1px solid #2e5c89;
381 padding: 8px 6px 4px;
381 padding: 8px 6px 4px;
382 }
382 }
383
383
384 #header #header-inner #quick li span.icon_short {
384 #header #header-inner #quick li span.icon_short {
385 top: 0;
385 top: 0;
386 left: 0;
386 left: 0;
387 border-left: none;
387 border-left: none;
388 border-right: 1px solid #2e5c89;
388 border-right: 1px solid #2e5c89;
389 padding: 8px 6px 4px;
389 padding: 8px 6px 4px;
390 }
390 }
391
391
392 #header #header-inner #quick li span.icon img,#header #header-inner #quick li span.icon_short img
392 #header #header-inner #quick li span.icon img,#header #header-inner #quick li span.icon_short img
393 {
393 {
394 margin: 0px -2px 0px 0px;
394 margin: 0px -2px 0px 0px;
395 }
395 }
396
396
397 #header #header-inner #quick li a:hover {
397 #header #header-inner #quick li a:hover {
398 background: #4e4e4e no-repeat top left;
398 background: #4e4e4e no-repeat top left;
399 }
399 }
400
400
401 #header #header-inner #quick li a:hover span {
401 #header #header-inner #quick li a:hover span {
402 border-left: 1px solid #545454;
402 border-left: 1px solid #545454;
403 }
403 }
404
404
405 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short
405 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short
406 {
406 {
407 border-left: none;
407 border-left: none;
408 border-right: 1px solid #464646;
408 border-right: 1px solid #464646;
409 }
409 }
410
410
411 #header #header-inner #quick ul {
411 #header #header-inner #quick ul {
412 top: 29px;
412 top: 29px;
413 right: 0;
413 right: 0;
414 min-width: 200px;
414 min-width: 200px;
415 display: none;
415 display: none;
416 position: absolute;
416 position: absolute;
417 background: #FFF;
417 background: #FFF;
418 border: 1px solid #666;
418 border: 1px solid #666;
419 border-top: 1px solid #003367;
419 border-top: 1px solid #003367;
420 z-index: 100;
420 z-index: 100;
421 margin: 0;
421 margin: 0;
422 padding: 0;
422 padding: 0;
423 }
423 }
424
424
425 #header #header-inner #quick ul.repo_switcher {
425 #header #header-inner #quick ul.repo_switcher {
426 max-height: 275px;
426 max-height: 275px;
427 overflow-x: hidden;
427 overflow-x: hidden;
428 overflow-y: auto;
428 overflow-y: auto;
429 }
429 }
430
430
431 #header #header-inner #quick ul.repo_switcher li.qfilter_rs {
431 #header #header-inner #quick ul.repo_switcher li.qfilter_rs {
432 float: none;
432 float: none;
433 margin: 0;
433 margin: 0;
434 border-bottom: 2px solid #003367;
434 border-bottom: 2px solid #003367;
435 }
435 }
436
436
437 #header #header-inner #quick .repo_switcher_type {
437 #header #header-inner #quick .repo_switcher_type {
438 position: absolute;
438 position: absolute;
439 left: 0;
439 left: 0;
440 top: 9px;
440 top: 9px;
441 }
441 }
442
442
443 #header #header-inner #quick li ul li {
443 #header #header-inner #quick li ul li {
444 border-bottom: 1px solid #ddd;
444 border-bottom: 1px solid #ddd;
445 }
445 }
446
446
447 #header #header-inner #quick li ul li a {
447 #header #header-inner #quick li ul li a {
448 width: 182px;
448 width: 182px;
449 height: auto;
449 height: auto;
450 display: block;
450 display: block;
451 float: left;
451 float: left;
452 background: #FFF;
452 background: #FFF;
453 color: #003367;
453 color: #003367;
454 font-weight: 400;
454 font-weight: 400;
455 margin: 0;
455 margin: 0;
456 padding: 7px 9px;
456 padding: 7px 9px;
457 }
457 }
458
458
459 #header #header-inner #quick li ul li a:hover {
459 #header #header-inner #quick li ul li a:hover {
460 color: #000;
460 color: #000;
461 background: #FFF;
461 background: #FFF;
462 }
462 }
463
463
464 #header #header-inner #quick ul ul {
464 #header #header-inner #quick ul ul {
465 top: auto;
465 top: auto;
466 }
466 }
467
467
468 #header #header-inner #quick li ul ul {
468 #header #header-inner #quick li ul ul {
469 right: 200px;
469 right: 200px;
470 max-height: 275px;
470 max-height: 275px;
471 overflow: auto;
471 overflow: auto;
472 overflow-x: hidden;
472 overflow-x: hidden;
473 white-space: normal;
473 white-space: normal;
474 }
474 }
475
475
476 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover
476 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover
477 {
477 {
478 background: url("../images/icons/book.png") no-repeat scroll 4px 9px
478 background: url("../images/icons/book.png") no-repeat scroll 4px 9px
479 #FFF;
479 #FFF;
480 width: 167px;
480 width: 167px;
481 margin: 0;
481 margin: 0;
482 padding: 12px 9px 7px 24px;
482 padding: 12px 9px 7px 24px;
483 }
483 }
484
484
485 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover
485 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover
486 {
486 {
487 background: url("../images/icons/lock.png") no-repeat scroll 4px 9px
487 background: url("../images/icons/lock.png") no-repeat scroll 4px 9px
488 #FFF;
488 #FFF;
489 min-width: 167px;
489 min-width: 167px;
490 margin: 0;
490 margin: 0;
491 padding: 12px 9px 7px 24px;
491 padding: 12px 9px 7px 24px;
492 }
492 }
493
493
494 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover
494 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover
495 {
495 {
496 background: url("../images/icons/lock_open.png") no-repeat scroll 4px
496 background: url("../images/icons/lock_open.png") no-repeat scroll 4px
497 9px #FFF;
497 9px #FFF;
498 min-width: 167px;
498 min-width: 167px;
499 margin: 0;
499 margin: 0;
500 padding: 12px 9px 7px 24px;
500 padding: 12px 9px 7px 24px;
501 }
501 }
502
502
503 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover
503 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover
504 {
504 {
505 background: url("../images/icons/hgicon.png") no-repeat scroll 4px 9px
505 background: url("../images/icons/hgicon.png") no-repeat scroll 4px 9px
506 #FFF;
506 #FFF;
507 min-width: 167px;
507 min-width: 167px;
508 margin: 0 0 0 14px;
508 margin: 0 0 0 14px;
509 padding: 12px 9px 7px 24px;
509 padding: 12px 9px 7px 24px;
510 }
510 }
511
511
512 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover
512 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover
513 {
513 {
514 background: url("../images/icons/giticon.png") no-repeat scroll 4px 9px
514 background: url("../images/icons/giticon.png") no-repeat scroll 4px 9px
515 #FFF;
515 #FFF;
516 min-width: 167px;
516 min-width: 167px;
517 margin: 0 0 0 14px;
517 margin: 0 0 0 14px;
518 padding: 12px 9px 7px 24px;
518 padding: 12px 9px 7px 24px;
519 }
519 }
520
520
521 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover
521 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover
522 {
522 {
523 background: url("../images/icons/database_edit.png") no-repeat scroll
523 background: url("../images/icons/database_edit.png") no-repeat scroll
524 4px 9px #FFF;
524 4px 9px #FFF;
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.repos_groups,#header #header-inner #quick li ul li a.repos_groups:hover
530 #header #header-inner #quick li ul li a.repos_groups,#header #header-inner #quick li ul li a.repos_groups:hover
531 {
531 {
532 background: url("../images/icons/database_link.png") no-repeat scroll
532 background: url("../images/icons/database_link.png") no-repeat scroll
533 4px 9px #FFF;
533 4px 9px #FFF;
534 width: 167px;
534 width: 167px;
535 margin: 0;
535 margin: 0;
536 padding: 12px 9px 7px 24px;
536 padding: 12px 9px 7px 24px;
537 }
537 }
538
538
539 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover
539 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover
540 {
540 {
541 background: #FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
541 background: #FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
542 width: 167px;
542 width: 167px;
543 margin: 0;
543 margin: 0;
544 padding: 12px 9px 7px 24px;
544 padding: 12px 9px 7px 24px;
545 }
545 }
546
546
547 #header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover
547 #header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover
548 {
548 {
549 background: #FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
549 background: #FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
550 width: 167px;
550 width: 167px;
551 margin: 0;
551 margin: 0;
552 padding: 12px 9px 7px 24px;
552 padding: 12px 9px 7px 24px;
553 }
553 }
554
554
555 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover
555 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover
556 {
556 {
557 background: #FFF url("../images/icons/cog.png") no-repeat 4px 9px;
557 background: #FFF url("../images/icons/cog.png") no-repeat 4px 9px;
558 width: 167px;
558 width: 167px;
559 margin: 0;
559 margin: 0;
560 padding: 12px 9px 7px 24px;
560 padding: 12px 9px 7px 24px;
561 }
561 }
562
562
563 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover
563 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover
564 {
564 {
565 background: #FFF url("../images/icons/key.png") no-repeat 4px 9px;
565 background: #FFF url("../images/icons/key.png") no-repeat 4px 9px;
566 width: 167px;
566 width: 167px;
567 margin: 0;
567 margin: 0;
568 padding: 12px 9px 7px 24px;
568 padding: 12px 9px 7px 24px;
569 }
569 }
570
570
571 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover
571 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover
572 {
572 {
573 background: #FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
573 background: #FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
574 width: 167px;
574 width: 167px;
575 margin: 0;
575 margin: 0;
576 padding: 12px 9px 7px 24px;
576 padding: 12px 9px 7px 24px;
577 }
577 }
578
578
579 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover
579 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover
580 {
580 {
581 background: #FFF url("../images/icons/arrow_divide.png") no-repeat 4px
581 background: #FFF url("../images/icons/arrow_divide.png") no-repeat 4px
582 9px;
582 9px;
583 width: 167px;
583 width: 167px;
584 margin: 0;
584 margin: 0;
585 padding: 12px 9px 7px 24px;
585 padding: 12px 9px 7px 24px;
586 }
586 }
587
587
588 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover
588 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover
589 {
589 {
590 background: #FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
590 background: #FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
591 width: 167px;
591 width: 167px;
592 margin: 0;
592 margin: 0;
593 padding: 12px 9px 7px 24px;
593 padding: 12px 9px 7px 24px;
594 }
594 }
595
595
596 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover
596 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover
597 {
597 {
598 background: #FFF url("../images/icons/delete.png") no-repeat 4px 9px;
598 background: #FFF url("../images/icons/delete.png") no-repeat 4px 9px;
599 width: 167px;
599 width: 167px;
600 margin: 0;
600 margin: 0;
601 padding: 12px 9px 7px 24px;
601 padding: 12px 9px 7px 24px;
602 }
602 }
603
603
604 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover
604 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover
605 {
605 {
606 background: #FFF url("../images/icons/arrow_branch.png") no-repeat 4px
606 background: #FFF url("../images/icons/arrow_branch.png") no-repeat 4px
607 9px;
607 9px;
608 width: 167px;
608 width: 167px;
609 margin: 0;
609 margin: 0;
610 padding: 12px 9px 7px 24px;
610 padding: 12px 9px 7px 24px;
611 }
611 }
612
612
613 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover
613 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover
614 {
614 {
615 background: #FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
615 background: #FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
616 width: 167px;
616 width: 167px;
617 margin: 0;
617 margin: 0;
618 padding: 12px 9px 7px 24px;
618 padding: 12px 9px 7px 24px;
619 }
619 }
620
620
621 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover
621 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover
622 {
622 {
623 background: #FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
623 background: #FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
624 width: 167px;
624 width: 167px;
625 margin: 0;
625 margin: 0;
626 padding: 12px 9px 7px 24px;
626 padding: 12px 9px 7px 24px;
627 }
627 }
628
628
629 .groups_breadcrumbs a {
629 .groups_breadcrumbs a {
630 color: #fff;
630 color: #fff;
631 }
631 }
632
632
633 .groups_breadcrumbs a:hover {
633 .groups_breadcrumbs a:hover {
634 color: #bfe3ff;
634 color: #bfe3ff;
635 text-decoration: none;
635 text-decoration: none;
636 }
636 }
637
637
638 .quick_repo_menu {
638 .quick_repo_menu {
639 background: #FFF url("../images/vertical-indicator.png") 8px 50%
639 background: #FFF url("../images/vertical-indicator.png") 8px 50%
640 no-repeat !important;
640 no-repeat !important;
641 cursor: pointer;
641 cursor: pointer;
642 width: 8px;
642 width: 8px;
643 }
643 }
644
644
645 .quick_repo_menu.active {
645 .quick_repo_menu.active {
646 background: #FFF url("../images/horizontal-indicator.png") 4px 50%
646 background: #FFF url("../images/horizontal-indicator.png") 4px 50%
647 no-repeat !important;
647 no-repeat !important;
648 cursor: pointer;
648 cursor: pointer;
649 }
649 }
650
650
651 .quick_repo_menu .menu_items {
651 .quick_repo_menu .menu_items {
652 margin-top: 6px;
652 margin-top: 6px;
653 width: 150px;
653 width: 150px;
654 position: absolute;
654 position: absolute;
655 background-color: #FFF;
655 background-color: #FFF;
656 background: none repeat scroll 0 0 #FFFFFF;
656 background: none repeat scroll 0 0 #FFFFFF;
657 border-color: #003367 #666666 #666666;
657 border-color: #003367 #666666 #666666;
658 border-right: 1px solid #666666;
658 border-right: 1px solid #666666;
659 border-style: solid;
659 border-style: solid;
660 border-width: 1px;
660 border-width: 1px;
661 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
661 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
662 }
662 }
663
663
664 .quick_repo_menu .menu_items li {
664 .quick_repo_menu .menu_items li {
665 padding: 0 !important;
665 padding: 0 !important;
666 }
666 }
667
667
668 .quick_repo_menu .menu_items a {
668 .quick_repo_menu .menu_items a {
669 display: block;
669 display: block;
670 padding: 4px 12px 4px 8px;
670 padding: 4px 12px 4px 8px;
671 }
671 }
672
672
673 .quick_repo_menu .menu_items a:hover {
673 .quick_repo_menu .menu_items a:hover {
674 background-color: #EEE;
674 background-color: #EEE;
675 text-decoration: none;
675 text-decoration: none;
676 }
676 }
677
677
678 .quick_repo_menu .menu_items .icon img {
678 .quick_repo_menu .menu_items .icon img {
679 margin-bottom: -2px;
679 margin-bottom: -2px;
680 }
680 }
681
681
682 .quick_repo_menu .menu_items.hidden {
682 .quick_repo_menu .menu_items.hidden {
683 display: none;
683 display: none;
684 }
684 }
685
685
686 #content #left {
686 #content #left {
687 left: 0;
687 left: 0;
688 width: 280px;
688 width: 280px;
689 position: absolute;
689 position: absolute;
690 }
690 }
691
691
692 #content #right {
692 #content #right {
693 margin: 0 60px 10px 290px;
693 margin: 0 60px 10px 290px;
694 }
694 }
695
695
696 #content div.box {
696 #content div.box {
697 clear: both;
697 clear: both;
698 overflow: hidden;
698 overflow: hidden;
699 background: #fff;
699 background: #fff;
700 margin: 0 0 10px;
700 margin: 0 0 10px;
701 padding: 0 0 10px;
701 padding: 0 0 10px;
702 -webkit-border-radius: 4px 4px 4px 4px;
702 -webkit-border-radius: 4px 4px 4px 4px;
703 -khtml-border-radius: 4px 4px 4px 4px;
703 -khtml-border-radius: 4px 4px 4px 4px;
704 -moz-border-radius: 4px 4px 4px 4px;
704 -moz-border-radius: 4px 4px 4px 4px;
705 border-radius: 4px 4px 4px 4px;
705 border-radius: 4px 4px 4px 4px;
706 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
706 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
707 }
707 }
708
708
709 #content div.box-left {
709 #content div.box-left {
710 width: 49%;
710 width: 49%;
711 clear: none;
711 clear: none;
712 float: left;
712 float: left;
713 margin: 0 0 10px;
713 margin: 0 0 10px;
714 }
714 }
715
715
716 #content div.box-right {
716 #content div.box-right {
717 width: 49%;
717 width: 49%;
718 clear: none;
718 clear: none;
719 float: right;
719 float: right;
720 margin: 0 0 10px;
720 margin: 0 0 10px;
721 }
721 }
722
722
723 #content div.box div.title {
723 #content div.box div.title {
724 clear: both;
724 clear: both;
725 overflow: hidden;
725 overflow: hidden;
726 background-color: #eedc94;
726 background-color: #eedc94;
727 background-repeat: repeat-x;
727 background-repeat: repeat-x;
728 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
728 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
729 to(#eedc94) );
729 to(#eedc94) );
730 background-image: -moz-linear-gradient(top, #003b76, #00376e);
730 background-image: -moz-linear-gradient(top, #003b76, #00376e);
731 background-image: -ms-linear-gradient(top, #003b76, #00376e);
731 background-image: -ms-linear-gradient(top, #003b76, #00376e);
732 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
732 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
733 color-stop(100%, #00376e) );
733 color-stop(100%, #00376e) );
734 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
734 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
735 background-image: -o-linear-gradient(top, #003b76, #00376e) );
735 background-image: -o-linear-gradient(top, #003b76, #00376e) );
736 background-image: linear-gradient(top, #003b76, #00376e);
736 background-image: linear-gradient(top, #003b76, #00376e);
737 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
737 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
738 endColorstr='#00376e', GradientType=0 );
738 endColorstr='#00376e', GradientType=0 );
739 margin: 0 0 20px;
739 margin: 0 0 20px;
740 padding: 0;
740 padding: 0;
741 }
741 }
742
742
743 #content div.box div.title h5 {
743 #content div.box div.title h5 {
744 float: left;
744 float: left;
745 border: none;
745 border: none;
746 color: #fff;
746 color: #fff;
747 text-transform: uppercase;
747 text-transform: uppercase;
748 margin: 0;
748 margin: 0;
749 padding: 11px 0 11px 10px;
749 padding: 11px 0 11px 10px;
750 }
750 }
751
751
752 #content div.box div.title ul.links li {
752 #content div.box div.title ul.links li {
753 list-style: none;
753 list-style: none;
754 float: left;
754 float: left;
755 margin: 0;
755 margin: 0;
756 padding: 0;
756 padding: 0;
757 }
757 }
758
758
759 #content div.box div.title ul.links li a {
759 #content div.box div.title ul.links li a {
760 border-left: 1px solid #316293;
760 border-left: 1px solid #316293;
761 color: #FFFFFF;
761 color: #FFFFFF;
762 display: block;
762 display: block;
763 float: left;
763 float: left;
764 font-size: 13px;
764 font-size: 13px;
765 font-weight: 700;
765 font-weight: 700;
766 height: 1%;
766 height: 1%;
767 margin: 0;
767 margin: 0;
768 padding: 11px 22px 12px;
768 padding: 11px 22px 12px;
769 text-decoration: none;
769 text-decoration: none;
770 }
770 }
771
771
772 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6
772 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6
773 {
773 {
774 clear: both;
774 clear: both;
775 overflow: hidden;
775 overflow: hidden;
776 border-bottom: 1px solid #DDD;
776 border-bottom: 1px solid #DDD;
777 margin: 10px 20px;
777 margin: 10px 20px;
778 padding: 0 0 15px;
778 padding: 0 0 15px;
779 }
779 }
780
780
781 #content div.box p {
781 #content div.box p {
782 color: #5f5f5f;
782 color: #5f5f5f;
783 font-size: 12px;
783 font-size: 12px;
784 line-height: 150%;
784 line-height: 150%;
785 margin: 0 24px 10px;
785 margin: 0 24px 10px;
786 padding: 0;
786 padding: 0;
787 }
787 }
788
788
789 #content div.box blockquote {
789 #content div.box blockquote {
790 border-left: 4px solid #DDD;
790 border-left: 4px solid #DDD;
791 color: #5f5f5f;
791 color: #5f5f5f;
792 font-size: 11px;
792 font-size: 11px;
793 line-height: 150%;
793 line-height: 150%;
794 margin: 0 34px;
794 margin: 0 34px;
795 padding: 0 0 0 14px;
795 padding: 0 0 0 14px;
796 }
796 }
797
797
798 #content div.box blockquote p {
798 #content div.box blockquote p {
799 margin: 10px 0;
799 margin: 10px 0;
800 padding: 0;
800 padding: 0;
801 }
801 }
802
802
803 #content div.box dl {
803 #content div.box dl {
804 margin: 10px 24px;
804 margin: 10px 24px;
805 }
805 }
806
806
807 #content div.box dt {
807 #content div.box dt {
808 font-size: 12px;
808 font-size: 12px;
809 margin: 0;
809 margin: 0;
810 }
810 }
811
811
812 #content div.box dd {
812 #content div.box dd {
813 font-size: 12px;
813 font-size: 12px;
814 margin: 0;
814 margin: 0;
815 padding: 8px 0 8px 15px;
815 padding: 8px 0 8px 15px;
816 }
816 }
817
817
818 #content div.box li {
818 #content div.box li {
819 font-size: 12px;
819 font-size: 12px;
820 padding: 4px 0;
820 padding: 4px 0;
821 }
821 }
822
822
823 #content div.box ul.disc,#content div.box ul.circle {
823 #content div.box ul.disc,#content div.box ul.circle {
824 margin: 10px 24px 10px 38px;
824 margin: 10px 24px 10px 38px;
825 }
825 }
826
826
827 #content div.box ul.square {
827 #content div.box ul.square {
828 margin: 10px 24px 10px 40px;
828 margin: 10px 24px 10px 40px;
829 }
829 }
830
830
831 #content div.box img.left {
831 #content div.box img.left {
832 border: none;
832 border: none;
833 float: left;
833 float: left;
834 margin: 10px 10px 10px 0;
834 margin: 10px 10px 10px 0;
835 }
835 }
836
836
837 #content div.box img.right {
837 #content div.box img.right {
838 border: none;
838 border: none;
839 float: right;
839 float: right;
840 margin: 10px 0 10px 10px;
840 margin: 10px 0 10px 10px;
841 }
841 }
842
842
843 #content div.box div.messages {
843 #content div.box div.messages {
844 clear: both;
844 clear: both;
845 overflow: hidden;
845 overflow: hidden;
846 margin: 0 20px;
846 margin: 0 20px;
847 padding: 0;
847 padding: 0;
848 }
848 }
849
849
850 #content div.box div.message {
850 #content div.box div.message {
851 clear: both;
851 clear: both;
852 overflow: hidden;
852 overflow: hidden;
853 margin: 0;
853 margin: 0;
854 padding: 10px 0;
854 padding: 10px 0;
855 }
855 }
856
856
857 #content div.box div.message a {
857 #content div.box div.message a {
858 font-weight: 400 !important;
858 font-weight: 400 !important;
859 }
859 }
860
860
861 #content div.box div.message div.image {
861 #content div.box div.message div.image {
862 float: left;
862 float: left;
863 margin: 9px 0 0 5px;
863 margin: 9px 0 0 5px;
864 padding: 6px;
864 padding: 6px;
865 }
865 }
866
866
867 #content div.box div.message div.image img {
867 #content div.box div.message div.image img {
868 vertical-align: middle;
868 vertical-align: middle;
869 margin: 0;
869 margin: 0;
870 }
870 }
871
871
872 #content div.box div.message div.text {
872 #content div.box div.message div.text {
873 float: left;
873 float: left;
874 margin: 0;
874 margin: 0;
875 padding: 9px 6px;
875 padding: 9px 6px;
876 }
876 }
877
877
878 #content div.box div.message div.dismiss a {
878 #content div.box div.message div.dismiss a {
879 height: 16px;
879 height: 16px;
880 width: 16px;
880 width: 16px;
881 display: block;
881 display: block;
882 background: url("../images/icons/cross.png") no-repeat;
882 background: url("../images/icons/cross.png") no-repeat;
883 margin: 15px 14px 0 0;
883 margin: 15px 14px 0 0;
884 padding: 0;
884 padding: 0;
885 }
885 }
886
886
887 #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
887 #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
888 {
888 {
889 border: none;
889 border: none;
890 margin: 0;
890 margin: 0;
891 padding: 0;
891 padding: 0;
892 }
892 }
893
893
894 #content div.box div.message div.text span {
894 #content div.box div.message div.text span {
895 height: 1%;
895 height: 1%;
896 display: block;
896 display: block;
897 margin: 0;
897 margin: 0;
898 padding: 5px 0 0;
898 padding: 5px 0 0;
899 }
899 }
900
900
901 #content div.box div.message-error {
901 #content div.box div.message-error {
902 height: 1%;
902 height: 1%;
903 clear: both;
903 clear: both;
904 overflow: hidden;
904 overflow: hidden;
905 background: #FBE3E4;
905 background: #FBE3E4;
906 border: 1px solid #FBC2C4;
906 border: 1px solid #FBC2C4;
907 color: #860006;
907 color: #860006;
908 }
908 }
909
909
910 #content div.box div.message-error h6 {
910 #content div.box div.message-error h6 {
911 color: #860006;
911 color: #860006;
912 }
912 }
913
913
914 #content div.box div.message-warning {
914 #content div.box div.message-warning {
915 height: 1%;
915 height: 1%;
916 clear: both;
916 clear: both;
917 overflow: hidden;
917 overflow: hidden;
918 background: #FFF6BF;
918 background: #FFF6BF;
919 border: 1px solid #FFD324;
919 border: 1px solid #FFD324;
920 color: #5f5200;
920 color: #5f5200;
921 }
921 }
922
922
923 #content div.box div.message-warning h6 {
923 #content div.box div.message-warning h6 {
924 color: #5f5200;
924 color: #5f5200;
925 }
925 }
926
926
927 #content div.box div.message-notice {
927 #content div.box div.message-notice {
928 height: 1%;
928 height: 1%;
929 clear: both;
929 clear: both;
930 overflow: hidden;
930 overflow: hidden;
931 background: #8FBDE0;
931 background: #8FBDE0;
932 border: 1px solid #6BACDE;
932 border: 1px solid #6BACDE;
933 color: #003863;
933 color: #003863;
934 }
934 }
935
935
936 #content div.box div.message-notice h6 {
936 #content div.box div.message-notice h6 {
937 color: #003863;
937 color: #003863;
938 }
938 }
939
939
940 #content div.box div.message-success {
940 #content div.box div.message-success {
941 height: 1%;
941 height: 1%;
942 clear: both;
942 clear: both;
943 overflow: hidden;
943 overflow: hidden;
944 background: #E6EFC2;
944 background: #E6EFC2;
945 border: 1px solid #C6D880;
945 border: 1px solid #C6D880;
946 color: #4e6100;
946 color: #4e6100;
947 }
947 }
948
948
949 #content div.box div.message-success h6 {
949 #content div.box div.message-success h6 {
950 color: #4e6100;
950 color: #4e6100;
951 }
951 }
952
952
953 #content div.box div.form div.fields div.field {
953 #content div.box div.form div.fields div.field {
954 height: 1%;
954 height: 1%;
955 border-bottom: 1px solid #DDD;
955 border-bottom: 1px solid #DDD;
956 clear: both;
956 clear: both;
957 margin: 0;
957 margin: 0;
958 padding: 10px 0;
958 padding: 10px 0;
959 }
959 }
960
960
961 #content div.box div.form div.fields div.field-first {
961 #content div.box div.form div.fields div.field-first {
962 padding: 0 0 10px;
962 padding: 0 0 10px;
963 }
963 }
964
964
965 #content div.box div.form div.fields div.field-noborder {
965 #content div.box div.form div.fields div.field-noborder {
966 border-bottom: 0 !important;
966 border-bottom: 0 !important;
967 }
967 }
968
968
969 #content div.box div.form div.fields div.field span.error-message {
969 #content div.box div.form div.fields div.field span.error-message {
970 height: 1%;
970 height: 1%;
971 display: inline-block;
971 display: inline-block;
972 color: red;
972 color: red;
973 margin: 8px 0 0 4px;
973 margin: 8px 0 0 4px;
974 padding: 0;
974 padding: 0;
975 }
975 }
976
976
977 #content div.box div.form div.fields div.field span.success {
977 #content div.box div.form div.fields div.field span.success {
978 height: 1%;
978 height: 1%;
979 display: block;
979 display: block;
980 color: #316309;
980 color: #316309;
981 margin: 8px 0 0;
981 margin: 8px 0 0;
982 padding: 0;
982 padding: 0;
983 }
983 }
984
984
985 #content div.box div.form div.fields div.field div.label {
985 #content div.box div.form div.fields div.field div.label {
986 left: 70px;
986 left: 70px;
987 width: 155px;
987 width: 155px;
988 position: absolute;
988 position: absolute;
989 margin: 0;
989 margin: 0;
990 padding: 8px 0 0 5px;
990 padding: 8px 0 0 5px;
991 }
991 }
992
992
993 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label
993 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label
994 {
994 {
995 clear: both;
995 clear: both;
996 overflow: hidden;
996 overflow: hidden;
997 left: 0;
997 left: 0;
998 width: auto;
998 width: auto;
999 position: relative;
999 position: relative;
1000 margin: 0;
1000 margin: 0;
1001 padding: 0 0 8px;
1001 padding: 0 0 8px;
1002 }
1002 }
1003
1003
1004 #content div.box div.form div.fields div.field div.label-select {
1004 #content div.box div.form div.fields div.field div.label-select {
1005 padding: 5px 0 0 5px;
1005 padding: 5px 0 0 5px;
1006 }
1006 }
1007
1007
1008 #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
1008 #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
1009 {
1009 {
1010 padding: 0 0 8px;
1010 padding: 0 0 8px;
1011 }
1011 }
1012
1012
1013 #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
1013 #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
1014 {
1014 {
1015 padding: 0 0 8px !important;
1015 padding: 0 0 8px !important;
1016 }
1016 }
1017
1017
1018 #content div.box div.form div.fields div.field div.label label,div.label label
1018 #content div.box div.form div.fields div.field div.label label,div.label label
1019 {
1019 {
1020 color: #393939;
1020 color: #393939;
1021 font-weight: 700;
1021 font-weight: 700;
1022 }
1022 }
1023
1023
1024 #content div.box div.form div.fields div.field div.input {
1024 #content div.box div.form div.fields div.field div.input {
1025 margin: 0 0 0 200px;
1025 margin: 0 0 0 200px;
1026 }
1026 }
1027
1027
1028 #content div.box div.form div.fields div.field div.file {
1028 #content div.box div.form div.fields div.field div.file {
1029 margin: 0 0 0 200px;
1029 margin: 0 0 0 200px;
1030 }
1030 }
1031
1031
1032 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input
1032 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input
1033 {
1033 {
1034 margin: 0 0 0 0px;
1034 margin: 0 0 0 0px;
1035 }
1035 }
1036
1036
1037 #content div.box div.form div.fields div.field div.input input {
1037 #content div.box div.form div.fields div.field div.input input {
1038 background: #FFF;
1038 background: #FFF;
1039 border-top: 1px solid #b3b3b3;
1039 border-top: 1px solid #b3b3b3;
1040 border-left: 1px solid #b3b3b3;
1040 border-left: 1px solid #b3b3b3;
1041 border-right: 1px solid #eaeaea;
1041 border-right: 1px solid #eaeaea;
1042 border-bottom: 1px solid #eaeaea;
1042 border-bottom: 1px solid #eaeaea;
1043 color: #000;
1043 color: #000;
1044 font-size: 11px;
1044 font-size: 11px;
1045 margin: 0;
1045 margin: 0;
1046 padding: 7px 7px 6px;
1046 padding: 7px 7px 6px;
1047 }
1047 }
1048
1048
1049 #content div.box div.form div.fields div.field div.file input {
1049 #content div.box div.form div.fields div.field div.file input {
1050 background: none repeat scroll 0 0 #FFFFFF;
1050 background: none repeat scroll 0 0 #FFFFFF;
1051 border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
1051 border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
1052 border-style: solid;
1052 border-style: solid;
1053 border-width: 1px;
1053 border-width: 1px;
1054 color: #000000;
1054 color: #000000;
1055 font-size: 11px;
1055 font-size: 11px;
1056 margin: 0;
1056 margin: 0;
1057 padding: 7px 7px 6px;
1057 padding: 7px 7px 6px;
1058 }
1058 }
1059
1059
1060 #content div.box div.form div.fields div.field div.input input.small {
1060 #content div.box div.form div.fields div.field div.input input.small {
1061 width: 30%;
1061 width: 30%;
1062 }
1062 }
1063
1063
1064 #content div.box div.form div.fields div.field div.input input.medium {
1064 #content div.box div.form div.fields div.field div.input input.medium {
1065 width: 55%;
1065 width: 55%;
1066 }
1066 }
1067
1067
1068 #content div.box div.form div.fields div.field div.input input.large {
1068 #content div.box div.form div.fields div.field div.input input.large {
1069 width: 85%;
1069 width: 85%;
1070 }
1070 }
1071
1071
1072 #content div.box div.form div.fields div.field div.input input.date {
1072 #content div.box div.form div.fields div.field div.input input.date {
1073 width: 177px;
1073 width: 177px;
1074 }
1074 }
1075
1075
1076 #content div.box div.form div.fields div.field div.input input.button {
1076 #content div.box div.form div.fields div.field div.input input.button {
1077 background: #D4D0C8;
1077 background: #D4D0C8;
1078 border-top: 1px solid #FFF;
1078 border-top: 1px solid #FFF;
1079 border-left: 1px solid #FFF;
1079 border-left: 1px solid #FFF;
1080 border-right: 1px solid #404040;
1080 border-right: 1px solid #404040;
1081 border-bottom: 1px solid #404040;
1081 border-bottom: 1px solid #404040;
1082 color: #000;
1082 color: #000;
1083 margin: 0;
1083 margin: 0;
1084 padding: 4px 8px;
1084 padding: 4px 8px;
1085 }
1085 }
1086
1086
1087 #content div.box div.form div.fields div.field div.textarea {
1087 #content div.box div.form div.fields div.field div.textarea {
1088 border-top: 1px solid #b3b3b3;
1088 border-top: 1px solid #b3b3b3;
1089 border-left: 1px solid #b3b3b3;
1089 border-left: 1px solid #b3b3b3;
1090 border-right: 1px solid #eaeaea;
1090 border-right: 1px solid #eaeaea;
1091 border-bottom: 1px solid #eaeaea;
1091 border-bottom: 1px solid #eaeaea;
1092 margin: 0 0 0 200px;
1092 margin: 0 0 0 200px;
1093 padding: 10px;
1093 padding: 10px;
1094 }
1094 }
1095
1095
1096 #content div.box div.form div.fields div.field div.textarea-editor {
1096 #content div.box div.form div.fields div.field div.textarea-editor {
1097 border: 1px solid #ddd;
1097 border: 1px solid #ddd;
1098 padding: 0;
1098 padding: 0;
1099 }
1099 }
1100
1100
1101 #content div.box div.form div.fields div.field div.textarea textarea {
1101 #content div.box div.form div.fields div.field div.textarea textarea {
1102 width: 100%;
1102 width: 100%;
1103 height: 220px;
1103 height: 220px;
1104 overflow: hidden;
1104 overflow: hidden;
1105 background: #FFF;
1105 background: #FFF;
1106 color: #000;
1106 color: #000;
1107 font-size: 11px;
1107 font-size: 11px;
1108 outline: none;
1108 outline: none;
1109 border-width: 0;
1109 border-width: 0;
1110 margin: 0;
1110 margin: 0;
1111 padding: 0;
1111 padding: 0;
1112 }
1112 }
1113
1113
1114 #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
1114 #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
1115 {
1115 {
1116 width: 100%;
1116 width: 100%;
1117 height: 100px;
1117 height: 100px;
1118 }
1118 }
1119
1119
1120 #content div.box div.form div.fields div.field div.textarea table {
1120 #content div.box div.form div.fields div.field div.textarea table {
1121 width: 100%;
1121 width: 100%;
1122 border: none;
1122 border: none;
1123 margin: 0;
1123 margin: 0;
1124 padding: 0;
1124 padding: 0;
1125 }
1125 }
1126
1126
1127 #content div.box div.form div.fields div.field div.textarea table td {
1127 #content div.box div.form div.fields div.field div.textarea table td {
1128 background: #DDD;
1128 background: #DDD;
1129 border: none;
1129 border: none;
1130 padding: 0;
1130 padding: 0;
1131 }
1131 }
1132
1132
1133 #content div.box div.form div.fields div.field div.textarea table td table
1133 #content div.box div.form div.fields div.field div.textarea table td table
1134 {
1134 {
1135 width: auto;
1135 width: auto;
1136 border: none;
1136 border: none;
1137 margin: 0;
1137 margin: 0;
1138 padding: 0;
1138 padding: 0;
1139 }
1139 }
1140
1140
1141 #content div.box div.form div.fields div.field div.textarea table td table td
1141 #content div.box div.form div.fields div.field div.textarea table td table td
1142 {
1142 {
1143 font-size: 11px;
1143 font-size: 11px;
1144 padding: 5px 5px 5px 0;
1144 padding: 5px 5px 5px 0;
1145 }
1145 }
1146
1146
1147 #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
1147 #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
1148 {
1148 {
1149 background: #f6f6f6;
1149 background: #f6f6f6;
1150 border-color: #666;
1150 border-color: #666;
1151 }
1151 }
1152
1152
1153 div.form div.fields div.field div.button {
1153 div.form div.fields div.field div.button {
1154 margin: 0;
1154 margin: 0;
1155 padding: 0 0 0 8px;
1155 padding: 0 0 0 8px;
1156 }
1156 }
1157 #content div.box table.noborder {
1157 #content div.box table.noborder {
1158 border: 1px solid transparent;
1158 border: 1px solid transparent;
1159 }
1159 }
1160
1160
1161 #content div.box table {
1161 #content div.box table {
1162 width: 100%;
1162 width: 100%;
1163 border-collapse: separate;
1163 border-collapse: separate;
1164 margin: 0;
1164 margin: 0;
1165 padding: 0;
1165 padding: 0;
1166 border: 1px solid #eee;
1166 border: 1px solid #eee;
1167 -webkit-border-radius: 4px;
1167 -webkit-border-radius: 4px;
1168 -moz-border-radius: 4px;
1168 -moz-border-radius: 4px;
1169 border-radius: 4px;
1169 border-radius: 4px;
1170 }
1170 }
1171
1171
1172 #content div.box table th {
1172 #content div.box table th {
1173 background: #eee;
1173 background: #eee;
1174 border-bottom: 1px solid #ddd;
1174 border-bottom: 1px solid #ddd;
1175 padding: 5px 0px 5px 5px;
1175 padding: 5px 0px 5px 5px;
1176 }
1176 }
1177
1177
1178 #content div.box table th.left {
1178 #content div.box table th.left {
1179 text-align: left;
1179 text-align: left;
1180 }
1180 }
1181
1181
1182 #content div.box table th.right {
1182 #content div.box table th.right {
1183 text-align: right;
1183 text-align: right;
1184 }
1184 }
1185
1185
1186 #content div.box table th.center {
1186 #content div.box table th.center {
1187 text-align: center;
1187 text-align: center;
1188 }
1188 }
1189
1189
1190 #content div.box table th.selected {
1190 #content div.box table th.selected {
1191 vertical-align: middle;
1191 vertical-align: middle;
1192 padding: 0;
1192 padding: 0;
1193 }
1193 }
1194
1194
1195 #content div.box table td {
1195 #content div.box table td {
1196 background: #fff;
1196 background: #fff;
1197 border-bottom: 1px solid #cdcdcd;
1197 border-bottom: 1px solid #cdcdcd;
1198 vertical-align: middle;
1198 vertical-align: middle;
1199 padding: 5px;
1199 padding: 5px;
1200 }
1200 }
1201
1201
1202 #content div.box table tr.selected td {
1202 #content div.box table tr.selected td {
1203 background: #FFC;
1203 background: #FFC;
1204 }
1204 }
1205
1205
1206 #content div.box table td.selected {
1206 #content div.box table td.selected {
1207 width: 3%;
1207 width: 3%;
1208 text-align: center;
1208 text-align: center;
1209 vertical-align: middle;
1209 vertical-align: middle;
1210 padding: 0;
1210 padding: 0;
1211 }
1211 }
1212
1212
1213 #content div.box table td.action {
1213 #content div.box table td.action {
1214 width: 45%;
1214 width: 45%;
1215 text-align: left;
1215 text-align: left;
1216 }
1216 }
1217
1217
1218 #content div.box table td.date {
1218 #content div.box table td.date {
1219 width: 33%;
1219 width: 33%;
1220 text-align: center;
1220 text-align: center;
1221 }
1221 }
1222
1222
1223 #content div.box div.action {
1223 #content div.box div.action {
1224 float: right;
1224 float: right;
1225 background: #FFF;
1225 background: #FFF;
1226 text-align: right;
1226 text-align: right;
1227 margin: 10px 0 0;
1227 margin: 10px 0 0;
1228 padding: 0;
1228 padding: 0;
1229 }
1229 }
1230
1230
1231 #content div.box div.action select {
1231 #content div.box div.action select {
1232 font-size: 11px;
1232 font-size: 11px;
1233 margin: 0;
1233 margin: 0;
1234 }
1234 }
1235
1235
1236 #content div.box div.action .ui-selectmenu {
1236 #content div.box div.action .ui-selectmenu {
1237 margin: 0;
1237 margin: 0;
1238 padding: 0;
1238 padding: 0;
1239 }
1239 }
1240
1240
1241 #content div.box div.pagination {
1241 #content div.box div.pagination {
1242 height: 1%;
1242 height: 1%;
1243 clear: both;
1243 clear: both;
1244 overflow: hidden;
1244 overflow: hidden;
1245 margin: 10px 0 0;
1245 margin: 10px 0 0;
1246 padding: 0;
1246 padding: 0;
1247 }
1247 }
1248
1248
1249 #content div.box div.pagination ul.pager {
1249 #content div.box div.pagination ul.pager {
1250 float: right;
1250 float: right;
1251 text-align: right;
1251 text-align: right;
1252 margin: 0;
1252 margin: 0;
1253 padding: 0;
1253 padding: 0;
1254 }
1254 }
1255
1255
1256 #content div.box div.pagination ul.pager li {
1256 #content div.box div.pagination ul.pager li {
1257 height: 1%;
1257 height: 1%;
1258 float: left;
1258 float: left;
1259 list-style: none;
1259 list-style: none;
1260 background: #ebebeb url("../images/pager.png") repeat-x;
1260 background: #ebebeb url("../images/pager.png") repeat-x;
1261 border-top: 1px solid #dedede;
1261 border-top: 1px solid #dedede;
1262 border-left: 1px solid #cfcfcf;
1262 border-left: 1px solid #cfcfcf;
1263 border-right: 1px solid #c4c4c4;
1263 border-right: 1px solid #c4c4c4;
1264 border-bottom: 1px solid #c4c4c4;
1264 border-bottom: 1px solid #c4c4c4;
1265 color: #4A4A4A;
1265 color: #4A4A4A;
1266 font-weight: 700;
1266 font-weight: 700;
1267 margin: 0 0 0 4px;
1267 margin: 0 0 0 4px;
1268 padding: 0;
1268 padding: 0;
1269 }
1269 }
1270
1270
1271 #content div.box div.pagination ul.pager li.separator {
1271 #content div.box div.pagination ul.pager li.separator {
1272 padding: 6px;
1272 padding: 6px;
1273 }
1273 }
1274
1274
1275 #content div.box div.pagination ul.pager li.current {
1275 #content div.box div.pagination ul.pager li.current {
1276 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1276 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1277 border-top: 1px solid #ccc;
1277 border-top: 1px solid #ccc;
1278 border-left: 1px solid #bebebe;
1278 border-left: 1px solid #bebebe;
1279 border-right: 1px solid #b1b1b1;
1279 border-right: 1px solid #b1b1b1;
1280 border-bottom: 1px solid #afafaf;
1280 border-bottom: 1px solid #afafaf;
1281 color: #515151;
1281 color: #515151;
1282 padding: 6px;
1282 padding: 6px;
1283 }
1283 }
1284
1284
1285 #content div.box div.pagination ul.pager li a {
1285 #content div.box div.pagination ul.pager li a {
1286 height: 1%;
1286 height: 1%;
1287 display: block;
1287 display: block;
1288 float: left;
1288 float: left;
1289 color: #515151;
1289 color: #515151;
1290 text-decoration: none;
1290 text-decoration: none;
1291 margin: 0;
1291 margin: 0;
1292 padding: 6px;
1292 padding: 6px;
1293 }
1293 }
1294
1294
1295 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active
1295 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active
1296 {
1296 {
1297 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1297 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1298 border-top: 1px solid #ccc;
1298 border-top: 1px solid #ccc;
1299 border-left: 1px solid #bebebe;
1299 border-left: 1px solid #bebebe;
1300 border-right: 1px solid #b1b1b1;
1300 border-right: 1px solid #b1b1b1;
1301 border-bottom: 1px solid #afafaf;
1301 border-bottom: 1px solid #afafaf;
1302 margin: -1px;
1302 margin: -1px;
1303 }
1303 }
1304
1304
1305 #content div.box div.pagination-wh {
1305 #content div.box div.pagination-wh {
1306 height: 1%;
1306 height: 1%;
1307 clear: both;
1307 clear: both;
1308 overflow: hidden;
1308 overflow: hidden;
1309 text-align: right;
1309 text-align: right;
1310 margin: 10px 0 0;
1310 margin: 10px 0 0;
1311 padding: 0;
1311 padding: 0;
1312 }
1312 }
1313
1313
1314 #content div.box div.pagination-right {
1314 #content div.box div.pagination-right {
1315 float: right;
1315 float: right;
1316 }
1316 }
1317
1317
1318 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot
1318 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot
1319 {
1319 {
1320 height: 1%;
1320 height: 1%;
1321 float: left;
1321 float: left;
1322 background: #ebebeb url("../images/pager.png") repeat-x;
1322 background: #ebebeb url("../images/pager.png") repeat-x;
1323 border-top: 1px solid #dedede;
1323 border-top: 1px solid #dedede;
1324 border-left: 1px solid #cfcfcf;
1324 border-left: 1px solid #cfcfcf;
1325 border-right: 1px solid #c4c4c4;
1325 border-right: 1px solid #c4c4c4;
1326 border-bottom: 1px solid #c4c4c4;
1326 border-bottom: 1px solid #c4c4c4;
1327 color: #4A4A4A;
1327 color: #4A4A4A;
1328 font-weight: 700;
1328 font-weight: 700;
1329 margin: 0 0 0 4px;
1329 margin: 0 0 0 4px;
1330 padding: 6px;
1330 padding: 6px;
1331 }
1331 }
1332
1332
1333 #content div.box div.pagination-wh span.pager_curpage {
1333 #content div.box div.pagination-wh span.pager_curpage {
1334 height: 1%;
1334 height: 1%;
1335 float: left;
1335 float: left;
1336 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1336 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1337 border-top: 1px solid #ccc;
1337 border-top: 1px solid #ccc;
1338 border-left: 1px solid #bebebe;
1338 border-left: 1px solid #bebebe;
1339 border-right: 1px solid #b1b1b1;
1339 border-right: 1px solid #b1b1b1;
1340 border-bottom: 1px solid #afafaf;
1340 border-bottom: 1px solid #afafaf;
1341 color: #515151;
1341 color: #515151;
1342 font-weight: 700;
1342 font-weight: 700;
1343 margin: 0 0 0 4px;
1343 margin: 0 0 0 4px;
1344 padding: 6px;
1344 padding: 6px;
1345 }
1345 }
1346
1346
1347 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active
1347 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active
1348 {
1348 {
1349 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1349 background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
1350 border-top: 1px solid #ccc;
1350 border-top: 1px solid #ccc;
1351 border-left: 1px solid #bebebe;
1351 border-left: 1px solid #bebebe;
1352 border-right: 1px solid #b1b1b1;
1352 border-right: 1px solid #b1b1b1;
1353 border-bottom: 1px solid #afafaf;
1353 border-bottom: 1px solid #afafaf;
1354 text-decoration: none;
1354 text-decoration: none;
1355 }
1355 }
1356
1356
1357 #content div.box div.traffic div.legend {
1357 #content div.box div.traffic div.legend {
1358 clear: both;
1358 clear: both;
1359 overflow: hidden;
1359 overflow: hidden;
1360 border-bottom: 1px solid #ddd;
1360 border-bottom: 1px solid #ddd;
1361 margin: 0 0 10px;
1361 margin: 0 0 10px;
1362 padding: 0 0 10px;
1362 padding: 0 0 10px;
1363 }
1363 }
1364
1364
1365 #content div.box div.traffic div.legend h6 {
1365 #content div.box div.traffic div.legend h6 {
1366 float: left;
1366 float: left;
1367 border: none;
1367 border: none;
1368 margin: 0;
1368 margin: 0;
1369 padding: 0;
1369 padding: 0;
1370 }
1370 }
1371
1371
1372 #content div.box div.traffic div.legend li {
1372 #content div.box div.traffic div.legend li {
1373 list-style: none;
1373 list-style: none;
1374 float: left;
1374 float: left;
1375 font-size: 11px;
1375 font-size: 11px;
1376 margin: 0;
1376 margin: 0;
1377 padding: 0 8px 0 4px;
1377 padding: 0 8px 0 4px;
1378 }
1378 }
1379
1379
1380 #content div.box div.traffic div.legend li.visits {
1380 #content div.box div.traffic div.legend li.visits {
1381 border-left: 12px solid #edc240;
1381 border-left: 12px solid #edc240;
1382 }
1382 }
1383
1383
1384 #content div.box div.traffic div.legend li.pageviews {
1384 #content div.box div.traffic div.legend li.pageviews {
1385 border-left: 12px solid #afd8f8;
1385 border-left: 12px solid #afd8f8;
1386 }
1386 }
1387
1387
1388 #content div.box div.traffic table {
1388 #content div.box div.traffic table {
1389 width: auto;
1389 width: auto;
1390 }
1390 }
1391
1391
1392 #content div.box div.traffic table td {
1392 #content div.box div.traffic table td {
1393 background: transparent;
1393 background: transparent;
1394 border: none;
1394 border: none;
1395 padding: 2px 3px 3px;
1395 padding: 2px 3px 3px;
1396 }
1396 }
1397
1397
1398 #content div.box div.traffic table td.legendLabel {
1398 #content div.box div.traffic table td.legendLabel {
1399 padding: 0 3px 2px;
1399 padding: 0 3px 2px;
1400 }
1400 }
1401
1401
1402 #summary {
1402 #summary {
1403
1403
1404 }
1404 }
1405
1405
1406 #summary .desc {
1406 #summary .desc {
1407 white-space: pre;
1407 white-space: pre;
1408 width: 100%;
1408 width: 100%;
1409 }
1409 }
1410
1410
1411 #summary .repo_name {
1411 #summary .repo_name {
1412 font-size: 1.6em;
1412 font-size: 1.6em;
1413 font-weight: bold;
1413 font-weight: bold;
1414 vertical-align: baseline;
1414 vertical-align: baseline;
1415 clear: right
1415 clear: right
1416 }
1416 }
1417
1417
1418 #footer {
1418 #footer {
1419 clear: both;
1419 clear: both;
1420 overflow: hidden;
1420 overflow: hidden;
1421 text-align: right;
1421 text-align: right;
1422 margin: 0;
1422 margin: 0;
1423 padding: 0 10px 4px;
1423 padding: 0 10px 4px;
1424 margin: -10px 0 0;
1424 margin: -10px 0 0;
1425 }
1425 }
1426
1426
1427 #footer div#footer-inner {
1427 #footer div#footer-inner {
1428 background-color: #eedc94; background-repeat : repeat-x;
1428 background-color: #eedc94; background-repeat : repeat-x;
1429 background-image : -khtml-gradient( linear, left top, left bottom,
1429 background-image : -khtml-gradient( linear, left top, left bottom,
1430 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1430 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1431 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1431 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1432 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1432 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1433 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1433 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1434 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1434 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1435 background-image : -o-linear-gradient( top, #003b76, #00376e));
1435 background-image : -o-linear-gradient( top, #003b76, #00376e));
1436 background-image : linear-gradient( top, #003b76, #00376e); filter :
1436 background-image : linear-gradient( top, #003b76, #00376e); filter :
1437 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1437 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1438 '#003b76', endColorstr = '#00376e', GradientType = 0);
1438 '#003b76', endColorstr = '#00376e', GradientType = 0);
1439 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1439 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1440 -webkit-border-radius: 4px 4px 4px 4px;
1440 -webkit-border-radius: 4px 4px 4px 4px;
1441 -khtml-border-radius: 4px 4px 4px 4px;
1441 -khtml-border-radius: 4px 4px 4px 4px;
1442 -moz-border-radius: 4px 4px 4px 4px;
1442 -moz-border-radius: 4px 4px 4px 4px;
1443 border-radius: 4px 4px 4px 4px;
1443 border-radius: 4px 4px 4px 4px;
1444 background-repeat: repeat-x;
1444 background-repeat: repeat-x;
1445 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1445 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1446 to(#eedc94) );
1446 to(#eedc94) );
1447 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1447 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1448 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1448 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1449 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1449 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1450 color-stop(100%, #00376e) );
1450 color-stop(100%, #00376e) );
1451 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1451 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1452 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1452 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1453 background-image: linear-gradient(top, #003b76, #00376e);
1453 background-image: linear-gradient(top, #003b76, #00376e);
1454 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1454 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1455 endColorstr='#00376e', GradientType=0 );
1455 endColorstr='#00376e', GradientType=0 );
1456 }
1456 }
1457
1457
1458 #footer div#footer-inner p {
1458 #footer div#footer-inner p {
1459 padding: 15px 25px 15px 0;
1459 padding: 15px 25px 15px 0;
1460 color: #FFF;
1460 color: #FFF;
1461 font-weight: 700;
1461 font-weight: 700;
1462 }
1462 }
1463
1463
1464 #footer div#footer-inner .footer-link {
1464 #footer div#footer-inner .footer-link {
1465 float: left;
1465 float: left;
1466 padding-left: 10px;
1466 padding-left: 10px;
1467 }
1467 }
1468
1468
1469 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a
1469 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a
1470 {
1470 {
1471 color: #FFF;
1471 color: #FFF;
1472 }
1472 }
1473
1473
1474 #login div.title {
1474 #login div.title {
1475 width: 420px;
1475 width: 420px;
1476 clear: both;
1476 clear: both;
1477 overflow: hidden;
1477 overflow: hidden;
1478 position: relative;
1478 position: relative;
1479 background-color: #eedc94; background-repeat : repeat-x;
1479 background-color: #eedc94; background-repeat : repeat-x;
1480 background-image : -khtml-gradient( linear, left top, left bottom,
1480 background-image : -khtml-gradient( linear, left top, left bottom,
1481 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1481 from( #fceec1), to( #eedc94)); background-image : -moz-linear-gradient(
1482 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1482 top, #003b76, #00376e); background-image : -ms-linear-gradient( top,
1483 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1483 #003b76, #00376e); background-image : -webkit-gradient( linear, left
1484 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1484 top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
1485 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1485 background-image : -webkit-linear-gradient( top, #003b76, #00376e));
1486 background-image : -o-linear-gradient( top, #003b76, #00376e));
1486 background-image : -o-linear-gradient( top, #003b76, #00376e));
1487 background-image : linear-gradient( top, #003b76, #00376e); filter :
1487 background-image : linear-gradient( top, #003b76, #00376e); filter :
1488 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1488 progid : DXImageTransform.Microsoft.gradient ( startColorstr =
1489 '#003b76', endColorstr = '#00376e', GradientType = 0);
1489 '#003b76', endColorstr = '#00376e', GradientType = 0);
1490 margin: 0 auto;
1490 margin: 0 auto;
1491 padding: 0;
1491 padding: 0;
1492 background-repeat: repeat-x;
1492 background-repeat: repeat-x;
1493 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1493 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1494 to(#eedc94) );
1494 to(#eedc94) );
1495 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1495 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1496 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1496 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1497 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1497 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1498 color-stop(100%, #00376e) );
1498 color-stop(100%, #00376e) );
1499 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1499 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1500 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1500 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1501 background-image: linear-gradient(top, #003b76, #00376e);
1501 background-image: linear-gradient(top, #003b76, #00376e);
1502 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1502 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1503 endColorstr='#00376e', GradientType=0 );
1503 endColorstr='#00376e', GradientType=0 );
1504 }
1504 }
1505
1505
1506 #login div.inner {
1506 #login div.inner {
1507 width: 380px;
1507 width: 380px;
1508 background: #FFF url("../images/login.png") no-repeat top left;
1508 background: #FFF url("../images/login.png") no-repeat top left;
1509 border-top: none;
1509 border-top: none;
1510 border-bottom: none;
1510 border-bottom: none;
1511 margin: 0 auto;
1511 margin: 0 auto;
1512 padding: 20px;
1512 padding: 20px;
1513 }
1513 }
1514
1514
1515 #login div.form div.fields div.field div.label {
1515 #login div.form div.fields div.field div.label {
1516 width: 173px;
1516 width: 173px;
1517 float: left;
1517 float: left;
1518 text-align: right;
1518 text-align: right;
1519 margin: 2px 10px 0 0;
1519 margin: 2px 10px 0 0;
1520 padding: 5px 0 0 5px;
1520 padding: 5px 0 0 5px;
1521 }
1521 }
1522
1522
1523 #login div.form div.fields div.field div.input input {
1523 #login div.form div.fields div.field div.input input {
1524 width: 176px;
1524 width: 176px;
1525 background: #FFF;
1525 background: #FFF;
1526 border-top: 1px solid #b3b3b3;
1526 border-top: 1px solid #b3b3b3;
1527 border-left: 1px solid #b3b3b3;
1527 border-left: 1px solid #b3b3b3;
1528 border-right: 1px solid #eaeaea;
1528 border-right: 1px solid #eaeaea;
1529 border-bottom: 1px solid #eaeaea;
1529 border-bottom: 1px solid #eaeaea;
1530 color: #000;
1530 color: #000;
1531 font-size: 11px;
1531 font-size: 11px;
1532 margin: 0;
1532 margin: 0;
1533 padding: 7px 7px 6px;
1533 padding: 7px 7px 6px;
1534 }
1534 }
1535
1535
1536 #login div.form div.fields div.buttons {
1536 #login div.form div.fields div.buttons {
1537 clear: both;
1537 clear: both;
1538 overflow: hidden;
1538 overflow: hidden;
1539 border-top: 1px solid #DDD;
1539 border-top: 1px solid #DDD;
1540 text-align: right;
1540 text-align: right;
1541 margin: 0;
1541 margin: 0;
1542 padding: 10px 0 0;
1542 padding: 10px 0 0;
1543 }
1543 }
1544
1544
1545 #login div.form div.links {
1545 #login div.form div.links {
1546 clear: both;
1546 clear: both;
1547 overflow: hidden;
1547 overflow: hidden;
1548 margin: 10px 0 0;
1548 margin: 10px 0 0;
1549 padding: 0 0 2px;
1549 padding: 0 0 2px;
1550 }
1550 }
1551
1551
1552 #quick_login {
1552 #quick_login {
1553 top: 31px;
1553 top: 31px;
1554 background-color: rgb(0, 51, 103);
1554 background-color: rgb(0, 51, 103);
1555 z-index: 999;
1555 z-index: 999;
1556 height: 150px;
1556 height: 150px;
1557 position: absolute;
1557 position: absolute;
1558 margin-left: -16px;
1558 margin-left: -16px;
1559 width: 281px;
1559 width: 281px;
1560 -webkit-border-radius: 0px 0px 4px 4px;
1560 -webkit-border-radius: 0px 0px 4px 4px;
1561 -khtml-border-radius: 0px 0px 4px 4px;
1561 -khtml-border-radius: 0px 0px 4px 4px;
1562 -moz-border-radius: 0px 0px 4px 4px;
1562 -moz-border-radius: 0px 0px 4px 4px;
1563 border-radius: 0px 0px 4px 4px;
1563 border-radius: 0px 0px 4px 4px;
1564 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1564 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1565 }
1565 }
1566
1566
1567 #quick_login .password_forgoten {
1567 #quick_login .password_forgoten {
1568 padding-right: 10px;
1568 padding-right: 10px;
1569 padding-top: 0px;
1569 padding-top: 0px;
1570 float: left;
1570 float: left;
1571 }
1571 }
1572
1572
1573 #quick_login .password_forgoten a {
1573 #quick_login .password_forgoten a {
1574 font-size: 10px
1574 font-size: 10px
1575 }
1575 }
1576
1576
1577 #quick_login .register {
1577 #quick_login .register {
1578 padding-right: 10px;
1578 padding-right: 10px;
1579 padding-top: 5px;
1579 padding-top: 5px;
1580 float: left;
1580 float: left;
1581 }
1581 }
1582
1582
1583 #quick_login .register a {
1583 #quick_login .register a {
1584 font-size: 10px
1584 font-size: 10px
1585 }
1585 }
1586
1586
1587 #quick_login div.form div.fields {
1587 #quick_login div.form div.fields {
1588 padding-top: 2px;
1588 padding-top: 2px;
1589 padding-left: 10px;
1589 padding-left: 10px;
1590 }
1590 }
1591
1591
1592 #quick_login div.form div.fields div.field {
1592 #quick_login div.form div.fields div.field {
1593 padding: 5px;
1593 padding: 5px;
1594 }
1594 }
1595
1595
1596 #quick_login div.form div.fields div.field div.label label {
1596 #quick_login div.form div.fields div.field div.label label {
1597 color: #fff;
1597 color: #fff;
1598 padding-bottom: 3px;
1598 padding-bottom: 3px;
1599 }
1599 }
1600
1600
1601 #quick_login div.form div.fields div.field div.input input {
1601 #quick_login div.form div.fields div.field div.input input {
1602 width: 236px;
1602 width: 236px;
1603 background: #FFF;
1603 background: #FFF;
1604 border-top: 1px solid #b3b3b3;
1604 border-top: 1px solid #b3b3b3;
1605 border-left: 1px solid #b3b3b3;
1605 border-left: 1px solid #b3b3b3;
1606 border-right: 1px solid #eaeaea;
1606 border-right: 1px solid #eaeaea;
1607 border-bottom: 1px solid #eaeaea;
1607 border-bottom: 1px solid #eaeaea;
1608 color: #000;
1608 color: #000;
1609 font-size: 11px;
1609 font-size: 11px;
1610 margin: 0;
1610 margin: 0;
1611 padding: 5px 7px 4px;
1611 padding: 5px 7px 4px;
1612 }
1612 }
1613
1613
1614 #quick_login div.form div.fields div.buttons {
1614 #quick_login div.form div.fields div.buttons {
1615 clear: both;
1615 clear: both;
1616 overflow: hidden;
1616 overflow: hidden;
1617 text-align: right;
1617 text-align: right;
1618 margin: 0;
1618 margin: 0;
1619 padding: 10px 14px 0px 5px;
1619 padding: 10px 14px 0px 5px;
1620 }
1620 }
1621
1621
1622 #quick_login div.form div.links {
1622 #quick_login div.form div.links {
1623 clear: both;
1623 clear: both;
1624 overflow: hidden;
1624 overflow: hidden;
1625 margin: 10px 0 0;
1625 margin: 10px 0 0;
1626 padding: 0 0 2px;
1626 padding: 0 0 2px;
1627 }
1627 }
1628
1628
1629 #register div.title {
1629 #register div.title {
1630 clear: both;
1630 clear: both;
1631 overflow: hidden;
1631 overflow: hidden;
1632 position: relative;
1632 position: relative;
1633 background-color: #eedc94;
1633 background-color: #eedc94;
1634 background-repeat: repeat-x;
1634 background-repeat: repeat-x;
1635 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1635 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
1636 to(#eedc94) );
1636 to(#eedc94) );
1637 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1637 background-image: -moz-linear-gradient(top, #003b76, #00376e);
1638 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1638 background-image: -ms-linear-gradient(top, #003b76, #00376e);
1639 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1639 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),
1640 color-stop(100%, #00376e) );
1640 color-stop(100%, #00376e) );
1641 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1641 background-image: -webkit-linear-gradient(top, #003b76, #00376e) );
1642 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1642 background-image: -o-linear-gradient(top, #003b76, #00376e) );
1643 background-image: linear-gradient(top, #003b76, #00376e);
1643 background-image: linear-gradient(top, #003b76, #00376e);
1644 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1644 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
1645 endColorstr='#00376e', GradientType=0 );
1645 endColorstr='#00376e', GradientType=0 );
1646 margin: 0 auto;
1646 margin: 0 auto;
1647 padding: 0;
1647 padding: 0;
1648 }
1648 }
1649
1649
1650 #register div.inner {
1650 #register div.inner {
1651 background: #FFF;
1651 background: #FFF;
1652 border-top: none;
1652 border-top: none;
1653 border-bottom: none;
1653 border-bottom: none;
1654 margin: 0 auto;
1654 margin: 0 auto;
1655 padding: 20px;
1655 padding: 20px;
1656 }
1656 }
1657
1657
1658 #register div.form div.fields div.field div.label {
1658 #register div.form div.fields div.field div.label {
1659 width: 135px;
1659 width: 135px;
1660 float: left;
1660 float: left;
1661 text-align: right;
1661 text-align: right;
1662 margin: 2px 10px 0 0;
1662 margin: 2px 10px 0 0;
1663 padding: 5px 0 0 5px;
1663 padding: 5px 0 0 5px;
1664 }
1664 }
1665
1665
1666 #register div.form div.fields div.field div.input input {
1666 #register div.form div.fields div.field div.input input {
1667 width: 300px;
1667 width: 300px;
1668 background: #FFF;
1668 background: #FFF;
1669 border-top: 1px solid #b3b3b3;
1669 border-top: 1px solid #b3b3b3;
1670 border-left: 1px solid #b3b3b3;
1670 border-left: 1px solid #b3b3b3;
1671 border-right: 1px solid #eaeaea;
1671 border-right: 1px solid #eaeaea;
1672 border-bottom: 1px solid #eaeaea;
1672 border-bottom: 1px solid #eaeaea;
1673 color: #000;
1673 color: #000;
1674 font-size: 11px;
1674 font-size: 11px;
1675 margin: 0;
1675 margin: 0;
1676 padding: 7px 7px 6px;
1676 padding: 7px 7px 6px;
1677 }
1677 }
1678
1678
1679 #register div.form div.fields div.buttons {
1679 #register div.form div.fields div.buttons {
1680 clear: both;
1680 clear: both;
1681 overflow: hidden;
1681 overflow: hidden;
1682 border-top: 1px solid #DDD;
1682 border-top: 1px solid #DDD;
1683 text-align: left;
1683 text-align: left;
1684 margin: 0;
1684 margin: 0;
1685 padding: 10px 0 0 150px;
1685 padding: 10px 0 0 150px;
1686 }
1686 }
1687
1687
1688 #register div.form div.activation_msg {
1688 #register div.form div.activation_msg {
1689 padding-top: 4px;
1689 padding-top: 4px;
1690 padding-bottom: 4px;
1690 padding-bottom: 4px;
1691 }
1691 }
1692
1692
1693 #journal .journal_day {
1693 #journal .journal_day {
1694 font-size: 20px;
1694 font-size: 20px;
1695 padding: 10px 0px;
1695 padding: 10px 0px;
1696 border-bottom: 2px solid #DDD;
1696 border-bottom: 2px solid #DDD;
1697 margin-left: 10px;
1697 margin-left: 10px;
1698 margin-right: 10px;
1698 margin-right: 10px;
1699 }
1699 }
1700
1700
1701 #journal .journal_container {
1701 #journal .journal_container {
1702 padding: 5px;
1702 padding: 5px;
1703 clear: both;
1703 clear: both;
1704 margin: 0px 5px 0px 10px;
1704 margin: 0px 5px 0px 10px;
1705 }
1705 }
1706
1706
1707 #journal .journal_action_container {
1707 #journal .journal_action_container {
1708 padding-left: 38px;
1708 padding-left: 38px;
1709 }
1709 }
1710
1710
1711 #journal .journal_user {
1711 #journal .journal_user {
1712 color: #747474;
1712 color: #747474;
1713 font-size: 14px;
1713 font-size: 14px;
1714 font-weight: bold;
1714 font-weight: bold;
1715 height: 30px;
1715 height: 30px;
1716 }
1716 }
1717
1717
1718 #journal .journal_icon {
1718 #journal .journal_icon {
1719 clear: both;
1719 clear: both;
1720 float: left;
1720 float: left;
1721 padding-right: 4px;
1721 padding-right: 4px;
1722 padding-top: 3px;
1722 padding-top: 3px;
1723 }
1723 }
1724
1724
1725 #journal .journal_action {
1725 #journal .journal_action {
1726 padding-top: 4px;
1726 padding-top: 4px;
1727 min-height: 2px;
1727 min-height: 2px;
1728 float: left
1728 float: left
1729 }
1729 }
1730
1730
1731 #journal .journal_action_params {
1731 #journal .journal_action_params {
1732 clear: left;
1732 clear: left;
1733 padding-left: 22px;
1733 padding-left: 22px;
1734 }
1734 }
1735
1735
1736 #journal .journal_repo {
1736 #journal .journal_repo {
1737 float: left;
1737 float: left;
1738 margin-left: 6px;
1738 margin-left: 6px;
1739 padding-top: 3px;
1739 padding-top: 3px;
1740 }
1740 }
1741
1741
1742 #journal .date {
1742 #journal .date {
1743 clear: both;
1743 clear: both;
1744 color: #777777;
1744 color: #777777;
1745 font-size: 11px;
1745 font-size: 11px;
1746 padding-left: 22px;
1746 padding-left: 22px;
1747 }
1747 }
1748
1748
1749 #journal .journal_repo .journal_repo_name {
1749 #journal .journal_repo .journal_repo_name {
1750 font-weight: bold;
1750 font-weight: bold;
1751 font-size: 1.1em;
1751 font-size: 1.1em;
1752 }
1752 }
1753
1753
1754 #journal .compare_view {
1754 #journal .compare_view {
1755 padding: 5px 0px 5px 0px;
1755 padding: 5px 0px 5px 0px;
1756 width: 95px;
1756 width: 95px;
1757 }
1757 }
1758
1758
1759 .journal_highlight {
1759 .journal_highlight {
1760 font-weight: bold;
1760 font-weight: bold;
1761 padding: 0 2px;
1761 padding: 0 2px;
1762 vertical-align: bottom;
1762 vertical-align: bottom;
1763 }
1763 }
1764
1764
1765 .trending_language_tbl,.trending_language_tbl td {
1765 .trending_language_tbl,.trending_language_tbl td {
1766 border: 0 !important;
1766 border: 0 !important;
1767 margin: 0 !important;
1767 margin: 0 !important;
1768 padding: 0 !important;
1768 padding: 0 !important;
1769 }
1769 }
1770
1770
1771 .trending_language {
1771 .trending_language {
1772 background-color: #003367;
1772 background-color: #003367;
1773 color: #FFF;
1773 color: #FFF;
1774 display: block;
1774 display: block;
1775 min-width: 20px;
1775 min-width: 20px;
1776 text-decoration: none;
1776 text-decoration: none;
1777 height: 12px;
1777 height: 12px;
1778 margin-bottom: 4px;
1778 margin-bottom: 4px;
1779 margin-left: 5px;
1779 margin-left: 5px;
1780 white-space: pre;
1780 white-space: pre;
1781 padding: 3px;
1781 padding: 3px;
1782 }
1782 }
1783
1783
1784 h3.files_location {
1784 h3.files_location {
1785 font-size: 1.8em;
1785 font-size: 1.8em;
1786 font-weight: 700;
1786 font-weight: 700;
1787 border-bottom: none !important;
1787 border-bottom: none !important;
1788 margin: 10px 0 !important;
1788 margin: 10px 0 !important;
1789 }
1789 }
1790
1790
1791 #files_data dl dt {
1791 #files_data dl dt {
1792 float: left;
1792 float: left;
1793 width: 115px;
1793 width: 115px;
1794 margin: 0 !important;
1794 margin: 0 !important;
1795 padding: 5px;
1795 padding: 5px;
1796 }
1796 }
1797
1797
1798 #files_data dl dd {
1798 #files_data dl dd {
1799 margin: 0 !important;
1799 margin: 0 !important;
1800 padding: 5px !important;
1800 padding: 5px !important;
1801 }
1801 }
1802
1802
1803 #changeset_content {
1803 #changeset_content {
1804 border: 1px solid #CCC;
1804 border: 1px solid #CCC;
1805 padding: 5px;
1805 padding: 5px;
1806 }
1806 }
1807
1807
1808 #changeset_compare_view_content {
1808 #changeset_compare_view_content {
1809 border: 1px solid #CCC;
1809 border: 1px solid #CCC;
1810 padding: 5px;
1810 padding: 5px;
1811 }
1811 }
1812
1812
1813 #changeset_content .container {
1813 #changeset_content .container {
1814 min-height: 120px;
1814 min-height: 120px;
1815 font-size: 1.2em;
1815 font-size: 1.2em;
1816 overflow: hidden;
1816 overflow: hidden;
1817 }
1817 }
1818
1818
1819 #changeset_compare_view_content .compare_view_commits {
1819 #changeset_compare_view_content .compare_view_commits {
1820 width: auto !important;
1820 width: auto !important;
1821 }
1821 }
1822
1822
1823 #changeset_compare_view_content .compare_view_commits td {
1823 #changeset_compare_view_content .compare_view_commits td {
1824 padding: 0px 0px 0px 12px !important;
1824 padding: 0px 0px 0px 12px !important;
1825 }
1825 }
1826
1826
1827 #changeset_content .container .right {
1827 #changeset_content .container .right {
1828 float: right;
1828 float: right;
1829 width: 25%;
1829 width: 25%;
1830 text-align: right;
1830 text-align: right;
1831 }
1831 }
1832
1832
1833 #changeset_content .container .left .message {
1833 #changeset_content .container .left .message {
1834 font-style: italic;
1834 font-style: italic;
1835 color: #556CB5;
1835 color: #556CB5;
1836 white-space: pre-wrap;
1836 white-space: pre-wrap;
1837 }
1837 }
1838
1838
1839 .cs_files .cur_cs {
1839 .cs_files .cur_cs {
1840 margin: 10px 2px;
1840 margin: 10px 2px;
1841 font-weight: bold;
1841 font-weight: bold;
1842 }
1842 }
1843
1843
1844 .cs_files .node {
1844 .cs_files .node {
1845 float: left;
1845 float: left;
1846 }
1846 }
1847
1847
1848 .cs_files .changes {
1848 .cs_files .changes {
1849 float: right;
1849 float: right;
1850 }
1850 }
1851
1851
1852 .cs_files .changes .added {
1852 .cs_files .changes .added {
1853 background-color: #BBFFBB;
1853 background-color: #BBFFBB;
1854 float: left;
1854 float: left;
1855 text-align: center;
1855 text-align: center;
1856 font-size: 90%;
1856 font-size: 90%;
1857 }
1857 }
1858
1858
1859 .cs_files .changes .deleted {
1859 .cs_files .changes .deleted {
1860 background-color: #FF8888;
1860 background-color: #FF8888;
1861 float: left;
1861 float: left;
1862 text-align: center;
1862 text-align: center;
1863 font-size: 90%;
1863 font-size: 90%;
1864 }
1864 }
1865
1865
1866 .cs_files .cs_added {
1866 .cs_files .cs_added {
1867 background: url("../images/icons/page_white_add.png") no-repeat scroll
1867 background: url("../images/icons/page_white_add.png") no-repeat scroll
1868 3px;
1868 3px;
1869 height: 16px;
1869 height: 16px;
1870 padding-left: 20px;
1870 padding-left: 20px;
1871 margin-top: 7px;
1871 margin-top: 7px;
1872 text-align: left;
1872 text-align: left;
1873 }
1873 }
1874
1874
1875 .cs_files .cs_changed {
1875 .cs_files .cs_changed {
1876 background: url("../images/icons/page_white_edit.png") no-repeat scroll
1876 background: url("../images/icons/page_white_edit.png") no-repeat scroll
1877 3px;
1877 3px;
1878 height: 16px;
1878 height: 16px;
1879 padding-left: 20px;
1879 padding-left: 20px;
1880 margin-top: 7px;
1880 margin-top: 7px;
1881 text-align: left;
1881 text-align: left;
1882 }
1882 }
1883
1883
1884 .cs_files .cs_removed {
1884 .cs_files .cs_removed {
1885 background: url("../images/icons/page_white_delete.png") no-repeat
1885 background: url("../images/icons/page_white_delete.png") no-repeat
1886 scroll 3px;
1886 scroll 3px;
1887 height: 16px;
1887 height: 16px;
1888 padding-left: 20px;
1888 padding-left: 20px;
1889 margin-top: 7px;
1889 margin-top: 7px;
1890 text-align: left;
1890 text-align: left;
1891 }
1891 }
1892
1892
1893 #graph {
1893 #graph {
1894 overflow: hidden;
1894 overflow: hidden;
1895 }
1895 }
1896
1896
1897 #graph_nodes {
1897 #graph_nodes {
1898 float: left;
1898 float: left;
1899 margin-right: -6px;
1899 margin-right: -6px;
1900 margin-top: -4px;
1900 margin-top: -4px;
1901 }
1901 }
1902
1902
1903 #graph_content {
1903 #graph_content {
1904 width: 800px;
1904 width: 800px;
1905 float: left;
1905 float: left;
1906 }
1906 }
1907
1907
1908 #graph_content .container_header {
1908 #graph_content .container_header {
1909 border: 1px solid #CCC;
1909 border: 1px solid #CCC;
1910 padding: 10px;
1910 padding: 10px;
1911 }
1911 }
1912
1912
1913 #graph_content #rev_range_container {
1913 #graph_content #rev_range_container {
1914 padding: 10px 0px;
1914 padding: 10px 0px;
1915 }
1915 }
1916
1916
1917 #graph_content .container {
1917 #graph_content .container {
1918 border-bottom: 1px solid #CCC;
1918 border-bottom: 1px solid #CCC;
1919 border-left: 1px solid #CCC;
1919 border-left: 1px solid #CCC;
1920 border-right: 1px solid #CCC;
1920 border-right: 1px solid #CCC;
1921 min-height: 70px;
1921 min-height: 70px;
1922 overflow: hidden;
1922 overflow: hidden;
1923 font-size: 1.2em;
1923 font-size: 1.2em;
1924 }
1924 }
1925
1925
1926 #graph_content .container .right {
1926 #graph_content .container .right {
1927 float: right;
1927 float: right;
1928 width: 28%;
1928 width: 28%;
1929 text-align: right;
1929 text-align: right;
1930 padding-bottom: 5px;
1930 padding-bottom: 5px;
1931 }
1931 }
1932
1932
1933 #graph_content .container .left .date {
1933 #graph_content .container .left .date {
1934 font-weight: 700;
1934 font-weight: 700;
1935 padding-bottom: 5px;
1935 padding-bottom: 5px;
1936 }
1936 }
1937
1937
1938 #graph_content .container .left .date span {
1938 #graph_content .container .left .date span {
1939 vertical-align: text-top;
1939 vertical-align: text-top;
1940 }
1940 }
1941
1941
1942 #graph_content .container .left .author {
1942 #graph_content .container .left .author {
1943 height: 22px;
1943 height: 22px;
1944 }
1944 }
1945
1945
1946 #graph_content .container .left .author .user {
1946 #graph_content .container .left .author .user {
1947 color: #444444;
1947 color: #444444;
1948 float: left;
1948 float: left;
1949 font-size: 12px;
1949 font-size: 12px;
1950 margin-left: -4px;
1950 margin-left: -4px;
1951 margin-top: 4px;
1951 margin-top: 4px;
1952 }
1952 }
1953
1953
1954 #graph_content .container .left .message {
1954 #graph_content .container .left .message {
1955 font-size: 100%;
1955 font-size: 100%;
1956 padding-top: 3px;
1956 padding-top: 3px;
1957 white-space: pre-wrap;
1957 white-space: pre-wrap;
1958 }
1958 }
1959
1959
1960 #graph_content .container .left .message a:hover{
1960 #graph_content .container .left .message a:hover{
1961 text-decoration: none;
1961 text-decoration: none;
1962 }
1962 }
1963
1963
1964 .right div {
1964 .right div {
1965 clear: both;
1965 clear: both;
1966 }
1966 }
1967
1967
1968 .right .changes .changed_total {
1968 .right .changes .changed_total {
1969 border: 1px solid #DDD;
1969 border: 1px solid #DDD;
1970 display: block;
1970 display: block;
1971 float: right;
1971 float: right;
1972 text-align: center;
1972 text-align: center;
1973 min-width: 45px;
1973 min-width: 45px;
1974 cursor: pointer;
1974 cursor: pointer;
1975 background: #FD8;
1975 background: #FD8;
1976 font-weight: bold;
1976 font-weight: bold;
1977 }
1977 }
1978
1978
1979 .right .changes .added,.changed,.removed {
1979 .right .changes .added,.changed,.removed {
1980 border: 1px solid #DDD;
1980 border: 1px solid #DDD;
1981 display: block;
1981 display: block;
1982 float: right;
1982 float: right;
1983 text-align: center;
1983 text-align: center;
1984 min-width: 15px;
1984 min-width: 15px;
1985 cursor: help;
1985 cursor: help;
1986 }
1986 }
1987
1987
1988 .right .changes .large {
1988 .right .changes .large {
1989 border: 1px solid #DDD;
1989 border: 1px solid #DDD;
1990 display: block;
1990 display: block;
1991 float: right;
1991 float: right;
1992 text-align: center;
1992 text-align: center;
1993 min-width: 45px;
1993 min-width: 45px;
1994 cursor: help;
1994 cursor: help;
1995 background: #54A9F7;
1995 background: #54A9F7;
1996 }
1996 }
1997
1997
1998 .right .changes .added {
1998 .right .changes .added {
1999 background: #BFB;
1999 background: #BFB;
2000 }
2000 }
2001
2001
2002 .right .changes .changed {
2002 .right .changes .changed {
2003 background: #FD8;
2003 background: #FD8;
2004 }
2004 }
2005
2005
2006 .right .changes .removed {
2006 .right .changes .removed {
2007 background: #F88;
2007 background: #F88;
2008 }
2008 }
2009
2009
2010 .right .merge {
2010 .right .merge {
2011 vertical-align: top;
2011 vertical-align: top;
2012 font-size: 0.75em;
2012 font-size: 0.75em;
2013 font-weight: 700;
2013 font-weight: 700;
2014 }
2014 }
2015
2015
2016 .right .parent {
2016 .right .parent {
2017 font-size: 90%;
2017 font-size: 90%;
2018 font-family: monospace;
2018 font-family: monospace;
2019 }
2019 }
2020
2020
2021 .right .logtags .branchtag {
2021 .right .logtags .branchtag {
2022 background: #FFF url("../images/icons/arrow_branch.png") no-repeat right
2022 background: #FFF url("../images/icons/arrow_branch.png") no-repeat right
2023 6px;
2023 6px;
2024 display: block;
2024 display: block;
2025 font-size: 0.8em;
2025 font-size: 0.8em;
2026 padding: 11px 16px 0 0;
2026 padding: 11px 16px 0 0;
2027 }
2027 }
2028
2028
2029 .right .logtags .tagtag {
2029 .right .logtags .tagtag {
2030 background: #FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
2030 background: #FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
2031 display: block;
2031 display: block;
2032 font-size: 0.8em;
2032 font-size: 0.8em;
2033 padding: 11px 16px 0 0;
2033 padding: 11px 16px 0 0;
2034 }
2034 }
2035
2035
2036 div.browserblock {
2036 div.browserblock {
2037 overflow: hidden;
2037 overflow: hidden;
2038 border: 1px solid #ccc;
2038 border: 1px solid #ccc;
2039 background: #f8f8f8;
2039 background: #f8f8f8;
2040 font-size: 100%;
2040 font-size: 100%;
2041 line-height: 125%;
2041 line-height: 125%;
2042 padding: 0;
2042 padding: 0;
2043 }
2043 }
2044
2044
2045 div.browserblock .browser-header {
2045 div.browserblock .browser-header {
2046 background: #FFF;
2046 background: #FFF;
2047 padding: 10px 0px 15px 0px;
2047 padding: 10px 0px 15px 0px;
2048 width: 100%;
2048 width: 100%;
2049 }
2049 }
2050
2050
2051 div.browserblock .browser-nav {
2051 div.browserblock .browser-nav {
2052 float: left
2052 float: left
2053 }
2053 }
2054
2054
2055 div.browserblock .browser-branch {
2055 div.browserblock .browser-branch {
2056 float: left;
2056 float: left;
2057 }
2057 }
2058
2058
2059 div.browserblock .browser-branch label {
2059 div.browserblock .browser-branch label {
2060 color: #4A4A4A;
2060 color: #4A4A4A;
2061 vertical-align: text-top;
2061 vertical-align: text-top;
2062 }
2062 }
2063
2063
2064 div.browserblock .browser-header span {
2064 div.browserblock .browser-header span {
2065 margin-left: 5px;
2065 margin-left: 5px;
2066 font-weight: 700;
2066 font-weight: 700;
2067 }
2067 }
2068
2068
2069 div.browserblock .browser-search {
2069 div.browserblock .browser-search {
2070 clear: both;
2070 clear: both;
2071 padding: 8px 8px 0px 5px;
2071 padding: 8px 8px 0px 5px;
2072 height: 20px;
2072 height: 20px;
2073 }
2073 }
2074
2074
2075 div.browserblock #node_filter_box {
2075 div.browserblock #node_filter_box {
2076
2076
2077 }
2077 }
2078
2078
2079 div.browserblock .search_activate {
2079 div.browserblock .search_activate {
2080 float: left
2080 float: left
2081 }
2081 }
2082
2082
2083 div.browserblock .add_node {
2083 div.browserblock .add_node {
2084 float: left;
2084 float: left;
2085 padding-left: 5px;
2085 padding-left: 5px;
2086 }
2086 }
2087
2087
2088 div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover
2088 div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover
2089 {
2089 {
2090 text-decoration: none !important;
2090 text-decoration: none !important;
2091 }
2091 }
2092
2092
2093 div.browserblock .browser-body {
2093 div.browserblock .browser-body {
2094 background: #EEE;
2094 background: #EEE;
2095 border-top: 1px solid #CCC;
2095 border-top: 1px solid #CCC;
2096 }
2096 }
2097
2097
2098 table.code-browser {
2098 table.code-browser {
2099 border-collapse: collapse;
2099 border-collapse: collapse;
2100 width: 100%;
2100 width: 100%;
2101 }
2101 }
2102
2102
2103 table.code-browser tr {
2103 table.code-browser tr {
2104 margin: 3px;
2104 margin: 3px;
2105 }
2105 }
2106
2106
2107 table.code-browser thead th {
2107 table.code-browser thead th {
2108 background-color: #EEE;
2108 background-color: #EEE;
2109 height: 20px;
2109 height: 20px;
2110 font-size: 1.1em;
2110 font-size: 1.1em;
2111 font-weight: 700;
2111 font-weight: 700;
2112 text-align: left;
2112 text-align: left;
2113 padding-left: 10px;
2113 padding-left: 10px;
2114 }
2114 }
2115
2115
2116 table.code-browser tbody td {
2116 table.code-browser tbody td {
2117 padding-left: 10px;
2117 padding-left: 10px;
2118 height: 20px;
2118 height: 20px;
2119 }
2119 }
2120
2120
2121 table.code-browser .browser-file {
2121 table.code-browser .browser-file {
2122 background: url("../images/icons/document_16.png") no-repeat scroll 3px;
2122 background: url("../images/icons/document_16.png") no-repeat scroll 3px;
2123 height: 16px;
2123 height: 16px;
2124 padding-left: 20px;
2124 padding-left: 20px;
2125 text-align: left;
2125 text-align: left;
2126 }
2126 }
2127
2127
2128 .diffblock .changeset_file {
2128 .diffblock .changeset_file {
2129 background: url("../images/icons/file.png") no-repeat scroll 3px;
2129 background: url("../images/icons/file.png") no-repeat scroll 3px;
2130 height: 16px;
2130 height: 16px;
2131 padding-left: 22px;
2131 padding-left: 22px;
2132 text-align: left;
2132 text-align: left;
2133 font-size: 14px;
2133 font-size: 14px;
2134 }
2134 }
2135
2135
2136 .diffblock .changeset_header {
2136 .diffblock .changeset_header {
2137 margin-left: 6px !important;
2137 margin-left: 6px !important;
2138 }
2138 }
2139
2139
2140 table.code-browser .browser-dir {
2140 table.code-browser .browser-dir {
2141 background: url("../images/icons/folder_16.png") no-repeat scroll 3px;
2141 background: url("../images/icons/folder_16.png") no-repeat scroll 3px;
2142 height: 16px;
2142 height: 16px;
2143 padding-left: 20px;
2143 padding-left: 20px;
2144 text-align: left;
2144 text-align: left;
2145 }
2145 }
2146
2146
2147 .box .search {
2147 .box .search {
2148 clear: both;
2148 clear: both;
2149 overflow: hidden;
2149 overflow: hidden;
2150 margin: 0;
2150 margin: 0;
2151 padding: 0 20px 10px;
2151 padding: 0 20px 10px;
2152 }
2152 }
2153
2153
2154 .box .search div.search_path {
2154 .box .search div.search_path {
2155 background: none repeat scroll 0 0 #EEE;
2155 background: none repeat scroll 0 0 #EEE;
2156 border: 1px solid #CCC;
2156 border: 1px solid #CCC;
2157 color: blue;
2157 color: blue;
2158 margin-bottom: 10px;
2158 margin-bottom: 10px;
2159 padding: 10px 0;
2159 padding: 10px 0;
2160 }
2160 }
2161
2161
2162 .box .search div.search_path div.link {
2162 .box .search div.search_path div.link {
2163 font-weight: 700;
2163 font-weight: 700;
2164 margin-left: 25px;
2164 margin-left: 25px;
2165 }
2165 }
2166
2166
2167 .box .search div.search_path div.link a {
2167 .box .search div.search_path div.link a {
2168 color: #003367;
2168 color: #003367;
2169 cursor: pointer;
2169 cursor: pointer;
2170 text-decoration: none;
2170 text-decoration: none;
2171 }
2171 }
2172
2172
2173 #path_unlock {
2173 #path_unlock {
2174 color: red;
2174 color: red;
2175 font-size: 1.2em;
2175 font-size: 1.2em;
2176 padding-left: 4px;
2176 padding-left: 4px;
2177 }
2177 }
2178
2178
2179 .info_box span {
2179 .info_box span {
2180 margin-left: 3px;
2180 margin-left: 3px;
2181 margin-right: 3px;
2181 margin-right: 3px;
2182 }
2182 }
2183
2183
2184 .info_box .rev {
2184 .info_box .rev {
2185 color: #003367;
2185 color: #003367;
2186 font-size: 1.6em;
2186 font-size: 1.6em;
2187 font-weight: bold;
2187 font-weight: bold;
2188 vertical-align: sub;
2188 vertical-align: sub;
2189 }
2189 }
2190
2190
2191 .info_box input#at_rev,.info_box input#size {
2191 .info_box input#at_rev,.info_box input#size {
2192 background: #FFF;
2192 background: #FFF;
2193 border-top: 1px solid #b3b3b3;
2193 border-top: 1px solid #b3b3b3;
2194 border-left: 1px solid #b3b3b3;
2194 border-left: 1px solid #b3b3b3;
2195 border-right: 1px solid #eaeaea;
2195 border-right: 1px solid #eaeaea;
2196 border-bottom: 1px solid #eaeaea;
2196 border-bottom: 1px solid #eaeaea;
2197 color: #000;
2197 color: #000;
2198 font-size: 12px;
2198 font-size: 12px;
2199 margin: 0;
2199 margin: 0;
2200 padding: 1px 5px 1px;
2200 padding: 1px 5px 1px;
2201 }
2201 }
2202
2202
2203 .info_box input#view {
2203 .info_box input#view {
2204 text-align: center;
2204 text-align: center;
2205 padding: 4px 3px 2px 2px;
2205 padding: 4px 3px 2px 2px;
2206 }
2206 }
2207
2207
2208 .yui-overlay,.yui-panel-container {
2208 .yui-overlay,.yui-panel-container {
2209 visibility: hidden;
2209 visibility: hidden;
2210 position: absolute;
2210 position: absolute;
2211 z-index: 2;
2211 z-index: 2;
2212 }
2212 }
2213
2213
2214 .yui-tt {
2214 .yui-tt {
2215 visibility: hidden;
2215 visibility: hidden;
2216 position: absolute;
2216 position: absolute;
2217 color: #666;
2217 color: #666;
2218 background-color: #FFF;
2218 background-color: #FFF;
2219 border: 2px solid #003367;
2219 border: 2px solid #003367;
2220 font: 100% sans-serif;
2220 font: 100% sans-serif;
2221 width: auto;
2221 width: auto;
2222 opacity: 1px;
2222 opacity: 1px;
2223 padding: 8px;
2223 padding: 8px;
2224 white-space: pre-wrap;
2224 white-space: pre-wrap;
2225 -webkit-border-radius: 8px 8px 8px 8px;
2225 -webkit-border-radius: 8px 8px 8px 8px;
2226 -khtml-border-radius: 8px 8px 8px 8px;
2226 -khtml-border-radius: 8px 8px 8px 8px;
2227 -moz-border-radius: 8px 8px 8px 8px;
2227 -moz-border-radius: 8px 8px 8px 8px;
2228 border-radius: 8px 8px 8px 8px;
2228 border-radius: 8px 8px 8px 8px;
2229 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
2229 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
2230 }
2230 }
2231
2231
2232 .ac {
2232 .ac {
2233 vertical-align: top;
2233 vertical-align: top;
2234 }
2234 }
2235
2235
2236 .ac .yui-ac {
2236 .ac .yui-ac {
2237 position: relative;
2237 position: relative;
2238 font-size: 100%;
2238 font-size: 100%;
2239 }
2239 }
2240
2240
2241 .ac .perm_ac {
2241 .ac .perm_ac {
2242 width: 15em;
2242 width: 15em;
2243 }
2243 }
2244
2244
2245 .ac .yui-ac-input {
2245 .ac .yui-ac-input {
2246 width: 100%;
2246 width: 100%;
2247 }
2247 }
2248
2248
2249 .ac .yui-ac-container {
2249 .ac .yui-ac-container {
2250 position: absolute;
2250 position: absolute;
2251 top: 1.6em;
2251 top: 1.6em;
2252 width: 100%;
2252 width: 100%;
2253 }
2253 }
2254
2254
2255 .ac .yui-ac-content {
2255 .ac .yui-ac-content {
2256 position: absolute;
2256 position: absolute;
2257 width: 100%;
2257 width: 100%;
2258 border: 1px solid gray;
2258 border: 1px solid gray;
2259 background: #fff;
2259 background: #fff;
2260 overflow: hidden;
2260 overflow: hidden;
2261 z-index: 9050;
2261 z-index: 9050;
2262 }
2262 }
2263
2263
2264 .ac .yui-ac-shadow {
2264 .ac .yui-ac-shadow {
2265 position: absolute;
2265 position: absolute;
2266 width: 100%;
2266 width: 100%;
2267 background: #000;
2267 background: #000;
2268 -moz-opacity: 0.1px;
2268 -moz-opacity: 0.1px;
2269 opacity: .10;
2269 opacity: .10;
2270 filter: alpha(opacity = 10);
2270 filter: alpha(opacity = 10);
2271 z-index: 9049;
2271 z-index: 9049;
2272 margin: .3em;
2272 margin: .3em;
2273 }
2273 }
2274
2274
2275 .ac .yui-ac-content ul {
2275 .ac .yui-ac-content ul {
2276 width: 100%;
2276 width: 100%;
2277 margin: 0;
2277 margin: 0;
2278 padding: 0;
2278 padding: 0;
2279 }
2279 }
2280
2280
2281 .ac .yui-ac-content li {
2281 .ac .yui-ac-content li {
2282 cursor: default;
2282 cursor: default;
2283 white-space: nowrap;
2283 white-space: nowrap;
2284 margin: 0;
2284 margin: 0;
2285 padding: 2px 5px;
2285 padding: 2px 5px;
2286 }
2286 }
2287
2287
2288 .ac .yui-ac-content li.yui-ac-prehighlight {
2288 .ac .yui-ac-content li.yui-ac-prehighlight {
2289 background: #B3D4FF;
2289 background: #B3D4FF;
2290 }
2290 }
2291
2291
2292 .ac .yui-ac-content li.yui-ac-highlight {
2292 .ac .yui-ac-content li.yui-ac-highlight {
2293 background: #556CB5;
2293 background: #556CB5;
2294 color: #FFF;
2294 color: #FFF;
2295 }
2295 }
2296
2296
2297 .follow {
2297 .follow {
2298 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2298 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2299 height: 16px;
2299 height: 16px;
2300 width: 20px;
2300 width: 20px;
2301 cursor: pointer;
2301 cursor: pointer;
2302 display: block;
2302 display: block;
2303 float: right;
2303 float: right;
2304 margin-top: 2px;
2304 margin-top: 2px;
2305 }
2305 }
2306
2306
2307 .following {
2307 .following {
2308 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2308 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2309 height: 16px;
2309 height: 16px;
2310 width: 20px;
2310 width: 20px;
2311 cursor: pointer;
2311 cursor: pointer;
2312 display: block;
2312 display: block;
2313 float: right;
2313 float: right;
2314 margin-top: 2px;
2314 margin-top: 2px;
2315 }
2315 }
2316
2316
2317 .currently_following {
2317 .currently_following {
2318 padding-left: 10px;
2318 padding-left: 10px;
2319 padding-bottom: 5px;
2319 padding-bottom: 5px;
2320 }
2320 }
2321
2321
2322 .add_icon {
2322 .add_icon {
2323 background: url("../images/icons/add.png") no-repeat scroll 3px;
2323 background: url("../images/icons/add.png") no-repeat scroll 3px;
2324 padding-left: 20px;
2324 padding-left: 20px;
2325 padding-top: 0px;
2325 padding-top: 0px;
2326 text-align: left;
2326 text-align: left;
2327 }
2327 }
2328
2328
2329 .edit_icon {
2329 .edit_icon {
2330 background: url("../images/icons/folder_edit.png") no-repeat scroll 3px;
2330 background: url("../images/icons/folder_edit.png") no-repeat scroll 3px;
2331 padding-left: 20px;
2331 padding-left: 20px;
2332 padding-top: 0px;
2332 padding-top: 0px;
2333 text-align: left;
2333 text-align: left;
2334 }
2334 }
2335
2335
2336 .delete_icon {
2336 .delete_icon {
2337 background: url("../images/icons/delete.png") no-repeat scroll 3px;
2337 background: url("../images/icons/delete.png") no-repeat scroll 3px;
2338 padding-left: 20px;
2338 padding-left: 20px;
2339 padding-top: 0px;
2339 padding-top: 0px;
2340 text-align: left;
2340 text-align: left;
2341 }
2341 }
2342
2342
2343 .refresh_icon {
2343 .refresh_icon {
2344 background: url("../images/icons/arrow_refresh.png") no-repeat scroll
2344 background: url("../images/icons/arrow_refresh.png") no-repeat scroll
2345 3px;
2345 3px;
2346 padding-left: 20px;
2346 padding-left: 20px;
2347 padding-top: 0px;
2347 padding-top: 0px;
2348 text-align: left;
2348 text-align: left;
2349 }
2349 }
2350
2350
2351 .pull_icon {
2351 .pull_icon {
2352 background: url("../images/icons/connect.png") no-repeat scroll 3px;
2352 background: url("../images/icons/connect.png") no-repeat scroll 3px;
2353 padding-left: 20px;
2353 padding-left: 20px;
2354 padding-top: 0px;
2354 padding-top: 0px;
2355 text-align: left;
2355 text-align: left;
2356 }
2356 }
2357
2357
2358 .rss_icon {
2358 .rss_icon {
2359 background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
2359 background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
2360 padding-left: 20px;
2360 padding-left: 20px;
2361 padding-top: 0px;
2361 padding-top: 0px;
2362 text-align: left;
2362 text-align: left;
2363 }
2363 }
2364
2364
2365 .atom_icon {
2365 .atom_icon {
2366 background: url("../images/icons/atom.png") no-repeat scroll 3px;
2366 background: url("../images/icons/atom.png") no-repeat scroll 3px;
2367 padding-left: 20px;
2367 padding-left: 20px;
2368 padding-top: 0px;
2368 padding-top: 0px;
2369 text-align: left;
2369 text-align: left;
2370 }
2370 }
2371
2371
2372 .archive_icon {
2372 .archive_icon {
2373 background: url("../images/icons/compress.png") no-repeat scroll 3px;
2373 background: url("../images/icons/compress.png") no-repeat scroll 3px;
2374 padding-left: 20px;
2374 padding-left: 20px;
2375 text-align: left;
2375 text-align: left;
2376 padding-top: 1px;
2376 padding-top: 1px;
2377 }
2377 }
2378
2378
2379 .start_following_icon {
2379 .start_following_icon {
2380 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2380 background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
2381 padding-left: 20px;
2381 padding-left: 20px;
2382 text-align: left;
2382 text-align: left;
2383 padding-top: 0px;
2383 padding-top: 0px;
2384 }
2384 }
2385
2385
2386 .stop_following_icon {
2386 .stop_following_icon {
2387 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2387 background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2388 padding-left: 20px;
2388 padding-left: 20px;
2389 text-align: left;
2389 text-align: left;
2390 padding-top: 0px;
2390 padding-top: 0px;
2391 }
2391 }
2392
2392
2393 .action_button {
2393 .action_button {
2394 border: 0;
2394 border: 0;
2395 display: inline;
2395 display: inline;
2396 }
2396 }
2397
2397
2398 .action_button:hover {
2398 .action_button:hover {
2399 border: 0;
2399 border: 0;
2400 text-decoration: underline;
2400 text-decoration: underline;
2401 cursor: pointer;
2401 cursor: pointer;
2402 }
2402 }
2403
2403
2404 #switch_repos {
2404 #switch_repos {
2405 position: absolute;
2405 position: absolute;
2406 height: 25px;
2406 height: 25px;
2407 z-index: 1;
2407 z-index: 1;
2408 }
2408 }
2409
2409
2410 #switch_repos select {
2410 #switch_repos select {
2411 min-width: 150px;
2411 min-width: 150px;
2412 max-height: 250px;
2412 max-height: 250px;
2413 z-index: 1;
2413 z-index: 1;
2414 }
2414 }
2415
2415
2416 .breadcrumbs {
2416 .breadcrumbs {
2417 border: medium none;
2417 border: medium none;
2418 color: #FFF;
2418 color: #FFF;
2419 float: left;
2419 float: left;
2420 text-transform: uppercase;
2420 text-transform: uppercase;
2421 font-weight: 700;
2421 font-weight: 700;
2422 font-size: 14px;
2422 font-size: 14px;
2423 margin: 0;
2423 margin: 0;
2424 padding: 11px 0 11px 10px;
2424 padding: 11px 0 11px 10px;
2425 }
2425 }
2426
2426
2427 .breadcrumbs a {
2427 .breadcrumbs a {
2428 color: #FFF;
2428 color: #FFF;
2429 }
2429 }
2430
2430
2431 .flash_msg {
2431 .flash_msg {
2432
2432
2433 }
2433 }
2434
2434
2435 .flash_msg ul {
2435 .flash_msg ul {
2436
2436
2437 }
2437 }
2438
2438
2439 .error_msg {
2439 .error_msg {
2440 background-color: #c43c35;
2440 background-color: #c43c35;
2441 background-repeat: repeat-x;
2441 background-repeat: repeat-x;
2442 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b),
2442 background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b),
2443 to(#c43c35) );
2443 to(#c43c35) );
2444 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
2444 background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
2445 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
2445 background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
2446 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b),
2446 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b),
2447 color-stop(100%, #c43c35) );
2447 color-stop(100%, #c43c35) );
2448 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
2448 background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
2449 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
2449 background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
2450 background-image: linear-gradient(top, #ee5f5b, #c43c35);
2450 background-image: linear-gradient(top, #ee5f5b, #c43c35);
2451 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',
2451 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',
2452 endColorstr='#c43c35', GradientType=0 );
2452 endColorstr='#c43c35', GradientType=0 );
2453 border-color: #c43c35 #c43c35 #882a25;
2453 border-color: #c43c35 #c43c35 #882a25;
2454 }
2454 }
2455
2455
2456 .warning_msg {
2456 .warning_msg {
2457 color: #404040 !important;
2457 color: #404040 !important;
2458 background-color: #eedc94;
2458 background-color: #eedc94;
2459 background-repeat: repeat-x;
2459 background-repeat: repeat-x;
2460 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
2460 background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
2461 to(#eedc94) );
2461 to(#eedc94) );
2462 background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
2462 background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
2463 background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
2463 background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
2464 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1),
2464 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1),
2465 color-stop(100%, #eedc94) );
2465 color-stop(100%, #eedc94) );
2466 background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
2466 background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
2467 background-image: -o-linear-gradient(top, #fceec1, #eedc94);
2467 background-image: -o-linear-gradient(top, #fceec1, #eedc94);
2468 background-image: linear-gradient(top, #fceec1, #eedc94);
2468 background-image: linear-gradient(top, #fceec1, #eedc94);
2469 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1',
2469 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1',
2470 endColorstr='#eedc94', GradientType=0 );
2470 endColorstr='#eedc94', GradientType=0 );
2471 border-color: #eedc94 #eedc94 #e4c652;
2471 border-color: #eedc94 #eedc94 #e4c652;
2472 }
2472 }
2473
2473
2474 .success_msg {
2474 .success_msg {
2475 background-color: #57a957;
2475 background-color: #57a957;
2476 background-repeat: repeat-x !important;
2476 background-repeat: repeat-x !important;
2477 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462),
2477 background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462),
2478 to(#57a957) );
2478 to(#57a957) );
2479 background-image: -moz-linear-gradient(top, #62c462, #57a957);
2479 background-image: -moz-linear-gradient(top, #62c462, #57a957);
2480 background-image: -ms-linear-gradient(top, #62c462, #57a957);
2480 background-image: -ms-linear-gradient(top, #62c462, #57a957);
2481 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462),
2481 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462),
2482 color-stop(100%, #57a957) );
2482 color-stop(100%, #57a957) );
2483 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
2483 background-image: -webkit-linear-gradient(top, #62c462, #57a957);
2484 background-image: -o-linear-gradient(top, #62c462, #57a957);
2484 background-image: -o-linear-gradient(top, #62c462, #57a957);
2485 background-image: linear-gradient(top, #62c462, #57a957);
2485 background-image: linear-gradient(top, #62c462, #57a957);
2486 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462',
2486 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462',
2487 endColorstr='#57a957', GradientType=0 );
2487 endColorstr='#57a957', GradientType=0 );
2488 border-color: #57a957 #57a957 #3d773d;
2488 border-color: #57a957 #57a957 #3d773d;
2489 }
2489 }
2490
2490
2491 .notice_msg {
2491 .notice_msg {
2492 background-color: #339bb9;
2492 background-color: #339bb9;
2493 background-repeat: repeat-x;
2493 background-repeat: repeat-x;
2494 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de),
2494 background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de),
2495 to(#339bb9) );
2495 to(#339bb9) );
2496 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
2496 background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
2497 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
2497 background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
2498 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de),
2498 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de),
2499 color-stop(100%, #339bb9) );
2499 color-stop(100%, #339bb9) );
2500 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
2500 background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
2501 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
2501 background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
2502 background-image: linear-gradient(top, #5bc0de, #339bb9);
2502 background-image: linear-gradient(top, #5bc0de, #339bb9);
2503 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de',
2503 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de',
2504 endColorstr='#339bb9', GradientType=0 );
2504 endColorstr='#339bb9', GradientType=0 );
2505 border-color: #339bb9 #339bb9 #22697d;
2505 border-color: #339bb9 #339bb9 #22697d;
2506 }
2506 }
2507
2507
2508 .success_msg,.error_msg,.notice_msg,.warning_msg {
2508 .success_msg,.error_msg,.notice_msg,.warning_msg {
2509 font-size: 12px;
2509 font-size: 12px;
2510 font-weight: 700;
2510 font-weight: 700;
2511 min-height: 14px;
2511 min-height: 14px;
2512 line-height: 14px;
2512 line-height: 14px;
2513 margin-bottom: 10px;
2513 margin-bottom: 10px;
2514 margin-top: 0;
2514 margin-top: 0;
2515 display: block;
2515 display: block;
2516 overflow: auto;
2516 overflow: auto;
2517 padding: 6px 10px 6px 10px;
2517 padding: 6px 10px 6px 10px;
2518 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2518 border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2519 position: relative;
2519 position: relative;
2520 color: #FFF;
2520 color: #FFF;
2521 border-width: 1px;
2521 border-width: 1px;
2522 border-style: solid;
2522 border-style: solid;
2523 -webkit-border-radius: 4px;
2523 -webkit-border-radius: 4px;
2524 -moz-border-radius: 4px;
2524 -moz-border-radius: 4px;
2525 border-radius: 4px;
2525 border-radius: 4px;
2526 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2526 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2527 -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2527 -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2528 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2528 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2529 }
2529 }
2530
2530
2531 #msg_close {
2531 #msg_close {
2532 background: transparent url("../icons/cross_grey_small.png") no-repeat
2532 background: transparent url("../icons/cross_grey_small.png") no-repeat
2533 scroll 0 0;
2533 scroll 0 0;
2534 cursor: pointer;
2534 cursor: pointer;
2535 height: 16px;
2535 height: 16px;
2536 position: absolute;
2536 position: absolute;
2537 right: 5px;
2537 right: 5px;
2538 top: 5px;
2538 top: 5px;
2539 width: 16px;
2539 width: 16px;
2540 }
2540 }
2541
2541
2542 div#legend_container table,div#legend_choices table {
2542 div#legend_container table,div#legend_choices table {
2543 width: auto !important;
2543 width: auto !important;
2544 }
2544 }
2545
2545
2546 table#permissions_manage {
2546 table#permissions_manage {
2547 width: 0 !important;
2547 width: 0 !important;
2548 }
2548 }
2549
2549
2550 table#permissions_manage span.private_repo_msg {
2550 table#permissions_manage span.private_repo_msg {
2551 font-size: 0.8em;
2551 font-size: 0.8em;
2552 opacity: 0.6px;
2552 opacity: 0.6px;
2553 }
2553 }
2554
2554
2555 table#permissions_manage td.private_repo_msg {
2555 table#permissions_manage td.private_repo_msg {
2556 font-size: 0.8em;
2556 font-size: 0.8em;
2557 }
2557 }
2558
2558
2559 table#permissions_manage tr#add_perm_input td {
2559 table#permissions_manage tr#add_perm_input td {
2560 vertical-align: middle;
2560 vertical-align: middle;
2561 }
2561 }
2562
2562
2563 div.gravatar {
2563 div.gravatar {
2564 background-color: #FFF;
2564 background-color: #FFF;
2565 border: 1px solid #D0D0D0;
2565 border: 1px solid #D0D0D0;
2566 float: left;
2566 float: left;
2567 margin-right: 0.7em;
2567 margin-right: 0.7em;
2568 padding: 2px 2px 0;
2568 padding: 2px 2px 0;
2569 -webkit-border-radius: 6px;
2569 -webkit-border-radius: 6px;
2570 -khtml-border-radius: 6px;
2570 -khtml-border-radius: 6px;
2571 -moz-border-radius: 6px;
2571 -moz-border-radius: 6px;
2572 border-radius: 6px;
2572 border-radius: 6px;
2573 }
2573 }
2574
2574
2575 div.gravatar img {
2575 div.gravatar img {
2576 -webkit-border-radius: 4px;
2576 -webkit-border-radius: 4px;
2577 -khtml-border-radius: 4px;
2577 -khtml-border-radius: 4px;
2578 -moz-border-radius: 4px;
2578 -moz-border-radius: 4px;
2579 border-radius: 4px;
2579 border-radius: 4px;
2580 }
2580 }
2581
2581
2582 #header,#content,#footer {
2582 #header,#content,#footer {
2583 min-width: 978px;
2583 min-width: 978px;
2584 }
2584 }
2585
2585
2586 #content {
2586 #content {
2587 clear: both;
2587 clear: both;
2588 overflow: hidden;
2588 overflow: hidden;
2589 padding: 14px 10px;
2589 padding: 14px 10px;
2590 }
2590 }
2591
2591
2592 #content div.box div.title div.search {
2592 #content div.box div.title div.search {
2593
2593
2594 border-left: 1px solid #316293;
2594 border-left: 1px solid #316293;
2595 }
2595 }
2596
2596
2597 #content div.box div.title div.search div.input input {
2597 #content div.box div.title div.search div.input input {
2598 border: 1px solid #316293;
2598 border: 1px solid #316293;
2599 }
2599 }
2600
2600
2601 .ui-button-small a:hover {
2601 .ui-button-small a:hover {
2602
2602
2603 }
2603 }
2604
2604
2605 input.ui-button-small,.ui-button-small {
2605 input.ui-button-small,.ui-button-small {
2606 background: #e5e3e3 url("../images/button.png") repeat-x !important;
2606 background: #e5e3e3 url("../images/button.png") repeat-x !important;
2607 border-top: 1px solid #DDD !important;
2607 border-top: 1px solid #DDD !important;
2608 border-left: 1px solid #c6c6c6 !important;
2608 border-left: 1px solid #c6c6c6 !important;
2609 border-right: 1px solid #DDD !important;
2609 border-right: 1px solid #DDD !important;
2610 border-bottom: 1px solid #c6c6c6 !important;
2610 border-bottom: 1px solid #c6c6c6 !important;
2611 color: #515151 !important;
2611 color: #515151 !important;
2612 outline: none !important;
2612 outline: none !important;
2613 margin: 0 !important;
2613 margin: 0 !important;
2614 -webkit-border-radius: 4px 4px 4px 4px !important;
2614 -webkit-border-radius: 4px 4px 4px 4px !important;
2615 -khtml-border-radius: 4px 4px 4px 4px !important;
2615 -khtml-border-radius: 4px 4px 4px 4px !important;
2616 -moz-border-radius: 4px 4px 4px 4px !important;
2616 -moz-border-radius: 4px 4px 4px 4px !important;
2617 border-radius: 4px 4px 4px 4px !important;
2617 border-radius: 4px 4px 4px 4px !important;
2618 box-shadow: 0 1px 0 #ececec !important;
2618 box-shadow: 0 1px 0 #ececec !important;
2619 cursor: pointer !important;
2619 cursor: pointer !important;
2620 padding: 0px 2px 1px 2px;
2620 padding: 0px 2px 1px 2px;
2621 }
2621 }
2622
2622
2623 input.ui-button-small:hover,.ui-button-small:hover {
2623 input.ui-button-small:hover,.ui-button-small:hover {
2624 background: #b4b4b4 url("../images/button_selected.png") repeat-x
2624 background: #b4b4b4 url("../images/button_selected.png") repeat-x
2625 !important;
2625 !important;
2626 border-top: 1px solid #ccc !important;
2626 border-top: 1px solid #ccc !important;
2627 border-left: 1px solid #bebebe !important;
2627 border-left: 1px solid #bebebe !important;
2628 border-right: 1px solid #b1b1b1 !important;
2628 border-right: 1px solid #b1b1b1 !important;
2629 border-bottom: 1px solid #afafaf !important;
2629 border-bottom: 1px solid #afafaf !important;
2630 text-decoration: none;
2630 text-decoration: none;
2631 }
2631 }
2632
2632
2633 input.ui-button-small-blue,.ui-button-small-blue {
2633 input.ui-button-small-blue,.ui-button-small-blue {
2634 background: #4e85bb url("../images/button_highlight.png") repeat-x;
2634 background: #4e85bb url("../images/button_highlight.png") repeat-x;
2635 border-top: 1px solid #5c91a4;
2635 border-top: 1px solid #5c91a4;
2636 border-left: 1px solid #2a6f89;
2636 border-left: 1px solid #2a6f89;
2637 border-right: 1px solid #2b7089;
2637 border-right: 1px solid #2b7089;
2638 border-bottom: 1px solid #1a6480;
2638 border-bottom: 1px solid #1a6480;
2639 color: #fff;
2639 color: #fff;
2640 -webkit-border-radius: 4px 4px 4px 4px;
2640 -webkit-border-radius: 4px 4px 4px 4px;
2641 -khtml-border-radius: 4px 4px 4px 4px;
2641 -khtml-border-radius: 4px 4px 4px 4px;
2642 -moz-border-radius: 4px 4px 4px 4px;
2642 -moz-border-radius: 4px 4px 4px 4px;
2643 border-radius: 4px 4px 4px 4px;
2643 border-radius: 4px 4px 4px 4px;
2644 box-shadow: 0 1px 0 #ececec;
2644 box-shadow: 0 1px 0 #ececec;
2645 cursor: pointer;
2645 cursor: pointer;
2646 padding: 0px 2px 1px 2px;
2646 padding: 0px 2px 1px 2px;
2647 }
2647 }
2648
2648
2649 input.ui-button-small-blue:hover {
2649 input.ui-button-small-blue:hover {
2650
2650
2651 }
2651 }
2652
2652
2653 ins,div.options a:hover {
2653 ins,div.options a:hover {
2654 text-decoration: none;
2654 text-decoration: none;
2655 }
2655 }
2656
2656
2657 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
2657 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
2658 {
2658 {
2659 border: none;
2659 border: none;
2660 }
2660 }
2661
2661
2662 img.icon,.right .merge img {
2662 img.icon,.right .merge img {
2663 vertical-align: bottom;
2663 vertical-align: bottom;
2664 }
2664 }
2665
2665
2666 #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
2666 #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
2667 {
2667 {
2668 float: right;
2668 float: right;
2669 margin: 0;
2669 margin: 0;
2670 padding: 0;
2670 padding: 0;
2671 }
2671 }
2672
2672
2673 #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
2673 #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
2674 {
2674 {
2675 float: left;
2675 float: left;
2676 }
2676 }
2677
2677
2678 #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
2678 #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
2679 {
2679 {
2680 display: none;
2680 display: none;
2681 }
2681 }
2682
2682
2683 #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
2683 #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
2684 {
2684 {
2685 display: block;
2685 display: block;
2686 }
2686 }
2687
2687
2688 #content div.graph {
2688 #content div.graph {
2689 padding: 0 10px 10px;
2689 padding: 0 10px 10px;
2690 }
2690 }
2691
2691
2692 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a
2692 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a
2693 {
2693 {
2694 color: #bfe3ff;
2694 color: #bfe3ff;
2695 }
2695 }
2696
2696
2697 #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
2697 #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
2698 {
2698 {
2699 margin: 10px 24px 10px 44px;
2699 margin: 10px 24px 10px 44px;
2700 }
2700 }
2701
2701
2702 #content div.box div.form,#content div.box div.table,#content div.box div.traffic
2702 #content div.box div.form,#content div.box div.table,#content div.box div.traffic
2703 {
2703 {
2704 clear: both;
2704 clear: both;
2705 overflow: hidden;
2705 overflow: hidden;
2706 margin: 0;
2706 margin: 0;
2707 padding: 0 20px 10px;
2707 padding: 0 20px 10px;
2708 }
2708 }
2709
2709
2710 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields
2710 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields
2711 {
2711 {
2712 clear: both;
2712 clear: both;
2713 overflow: hidden;
2713 overflow: hidden;
2714 margin: 0;
2714 margin: 0;
2715 padding: 0;
2715 padding: 0;
2716 }
2716 }
2717
2717
2718 #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
2718 #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
2719 {
2719 {
2720 height: 1%;
2720 height: 1%;
2721 display: block;
2721 display: block;
2722 color: #363636;
2722 color: #363636;
2723 margin: 0;
2723 margin: 0;
2724 padding: 2px 0 0;
2724 padding: 2px 0 0;
2725 }
2725 }
2726
2726
2727 #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
2727 #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
2728 {
2728 {
2729 background: #FBE3E4;
2729 background: #FBE3E4;
2730 border-top: 1px solid #e1b2b3;
2730 border-top: 1px solid #e1b2b3;
2731 border-left: 1px solid #e1b2b3;
2731 border-left: 1px solid #e1b2b3;
2732 border-right: 1px solid #FBC2C4;
2732 border-right: 1px solid #FBC2C4;
2733 border-bottom: 1px solid #FBC2C4;
2733 border-bottom: 1px solid #FBC2C4;
2734 }
2734 }
2735
2735
2736 #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
2736 #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
2737 {
2737 {
2738 background: #E6EFC2;
2738 background: #E6EFC2;
2739 border-top: 1px solid #cebb98;
2739 border-top: 1px solid #cebb98;
2740 border-left: 1px solid #cebb98;
2740 border-left: 1px solid #cebb98;
2741 border-right: 1px solid #c6d880;
2741 border-right: 1px solid #c6d880;
2742 border-bottom: 1px solid #c6d880;
2742 border-bottom: 1px solid #c6d880;
2743 }
2743 }
2744
2744
2745 #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
2745 #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
2746 {
2746 {
2747 margin: 0;
2747 margin: 0;
2748 }
2748 }
2749
2749
2750 #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
2750 #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
2751 {
2751 {
2752 margin: 0 0 0 0px !important;
2752 margin: 0 0 0 0px !important;
2753 padding: 0;
2753 padding: 0;
2754 }
2754 }
2755
2755
2756 #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
2756 #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
2757 {
2757 {
2758 margin: 0 0 0 200px;
2758 margin: 0 0 0 200px;
2759 padding: 0;
2759 padding: 0;
2760 }
2760 }
2761
2761
2762 #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
2762 #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
2763 {
2763 {
2764 color: #000;
2764 color: #000;
2765 text-decoration: none;
2765 text-decoration: none;
2766 }
2766 }
2767
2767
2768 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus
2768 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus
2769 {
2769 {
2770 border: 1px solid #666;
2770 border: 1px solid #666;
2771 }
2771 }
2772
2772
2773 #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
2773 #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
2774 {
2774 {
2775 clear: both;
2775 clear: both;
2776 overflow: hidden;
2776 overflow: hidden;
2777 margin: 0;
2777 margin: 0;
2778 padding: 8px 0 2px;
2778 padding: 8px 0 2px;
2779 }
2779 }
2780
2780
2781 #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
2781 #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
2782 {
2782 {
2783 float: left;
2783 float: left;
2784 margin: 0;
2784 margin: 0;
2785 }
2785 }
2786
2786
2787 #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
2787 #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
2788 {
2788 {
2789 height: 1%;
2789 height: 1%;
2790 display: block;
2790 display: block;
2791 float: left;
2791 float: left;
2792 margin: 2px 0 0 4px;
2792 margin: 2px 0 0 4px;
2793 }
2793 }
2794
2794
2795 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
2795 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
2796 {
2796 {
2797 color: #000;
2797 color: #000;
2798 font-size: 11px;
2798 font-size: 11px;
2799 font-weight: 700;
2799 font-weight: 700;
2800 margin: 0;
2800 margin: 0;
2801 }
2801 }
2802
2802
2803 input.ui-button {
2803 input.ui-button {
2804 background: #e5e3e3 url("../images/button.png") repeat-x;
2804 background: #e5e3e3 url("../images/button.png") repeat-x;
2805 border-top: 1px solid #DDD;
2805 border-top: 1px solid #DDD;
2806 border-left: 1px solid #c6c6c6;
2806 border-left: 1px solid #c6c6c6;
2807 border-right: 1px solid #DDD;
2807 border-right: 1px solid #DDD;
2808 border-bottom: 1px solid #c6c6c6;
2808 border-bottom: 1px solid #c6c6c6;
2809 color: #515151 !important;
2809 color: #515151 !important;
2810 outline: none;
2810 outline: none;
2811 margin: 0;
2811 margin: 0;
2812 padding: 6px 12px;
2812 padding: 6px 12px;
2813 -webkit-border-radius: 4px 4px 4px 4px;
2813 -webkit-border-radius: 4px 4px 4px 4px;
2814 -khtml-border-radius: 4px 4px 4px 4px;
2814 -khtml-border-radius: 4px 4px 4px 4px;
2815 -moz-border-radius: 4px 4px 4px 4px;
2815 -moz-border-radius: 4px 4px 4px 4px;
2816 border-radius: 4px 4px 4px 4px;
2816 border-radius: 4px 4px 4px 4px;
2817 box-shadow: 0 1px 0 #ececec;
2817 box-shadow: 0 1px 0 #ececec;
2818 cursor: pointer;
2818 cursor: pointer;
2819 }
2819 }
2820
2820
2821 input.ui-button:hover {
2821 input.ui-button:hover {
2822 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
2822 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
2823 border-top: 1px solid #ccc;
2823 border-top: 1px solid #ccc;
2824 border-left: 1px solid #bebebe;
2824 border-left: 1px solid #bebebe;
2825 border-right: 1px solid #b1b1b1;
2825 border-right: 1px solid #b1b1b1;
2826 border-bottom: 1px solid #afafaf;
2826 border-bottom: 1px solid #afafaf;
2827 }
2827 }
2828
2828
2829 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight
2829 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight
2830 {
2830 {
2831 display: inline;
2831 display: inline;
2832 }
2832 }
2833
2833
2834 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons
2834 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons
2835 {
2835 {
2836 margin: 10px 0 0 200px;
2836 margin: 10px 0 0 200px;
2837 padding: 0;
2837 padding: 0;
2838 }
2838 }
2839
2839
2840 #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
2840 #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
2841 {
2841 {
2842 margin: 10px 0 0;
2842 margin: 10px 0 0;
2843 }
2843 }
2844
2844
2845 #content div.box table td.user,#content div.box table td.address {
2845 #content div.box table td.user,#content div.box table td.address {
2846 width: 10%;
2846 width: 10%;
2847 text-align: center;
2847 text-align: center;
2848 }
2848 }
2849
2849
2850 #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
2850 #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
2851 {
2851 {
2852 text-align: right;
2852 text-align: right;
2853 margin: 6px 0 0;
2853 margin: 6px 0 0;
2854 padding: 0;
2854 padding: 0;
2855 }
2855 }
2856
2856
2857 #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
2857 #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
2858 {
2858 {
2859 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
2859 background: #b4b4b4 url("../images/button_selected.png") repeat-x;
2860 border-top: 1px solid #ccc;
2860 border-top: 1px solid #ccc;
2861 border-left: 1px solid #bebebe;
2861 border-left: 1px solid #bebebe;
2862 border-right: 1px solid #b1b1b1;
2862 border-right: 1px solid #b1b1b1;
2863 border-bottom: 1px solid #afafaf;
2863 border-bottom: 1px solid #afafaf;
2864 color: #515151;
2864 color: #515151;
2865 margin: 0;
2865 margin: 0;
2866 padding: 6px 12px;
2866 padding: 6px 12px;
2867 }
2867 }
2868
2868
2869 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results
2869 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results
2870 {
2870 {
2871 text-align: left;
2871 text-align: left;
2872 float: left;
2872 float: left;
2873 margin: 0;
2873 margin: 0;
2874 padding: 0;
2874 padding: 0;
2875 }
2875 }
2876
2876
2877 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span
2877 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span
2878 {
2878 {
2879 height: 1%;
2879 height: 1%;
2880 display: block;
2880 display: block;
2881 float: left;
2881 float: left;
2882 background: #ebebeb url("../images/pager.png") repeat-x;
2882 background: #ebebeb url("../images/pager.png") repeat-x;
2883 border-top: 1px solid #dedede;
2883 border-top: 1px solid #dedede;
2884 border-left: 1px solid #cfcfcf;
2884 border-left: 1px solid #cfcfcf;
2885 border-right: 1px solid #c4c4c4;
2885 border-right: 1px solid #c4c4c4;
2886 border-bottom: 1px solid #c4c4c4;
2886 border-bottom: 1px solid #c4c4c4;
2887 color: #4A4A4A;
2887 color: #4A4A4A;
2888 font-weight: 700;
2888 font-weight: 700;
2889 margin: 0;
2889 margin: 0;
2890 padding: 6px 8px;
2890 padding: 6px 8px;
2891 }
2891 }
2892
2892
2893 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled
2893 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled
2894 {
2894 {
2895 color: #B4B4B4;
2895 color: #B4B4B4;
2896 padding: 6px;
2896 padding: 6px;
2897 }
2897 }
2898
2898
2899 #login,#register {
2899 #login,#register {
2900 width: 520px;
2900 width: 520px;
2901 margin: 10% auto 0;
2901 margin: 10% auto 0;
2902 padding: 0;
2902 padding: 0;
2903 }
2903 }
2904
2904
2905 #login div.color,#register div.color {
2905 #login div.color,#register div.color {
2906 clear: both;
2906 clear: both;
2907 overflow: hidden;
2907 overflow: hidden;
2908 background: #FFF;
2908 background: #FFF;
2909 margin: 10px auto 0;
2909 margin: 10px auto 0;
2910 padding: 3px 3px 3px 0;
2910 padding: 3px 3px 3px 0;
2911 }
2911 }
2912
2912
2913 #login div.color a,#register div.color a {
2913 #login div.color a,#register div.color a {
2914 width: 20px;
2914 width: 20px;
2915 height: 20px;
2915 height: 20px;
2916 display: block;
2916 display: block;
2917 float: left;
2917 float: left;
2918 margin: 0 0 0 3px;
2918 margin: 0 0 0 3px;
2919 padding: 0;
2919 padding: 0;
2920 }
2920 }
2921
2921
2922 #login div.title h5,#register div.title h5 {
2922 #login div.title h5,#register div.title h5 {
2923 color: #fff;
2923 color: #fff;
2924 margin: 10px;
2924 margin: 10px;
2925 padding: 0;
2925 padding: 0;
2926 }
2926 }
2927
2927
2928 #login div.form div.fields div.field,#register div.form div.fields div.field
2928 #login div.form div.fields div.field,#register div.form div.fields div.field
2929 {
2929 {
2930 clear: both;
2930 clear: both;
2931 overflow: hidden;
2931 overflow: hidden;
2932 margin: 0;
2932 margin: 0;
2933 padding: 0 0 10px;
2933 padding: 0 0 10px;
2934 }
2934 }
2935
2935
2936 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message
2936 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message
2937 {
2937 {
2938 height: 1%;
2938 height: 1%;
2939 display: block;
2939 display: block;
2940 color: red;
2940 color: red;
2941 margin: 8px 0 0;
2941 margin: 8px 0 0;
2942 padding: 0;
2942 padding: 0;
2943 max-width: 320px;
2943 max-width: 320px;
2944 }
2944 }
2945
2945
2946 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label
2946 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label
2947 {
2947 {
2948 color: #000;
2948 color: #000;
2949 font-weight: 700;
2949 font-weight: 700;
2950 }
2950 }
2951
2951
2952 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input
2952 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input
2953 {
2953 {
2954 float: left;
2954 float: left;
2955 margin: 0;
2955 margin: 0;
2956 padding: 0;
2956 padding: 0;
2957 }
2957 }
2958
2958
2959 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox
2959 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox
2960 {
2960 {
2961 margin: 0 0 0 184px;
2961 margin: 0 0 0 184px;
2962 padding: 0;
2962 padding: 0;
2963 }
2963 }
2964
2964
2965 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label
2965 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label
2966 {
2966 {
2967 color: #565656;
2967 color: #565656;
2968 font-weight: 700;
2968 font-weight: 700;
2969 }
2969 }
2970
2970
2971 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input
2971 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input
2972 {
2972 {
2973 color: #000;
2973 color: #000;
2974 font-size: 1em;
2974 font-size: 1em;
2975 font-weight: 700;
2975 font-weight: 700;
2976 margin: 0;
2976 margin: 0;
2977 }
2977 }
2978
2978
2979 #changeset_content .container .wrapper,#graph_content .container .wrapper
2979 #changeset_content .container .wrapper,#graph_content .container .wrapper
2980 {
2980 {
2981 width: 600px;
2981 width: 600px;
2982 }
2982 }
2983
2983
2984 #changeset_content .container .left,#graph_content .container .left {
2984 #changeset_content .container .left,#graph_content .container .left {
2985 float: left;
2985 float: left;
2986 width: 70%;
2986 width: 70%;
2987 padding-left: 5px;
2987 padding-left: 5px;
2988 }
2988 }
2989
2989
2990 #changeset_content .container .left .date,.ac .match {
2990 #changeset_content .container .left .date,.ac .match {
2991 font-weight: 700;
2991 font-weight: 700;
2992 padding-top: 5px;
2992 padding-top: 5px;
2993 padding-bottom: 5px;
2993 padding-bottom: 5px;
2994 }
2994 }
2995
2995
2996 div#legend_container table td,div#legend_choices table td {
2996 div#legend_container table td,div#legend_choices table td {
2997 border: none !important;
2997 border: none !important;
2998 height: 20px !important;
2998 height: 20px !important;
2999 padding: 0 !important;
2999 padding: 0 !important;
3000 }
3000 }
3001
3001
3002 #q_filter {
3002 #q_filter {
3003 border: 0 none;
3003 border: 0 none;
3004 color: #AAAAAA;
3004 color: #AAAAAA;
3005 margin-bottom: -4px;
3005 margin-bottom: -4px;
3006 margin-top: -4px;
3006 margin-top: -4px;
3007 padding-left: 3px;
3007 padding-left: 3px;
3008 }
3008 }
3009
3009
3010 #node_filter {
3010 #node_filter {
3011 border: 0px solid #545454;
3011 border: 0px solid #545454;
3012 color: #AAAAAA;
3012 color: #AAAAAA;
3013 padding-left: 3px;
3013 padding-left: 3px;
3014 } No newline at end of file
3014 }
3015
3016 /*README STYLE*/
3017
3018 div.readme {
3019 padding:0px;
3020 }
3021
3022 div.readme h2 {
3023 font-weight: normal;
3024 }
3025
3026 div.readme .readme_box {
3027 background-color: #fafafa;
3028 }
3029
3030 div.readme .readme_box {
3031 clear:both;
3032 overflow:hidden;
3033 margin:0;
3034 padding:0 20px 10px;
3035 }
3036
3037 div.readme .readme_box h1, div.readme .readme_box h2, div.readme .readme_box h3, div.readme .readme_box h4, div.readme .readme_box h5, div.readme .readme_box h6 {
3038 border-bottom: 0 !important;
3039 margin: 0 !important;
3040 padding: 0 !important;
3041 line-height: 1.5em !important;
3042 }
3043
3044
3045 div.readme .readme_box h1:first-child {
3046 padding-top: .25em !important;
3047 }
3048
3049 div.readme .readme_box h2, div.readme .readme_box h3 {
3050 margin: 1em 0 !important;
3051 }
3052
3053 div.readme .readme_box h2 {
3054 margin-top: 1.5em !important;
3055 border-top: 4px solid #e0e0e0 !important;
3056 padding-top: .5em !important;
3057 }
3058
3059 div.readme .readme_box p {
3060 color: black !important;
3061 margin: 1em 0 !important;
3062 line-height: 1.5em !important;
3063 }
3064
3065 div.readme .readme_box ul {
3066 list-style: disc !important;
3067 margin: 1em 0 1em 2em !important;
3068 }
3069
3070 div.readme .readme_box ol {
3071 list-style: decimal;
3072 margin: 1em 0 1em 2em !important;
3073 }
3074
3075 div.readme .readme_box pre, code {
3076 font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
3077 }
3078
3079 div.readme .readme_box code {
3080 font-size: 12px !important;
3081 background-color: ghostWhite !important;
3082 color: #444 !important;
3083 padding: 0 .2em !important;
3084 border: 1px solid #dedede !important;
3085 }
3086
3087 div.readme .readme_box pre code {
3088 padding: 0 !important;
3089 font-size: 12px !important;
3090 background-color: #eee !important;
3091 border: none !important;
3092 }
3093
3094 div.readme .readme_box pre {
3095 margin: 1em 0;
3096 font-size: 12px;
3097 background-color: #eee;
3098 border: 1px solid #ddd;
3099 padding: 5px;
3100 color: #444;
3101 overflow: auto;
3102 -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
3103 -webkit-border-radius: 3px;
3104 -moz-border-radius: 3px;
3105 border-radius: 3px;
3106 }
@@ -1,700 +1,678 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.dbrepo.just_name,h.url('summary_home',repo_name=c.repo_name))}
10 ${h.link_to(c.dbrepo.just_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 id="summary" class="fields">
27 <div id="summary" 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.rhodecode_user.username != 'default':
34 %if c.rhodecode_user.username != 'default':
35 %if c.following:
35 %if c.following:
36 <span id="follow_toggle" class="following" title="${_('Stop following this repository')}"
36 <span id="follow_toggle" class="following" title="${_('Stop following this repository')}"
37 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
37 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
38 </span>
38 </span>
39 %else:
39 %else:
40 <span id="follow_toggle" class="follow" title="${_('Start following this repository')}"
40 <span id="follow_toggle" class="follow" title="${_('Start following this repository')}"
41 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
41 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
42 </span>
42 </span>
43 %endif
43 %endif
44 %endif:
44 %endif:
45
45
46 ##REPO TYPE
46 ##REPO TYPE
47 %if c.dbrepo.repo_type =='hg':
47 %if c.dbrepo.repo_type =='hg':
48 <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
48 <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
49 %endif
49 %endif
50 %if c.dbrepo.repo_type =='git':
50 %if c.dbrepo.repo_type =='git':
51 <img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
51 <img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
52 %endif
52 %endif
53
53
54 ##PUBLIC/PRIVATE
54 ##PUBLIC/PRIVATE
55 %if c.dbrepo.private:
55 %if c.dbrepo.private:
56 <img style="margin-bottom:2px" class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
56 <img style="margin-bottom:2px" class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
57 %else:
57 %else:
58 <img style="margin-bottom:2px" class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
58 <img style="margin-bottom:2px" class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
59 %endif
59 %endif
60
60
61 ##REPO NAME
61 ##REPO NAME
62 <span class="repo_name">${h.repo_link(c.dbrepo.groups_and_repo)}</span>
62 <span class="repo_name">${h.repo_link(c.dbrepo.groups_and_repo)}</span>
63
63
64 ##FORK
64 ##FORK
65 %if c.dbrepo.fork:
65 %if c.dbrepo.fork:
66 <div style="margin-top:5px;clear:both"">
66 <div style="margin-top:5px;clear:both"">
67 <a href="${h.url('summary_home',repo_name=c.dbrepo.fork.repo_name)}">
67 <a href="${h.url('summary_home',repo_name=c.dbrepo.fork.repo_name)}"><img class="icon" alt="${_('public')}" title="${_('Fork of')} ${c.dbrepo.fork.repo_name}" src="${h.url('/images/icons/arrow_divide.png')}"/>
68 <img class="icon" alt="${_('public')}"
69 title="${_('Fork of')} ${c.dbrepo.fork.repo_name}"
70 src="${h.url('/images/icons/arrow_divide.png')}"/>
71 ${_('Fork of')} ${c.dbrepo.fork.repo_name}
68 ${_('Fork of')} ${c.dbrepo.fork.repo_name}
72 </a>
69 </a>
73 </div>
70 </div>
74 %endif
71 %endif
75 ##REMOTE
72 ##REMOTE
76 %if c.dbrepo.clone_uri:
73 %if c.dbrepo.clone_uri:
77 <div style="margin-top:5px;clear:both">
74 <div style="margin-top:5px;clear:both">
78 <a href="${h.url(str(h.hide_credentials(c.dbrepo.clone_uri)))}">
75 <a href="${h.url(str(h.hide_credentials(c.dbrepo.clone_uri)))}"><img class="icon" alt="${_('remote clone')}" title="${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}" src="${h.url('/images/icons/connect.png')}"/>
79 <img class="icon" alt="${_('remote clone')}"
80 title="${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}"
81 src="${h.url('/images/icons/connect.png')}"/>
82 ${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}
76 ${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}
83 </a>
77 </a>
84 </div>
78 </div>
85 %endif
79 %endif
86 </div>
80 </div>
87 </div>
81 </div>
88
82
89
90 <div class="field">
83 <div class="field">
91 <div class="label">
84 <div class="label">
92 <label>${_('Description')}:</label>
85 <label>${_('Description')}:</label>
93 </div>
86 </div>
94 <div class="input-short desc">${h.urlify_text(c.dbrepo.description)}</div>
87 <div class="input-short desc">${h.urlify_text(c.dbrepo.description)}</div>
95 </div>
88 </div>
96
89
97
98 <div class="field">
90 <div class="field">
99 <div class="label">
91 <div class="label">
100 <label>${_('Contact')}:</label>
92 <label>${_('Contact')}:</label>
101 </div>
93 </div>
102 <div class="input-short">
94 <div class="input-short">
103 <div class="gravatar">
95 <div class="gravatar">
104 <img alt="gravatar" src="${h.gravatar_url(c.dbrepo.user.email)}"/>
96 <img alt="gravatar" src="${h.gravatar_url(c.dbrepo.user.email)}"/>
105 </div>
97 </div>
106 ${_('Username')}: ${c.dbrepo.user.username}<br/>
98 ${_('Username')}: ${c.dbrepo.user.username}<br/>
107 ${_('Name')}: ${c.dbrepo.user.name} ${c.dbrepo.user.lastname}<br/>
99 ${_('Name')}: ${c.dbrepo.user.name} ${c.dbrepo.user.lastname}<br/>
108 ${_('Email')}: <a href="mailto:${c.dbrepo.user.email}">${c.dbrepo.user.email}</a>
100 ${_('Email')}: <a href="mailto:${c.dbrepo.user.email}">${c.dbrepo.user.email}</a>
109 </div>
101 </div>
110 </div>
102 </div>
111
103
112 <div class="field">
104 <div class="field">
113 <div class="label">
105 <div class="label">
114 <label>${_('Last change')}:</label>
106 <label>${_('Last change')}:</label>
115 </div>
107 </div>
116 <div class="input-short">
108 <div class="input-short">
117 <b>${'r%s:%s' % (h.get_changeset_safe(c.rhodecode_repo,'tip').revision,
109 <b>${'r%s:%s' % (h.get_changeset_safe(c.rhodecode_repo,'tip').revision,
118 h.get_changeset_safe(c.rhodecode_repo,'tip').short_id)}</b> -
110 h.get_changeset_safe(c.rhodecode_repo,'tip').short_id)}</b> -
119 <span class="tooltip" title="${c.rhodecode_repo.last_change}">
111 <span class="tooltip" title="${c.rhodecode_repo.last_change}">
120 ${h.age(c.rhodecode_repo.last_change)}</span><br/>
112 ${h.age(c.rhodecode_repo.last_change)}</span><br/>
121 ${_('by')} ${h.get_changeset_safe(c.rhodecode_repo,'tip').author}
113 ${_('by')} ${h.get_changeset_safe(c.rhodecode_repo,'tip').author}
122
123 </div>
114 </div>
124 </div>
115 </div>
125
116
126 <div class="field">
117 <div class="field">
127 <div class="label">
118 <div class="label">
128 <label>${_('Clone url')}:</label>
119 <label>${_('Clone url')}:</label>
129 </div>
120 </div>
130 <div class="input-short">
121 <div class="input-short">
131 <input type="text" id="clone_url" readonly="readonly" value="${c.rhodecode_repo.alias} clone ${c.clone_repo_url}" size="70"/>
122 <input type="text" id="clone_url" readonly="readonly" value="${c.rhodecode_repo.alias} clone ${c.clone_repo_url}" size="70"/>
132 </div>
123 </div>
133 </div>
124 </div>
134
125
135 <div class="field">
126 <div class="field">
136 <div class="label">
127 <div class="label">
137 <label>${_('Trending source files')}:</label>
128 <label>${_('Trending source files')}:</label>
138 </div>
129 </div>
139 <div class="input-short">
130 <div class="input-short">
140 <div id="lang_stats"></div>
131 <div id="lang_stats"></div>
141 </div>
132 </div>
142 </div>
133 </div>
143
134
144 <div class="field">
135 <div class="field">
145 <div class="label">
136 <div class="label">
146 <label>${_('Download')}:</label>
137 <label>${_('Download')}:</label>
147 </div>
138 </div>
148 <div class="input-short">
139 <div class="input-short">
149 %if len(c.rhodecode_repo.revisions) == 0:
140 %if len(c.rhodecode_repo.revisions) == 0:
150 ${_('There are no downloads yet')}
141 ${_('There are no downloads yet')}
151 %elif c.enable_downloads is False:
142 %elif c.enable_downloads is False:
152 ${_('Downloads are disabled for this repository')}
143 ${_('Downloads are disabled for this repository')}
153 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
144 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
154 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-button-small")}
145 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-button-small")}
155 %endif
146 %endif
156 %else:
147 %else:
157 ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)}
148 ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)}
158 %for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
149 %for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
159 %if cnt >=1:
150 %if cnt >=1:
160 |
151 |
161 %endif
152 %endif
162 <span class="tooltip" title="${_('Download %s as %s') %('tip',archive['type'])}"
153 <span class="tooltip" title="${_('Download %s as %s') %('tip',archive['type'])}"
163 id="${archive['type']+'_link'}">${h.link_to(archive['type'],
154 id="${archive['type']+'_link'}">${h.link_to(archive['type'],
164 h.url('files_archive_home',repo_name=c.dbrepo.repo_name,
155 h.url('files_archive_home',repo_name=c.dbrepo.repo_name,
165 fname='tip'+archive['extension']),class_="archive_icon")}</span>
156 fname='tip'+archive['extension']),class_="archive_icon")}</span>
166 %endfor
157 %endfor
167 <span style="vertical-align: bottom">
158 <span style="vertical-align: bottom">
168 <input id="archive_subrepos" type="checkbox" name="subrepos"/> <span class="tooltip" title="${_('Check this to download archive with subrepos')}" >${_('with subrepos')}</span>
159 <input id="archive_subrepos" type="checkbox" name="subrepos"/> <span class="tooltip" title="${_('Check this to download archive with subrepos')}" >${_('with subrepos')}</span>
169 </span>
160 </span>
170 %endif
161 %endif
171 </div>
162 </div>
172 </div>
163 </div>
173
164
174 <div class="field">
165 <div class="field">
175 <div class="label">
166 <div class="label">
176 <label>${_('Feeds')}:</label>
167 <label>${_('Feeds')}:</label>
177 </div>
168 </div>
178 <div class="input-short">
169 <div class="input-short">
179 %if c.rhodecode_user.username != 'default':
170 %if c.rhodecode_user.username != 'default':
180 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='rss_icon')}
171 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='rss_icon')}
181 ${h.link_to(_('Atom'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='atom_icon')}
172 ${h.link_to(_('Atom'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='atom_icon')}
182 %else:
173 %else:
183 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name),class_='rss_icon')}
174 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name),class_='rss_icon')}
184 ${h.link_to(_('Atom'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')}
175 ${h.link_to(_('Atom'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')}
185 %endif
176 %endif
186 </div>
177 </div>
187 </div>
178 </div>
188 </div>
179 </div>
189 </div>
180 </div>
181 </div>
182
183 <div class="box box-right" style="min-height:455px">
184 <!-- box / title -->
185 <div class="title">
186 <h5>${_('Commit activity by day / author')}</h5>
187 </div>
188
189 <div class="graph">
190 <div style="padding:0 10px 10px 15px;font-size: 1.2em;">
191 %if c.no_data:
192 ${c.no_data_msg}
193 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
194 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-button-small")}
195 %endif
196 %else:
197 ${_('Loaded in')} ${c.stats_percentage} %
198 %endif
199 </div>
200 <div id="commit_history" style="width:450px;height:300px;float:left"></div>
201 <div style="clear: both;height: 10px"></div>
202 <div id="overview" style="width:450px;height:100px;float:left"></div>
203
204 <div id="legend_data" style="clear:both;margin-top:10px;">
205 <div id="legend_container"></div>
206 <div id="legend_choices">
207 <table id="legend_choices_tables" class="noborder" style="font-size:smaller;color:#545454"></table>
208 </div>
209 </div>
210 </div>
211 </div>
212
213 <div class="box">
214 <div class="title">
215 <div class="breadcrumbs">${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}</div>
216 </div>
217 <div class="table">
218 <div id="shortlog_data">
219 <%include file='../shortlog/shortlog_data.html'/>
220 </div>
221 </div>
222 </div>
223
224 %if c.readme_data:
225 <div class="box" style="background-color: #FAFAFA">
226 <div class="title">
227 <div class="breadcrumbs"><a href="${h.url('files_home',repo_name=c.repo_name,revision='tip',f_path=c.readme_file)}">${c.readme_file}</a></div>
228 </div>
229 <div class="readme">
230 <div class="readme_box">
231 ${c.readme_data|n}
232 </div>
233 </div>
234 </div>
235 %endif
236
190 <script type="text/javascript">
237 <script type="text/javascript">
191 YUE.onDOMReady(function(e){
238 YUE.onDOMReady(function(e){
192 id = 'clone_url';
239 id = 'clone_url';
193 YUE.on(id,'click',function(e){
240 YUE.on(id,'click',function(e){
194 if(YUD.hasClass(id,'selected')){
241 if(YUD.hasClass(id,'selected')){
195 return
242 return
196 }
243 }
197 else{
244 else{
198 YUD.addClass(id,'selected');
245 YUD.addClass(id,'selected');
199 YUD.get(id).select();
246 YUD.get(id).select();
200 }
247 }
201
248
202 })
249 })
203 })
250 })
204 var data = ${c.trending_languages|n};
251 var data = ${c.trending_languages|n};
205 var total = 0;
252 var total = 0;
206 var no_data = true;
253 var no_data = true;
207 for (k in data){
254 for (k in data){
208 total += data[k].count;
255 total += data[k].count;
209 no_data = false;
256 no_data = false;
210 }
257 }
211 var tbl = document.createElement('table');
258 var tbl = document.createElement('table');
212 tbl.setAttribute('class','trending_language_tbl');
259 tbl.setAttribute('class','trending_language_tbl');
213 var cnt = 0;
260 var cnt = 0;
214 for (k in data){
261 for (k in data){
215 cnt += 1;
262 cnt += 1;
216 var hide = cnt>2;
263 var hide = cnt>2;
217 var tr = document.createElement('tr');
264 var tr = document.createElement('tr');
218 if (hide){
265 if (hide){
219 tr.setAttribute('style','display:none');
266 tr.setAttribute('style','display:none');
220 tr.setAttribute('class','stats_hidden');
267 tr.setAttribute('class','stats_hidden');
221 }
268 }
222 var percentage = Math.round((data[k].count/total*100),2);
269 var percentage = Math.round((data[k].count/total*100),2);
223 var value = data[k].count;
270 var value = data[k].count;
224 var td1 = document.createElement('td');
271 var td1 = document.createElement('td');
225 td1.width = 150;
272 td1.width = 150;
226 var trending_language_label = document.createElement('div');
273 var trending_language_label = document.createElement('div');
227 trending_language_label.innerHTML = data[k].desc+" ("+k+")";
274 trending_language_label.innerHTML = data[k].desc+" ("+k+")";
228 td1.appendChild(trending_language_label);
275 td1.appendChild(trending_language_label);
229
276
230 var td2 = document.createElement('td');
277 var td2 = document.createElement('td');
231 td2.setAttribute('style','padding-right:14px !important');
278 td2.setAttribute('style','padding-right:14px !important');
232 var trending_language = document.createElement('div');
279 var trending_language = document.createElement('div');
233 var nr_files = value+" ${_('files')}";
280 var nr_files = value+" ${_('files')}";
234
281
235 trending_language.title = k+" "+nr_files;
282 trending_language.title = k+" "+nr_files;
236
283
237 if (percentage>22){
284 if (percentage>22){
238 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";
285 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";
239 }
286 }
240 else{
287 else{
241 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
288 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
242 }
289 }
243
290
244 trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
291 trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
245 trending_language.style.width=percentage+"%";
292 trending_language.style.width=percentage+"%";
246 td2.appendChild(trending_language);
293 td2.appendChild(trending_language);
247
294
248 tr.appendChild(td1);
295 tr.appendChild(td1);
249 tr.appendChild(td2);
296 tr.appendChild(td2);
250 tbl.appendChild(tr);
297 tbl.appendChild(tr);
251 if(cnt == 3){
298 if(cnt == 3){
252 var show_more = document.createElement('tr');
299 var show_more = document.createElement('tr');
253 var td = document.createElement('td');
300 var td = document.createElement('td');
254 lnk = document.createElement('a');
301 lnk = document.createElement('a');
255
302
256 lnk.href='#';
303 lnk.href='#';
257 lnk.innerHTML = "${_('show more')}";
304 lnk.innerHTML = "${_('show more')}";
258 lnk.id='code_stats_show_more';
305 lnk.id='code_stats_show_more';
259 td.appendChild(lnk);
306 td.appendChild(lnk);
260
307
261 show_more.appendChild(td);
308 show_more.appendChild(td);
262 show_more.appendChild(document.createElement('td'));
309 show_more.appendChild(document.createElement('td'));
263 tbl.appendChild(show_more);
310 tbl.appendChild(show_more);
264 }
311 }
265
312
266 }
313 }
267 if(no_data){
314 if(no_data){
268 var tr = document.createElement('tr');
315 var tr = document.createElement('tr');
269 var td1 = document.createElement('td');
316 var td1 = document.createElement('td');
270 td1.innerHTML = "${c.no_data_msg}";
317 td1.innerHTML = "${c.no_data_msg}";
271 tr.appendChild(td1);
318 tr.appendChild(td1);
272 tbl.appendChild(tr);
319 tbl.appendChild(tr);
273 }
320 }
274 YUD.get('lang_stats').appendChild(tbl);
321 YUD.get('lang_stats').appendChild(tbl);
275 YUE.on('code_stats_show_more','click',function(){
322 YUE.on('code_stats_show_more','click',function(){
276 l = YUD.getElementsByClassName('stats_hidden')
323 l = YUD.getElementsByClassName('stats_hidden')
277 for (e in l){
324 for (e in l){
278 YUD.setStyle(l[e],'display','');
325 YUD.setStyle(l[e],'display','');
279 };
326 };
280 YUD.setStyle(YUD.get('code_stats_show_more'),
327 YUD.setStyle(YUD.get('code_stats_show_more'),
281 'display','none');
328 'display','none');
282 })
329 })
283
330
284 var tmpl_links = {}
331 var tmpl_links = {}
285 %for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
332 %for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
286 tmpl_links['${archive['type']}'] = '${h.link_to(archive['type'],
333 tmpl_links['${archive['type']}'] = '${h.link_to(archive['type'],
287 h.url('files_archive_home',repo_name=c.dbrepo.repo_name,
334 h.url('files_archive_home',repo_name=c.dbrepo.repo_name,
288 fname='__CS__'+archive['extension'],subrepos='__SUB__'),class_="archive_icon")}';
335 fname='__CS__'+archive['extension'],subrepos='__SUB__'),class_="archive_icon")}';
289 %endfor
336 %endfor
290
337
291 YUE.on(['download_options','archive_subrepos'],'change',function(e){
338 YUE.on(['download_options','archive_subrepos'],'change',function(e){
292 var sm = YUD.get('download_options');
339 var sm = YUD.get('download_options');
293 var new_cs = sm.options[sm.selectedIndex];
340 var new_cs = sm.options[sm.selectedIndex];
294
341
295 for(k in tmpl_links){
342 for(k in tmpl_links){
296 var s = YUD.get(k+'_link');
343 var s = YUD.get(k+'_link');
297 title_tmpl = "${_('Download %s as %s') % ('__CS_NAME__','__CS_EXT__')}";
344 title_tmpl = "${_('Download %s as %s') % ('__CS_NAME__','__CS_EXT__')}";
298 s.title = title_tmpl.replace('__CS_NAME__',new_cs.text);
345 s.title = title_tmpl.replace('__CS_NAME__',new_cs.text);
299 s.title = s.title.replace('__CS_EXT__',k);
346 s.title = s.title.replace('__CS_EXT__',k);
300 var url = tmpl_links[k].replace('__CS__',new_cs.value);
347 var url = tmpl_links[k].replace('__CS__',new_cs.value);
301 var subrepos = YUD.get('archive_subrepos').checked
348 var subrepos = YUD.get('archive_subrepos').checked
302 url = url.replace('__SUB__',subrepos);
349 url = url.replace('__SUB__',subrepos);
303 s.innerHTML = url
350 s.innerHTML = url
304 }
351 }
305 });
352 });
306 </script>
353 </script>
307 </div>
308
309 <div class="box box-right" style="min-height:455px">
310 <!-- box / title -->
311 <div class="title">
312 <h5>${_('Commit activity by day / author')}</h5>
313 </div>
314
315 <div class="graph">
316 <div style="padding:0 10px 10px 15px;font-size: 1.2em;">
317 %if c.no_data:
318 ${c.no_data_msg}
319 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
320 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-button-small")}
321 %endif
322
323 %else:
324 ${_('Loaded in')} ${c.stats_percentage} %
325 %endif
326 </div>
327 <div id="commit_history" style="width:450px;height:300px;float:left"></div>
328 <div style="clear: both;height: 10px"></div>
329 <div id="overview" style="width:450px;height:100px;float:left"></div>
330
331 <div id="legend_data" style="clear:both;margin-top:10px;">
332 <div id="legend_container"></div>
333 <div id="legend_choices">
334 <table id="legend_choices_tables" style="font-size:smaller;color:#545454"></table>
335 </div>
336 </div>
337 <script type="text/javascript">
354 <script type="text/javascript">
338 /**
355 /**
339 * Plots summary graph
356 * Plots summary graph
340 *
357 *
341 * @class SummaryPlot
358 * @class SummaryPlot
342 * @param {from} initial from for detailed graph
359 * @param {from} initial from for detailed graph
343 * @param {to} initial to for detailed graph
360 * @param {to} initial to for detailed graph
344 * @param {dataset}
361 * @param {dataset}
345 * @param {overview_dataset}
362 * @param {overview_dataset}
346 */
363 */
347 function SummaryPlot(from,to,dataset,overview_dataset) {
364 function SummaryPlot(from,to,dataset,overview_dataset) {
348 var initial_ranges = {
365 var initial_ranges = {
349 "xaxis":{
366 "xaxis":{
350 "from":from,
367 "from":from,
351 "to":to,
368 "to":to,
352 },
369 },
353 };
370 };
354 var dataset = dataset;
371 var dataset = dataset;
355 var overview_dataset = [overview_dataset];
372 var overview_dataset = [overview_dataset];
356 var choiceContainer = YUD.get("legend_choices");
373 var choiceContainer = YUD.get("legend_choices");
357 var choiceContainerTable = YUD.get("legend_choices_tables");
374 var choiceContainerTable = YUD.get("legend_choices_tables");
358 var plotContainer = YUD.get('commit_history');
375 var plotContainer = YUD.get('commit_history');
359 var overviewContainer = YUD.get('overview');
376 var overviewContainer = YUD.get('overview');
360
377
361 var plot_options = {
378 var plot_options = {
362 bars: {show:true,align:'center',lineWidth:4},
379 bars: {show:true,align:'center',lineWidth:4},
363 legend: {show:true, container:"legend_container"},
380 legend: {show:true, container:"legend_container"},
364 points: {show:true,radius:0,fill:false},
381 points: {show:true,radius:0,fill:false},
365 yaxis: {tickDecimals:0,},
382 yaxis: {tickDecimals:0,},
366 xaxis: {
383 xaxis: {
367 mode: "time",
384 mode: "time",
368 timeformat: "%d/%m",
385 timeformat: "%d/%m",
369 min:from,
386 min:from,
370 max:to,
387 max:to,
371 },
388 },
372 grid: {
389 grid: {
373 hoverable: true,
390 hoverable: true,
374 clickable: true,
391 clickable: true,
375 autoHighlight:true,
392 autoHighlight:true,
376 color: "#999"
393 color: "#999"
377 },
394 },
378 //selection: {mode: "x"}
395 //selection: {mode: "x"}
379 };
396 };
380 var overview_options = {
397 var overview_options = {
381 legend:{show:false},
398 legend:{show:false},
382 bars: {show:true,barWidth: 2,},
399 bars: {show:true,barWidth: 2,},
383 shadowSize: 0,
400 shadowSize: 0,
384 xaxis: {mode: "time", timeformat: "%d/%m/%y",},
401 xaxis: {mode: "time", timeformat: "%d/%m/%y",},
385 yaxis: {ticks: 3, min: 0,tickDecimals:0,},
402 yaxis: {ticks: 3, min: 0,tickDecimals:0,},
386 grid: {color: "#999",},
403 grid: {color: "#999",},
387 selection: {mode: "x"}
404 selection: {mode: "x"}
388 };
405 };
389
406
390 /**
407 /**
391 *get dummy data needed in few places
408 *get dummy data needed in few places
392 */
409 */
393 function getDummyData(label){
410 function getDummyData(label){
394 return {"label":label,
411 return {"label":label,
395 "data":[{"time":0,
412 "data":[{"time":0,
396 "commits":0,
413 "commits":0,
397 "added":0,
414 "added":0,
398 "changed":0,
415 "changed":0,
399 "removed":0,
416 "removed":0,
400 }],
417 }],
401 "schema":["commits"],
418 "schema":["commits"],
402 "color":'#ffffff',
419 "color":'#ffffff',
403 }
420 }
404 }
421 }
405
422
406 /**
423 /**
407 * generate checkboxes accordindly to data
424 * generate checkboxes accordindly to data
408 * @param keys
425 * @param keys
409 * @returns
426 * @returns
410 */
427 */
411 function generateCheckboxes(data) {
428 function generateCheckboxes(data) {
412 //append checkboxes
429 //append checkboxes
413 var i = 0;
430 var i = 0;
414 choiceContainerTable.innerHTML = '';
431 choiceContainerTable.innerHTML = '';
415 for(var pos in data) {
432 for(var pos in data) {
416
433
417 data[pos].color = i;
434 data[pos].color = i;
418 i++;
435 i++;
419 if(data[pos].label != ''){
436 if(data[pos].label != ''){
420 choiceContainerTable.innerHTML += '<tr><td>'+
437 choiceContainerTable.innerHTML += '<tr><td>'+
421 '<input type="checkbox" name="' + data[pos].label +'" checked="checked" />'
438 '<input type="checkbox" name="' + data[pos].label +'" checked="checked" />'
422 +data[pos].label+
439 +data[pos].label+
423 '</td></tr>';
440 '</td></tr>';
424 }
441 }
425 }
442 }
426 }
443 }
427
444
428 /**
445 /**
429 * ToolTip show
446 * ToolTip show
430 */
447 */
431 function showTooltip(x, y, contents) {
448 function showTooltip(x, y, contents) {
432 var div=document.getElementById('tooltip');
449 var div=document.getElementById('tooltip');
433 if(!div) {
450 if(!div) {
434 div = document.createElement('div');
451 div = document.createElement('div');
435 div.id="tooltip";
452 div.id="tooltip";
436 div.style.position="absolute";
453 div.style.position="absolute";
437 div.style.border='1px solid #fdd';
454 div.style.border='1px solid #fdd';
438 div.style.padding='2px';
455 div.style.padding='2px';
439 div.style.backgroundColor='#fee';
456 div.style.backgroundColor='#fee';
440 document.body.appendChild(div);
457 document.body.appendChild(div);
441 }
458 }
442 YUD.setStyle(div, 'opacity', 0);
459 YUD.setStyle(div, 'opacity', 0);
443 div.innerHTML = contents;
460 div.innerHTML = contents;
444 div.style.top=(y + 5) + "px";
461 div.style.top=(y + 5) + "px";
445 div.style.left=(x + 5) + "px";
462 div.style.left=(x + 5) + "px";
446
463
447 var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
464 var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
448 anim.animate();
465 anim.animate();
449 }
466 }
450
467
451 /**
468 /**
452 * This function will detect if selected period has some changesets
469 * This function will detect if selected period has some changesets
453 for this user if it does this data is then pushed for displaying
470 for this user if it does this data is then pushed for displaying
454 Additionally it will only display users that are selected by the checkbox
471 Additionally it will only display users that are selected by the checkbox
455 */
472 */
456 function getDataAccordingToRanges(ranges) {
473 function getDataAccordingToRanges(ranges) {
457
474
458 var data = [];
475 var data = [];
459 var new_dataset = {};
476 var new_dataset = {};
460 var keys = [];
477 var keys = [];
461 var max_commits = 0;
478 var max_commits = 0;
462 for(var key in dataset){
479 for(var key in dataset){
463
480
464 for(var ds in dataset[key].data){
481 for(var ds in dataset[key].data){
465 commit_data = dataset[key].data[ds];
482 commit_data = dataset[key].data[ds];
466 if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
483 if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
467
484
468 if(new_dataset[key] === undefined){
485 if(new_dataset[key] === undefined){
469 new_dataset[key] = {data:[],schema:["commits"],label:key};
486 new_dataset[key] = {data:[],schema:["commits"],label:key};
470 }
487 }
471 new_dataset[key].data.push(commit_data);
488 new_dataset[key].data.push(commit_data);
472 }
489 }
473 }
490 }
474 if (new_dataset[key] !== undefined){
491 if (new_dataset[key] !== undefined){
475 data.push(new_dataset[key]);
492 data.push(new_dataset[key]);
476 }
493 }
477 }
494 }
478
495
479 if (data.length > 0){
496 if (data.length > 0){
480 return data;
497 return data;
481 }
498 }
482 else{
499 else{
483 //just return dummy data for graph to plot itself
500 //just return dummy data for graph to plot itself
484 return [getDummyData('')];
501 return [getDummyData('')];
485 }
502 }
486 }
503 }
487
504
488 /**
505 /**
489 * redraw using new checkbox data
506 * redraw using new checkbox data
490 */
507 */
491 function plotchoiced(e,args){
508 function plotchoiced(e,args){
492 var cur_data = args[0];
509 var cur_data = args[0];
493 var cur_ranges = args[1];
510 var cur_ranges = args[1];
494
511
495 var new_data = [];
512 var new_data = [];
496 var inputs = choiceContainer.getElementsByTagName("input");
513 var inputs = choiceContainer.getElementsByTagName("input");
497
514
498 //show only checked labels
515 //show only checked labels
499 for(var i=0; i<inputs.length; i++) {
516 for(var i=0; i<inputs.length; i++) {
500 var checkbox_key = inputs[i].name;
517 var checkbox_key = inputs[i].name;
501
518
502 if(inputs[i].checked){
519 if(inputs[i].checked){
503 for(var d in cur_data){
520 for(var d in cur_data){
504 if(cur_data[d].label == checkbox_key){
521 if(cur_data[d].label == checkbox_key){
505 new_data.push(cur_data[d]);
522 new_data.push(cur_data[d]);
506 }
523 }
507 }
524 }
508 }
525 }
509 else{
526 else{
510 //push dummy data to not hide the label
527 //push dummy data to not hide the label
511 new_data.push(getDummyData(checkbox_key));
528 new_data.push(getDummyData(checkbox_key));
512 }
529 }
513 }
530 }
514
531
515 var new_options = YAHOO.lang.merge(plot_options, {
532 var new_options = YAHOO.lang.merge(plot_options, {
516 xaxis: {
533 xaxis: {
517 min: cur_ranges.xaxis.from,
534 min: cur_ranges.xaxis.from,
518 max: cur_ranges.xaxis.to,
535 max: cur_ranges.xaxis.to,
519 mode:"time",
536 mode:"time",
520 timeformat: "%d/%m",
537 timeformat: "%d/%m",
521 },
538 },
522 });
539 });
523 if (!new_data){
540 if (!new_data){
524 new_data = [[0,1]];
541 new_data = [[0,1]];
525 }
542 }
526 // do the zooming
543 // do the zooming
527 plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
544 plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
528
545
529 plot.subscribe("plotselected", plotselected);
546 plot.subscribe("plotselected", plotselected);
530
547
531 //resubscribe plothover
548 //resubscribe plothover
532 plot.subscribe("plothover", plothover);
549 plot.subscribe("plothover", plothover);
533
550
534 // don't fire event on the overview to prevent eternal loop
551 // don't fire event on the overview to prevent eternal loop
535 overview.setSelection(cur_ranges, true);
552 overview.setSelection(cur_ranges, true);
536
553
537 }
554 }
538
555
539 /**
556 /**
540 * plot only selected items from overview
557 * plot only selected items from overview
541 * @param ranges
558 * @param ranges
542 * @returns
559 * @returns
543 */
560 */
544 function plotselected(ranges,cur_data) {
561 function plotselected(ranges,cur_data) {
545 //updates the data for new plot
562 //updates the data for new plot
546 var data = getDataAccordingToRanges(ranges);
563 var data = getDataAccordingToRanges(ranges);
547 generateCheckboxes(data);
564 generateCheckboxes(data);
548
565
549 var new_options = YAHOO.lang.merge(plot_options, {
566 var new_options = YAHOO.lang.merge(plot_options, {
550 xaxis: {
567 xaxis: {
551 min: ranges.xaxis.from,
568 min: ranges.xaxis.from,
552 max: ranges.xaxis.to,
569 max: ranges.xaxis.to,
553 mode:"time",
570 mode:"time",
554 timeformat: "%d/%m",
571 timeformat: "%d/%m",
555 },
572 },
556 });
573 });
557 // do the zooming
574 // do the zooming
558 plot = YAHOO.widget.Flot(plotContainer, data, new_options);
575 plot = YAHOO.widget.Flot(plotContainer, data, new_options);
559
576
560 plot.subscribe("plotselected", plotselected);
577 plot.subscribe("plotselected", plotselected);
561
578
562 //resubscribe plothover
579 //resubscribe plothover
563 plot.subscribe("plothover", plothover);
580 plot.subscribe("plothover", plothover);
564
581
565 // don't fire event on the overview to prevent eternal loop
582 // don't fire event on the overview to prevent eternal loop
566 overview.setSelection(ranges, true);
583 overview.setSelection(ranges, true);
567
584
568 //resubscribe choiced
585 //resubscribe choiced
569 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
586 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
570 }
587 }
571
588
572 var previousPoint = null;
589 var previousPoint = null;
573
590
574 function plothover(o) {
591 function plothover(o) {
575 var pos = o.pos;
592 var pos = o.pos;
576 var item = o.item;
593 var item = o.item;
577
594
578 //YUD.get("x").innerHTML = pos.x.toFixed(2);
595 //YUD.get("x").innerHTML = pos.x.toFixed(2);
579 //YUD.get("y").innerHTML = pos.y.toFixed(2);
596 //YUD.get("y").innerHTML = pos.y.toFixed(2);
580 if (item) {
597 if (item) {
581 if (previousPoint != item.datapoint) {
598 if (previousPoint != item.datapoint) {
582 previousPoint = item.datapoint;
599 previousPoint = item.datapoint;
583
600
584 var tooltip = YUD.get("tooltip");
601 var tooltip = YUD.get("tooltip");
585 if(tooltip) {
602 if(tooltip) {
586 tooltip.parentNode.removeChild(tooltip);
603 tooltip.parentNode.removeChild(tooltip);
587 }
604 }
588 var x = item.datapoint.x.toFixed(2);
605 var x = item.datapoint.x.toFixed(2);
589 var y = item.datapoint.y.toFixed(2);
606 var y = item.datapoint.y.toFixed(2);
590
607
591 if (!item.series.label){
608 if (!item.series.label){
592 item.series.label = 'commits';
609 item.series.label = 'commits';
593 }
610 }
594 var d = new Date(x*1000);
611 var d = new Date(x*1000);
595 var fd = d.toDateString()
612 var fd = d.toDateString()
596 var nr_commits = parseInt(y);
613 var nr_commits = parseInt(y);
597
614
598 var cur_data = dataset[item.series.label].data[item.dataIndex];
615 var cur_data = dataset[item.series.label].data[item.dataIndex];
599 var added = cur_data.added;
616 var added = cur_data.added;
600 var changed = cur_data.changed;
617 var changed = cur_data.changed;
601 var removed = cur_data.removed;
618 var removed = cur_data.removed;
602
619
603 var nr_commits_suffix = " ${_('commits')} ";
620 var nr_commits_suffix = " ${_('commits')} ";
604 var added_suffix = " ${_('files added')} ";
621 var added_suffix = " ${_('files added')} ";
605 var changed_suffix = " ${_('files changed')} ";
622 var changed_suffix = " ${_('files changed')} ";
606 var removed_suffix = " ${_('files removed')} ";
623 var removed_suffix = " ${_('files removed')} ";
607
624
608
625
609 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
626 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
610 if(added==1){added_suffix=" ${_('file added')} ";}
627 if(added==1){added_suffix=" ${_('file added')} ";}
611 if(changed==1){changed_suffix=" ${_('file changed')} ";}
628 if(changed==1){changed_suffix=" ${_('file changed')} ";}
612 if(removed==1){removed_suffix=" ${_('file removed')} ";}
629 if(removed==1){removed_suffix=" ${_('file removed')} ";}
613
630
614 showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
631 showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
615 +'<br/>'+
632 +'<br/>'+
616 nr_commits + nr_commits_suffix+'<br/>'+
633 nr_commits + nr_commits_suffix+'<br/>'+
617 added + added_suffix +'<br/>'+
634 added + added_suffix +'<br/>'+
618 changed + changed_suffix + '<br/>'+
635 changed + changed_suffix + '<br/>'+
619 removed + removed_suffix + '<br/>');
636 removed + removed_suffix + '<br/>');
620 }
637 }
621 }
638 }
622 else {
639 else {
623 var tooltip = YUD.get("tooltip");
640 var tooltip = YUD.get("tooltip");
624
641
625 if(tooltip) {
642 if(tooltip) {
626 tooltip.parentNode.removeChild(tooltip);
643 tooltip.parentNode.removeChild(tooltip);
627 }
644 }
628 previousPoint = null;
645 previousPoint = null;
629 }
646 }
630 }
647 }
631
648
632 /**
649 /**
633 * MAIN EXECUTION
650 * MAIN EXECUTION
634 */
651 */
635
652
636 var data = getDataAccordingToRanges(initial_ranges);
653 var data = getDataAccordingToRanges(initial_ranges);
637 generateCheckboxes(data);
654 generateCheckboxes(data);
638
655
639 //main plot
656 //main plot
640 var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
657 var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
641
658
642 //overview
659 //overview
643 var overview = YAHOO.widget.Flot(overviewContainer,
660 var overview = YAHOO.widget.Flot(overviewContainer,
644 overview_dataset, overview_options);
661 overview_dataset, overview_options);
645
662
646 //show initial selection on overview
663 //show initial selection on overview
647 overview.setSelection(initial_ranges);
664 overview.setSelection(initial_ranges);
648
665
649 plot.subscribe("plotselected", plotselected);
666 plot.subscribe("plotselected", plotselected);
650 plot.subscribe("plothover", plothover)
667 plot.subscribe("plothover", plothover)
651
668
652 overview.subscribe("plotselected", function (ranges) {
669 overview.subscribe("plotselected", function (ranges) {
653 plot.setSelection(ranges);
670 plot.setSelection(ranges);
654 });
671 });
655
672
656 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
673 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
657 }
674 }
658 SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});
675 SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});
659 </script>
676 </script>
660
677
661 </div>
662 </div>
663
664 <div class="box">
665 <div class="title">
666 <div class="breadcrumbs">${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}</div>
667 </div>
668 <div class="table">
669 <div id="shortlog_data">
670 <%include file='../shortlog/shortlog_data.html'/>
671 </div>
672 ##%if c.repo_changesets:
673 ## ${h.link_to(_('show more'),h.url('changelog_home',repo_name=c.repo_name))}
674 ##%endif
675 </div>
676 </div>
677 <div class="box">
678 <div class="title">
679 <div class="breadcrumbs">${h.link_to(_('Tags'),h.url('tags_home',repo_name=c.repo_name))}</div>
680 </div>
681 <div class="table">
682 <%include file='../tags/tags_data.html'/>
683 %if c.repo_changesets:
684 ${h.link_to(_('show more'),h.url('tags_home',repo_name=c.repo_name))}
685 %endif
686 </div>
687 </div>
688 <div class="box">
689 <div class="title">
690 <div class="breadcrumbs">${h.link_to(_('Branches'),h.url('branches_home',repo_name=c.repo_name))}</div>
691 </div>
692 <div class="table">
693 <%include file='../branches/branches_data.html'/>
694 %if c.repo_changesets:
695 ${h.link_to(_('show more'),h.url('branches_home',repo_name=c.repo_name))}
696 %endif
697 </div>
698 </div>
699
700 </%def>
678 </%def>
@@ -1,127 +1,129 b''
1 import sys
1 import sys
2 from rhodecode import get_version
2 from rhodecode import get_version
3 from rhodecode import __platform__
3 from rhodecode import __platform__
4 from rhodecode import __license__
4 from rhodecode import __license__
5 from rhodecode import PLATFORM_OTHERS
5 from rhodecode import PLATFORM_OTHERS
6
6
7 py_version = sys.version_info
7 py_version = sys.version_info
8
8
9 if py_version < (2, 5):
9 if py_version < (2, 5):
10 raise Exception('RhodeCode requires python 2.5 or later')
10 raise Exception('RhodeCode requires python 2.5 or later')
11
11
12 requirements = [
12 requirements = [
13 "Pylons==1.0.0",
13 "Pylons==1.0.0",
14 "Beaker==1.5.4",
14 "Beaker==1.5.4",
15 "WebHelpers>=1.2",
15 "WebHelpers>=1.2",
16 "formencode==1.2.4",
16 "formencode==1.2.4",
17 "SQLAlchemy==0.7.3",
17 "SQLAlchemy==0.7.3",
18 "Mako==0.5.0",
18 "Mako==0.5.0",
19 "pygments>=1.4",
19 "pygments>=1.4",
20 "mercurial>=1.9.3,<2.0",
20 "mercurial>=1.9.3,<2.0",
21 "whoosh<1.8",
21 "whoosh<1.8",
22 "celery>=2.2.5,<2.3",
22 "celery>=2.2.5,<2.3",
23 "babel",
23 "babel",
24 "python-dateutil>=1.5.0,<2.0.0",
24 "python-dateutil>=1.5.0,<2.0.0",
25 "dulwich>=0.8.0,<0.9.0",
25 "dulwich>=0.8.0,<0.9.0",
26 "vcs>=0.2.3.dev",
26 "vcs>=0.2.3.dev",
27 "webob==1.0.8"
27 "webob==1.0.8",
28 "markdown==2.0.3",
29 "docutils==0.8.1",
28 ]
30 ]
29
31
30 dependency_links = [
32 dependency_links = [
31 "https://secure.rhodecode.org/vcs/archive/default.zip#egg=vcs-0.2.3.dev",
33 "https://secure.rhodecode.org/vcs/archive/default.zip#egg=vcs-0.2.3.dev",
32 "https://bitbucket.org/marcinkuzminski/vcs/get/default.zip#egg=vcs-0.2.3.dev",
34 "https://bitbucket.org/marcinkuzminski/vcs/get/default.zip#egg=vcs-0.2.3.dev",
33 ]
35 ]
34
36
35 classifiers = ['Development Status :: 4 - Beta',
37 classifiers = ['Development Status :: 4 - Beta',
36 'Environment :: Web Environment',
38 'Environment :: Web Environment',
37 'Framework :: Pylons',
39 'Framework :: Pylons',
38 'Intended Audience :: Developers',
40 'Intended Audience :: Developers',
39 'License :: OSI Approved :: GNU General Public License (GPL)',
41 'License :: OSI Approved :: GNU General Public License (GPL)',
40 'Operating System :: OS Independent',
42 'Operating System :: OS Independent',
41 'Programming Language :: Python',
43 'Programming Language :: Python',
42 'Programming Language :: Python :: 2.5',
44 'Programming Language :: Python :: 2.5',
43 'Programming Language :: Python :: 2.6',
45 'Programming Language :: Python :: 2.6',
44 'Programming Language :: Python :: 2.7', ]
46 'Programming Language :: Python :: 2.7', ]
45
47
46 if py_version < (2, 6):
48 if py_version < (2, 6):
47 requirements.append("simplejson")
49 requirements.append("simplejson")
48 requirements.append("pysqlite")
50 requirements.append("pysqlite")
49
51
50 if __platform__ in PLATFORM_OTHERS:
52 if __platform__ in PLATFORM_OTHERS:
51 requirements.append("py-bcrypt")
53 requirements.append("py-bcrypt")
52
54
53
55
54 #additional files from project that goes somewhere in the filesystem
56 #additional files from project that goes somewhere in the filesystem
55 #relative to sys.prefix
57 #relative to sys.prefix
56 data_files = []
58 data_files = []
57
59
58 #additional files that goes into package itself
60 #additional files that goes into package itself
59 package_data = {'rhodecode': ['i18n/*/LC_MESSAGES/*.mo', ], }
61 package_data = {'rhodecode': ['i18n/*/LC_MESSAGES/*.mo', ], }
60
62
61 description = ('Mercurial repository browser/management with '
63 description = ('Mercurial repository browser/management with '
62 'build in push/pull server and full text search')
64 'build in push/pull server and full text search')
63 keywords = ' '.join(['rhodecode', 'rhodiumcode', 'mercurial', 'git',
65 keywords = ' '.join(['rhodecode', 'rhodiumcode', 'mercurial', 'git',
64 'repository management', 'hgweb replacement'
66 'repository management', 'hgweb replacement'
65 'hgwebdir', 'gitweb replacement', 'serving hgweb', ])
67 'hgwebdir', 'gitweb replacement', 'serving hgweb', ])
66 #long description
68 #long description
67 try:
69 try:
68 readme_file = 'README.rst'
70 readme_file = 'README.rst'
69 changelog_file = 'docs/changelog.rst'
71 changelog_file = 'docs/changelog.rst'
70 long_description = open(readme_file).read() + '\n\n' + \
72 long_description = open(readme_file).read() + '\n\n' + \
71 open(changelog_file).read()
73 open(changelog_file).read()
72
74
73 except IOError, err:
75 except IOError, err:
74 sys.stderr.write("[WARNING] Cannot find file specified as "
76 sys.stderr.write("[WARNING] Cannot find file specified as "
75 "long_description (%s)\n or changelog (%s) skipping that file" \
77 "long_description (%s)\n or changelog (%s) skipping that file" \
76 % (readme_file, changelog_file))
78 % (readme_file, changelog_file))
77 long_description = description
79 long_description = description
78
80
79
81
80 try:
82 try:
81 from setuptools import setup, find_packages
83 from setuptools import setup, find_packages
82 except ImportError:
84 except ImportError:
83 from ez_setup import use_setuptools
85 from ez_setup import use_setuptools
84 use_setuptools()
86 use_setuptools()
85 from setuptools import setup, find_packages
87 from setuptools import setup, find_packages
86 #packages
88 #packages
87 packages = find_packages(exclude=['ez_setup'])
89 packages = find_packages(exclude=['ez_setup'])
88
90
89 setup(
91 setup(
90 name='RhodeCode',
92 name='RhodeCode',
91 version=get_version(),
93 version=get_version(),
92 description=description,
94 description=description,
93 long_description=long_description,
95 long_description=long_description,
94 keywords=keywords,
96 keywords=keywords,
95 license=__license__,
97 license=__license__,
96 author='Marcin Kuzminski',
98 author='Marcin Kuzminski',
97 author_email='marcin@python-works.com',
99 author_email='marcin@python-works.com',
98 dependency_links=dependency_links,
100 dependency_links=dependency_links,
99 url='http://rhodecode.org',
101 url='http://rhodecode.org',
100 install_requires=requirements,
102 install_requires=requirements,
101 classifiers=classifiers,
103 classifiers=classifiers,
102 setup_requires=["PasteScript>=1.6.3"],
104 setup_requires=["PasteScript>=1.6.3"],
103 data_files=data_files,
105 data_files=data_files,
104 packages=packages,
106 packages=packages,
105 include_package_data=True,
107 include_package_data=True,
106 test_suite='nose.collector',
108 test_suite='nose.collector',
107 package_data=package_data,
109 package_data=package_data,
108 message_extractors={'rhodecode': [
110 message_extractors={'rhodecode': [
109 ('**.py', 'python', None),
111 ('**.py', 'python', None),
110 ('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}),
112 ('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}),
111 ('templates/**.html', 'mako', {'input_encoding': 'utf-8'}),
113 ('templates/**.html', 'mako', {'input_encoding': 'utf-8'}),
112 ('public/**', 'ignore', None)]},
114 ('public/**', 'ignore', None)]},
113 zip_safe=False,
115 zip_safe=False,
114 paster_plugins=['PasteScript', 'Pylons'],
116 paster_plugins=['PasteScript', 'Pylons'],
115 entry_points="""
117 entry_points="""
116 [paste.app_factory]
118 [paste.app_factory]
117 main = rhodecode.config.middleware:make_app
119 main = rhodecode.config.middleware:make_app
118
120
119 [paste.app_install]
121 [paste.app_install]
120 main = pylons.util:PylonsInstaller
122 main = pylons.util:PylonsInstaller
121
123
122 [paste.global_paster_command]
124 [paste.global_paster_command]
123 make-index = rhodecode.lib.indexers:MakeIndex
125 make-index = rhodecode.lib.indexers:MakeIndex
124 upgrade-db = rhodecode.lib.dbmigrate:UpgradeDb
126 upgrade-db = rhodecode.lib.dbmigrate:UpgradeDb
125 celeryd=rhodecode.lib.celerypylons.commands:CeleryDaemonCommand
127 celeryd=rhodecode.lib.celerypylons.commands:CeleryDaemonCommand
126 """,
128 """,
127 )
129 )
General Comments 0
You need to be logged in to leave comments. Login now