##// END OF EJS Templates
added uploading of files from web interface directly into repo
marcink -
r1485:269905fa beta
parent child Browse files
Show More
@@ -1,500 +1,507 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.controllers.files
3 rhodecode.controllers.files
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
5
6 Files controller for RhodeCode
6 Files controller for RhodeCode
7
7
8 :created_on: Apr 21, 2010
8 :created_on: Apr 21, 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 os
26 import os
27 import logging
27 import logging
28 import traceback
28 import traceback
29
29
30 from os.path import join as jn
30 from os.path import join as jn
31
31
32 from pylons import request, response, session, tmpl_context as c, url
32 from pylons import request, response, session, tmpl_context as c, url
33 from pylons.i18n.translation import _
33 from pylons.i18n.translation import _
34 from pylons.controllers.util import redirect
34 from pylons.controllers.util import redirect
35 from pylons.decorators import jsonify
35 from pylons.decorators import jsonify
36
36
37 from vcs.conf import settings
37 from vcs.conf import settings
38 from vcs.exceptions import RepositoryError, ChangesetDoesNotExistError, \
38 from vcs.exceptions import RepositoryError, ChangesetDoesNotExistError, \
39 EmptyRepositoryError, ImproperArchiveTypeError, VCSError
39 EmptyRepositoryError, ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError
40 from vcs.nodes import FileNode, NodeKind
40 from vcs.nodes import FileNode, NodeKind
41 from vcs.utils import diffs as differ
41 from vcs.utils import diffs as differ
42
42
43 from rhodecode.lib import convert_line_endings, detect_mode, safe_str
43 from rhodecode.lib import convert_line_endings, detect_mode, safe_str
44 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
44 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
45 from rhodecode.lib.base import BaseRepoController, render
45 from rhodecode.lib.base import BaseRepoController, render
46 from rhodecode.lib.utils import EmptyChangeset
46 from rhodecode.lib.utils import EmptyChangeset
47 import rhodecode.lib.helpers as h
47 import rhodecode.lib.helpers as h
48 from rhodecode.model.repo import RepoModel
48 from rhodecode.model.repo import RepoModel
49
49
50 log = logging.getLogger(__name__)
50 log = logging.getLogger(__name__)
51
51
52
52
53 class FilesController(BaseRepoController):
53 class FilesController(BaseRepoController):
54
54
55 @LoginRequired()
55 @LoginRequired()
56 def __before__(self):
56 def __before__(self):
57 super(FilesController, self).__before__()
57 super(FilesController, self).__before__()
58 c.cut_off_limit = self.cut_off_limit
58 c.cut_off_limit = self.cut_off_limit
59
59
60 def __get_cs_or_redirect(self, rev, repo_name, redirect_after=True):
60 def __get_cs_or_redirect(self, rev, repo_name, redirect_after=True):
61 """
61 """
62 Safe way to get changeset if error occur it redirects to tip with
62 Safe way to get changeset if error occur it redirects to tip with
63 proper message
63 proper message
64
64
65 :param rev: revision to fetch
65 :param rev: revision to fetch
66 :param repo_name: repo name to redirect after
66 :param repo_name: repo name to redirect after
67 """
67 """
68
68
69 try:
69 try:
70 return c.rhodecode_repo.get_changeset(rev)
70 return c.rhodecode_repo.get_changeset(rev)
71 except EmptyRepositoryError, e:
71 except EmptyRepositoryError, e:
72 if not redirect_after:
72 if not redirect_after:
73 return None
73 return None
74 url_ = url('files_add_home',
74 url_ = url('files_add_home',
75 repo_name=c.repo_name,
75 repo_name=c.repo_name,
76 revision=0,f_path='')
76 revision=0, f_path='')
77 add_new = '<a href="%s">[%s]</a>' % (url_,_('add new'))
77 add_new = '<a href="%s">[%s]</a>' % (url_, _('add new'))
78 h.flash(h.literal(_('There are no files yet %s' % add_new)),
78 h.flash(h.literal(_('There are no files yet %s' % add_new)),
79 category='warning')
79 category='warning')
80 redirect(h.url('summary_home', repo_name=repo_name))
80 redirect(h.url('summary_home', repo_name=repo_name))
81
81
82 except RepositoryError, e:
82 except RepositoryError, e:
83 h.flash(str(e), category='warning')
83 h.flash(str(e), category='warning')
84 redirect(h.url('files_home', repo_name=repo_name, revision='tip'))
84 redirect(h.url('files_home', repo_name=repo_name, revision='tip'))
85
85
86 def __get_filenode_or_redirect(self, repo_name, cs, path):
86 def __get_filenode_or_redirect(self, repo_name, cs, path):
87 """
87 """
88 Returns file_node, if error occurs or given path is directory,
88 Returns file_node, if error occurs or given path is directory,
89 it'll redirect to top level path
89 it'll redirect to top level path
90
90
91 :param repo_name: repo_name
91 :param repo_name: repo_name
92 :param cs: given changeset
92 :param cs: given changeset
93 :param path: path to lookup
93 :param path: path to lookup
94 """
94 """
95
95
96 try:
96 try:
97 file_node = cs.get_node(path)
97 file_node = cs.get_node(path)
98 if file_node.is_dir():
98 if file_node.is_dir():
99 raise RepositoryError('given path is a directory')
99 raise RepositoryError('given path is a directory')
100 except RepositoryError, e:
100 except RepositoryError, e:
101 h.flash(str(e), category='warning')
101 h.flash(str(e), category='warning')
102 redirect(h.url('files_home', repo_name=repo_name,
102 redirect(h.url('files_home', repo_name=repo_name,
103 revision=cs.raw_id))
103 revision=cs.raw_id))
104
104
105 return file_node
105 return file_node
106
106
107
107
108 def __get_paths(self, changeset, starting_path):
108 def __get_paths(self, changeset, starting_path):
109 """recursive walk in root dir and return a set of all path in that dir
109 """recursive walk in root dir and return a set of all path in that dir
110 based on repository walk function
110 based on repository walk function
111 """
111 """
112 _files = list()
112 _files = list()
113 _dirs = list()
113 _dirs = list()
114
114
115 try:
115 try:
116 tip = changeset
116 tip = changeset
117 for topnode, dirs, files in tip.walk(starting_path):
117 for topnode, dirs, files in tip.walk(starting_path):
118 for f in files:
118 for f in files:
119 _files.append(f.path)
119 _files.append(f.path)
120 for d in dirs:
120 for d in dirs:
121 _dirs.append(d.path)
121 _dirs.append(d.path)
122 except RepositoryError, e:
122 except RepositoryError, e:
123 log.debug(traceback.format_exc())
123 log.debug(traceback.format_exc())
124 pass
124 pass
125 return _dirs, _files
125 return _dirs, _files
126
126
127 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
127 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
128 'repository.admin')
128 'repository.admin')
129 def index(self, repo_name, revision, f_path):
129 def index(self, repo_name, revision, f_path):
130 #reditect to given revision from form if given
130 #reditect to given revision from form if given
131 post_revision = request.POST.get('at_rev', None)
131 post_revision = request.POST.get('at_rev', None)
132 if post_revision:
132 if post_revision:
133 cs = self.__get_cs_or_redirect(post_revision, repo_name)
133 cs = self.__get_cs_or_redirect(post_revision, repo_name)
134 redirect(url('files_home', repo_name=c.repo_name,
134 redirect(url('files_home', repo_name=c.repo_name,
135 revision=cs.raw_id, f_path=f_path))
135 revision=cs.raw_id, f_path=f_path))
136
136
137 c.changeset = self.__get_cs_or_redirect(revision, repo_name)
137 c.changeset = self.__get_cs_or_redirect(revision, repo_name)
138 c.branch = request.GET.get('branch', None)
138 c.branch = request.GET.get('branch', None)
139 c.f_path = f_path
139 c.f_path = f_path
140
140
141 cur_rev = c.changeset.revision
141 cur_rev = c.changeset.revision
142
142
143 #prev link
143 #prev link
144 try:
144 try:
145 prev_rev = c.rhodecode_repo.get_changeset(cur_rev).prev(c.branch)
145 prev_rev = c.rhodecode_repo.get_changeset(cur_rev).prev(c.branch)
146 c.url_prev = url('files_home', repo_name=c.repo_name,
146 c.url_prev = url('files_home', repo_name=c.repo_name,
147 revision=prev_rev.raw_id, f_path=f_path)
147 revision=prev_rev.raw_id, f_path=f_path)
148 if c.branch:
148 if c.branch:
149 c.url_prev += '?branch=%s' % c.branch
149 c.url_prev += '?branch=%s' % c.branch
150 except (ChangesetDoesNotExistError, VCSError):
150 except (ChangesetDoesNotExistError, VCSError):
151 c.url_prev = '#'
151 c.url_prev = '#'
152
152
153 #next link
153 #next link
154 try:
154 try:
155 next_rev = c.rhodecode_repo.get_changeset(cur_rev).next(c.branch)
155 next_rev = c.rhodecode_repo.get_changeset(cur_rev).next(c.branch)
156 c.url_next = url('files_home', repo_name=c.repo_name,
156 c.url_next = url('files_home', repo_name=c.repo_name,
157 revision=next_rev.raw_id, f_path=f_path)
157 revision=next_rev.raw_id, f_path=f_path)
158 if c.branch:
158 if c.branch:
159 c.url_next += '?branch=%s' % c.branch
159 c.url_next += '?branch=%s' % c.branch
160 except (ChangesetDoesNotExistError, VCSError):
160 except (ChangesetDoesNotExistError, VCSError):
161 c.url_next = '#'
161 c.url_next = '#'
162
162
163 #files or dirs
163 #files or dirs
164 try:
164 try:
165 c.files_list = c.changeset.get_node(f_path)
165 c.files_list = c.changeset.get_node(f_path)
166
166
167 if c.files_list.is_file():
167 if c.files_list.is_file():
168 c.file_history = self._get_node_history(c.changeset, f_path)
168 c.file_history = self._get_node_history(c.changeset, f_path)
169 else:
169 else:
170 c.file_history = []
170 c.file_history = []
171 except RepositoryError, e:
171 except RepositoryError, e:
172 h.flash(str(e), category='warning')
172 h.flash(str(e), category='warning')
173 redirect(h.url('files_home', repo_name=repo_name,
173 redirect(h.url('files_home', repo_name=repo_name,
174 revision=revision))
174 revision=revision))
175
175
176 return render('files/files.html')
176 return render('files/files.html')
177
177
178 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
178 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
179 'repository.admin')
179 'repository.admin')
180 def rawfile(self, repo_name, revision, f_path):
180 def rawfile(self, repo_name, revision, f_path):
181 cs = self.__get_cs_or_redirect(revision, repo_name)
181 cs = self.__get_cs_or_redirect(revision, repo_name)
182 file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path)
182 file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path)
183
183
184 response.content_disposition = 'attachment; filename=%s' % \
184 response.content_disposition = 'attachment; filename=%s' % \
185 safe_str(f_path.split(os.sep)[-1])
185 safe_str(f_path.split(os.sep)[-1])
186
186
187 response.content_type = file_node.mimetype
187 response.content_type = file_node.mimetype
188 return file_node.content
188 return file_node.content
189
189
190 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
190 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
191 'repository.admin')
191 'repository.admin')
192 def raw(self, repo_name, revision, f_path):
192 def raw(self, repo_name, revision, f_path):
193 cs = self.__get_cs_or_redirect(revision, repo_name)
193 cs = self.__get_cs_or_redirect(revision, repo_name)
194 file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path)
194 file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path)
195
195
196 raw_mimetype_mapping = {
196 raw_mimetype_mapping = {
197 # map original mimetype to a mimetype used for "show as raw"
197 # map original mimetype to a mimetype used for "show as raw"
198 # you can also provide a content-disposition to override the
198 # you can also provide a content-disposition to override the
199 # default "attachment" disposition.
199 # default "attachment" disposition.
200 # orig_type: (new_type, new_dispo)
200 # orig_type: (new_type, new_dispo)
201
201
202 # show images inline:
202 # show images inline:
203 'image/x-icon': ('image/x-icon', 'inline'),
203 'image/x-icon': ('image/x-icon', 'inline'),
204 'image/png': ('image/png', 'inline'),
204 'image/png': ('image/png', 'inline'),
205 'image/gif': ('image/gif', 'inline'),
205 'image/gif': ('image/gif', 'inline'),
206 'image/jpeg': ('image/jpeg', 'inline'),
206 'image/jpeg': ('image/jpeg', 'inline'),
207 'image/svg+xml': ('image/svg+xml', 'inline'),
207 'image/svg+xml': ('image/svg+xml', 'inline'),
208 }
208 }
209
209
210 mimetype = file_node.mimetype
210 mimetype = file_node.mimetype
211 try:
211 try:
212 mimetype, dispo = raw_mimetype_mapping[mimetype]
212 mimetype, dispo = raw_mimetype_mapping[mimetype]
213 except KeyError:
213 except KeyError:
214 # we don't know anything special about this, handle it safely
214 # we don't know anything special about this, handle it safely
215 if file_node.is_binary:
215 if file_node.is_binary:
216 # do same as download raw for binary files
216 # do same as download raw for binary files
217 mimetype, dispo = 'application/octet-stream', 'attachment'
217 mimetype, dispo = 'application/octet-stream', 'attachment'
218 else:
218 else:
219 # do not just use the original mimetype, but force text/plain,
219 # do not just use the original mimetype, but force text/plain,
220 # otherwise it would serve text/html and that might be unsafe.
220 # otherwise it would serve text/html and that might be unsafe.
221 # Note: underlying vcs library fakes text/plain mimetype if the
221 # Note: underlying vcs library fakes text/plain mimetype if the
222 # mimetype can not be determined and it thinks it is not
222 # mimetype can not be determined and it thinks it is not
223 # binary.This might lead to erroneous text display in some
223 # binary.This might lead to erroneous text display in some
224 # cases, but helps in other cases, like with text files
224 # cases, but helps in other cases, like with text files
225 # without extension.
225 # without extension.
226 mimetype, dispo = 'text/plain', 'inline'
226 mimetype, dispo = 'text/plain', 'inline'
227
227
228 if dispo == 'attachment':
228 if dispo == 'attachment':
229 dispo = 'attachment; filename=%s' % \
229 dispo = 'attachment; filename=%s' % \
230 safe_str(f_path.split(os.sep)[-1])
230 safe_str(f_path.split(os.sep)[-1])
231
231
232 response.content_disposition = dispo
232 response.content_disposition = dispo
233 response.content_type = mimetype
233 response.content_type = mimetype
234 return file_node.content
234 return file_node.content
235
235
236 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
236 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
237 'repository.admin')
237 'repository.admin')
238 def annotate(self, repo_name, revision, f_path):
238 def annotate(self, repo_name, revision, f_path):
239 c.cs = self.__get_cs_or_redirect(revision, repo_name)
239 c.cs = self.__get_cs_or_redirect(revision, repo_name)
240 c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
240 c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
241
241
242 c.file_history = self._get_node_history(c.cs, f_path)
242 c.file_history = self._get_node_history(c.cs, f_path)
243 c.f_path = f_path
243 c.f_path = f_path
244 return render('files/files_annotate.html')
244 return render('files/files_annotate.html')
245
245
246 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
246 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
247 def edit(self, repo_name, revision, f_path):
247 def edit(self, repo_name, revision, f_path):
248 r_post = request.POST
248 r_post = request.POST
249
249
250 c.cs = self.__get_cs_or_redirect(revision, repo_name)
250 c.cs = self.__get_cs_or_redirect(revision, repo_name)
251 c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
251 c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
252
252
253 if c.file.is_binary:
253 if c.file.is_binary:
254 return redirect(url('files_home', repo_name=c.repo_name,
254 return redirect(url('files_home', repo_name=c.repo_name,
255 revision=c.cs.raw_id, f_path=f_path))
255 revision=c.cs.raw_id, f_path=f_path))
256
256
257 c.f_path = f_path
257 c.f_path = f_path
258
258
259 if r_post:
259 if r_post:
260
260
261 old_content = c.file.content
261 old_content = c.file.content
262 sl = old_content.splitlines(1)
262 sl = old_content.splitlines(1)
263 first_line = sl[0] if sl else ''
263 first_line = sl[0] if sl else ''
264 # modes: 0 - Unix, 1 - Mac, 2 - DOS
264 # modes: 0 - Unix, 1 - Mac, 2 - DOS
265 mode = detect_mode(first_line, 0)
265 mode = detect_mode(first_line, 0)
266 content = convert_line_endings(r_post.get('content'), mode)
266 content = convert_line_endings(r_post.get('content'), mode)
267
267
268 message = r_post.get('message') or (_('Edited %s via RhodeCode')
268 message = r_post.get('message') or (_('Edited %s via RhodeCode')
269 % (f_path))
269 % (f_path))
270 author = self.rhodecode_user.full_contact
270 author = self.rhodecode_user.full_contact
271
271
272 if content == old_content:
272 if content == old_content:
273 h.flash(_('No changes'),
273 h.flash(_('No changes'),
274 category='warning')
274 category='warning')
275 return redirect(url('changeset_home', repo_name=c.repo_name,
275 return redirect(url('changeset_home', repo_name=c.repo_name,
276 revision='tip'))
276 revision='tip'))
277
277
278 try:
278 try:
279 self.scm_model.commit_change(repo=c.rhodecode_repo,
279 self.scm_model.commit_change(repo=c.rhodecode_repo,
280 repo_name=repo_name, cs=c.cs,
280 repo_name=repo_name, cs=c.cs,
281 user=self.rhodecode_user,
281 user=self.rhodecode_user,
282 author=author, message=message,
282 author=author, message=message,
283 content=content, f_path=f_path)
283 content=content, f_path=f_path)
284 h.flash(_('Successfully committed to %s' % f_path),
284 h.flash(_('Successfully committed to %s' % f_path),
285 category='success')
285 category='success')
286
286
287 except Exception:
287 except Exception:
288 log.error(traceback.format_exc())
288 log.error(traceback.format_exc())
289 h.flash(_('Error occurred during commit'), category='error')
289 h.flash(_('Error occurred during commit'), category='error')
290 return redirect(url('changeset_home',
290 return redirect(url('changeset_home',
291 repo_name=c.repo_name, revision='tip'))
291 repo_name=c.repo_name, revision='tip'))
292
292
293 return render('files/files_edit.html')
293 return render('files/files_edit.html')
294
294
295 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
295 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
296 def add(self, repo_name, revision, f_path):
296 def add(self, repo_name, revision, f_path):
297 r_post = request.POST
297 r_post = request.POST
298 c.cs = self.__get_cs_or_redirect(revision, repo_name,
298 c.cs = self.__get_cs_or_redirect(revision, repo_name,
299 redirect_after=False)
299 redirect_after=False)
300 if c.cs is None:
300 if c.cs is None:
301 c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias)
301 c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias)
302
302
303 c.f_path = f_path
303 c.f_path = f_path
304
304
305 if r_post:
305 if r_post:
306 unix_mode = 0
306 unix_mode = 0
307 content = convert_line_endings(r_post.get('content'), unix_mode)
307 content = convert_line_endings(r_post.get('content'), unix_mode)
308
308
309 message = r_post.get('message') or (_('Added %s via RhodeCode')
309 message = r_post.get('message') or (_('Added %s via RhodeCode')
310 % (f_path))
310 % (f_path))
311 location = r_post.get('location')
311 location = r_post.get('location')
312 filename = r_post.get('filename')
312 filename = r_post.get('filename')
313 file_obj = r_post.get('upload_file', None)
314
315 if file_obj is not None and hasattr(file_obj, 'filename'):
316 filename = file_obj.filename
317 content = file_obj.file
318
313 node_path = os.path.join(location, filename)
319 node_path = os.path.join(location, filename)
314 author = self.rhodecode_user.full_contact
320 author = self.rhodecode_user.full_contact
315
321
316 if not content:
322 if not content:
317 h.flash(_('No content'), category='warning')
323 h.flash(_('No content'), category='warning')
318 return redirect(url('changeset_home', repo_name=c.repo_name,
324 return redirect(url('changeset_home', repo_name=c.repo_name,
319 revision='tip'))
325 revision='tip'))
320 if not filename:
326 if not filename:
321 h.flash(_('No filename'), category='warning')
327 h.flash(_('No filename'), category='warning')
322 return redirect(url('changeset_home', repo_name=c.repo_name,
328 return redirect(url('changeset_home', repo_name=c.repo_name,
323 revision='tip'))
329 revision='tip'))
324
330
325 try:
331 try:
326 self.scm_model.create_node(repo=c.rhodecode_repo,
332 self.scm_model.create_node(repo=c.rhodecode_repo,
327 repo_name=repo_name, cs=c.cs,
333 repo_name=repo_name, cs=c.cs,
328 user=self.rhodecode_user,
334 user=self.rhodecode_user,
329 author=author, message=message,
335 author=author, message=message,
330 content=content, f_path=node_path)
336 content=content, f_path=node_path)
331 h.flash(_('Successfully committed to %s' % node_path),
337 h.flash(_('Successfully committed to %s' % node_path),
332 category='success')
338 category='success')
333
339 except NodeAlreadyExistsError, e:
340 h.flash(_(e), category='error')
334 except Exception:
341 except Exception:
335 log.error(traceback.format_exc())
342 log.error(traceback.format_exc())
336 h.flash(_('Error occurred during commit'), category='error')
343 h.flash(_('Error occurred during commit'), category='error')
337 return redirect(url('changeset_home',
344 return redirect(url('changeset_home',
338 repo_name=c.repo_name, revision='tip'))
345 repo_name=c.repo_name, revision='tip'))
339
346
340 return render('files/files_add.html')
347 return render('files/files_add.html')
341
348
342 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
349 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
343 'repository.admin')
350 'repository.admin')
344 def archivefile(self, repo_name, fname):
351 def archivefile(self, repo_name, fname):
345
352
346 fileformat = None
353 fileformat = None
347 revision = None
354 revision = None
348 ext = None
355 ext = None
349 subrepos = request.GET.get('subrepos') == 'true'
356 subrepos = request.GET.get('subrepos') == 'true'
350
357
351 for a_type, ext_data in settings.ARCHIVE_SPECS.items():
358 for a_type, ext_data in settings.ARCHIVE_SPECS.items():
352 archive_spec = fname.split(ext_data[1])
359 archive_spec = fname.split(ext_data[1])
353 if len(archive_spec) == 2 and archive_spec[1] == '':
360 if len(archive_spec) == 2 and archive_spec[1] == '':
354 fileformat = a_type or ext_data[1]
361 fileformat = a_type or ext_data[1]
355 revision = archive_spec[0]
362 revision = archive_spec[0]
356 ext = ext_data[1]
363 ext = ext_data[1]
357
364
358 try:
365 try:
359 dbrepo = RepoModel().get_by_repo_name(repo_name)
366 dbrepo = RepoModel().get_by_repo_name(repo_name)
360 if dbrepo.enable_downloads is False:
367 if dbrepo.enable_downloads is False:
361 return _('downloads disabled')
368 return _('downloads disabled')
362
369
363 cs = c.rhodecode_repo.get_changeset(revision)
370 cs = c.rhodecode_repo.get_changeset(revision)
364 content_type = settings.ARCHIVE_SPECS[fileformat][0]
371 content_type = settings.ARCHIVE_SPECS[fileformat][0]
365 except ChangesetDoesNotExistError:
372 except ChangesetDoesNotExistError:
366 return _('Unknown revision %s') % revision
373 return _('Unknown revision %s') % revision
367 except EmptyRepositoryError:
374 except EmptyRepositoryError:
368 return _('Empty repository')
375 return _('Empty repository')
369 except (ImproperArchiveTypeError, KeyError):
376 except (ImproperArchiveTypeError, KeyError):
370 return _('Unknown archive type')
377 return _('Unknown archive type')
371
378
372 response.content_type = content_type
379 response.content_type = content_type
373 response.content_disposition = 'attachment; filename=%s-%s%s' \
380 response.content_disposition = 'attachment; filename=%s-%s%s' \
374 % (repo_name, revision, ext)
381 % (repo_name, revision, ext)
375
382
376 import tempfile
383 import tempfile
377 archive = tempfile.mkstemp()[1]
384 archive = tempfile.mkstemp()[1]
378 t = open(archive, 'wb')
385 t = open(archive, 'wb')
379 cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
386 cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
380
387
381 def get_chunked_archive(archive):
388 def get_chunked_archive(archive):
382 stream = open(archive, 'rb')
389 stream = open(archive, 'rb')
383 while True:
390 while True:
384 data = stream.read(4096)
391 data = stream.read(4096)
385 if not data:
392 if not data:
386 os.remove(archive)
393 os.remove(archive)
387 break
394 break
388 yield data
395 yield data
389
396
390 return get_chunked_archive(archive)
397 return get_chunked_archive(archive)
391
398
392 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
399 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
393 'repository.admin')
400 'repository.admin')
394 def diff(self, repo_name, f_path):
401 def diff(self, repo_name, f_path):
395 diff1 = request.GET.get('diff1')
402 diff1 = request.GET.get('diff1')
396 diff2 = request.GET.get('diff2')
403 diff2 = request.GET.get('diff2')
397 c.action = request.GET.get('diff')
404 c.action = request.GET.get('diff')
398 c.no_changes = diff1 == diff2
405 c.no_changes = diff1 == diff2
399 c.f_path = f_path
406 c.f_path = f_path
400 c.big_diff = False
407 c.big_diff = False
401
408
402 try:
409 try:
403 if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]:
410 if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]:
404 c.changeset_1 = c.rhodecode_repo.get_changeset(diff1)
411 c.changeset_1 = c.rhodecode_repo.get_changeset(diff1)
405 node1 = c.changeset_1.get_node(f_path)
412 node1 = c.changeset_1.get_node(f_path)
406 else:
413 else:
407 c.changeset_1 = EmptyChangeset(repo=c.rhodecode_repo)
414 c.changeset_1 = EmptyChangeset(repo=c.rhodecode_repo)
408 node1 = FileNode('.', '', changeset=c.changeset_1)
415 node1 = FileNode('.', '', changeset=c.changeset_1)
409
416
410 if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]:
417 if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]:
411 c.changeset_2 = c.rhodecode_repo.get_changeset(diff2)
418 c.changeset_2 = c.rhodecode_repo.get_changeset(diff2)
412 node2 = c.changeset_2.get_node(f_path)
419 node2 = c.changeset_2.get_node(f_path)
413 else:
420 else:
414 c.changeset_2 = EmptyChangeset(repo=c.rhodecode_repo)
421 c.changeset_2 = EmptyChangeset(repo=c.rhodecode_repo)
415 node2 = FileNode('.', '', changeset=c.changeset_2)
422 node2 = FileNode('.', '', changeset=c.changeset_2)
416 except RepositoryError:
423 except RepositoryError:
417 return redirect(url('files_home',
424 return redirect(url('files_home',
418 repo_name=c.repo_name, f_path=f_path))
425 repo_name=c.repo_name, f_path=f_path))
419
426
420 if c.action == 'download':
427 if c.action == 'download':
421 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
428 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
422 format='gitdiff')
429 format='gitdiff')
423
430
424 diff_name = '%s_vs_%s.diff' % (diff1, diff2)
431 diff_name = '%s_vs_%s.diff' % (diff1, diff2)
425 response.content_type = 'text/plain'
432 response.content_type = 'text/plain'
426 response.content_disposition = 'attachment; filename=%s' \
433 response.content_disposition = 'attachment; filename=%s' \
427 % diff_name
434 % diff_name
428 return diff.raw_diff()
435 return diff.raw_diff()
429
436
430 elif c.action == 'raw':
437 elif c.action == 'raw':
431 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
438 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
432 format='gitdiff')
439 format='gitdiff')
433 response.content_type = 'text/plain'
440 response.content_type = 'text/plain'
434 return diff.raw_diff()
441 return diff.raw_diff()
435
442
436 elif c.action == 'diff':
443 elif c.action == 'diff':
437 if node1.is_binary or node2.is_binary:
444 if node1.is_binary or node2.is_binary:
438 c.cur_diff = _('Binary file')
445 c.cur_diff = _('Binary file')
439 elif node1.size > self.cut_off_limit or \
446 elif node1.size > self.cut_off_limit or \
440 node2.size > self.cut_off_limit:
447 node2.size > self.cut_off_limit:
441 c.cur_diff = ''
448 c.cur_diff = ''
442 c.big_diff = True
449 c.big_diff = True
443 else:
450 else:
444 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
451 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
445 format='gitdiff')
452 format='gitdiff')
446 c.cur_diff = diff.as_html()
453 c.cur_diff = diff.as_html()
447 else:
454 else:
448
455
449 #default option
456 #default option
450 if node1.is_binary or node2.is_binary:
457 if node1.is_binary or node2.is_binary:
451 c.cur_diff = _('Binary file')
458 c.cur_diff = _('Binary file')
452 elif node1.size > self.cut_off_limit or \
459 elif node1.size > self.cut_off_limit or \
453 node2.size > self.cut_off_limit:
460 node2.size > self.cut_off_limit:
454 c.cur_diff = ''
461 c.cur_diff = ''
455 c.big_diff = True
462 c.big_diff = True
456
463
457 else:
464 else:
458 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
465 diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2),
459 format='gitdiff')
466 format='gitdiff')
460 c.cur_diff = diff.as_html()
467 c.cur_diff = diff.as_html()
461
468
462 if not c.cur_diff and not c.big_diff:
469 if not c.cur_diff and not c.big_diff:
463 c.no_changes = True
470 c.no_changes = True
464 return render('files/file_diff.html')
471 return render('files/file_diff.html')
465
472
466 def _get_node_history(self, cs, f_path):
473 def _get_node_history(self, cs, f_path):
467 changesets = cs.get_file_history(f_path)
474 changesets = cs.get_file_history(f_path)
468 hist_l = []
475 hist_l = []
469
476
470 changesets_group = ([], _("Changesets"))
477 changesets_group = ([], _("Changesets"))
471 branches_group = ([], _("Branches"))
478 branches_group = ([], _("Branches"))
472 tags_group = ([], _("Tags"))
479 tags_group = ([], _("Tags"))
473
480
474 for chs in changesets:
481 for chs in changesets:
475 n_desc = 'r%s:%s' % (chs.revision, chs.short_id)
482 n_desc = 'r%s:%s' % (chs.revision, chs.short_id)
476 changesets_group[0].append((chs.raw_id, n_desc,))
483 changesets_group[0].append((chs.raw_id, n_desc,))
477
484
478 hist_l.append(changesets_group)
485 hist_l.append(changesets_group)
479
486
480 for name, chs in c.rhodecode_repo.branches.items():
487 for name, chs in c.rhodecode_repo.branches.items():
481 #chs = chs.split(':')[-1]
488 #chs = chs.split(':')[-1]
482 branches_group[0].append((chs, name),)
489 branches_group[0].append((chs, name),)
483 hist_l.append(branches_group)
490 hist_l.append(branches_group)
484
491
485 for name, chs in c.rhodecode_repo.tags.items():
492 for name, chs in c.rhodecode_repo.tags.items():
486 #chs = chs.split(':')[-1]
493 #chs = chs.split(':')[-1]
487 tags_group[0].append((chs, name),)
494 tags_group[0].append((chs, name),)
488 hist_l.append(tags_group)
495 hist_l.append(tags_group)
489
496
490 return hist_l
497 return hist_l
491
498
492 @jsonify
499 @jsonify
493 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
500 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
494 'repository.admin')
501 'repository.admin')
495 def nodelist(self, repo_name, revision, f_path):
502 def nodelist(self, repo_name, revision, f_path):
496 if request.environ.get('HTTP_X_PARTIAL_XHR'):
503 if request.environ.get('HTTP_X_PARTIAL_XHR'):
497 cs = self.__get_cs_or_redirect(revision, repo_name)
504 cs = self.__get_cs_or_redirect(revision, repo_name)
498 _d, _f = self.__get_paths(cs, f_path)
505 _d, _f = self.__get_paths(cs, f_path)
499 return _d + _f
506 return _d + _f
500
507
@@ -1,402 +1,407 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.model.scm
3 rhodecode.model.scm
4 ~~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~~
5
5
6 Scm model for RhodeCode
6 Scm model for RhodeCode
7
7
8 :created_on: Apr 9, 2010
8 :created_on: Apr 9, 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 import os
25 import os
26 import time
26 import time
27 import traceback
27 import traceback
28 import logging
28 import logging
29
29
30 from sqlalchemy.exc import DatabaseError
30 from sqlalchemy.exc import DatabaseError
31
31
32 from vcs import get_backend
32 from vcs import get_backend
33 from vcs.exceptions import RepositoryError
33 from vcs.exceptions import RepositoryError
34 from vcs.utils.lazy import LazyProperty
34 from vcs.utils.lazy import LazyProperty
35 from vcs.nodes import FileNode
35 from vcs.nodes import FileNode
36
36
37 from rhodecode import BACKENDS
37 from rhodecode import BACKENDS
38 from rhodecode.lib import helpers as h
38 from rhodecode.lib import helpers as h
39 from rhodecode.lib import safe_str
39 from rhodecode.lib import safe_str
40 from rhodecode.lib.auth import HasRepoPermissionAny
40 from rhodecode.lib.auth import HasRepoPermissionAny
41 from rhodecode.lib.utils import get_repos as get_filesystem_repos, make_ui, \
41 from rhodecode.lib.utils import get_repos as get_filesystem_repos, make_ui, \
42 action_logger, EmptyChangeset
42 action_logger, EmptyChangeset
43 from rhodecode.model import BaseModel
43 from rhodecode.model import BaseModel
44 from rhodecode.model.user import UserModel
44 from rhodecode.model.user import UserModel
45 from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \
45 from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \
46 UserFollowing, UserLog
46 UserFollowing, UserLog
47
47
48 log = logging.getLogger(__name__)
48 log = logging.getLogger(__name__)
49
49
50
50
51 class UserTemp(object):
51 class UserTemp(object):
52 def __init__(self, user_id):
52 def __init__(self, user_id):
53 self.user_id = user_id
53 self.user_id = user_id
54
54
55 def __repr__(self):
55 def __repr__(self):
56 return "<%s('id:%s')>" % (self.__class__.__name__, self.user_id)
56 return "<%s('id:%s')>" % (self.__class__.__name__, self.user_id)
57
57
58
58
59 class RepoTemp(object):
59 class RepoTemp(object):
60 def __init__(self, repo_id):
60 def __init__(self, repo_id):
61 self.repo_id = repo_id
61 self.repo_id = repo_id
62
62
63 def __repr__(self):
63 def __repr__(self):
64 return "<%s('id:%s')>" % (self.__class__.__name__, self.repo_id)
64 return "<%s('id:%s')>" % (self.__class__.__name__, self.repo_id)
65
65
66 class CachedRepoList(object):
66 class CachedRepoList(object):
67
67
68 def __init__(self, db_repo_list, repos_path, order_by=None):
68 def __init__(self, db_repo_list, repos_path, order_by=None):
69 self.db_repo_list = db_repo_list
69 self.db_repo_list = db_repo_list
70 self.repos_path = repos_path
70 self.repos_path = repos_path
71 self.order_by = order_by
71 self.order_by = order_by
72 self.reversed = (order_by or '').startswith('-')
72 self.reversed = (order_by or '').startswith('-')
73
73
74 def __len__(self):
74 def __len__(self):
75 return len(self.db_repo_list)
75 return len(self.db_repo_list)
76
76
77 def __repr__(self):
77 def __repr__(self):
78 return '<%s (%s)>' % (self.__class__.__name__, self.__len__())
78 return '<%s (%s)>' % (self.__class__.__name__, self.__len__())
79
79
80 def __iter__(self):
80 def __iter__(self):
81 for dbr in self.db_repo_list:
81 for dbr in self.db_repo_list:
82
82
83 scmr = dbr.scm_instance_cached
83 scmr = dbr.scm_instance_cached
84
84
85 # check permission at this level
85 # check permission at this level
86 if not HasRepoPermissionAny('repository.read', 'repository.write',
86 if not HasRepoPermissionAny('repository.read', 'repository.write',
87 'repository.admin')(dbr.repo_name,
87 'repository.admin')(dbr.repo_name,
88 'get repo check'):
88 'get repo check'):
89 continue
89 continue
90
90
91 if scmr is None:
91 if scmr is None:
92 log.error('%s this repository is present in database but it '
92 log.error('%s this repository is present in database but it '
93 'cannot be created as an scm instance',
93 'cannot be created as an scm instance',
94 dbr.repo_name)
94 dbr.repo_name)
95 continue
95 continue
96
96
97 last_change = scmr.last_change
97 last_change = scmr.last_change
98 tip = h.get_changeset_safe(scmr, 'tip')
98 tip = h.get_changeset_safe(scmr, 'tip')
99
99
100 tmp_d = {}
100 tmp_d = {}
101 tmp_d['name'] = dbr.repo_name
101 tmp_d['name'] = dbr.repo_name
102 tmp_d['name_sort'] = tmp_d['name'].lower()
102 tmp_d['name_sort'] = tmp_d['name'].lower()
103 tmp_d['description'] = dbr.description
103 tmp_d['description'] = dbr.description
104 tmp_d['description_sort'] = tmp_d['description']
104 tmp_d['description_sort'] = tmp_d['description']
105 tmp_d['last_change'] = last_change
105 tmp_d['last_change'] = last_change
106 tmp_d['last_change_sort'] = time.mktime(last_change \
106 tmp_d['last_change_sort'] = time.mktime(last_change \
107 .timetuple())
107 .timetuple())
108 tmp_d['tip'] = tip.raw_id
108 tmp_d['tip'] = tip.raw_id
109 tmp_d['tip_sort'] = tip.revision
109 tmp_d['tip_sort'] = tip.revision
110 tmp_d['rev'] = tip.revision
110 tmp_d['rev'] = tip.revision
111 tmp_d['contact'] = dbr.user.full_contact
111 tmp_d['contact'] = dbr.user.full_contact
112 tmp_d['contact_sort'] = tmp_d['contact']
112 tmp_d['contact_sort'] = tmp_d['contact']
113 tmp_d['owner_sort'] = tmp_d['contact']
113 tmp_d['owner_sort'] = tmp_d['contact']
114 tmp_d['repo_archives'] = list(scmr._get_archives())
114 tmp_d['repo_archives'] = list(scmr._get_archives())
115 tmp_d['last_msg'] = tip.message
115 tmp_d['last_msg'] = tip.message
116 tmp_d['author'] = tip.author
116 tmp_d['author'] = tip.author
117 tmp_d['dbrepo'] = dbr.get_dict()
117 tmp_d['dbrepo'] = dbr.get_dict()
118 tmp_d['dbrepo_fork'] = dbr.fork.get_dict() if dbr.fork \
118 tmp_d['dbrepo_fork'] = dbr.fork.get_dict() if dbr.fork \
119 else {}
119 else {}
120 yield tmp_d
120 yield tmp_d
121
121
122 class ScmModel(BaseModel):
122 class ScmModel(BaseModel):
123 """Generic Scm Model
123 """Generic Scm Model
124 """
124 """
125
125
126 @LazyProperty
126 @LazyProperty
127 def repos_path(self):
127 def repos_path(self):
128 """Get's the repositories root path from database
128 """Get's the repositories root path from database
129 """
129 """
130
130
131 q = self.sa.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == '/').one()
131 q = self.sa.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == '/').one()
132
132
133 return q.ui_value
133 return q.ui_value
134
134
135 def repo_scan(self, repos_path=None):
135 def repo_scan(self, repos_path=None):
136 """Listing of repositories in given path. This path should not be a
136 """Listing of repositories in given path. This path should not be a
137 repository itself. Return a dictionary of repository objects
137 repository itself. Return a dictionary of repository objects
138
138
139 :param repos_path: path to directory containing repositories
139 :param repos_path: path to directory containing repositories
140 """
140 """
141
141
142 log.info('scanning for repositories in %s', repos_path)
142 log.info('scanning for repositories in %s', repos_path)
143
143
144 if repos_path is None:
144 if repos_path is None:
145 repos_path = self.repos_path
145 repos_path = self.repos_path
146
146
147 baseui = make_ui('db')
147 baseui = make_ui('db')
148 repos_list = {}
148 repos_list = {}
149
149
150 for name, path in get_filesystem_repos(repos_path, recursive=True):
150 for name, path in get_filesystem_repos(repos_path, recursive=True):
151 try:
151 try:
152 if name in repos_list:
152 if name in repos_list:
153 raise RepositoryError('Duplicate repository name %s '
153 raise RepositoryError('Duplicate repository name %s '
154 'found in %s' % (name, path))
154 'found in %s' % (name, path))
155 else:
155 else:
156
156
157 klass = get_backend(path[0])
157 klass = get_backend(path[0])
158
158
159 if path[0] == 'hg' and path[0] in BACKENDS.keys():
159 if path[0] == 'hg' and path[0] in BACKENDS.keys():
160
160
161 # for mercurial we need to have an str path
161 # for mercurial we need to have an str path
162 repos_list[name] = klass(safe_str(path[1]),
162 repos_list[name] = klass(safe_str(path[1]),
163 baseui=baseui)
163 baseui=baseui)
164
164
165 if path[0] == 'git' and path[0] in BACKENDS.keys():
165 if path[0] == 'git' and path[0] in BACKENDS.keys():
166 repos_list[name] = klass(path[1])
166 repos_list[name] = klass(path[1])
167 except OSError:
167 except OSError:
168 continue
168 continue
169
169
170 return repos_list
170 return repos_list
171
171
172 def get_repos(self, all_repos=None, sort_key=None):
172 def get_repos(self, all_repos=None, sort_key=None):
173 """
173 """
174 Get all repos from db and for each repo create it's
174 Get all repos from db and for each repo create it's
175 backend instance and fill that backed with information from database
175 backend instance and fill that backed with information from database
176
176
177 :param all_repos: list of repository names as strings
177 :param all_repos: list of repository names as strings
178 give specific repositories list, good for filtering
178 give specific repositories list, good for filtering
179 """
179 """
180 if all_repos is None:
180 if all_repos is None:
181 all_repos = self.sa.query(Repository)\
181 all_repos = self.sa.query(Repository)\
182 .filter(Repository.group_id == None)\
182 .filter(Repository.group_id == None)\
183 .order_by(Repository.repo_name).all()
183 .order_by(Repository.repo_name).all()
184
184
185 repo_iter = CachedRepoList(all_repos, repos_path=self.repos_path,
185 repo_iter = CachedRepoList(all_repos, repos_path=self.repos_path,
186 order_by=sort_key)
186 order_by=sort_key)
187
187
188 return repo_iter
188 return repo_iter
189
189
190 def mark_for_invalidation(self, repo_name):
190 def mark_for_invalidation(self, repo_name):
191 """Puts cache invalidation task into db for
191 """Puts cache invalidation task into db for
192 further global cache invalidation
192 further global cache invalidation
193
193
194 :param repo_name: this repo that should invalidation take place
194 :param repo_name: this repo that should invalidation take place
195 """
195 """
196
196
197 log.debug('marking %s for invalidation', repo_name)
197 log.debug('marking %s for invalidation', repo_name)
198 cache = self.sa.query(CacheInvalidation)\
198 cache = self.sa.query(CacheInvalidation)\
199 .filter(CacheInvalidation.cache_key == repo_name).scalar()
199 .filter(CacheInvalidation.cache_key == repo_name).scalar()
200
200
201 if cache:
201 if cache:
202 # mark this cache as inactive
202 # mark this cache as inactive
203 cache.cache_active = False
203 cache.cache_active = False
204 else:
204 else:
205 log.debug('cache key not found in invalidation db -> creating one')
205 log.debug('cache key not found in invalidation db -> creating one')
206 cache = CacheInvalidation(repo_name)
206 cache = CacheInvalidation(repo_name)
207
207
208 try:
208 try:
209 self.sa.add(cache)
209 self.sa.add(cache)
210 self.sa.commit()
210 self.sa.commit()
211 except (DatabaseError,):
211 except (DatabaseError,):
212 log.error(traceback.format_exc())
212 log.error(traceback.format_exc())
213 self.sa.rollback()
213 self.sa.rollback()
214
214
215 def toggle_following_repo(self, follow_repo_id, user_id):
215 def toggle_following_repo(self, follow_repo_id, user_id):
216
216
217 f = self.sa.query(UserFollowing)\
217 f = self.sa.query(UserFollowing)\
218 .filter(UserFollowing.follows_repo_id == follow_repo_id)\
218 .filter(UserFollowing.follows_repo_id == follow_repo_id)\
219 .filter(UserFollowing.user_id == user_id).scalar()
219 .filter(UserFollowing.user_id == user_id).scalar()
220
220
221 if f is not None:
221 if f is not None:
222
222
223 try:
223 try:
224 self.sa.delete(f)
224 self.sa.delete(f)
225 self.sa.commit()
225 self.sa.commit()
226 action_logger(UserTemp(user_id),
226 action_logger(UserTemp(user_id),
227 'stopped_following_repo',
227 'stopped_following_repo',
228 RepoTemp(follow_repo_id))
228 RepoTemp(follow_repo_id))
229 return
229 return
230 except:
230 except:
231 log.error(traceback.format_exc())
231 log.error(traceback.format_exc())
232 self.sa.rollback()
232 self.sa.rollback()
233 raise
233 raise
234
234
235 try:
235 try:
236 f = UserFollowing()
236 f = UserFollowing()
237 f.user_id = user_id
237 f.user_id = user_id
238 f.follows_repo_id = follow_repo_id
238 f.follows_repo_id = follow_repo_id
239 self.sa.add(f)
239 self.sa.add(f)
240 self.sa.commit()
240 self.sa.commit()
241 action_logger(UserTemp(user_id),
241 action_logger(UserTemp(user_id),
242 'started_following_repo',
242 'started_following_repo',
243 RepoTemp(follow_repo_id))
243 RepoTemp(follow_repo_id))
244 except:
244 except:
245 log.error(traceback.format_exc())
245 log.error(traceback.format_exc())
246 self.sa.rollback()
246 self.sa.rollback()
247 raise
247 raise
248
248
249 def toggle_following_user(self, follow_user_id, user_id):
249 def toggle_following_user(self, follow_user_id, user_id):
250 f = self.sa.query(UserFollowing)\
250 f = self.sa.query(UserFollowing)\
251 .filter(UserFollowing.follows_user_id == follow_user_id)\
251 .filter(UserFollowing.follows_user_id == follow_user_id)\
252 .filter(UserFollowing.user_id == user_id).scalar()
252 .filter(UserFollowing.user_id == user_id).scalar()
253
253
254 if f is not None:
254 if f is not None:
255 try:
255 try:
256 self.sa.delete(f)
256 self.sa.delete(f)
257 self.sa.commit()
257 self.sa.commit()
258 return
258 return
259 except:
259 except:
260 log.error(traceback.format_exc())
260 log.error(traceback.format_exc())
261 self.sa.rollback()
261 self.sa.rollback()
262 raise
262 raise
263
263
264 try:
264 try:
265 f = UserFollowing()
265 f = UserFollowing()
266 f.user_id = user_id
266 f.user_id = user_id
267 f.follows_user_id = follow_user_id
267 f.follows_user_id = follow_user_id
268 self.sa.add(f)
268 self.sa.add(f)
269 self.sa.commit()
269 self.sa.commit()
270 except:
270 except:
271 log.error(traceback.format_exc())
271 log.error(traceback.format_exc())
272 self.sa.rollback()
272 self.sa.rollback()
273 raise
273 raise
274
274
275 def is_following_repo(self, repo_name, user_id, cache=False):
275 def is_following_repo(self, repo_name, user_id, cache=False):
276 r = self.sa.query(Repository)\
276 r = self.sa.query(Repository)\
277 .filter(Repository.repo_name == repo_name).scalar()
277 .filter(Repository.repo_name == repo_name).scalar()
278
278
279 f = self.sa.query(UserFollowing)\
279 f = self.sa.query(UserFollowing)\
280 .filter(UserFollowing.follows_repository == r)\
280 .filter(UserFollowing.follows_repository == r)\
281 .filter(UserFollowing.user_id == user_id).scalar()
281 .filter(UserFollowing.user_id == user_id).scalar()
282
282
283 return f is not None
283 return f is not None
284
284
285 def is_following_user(self, username, user_id, cache=False):
285 def is_following_user(self, username, user_id, cache=False):
286 u = UserModel(self.sa).get_by_username(username)
286 u = UserModel(self.sa).get_by_username(username)
287
287
288 f = self.sa.query(UserFollowing)\
288 f = self.sa.query(UserFollowing)\
289 .filter(UserFollowing.follows_user == u)\
289 .filter(UserFollowing.follows_user == u)\
290 .filter(UserFollowing.user_id == user_id).scalar()
290 .filter(UserFollowing.user_id == user_id).scalar()
291
291
292 return f is not None
292 return f is not None
293
293
294 def get_followers(self, repo_id):
294 def get_followers(self, repo_id):
295 if not isinstance(repo_id, int):
295 if not isinstance(repo_id, int):
296 repo_id = getattr(Repository.by_repo_name(repo_id), 'repo_id')
296 repo_id = getattr(Repository.by_repo_name(repo_id), 'repo_id')
297
297
298 return self.sa.query(UserFollowing)\
298 return self.sa.query(UserFollowing)\
299 .filter(UserFollowing.follows_repo_id == repo_id).count()
299 .filter(UserFollowing.follows_repo_id == repo_id).count()
300
300
301 def get_forks(self, repo_id):
301 def get_forks(self, repo_id):
302 if not isinstance(repo_id, int):
302 if not isinstance(repo_id, int):
303 repo_id = getattr(Repository.by_repo_name(repo_id), 'repo_id')
303 repo_id = getattr(Repository.by_repo_name(repo_id), 'repo_id')
304
304
305 return self.sa.query(Repository)\
305 return self.sa.query(Repository)\
306 .filter(Repository.fork_id == repo_id).count()
306 .filter(Repository.fork_id == repo_id).count()
307
307
308 def pull_changes(self, repo_name, username):
308 def pull_changes(self, repo_name, username):
309 dbrepo = Repository.by_repo_name(repo_name)
309 dbrepo = Repository.by_repo_name(repo_name)
310 repo = dbrepo.scm_instance
310 repo = dbrepo.scm_instance
311 try:
311 try:
312 extras = {'ip': '',
312 extras = {'ip': '',
313 'username': username,
313 'username': username,
314 'action': 'push_remote',
314 'action': 'push_remote',
315 'repository': repo_name}
315 'repository': repo_name}
316
316
317 #inject ui extra param to log this action via push logger
317 #inject ui extra param to log this action via push logger
318 for k, v in extras.items():
318 for k, v in extras.items():
319 repo._repo.ui.setconfig('rhodecode_extras', k, v)
319 repo._repo.ui.setconfig('rhodecode_extras', k, v)
320
320
321 repo.pull(dbrepo.clone_uri)
321 repo.pull(dbrepo.clone_uri)
322 self.mark_for_invalidation(repo_name)
322 self.mark_for_invalidation(repo_name)
323 except:
323 except:
324 log.error(traceback.format_exc())
324 log.error(traceback.format_exc())
325 raise
325 raise
326
326
327
327
328 def commit_change(self, repo, repo_name, cs, user, author, message, content,
328 def commit_change(self, repo, repo_name, cs, user, author, message, content,
329 f_path):
329 f_path):
330
330
331 if repo.alias == 'hg':
331 if repo.alias == 'hg':
332 from vcs.backends.hg import MercurialInMemoryChangeset as IMC
332 from vcs.backends.hg import MercurialInMemoryChangeset as IMC
333 elif repo.alias == 'git':
333 elif repo.alias == 'git':
334 from vcs.backends.git import GitInMemoryChangeset as IMC
334 from vcs.backends.git import GitInMemoryChangeset as IMC
335
335
336 # decoding here will force that we have proper encoded values
336 # decoding here will force that we have proper encoded values
337 # in any other case this will throw exceptions and deny commit
337 # in any other case this will throw exceptions and deny commit
338 content = safe_str(content)
338 content = safe_str(content)
339 message = safe_str(message)
339 message = safe_str(message)
340 path = safe_str(f_path)
340 path = safe_str(f_path)
341 author = safe_str(author)
341 author = safe_str(author)
342 m = IMC(repo)
342 m = IMC(repo)
343 m.change(FileNode(path, content))
343 m.change(FileNode(path, content))
344 tip = m.commit(message=message,
344 tip = m.commit(message=message,
345 author=author,
345 author=author,
346 parents=[cs], branch=cs.branch)
346 parents=[cs], branch=cs.branch)
347
347
348 new_cs = tip.short_id
348 new_cs = tip.short_id
349 action = 'push_local:%s' % new_cs
349 action = 'push_local:%s' % new_cs
350
350
351 action_logger(user, action, repo_name)
351 action_logger(user, action, repo_name)
352
352
353 self.mark_for_invalidation(repo_name)
353 self.mark_for_invalidation(repo_name)
354
354
355 def create_node(self, repo, repo_name, cs, user, author, message, content,
355 def create_node(self, repo, repo_name, cs, user, author, message, content,
356 f_path):
356 f_path):
357 if repo.alias == 'hg':
357 if repo.alias == 'hg':
358 from vcs.backends.hg import MercurialInMemoryChangeset as IMC
358 from vcs.backends.hg import MercurialInMemoryChangeset as IMC
359 elif repo.alias == 'git':
359 elif repo.alias == 'git':
360 from vcs.backends.git import GitInMemoryChangeset as IMC
360 from vcs.backends.git import GitInMemoryChangeset as IMC
361 # decoding here will force that we have proper encoded values
361 # decoding here will force that we have proper encoded values
362 # in any other case this will throw exceptions and deny commit
362 # in any other case this will throw exceptions and deny commit
363
364 if isinstance(content,(basestring,)):
363 content = safe_str(content)
365 content = safe_str(content)
366 elif isinstance(content,file):
367 content = content.read()
368
364 message = safe_str(message)
369 message = safe_str(message)
365 path = safe_str(f_path)
370 path = safe_str(f_path)
366 author = safe_str(author)
371 author = safe_str(author)
367 m = IMC(repo)
372 m = IMC(repo)
368
373
369 if isinstance(cs, EmptyChangeset):
374 if isinstance(cs, EmptyChangeset):
370 # Emptychangeset means we we're editing empty repository
375 # Emptychangeset means we we're editing empty repository
371 parents = None
376 parents = None
372 else:
377 else:
373 parents = [cs]
378 parents = [cs]
374
379
375 m.add(FileNode(path, content=content))
380 m.add(FileNode(path, content=content))
376 tip = m.commit(message=message,
381 tip = m.commit(message=message,
377 author=author,
382 author=author,
378 parents=parents, branch=cs.branch)
383 parents=parents, branch=cs.branch)
379 new_cs = tip.short_id
384 new_cs = tip.short_id
380 action = 'push_local:%s' % new_cs
385 action = 'push_local:%s' % new_cs
381
386
382 action_logger(user, action, repo_name)
387 action_logger(user, action, repo_name)
383
388
384 self.mark_for_invalidation(repo_name)
389 self.mark_for_invalidation(repo_name)
385
390
386
391
387 def get_unread_journal(self):
392 def get_unread_journal(self):
388 return self.sa.query(UserLog).count()
393 return self.sa.query(UserLog).count()
389
394
390 def _should_invalidate(self, repo_name):
395 def _should_invalidate(self, repo_name):
391 """Looks up database for invalidation signals for this repo_name
396 """Looks up database for invalidation signals for this repo_name
392
397
393 :param repo_name:
398 :param repo_name:
394 """
399 """
395
400
396 ret = self.sa.query(CacheInvalidation)\
401 ret = self.sa.query(CacheInvalidation)\
397 .filter(CacheInvalidation.cache_key == repo_name)\
402 .filter(CacheInvalidation.cache_key == repo_name)\
398 .filter(CacheInvalidation.cache_active == False)\
403 .filter(CacheInvalidation.cache_active == False)\
399 .scalar()
404 .scalar()
400
405
401 return ret
406 return ret
402
407
@@ -1,54 +1,55 b''
1 .CodeMirror {
1 .CodeMirror {
2 overflow: auto;
2 overflow: auto;
3 height: 450px;
3 height: 450px;
4 line-height: 1em;
4 line-height: 1em;
5 font-family: monospace;
5 font-family: monospace;
6 _position: relative; /* IE6 hack */
6 _position: relative; /* IE6 hack */
7 margin:20px;
7 }
8 }
8
9
9 .CodeMirror-gutter {
10 .CodeMirror-gutter {
10 position: absolute; left: 0; top: 0;
11 position: absolute; left: 0; top: 0;
11 background-color: #f7f7f7;
12 background-color: #f7f7f7;
12 border-right: 1px solid #eee;
13 border-right: 1px solid #eee;
13 min-width: 2em;
14 min-width: 2em;
14 height: 100%;
15 height: 100%;
15 }
16 }
16 .CodeMirror-gutter-text {
17 .CodeMirror-gutter-text {
17 color: #aaa;
18 color: #aaa;
18 text-align: right;
19 text-align: right;
19 padding: .4em .2em .4em .4em;
20 padding: .4em .2em .4em .4em;
20 }
21 }
21 .CodeMirror-lines {
22 .CodeMirror-lines {
22 padding: .4em;
23 padding: .4em;
23 }
24 }
24
25
25 .CodeMirror pre {
26 .CodeMirror pre {
26 -moz-border-radius: 0;
27 -moz-border-radius: 0;
27 -webkit-border-radius: 0;
28 -webkit-border-radius: 0;
28 -o-border-radius: 0;
29 -o-border-radius: 0;
29 border-radius: 0;
30 border-radius: 0;
30 border-width: 0; margin: 0; padding: 0; background: transparent;
31 border-width: 0; margin: 0; padding: 0; background: transparent;
31 font-family: inherit;
32 font-family: inherit;
32 }
33 }
33
34
34 .CodeMirror-cursor {
35 .CodeMirror-cursor {
35 z-index: 10;
36 z-index: 10;
36 position: absolute;
37 position: absolute;
37 visibility: hidden;
38 visibility: hidden;
38 border-left: 1px solid black !important;
39 border-left: 1px solid black !important;
39 }
40 }
40 .CodeMirror-focused .CodeMirror-cursor {
41 .CodeMirror-focused .CodeMirror-cursor {
41 visibility: visible;
42 visibility: visible;
42 }
43 }
43
44
44 span.CodeMirror-selected {
45 span.CodeMirror-selected {
45 background: #ccc !important;
46 background: #ccc !important;
46 color: HighlightText !important;
47 color: HighlightText !important;
47 }
48 }
48 .CodeMirror-focused span.CodeMirror-selected {
49 .CodeMirror-focused span.CodeMirror-selected {
49 background: Highlight !important;
50 background: Highlight !important;
50 }
51 }
51
52
52 .CodeMirror-matchingbracket {color: #0f0 !important;}
53 .CodeMirror-matchingbracket {color: #0f0 !important;}
53 .CodeMirror-nonmatchingbracket {color: #f22 !important;}
54 .CodeMirror-nonmatchingbracket {color: #f22 !important;}
54 .CodeMirror-gutter-text{color: #003367 !important;} No newline at end of file
55 .CodeMirror-gutter-text{color: #003367 !important;}
@@ -1,2735 +1,2749 b''
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
2 border:0;
2 border:0;
3 outline:0;
3 outline:0;
4 font-size:100%;
4 font-size:100%;
5 vertical-align:baseline;
5 vertical-align:baseline;
6 background:transparent;
6 background:transparent;
7 margin:0;
7 margin:0;
8 padding:0;
8 padding:0;
9 }
9 }
10
10
11 body {
11 body {
12 line-height:1;
12 line-height:1;
13 height:100%;
13 height:100%;
14 background:url("../images/background.png") repeat scroll 0 0 #B0B0B0;
14 background:url("../images/background.png") repeat scroll 0 0 #B0B0B0;
15 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
15 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
16 font-size:12px;
16 font-size:12px;
17 color:#000;
17 color:#000;
18 margin:0;
18 margin:0;
19 padding:0;
19 padding:0;
20 }
20 }
21
21
22 ol,ul {
22 ol,ul {
23 list-style:none;
23 list-style:none;
24 }
24 }
25
25
26 blockquote,q {
26 blockquote,q {
27 quotes:none;
27 quotes:none;
28 }
28 }
29
29
30 blockquote:before,blockquote:after,q:before,q:after {
30 blockquote:before,blockquote:after,q:before,q:after {
31 content:none;
31 content:none;
32 }
32 }
33
33
34 :focus {
34 :focus {
35 outline:0;
35 outline:0;
36 }
36 }
37
37
38 del {
38 del {
39 text-decoration:line-through;
39 text-decoration:line-through;
40 }
40 }
41
41
42 table {
42 table {
43 border-collapse:collapse;
43 border-collapse:collapse;
44 border-spacing:0;
44 border-spacing:0;
45 }
45 }
46
46
47 html {
47 html {
48 height:100%;
48 height:100%;
49 }
49 }
50
50
51 a {
51 a {
52 color:#003367;
52 color:#003367;
53 text-decoration:none;
53 text-decoration:none;
54 cursor:pointer;
54 cursor:pointer;
55 }
55 }
56
56
57 a:hover {
57 a:hover {
58 color:#316293;
58 color:#316293;
59 text-decoration:underline;
59 text-decoration:underline;
60 }
60 }
61
61
62 h1,h2,h3,h4,h5,h6 {
62 h1,h2,h3,h4,h5,h6 {
63 color:#292929;
63 color:#292929;
64 font-weight:700;
64 font-weight:700;
65 }
65 }
66
66
67 h1 {
67 h1 {
68 font-size:22px;
68 font-size:22px;
69 }
69 }
70
70
71 h2 {
71 h2 {
72 font-size:20px;
72 font-size:20px;
73 }
73 }
74
74
75 h3 {
75 h3 {
76 font-size:18px;
76 font-size:18px;
77 }
77 }
78
78
79 h4 {
79 h4 {
80 font-size:16px;
80 font-size:16px;
81 }
81 }
82
82
83 h5 {
83 h5 {
84 font-size:14px;
84 font-size:14px;
85 }
85 }
86
86
87 h6 {
87 h6 {
88 font-size:11px;
88 font-size:11px;
89 }
89 }
90
90
91 ul.circle {
91 ul.circle {
92 list-style-type:circle;
92 list-style-type:circle;
93 }
93 }
94
94
95 ul.disc {
95 ul.disc {
96 list-style-type:disc;
96 list-style-type:disc;
97 }
97 }
98
98
99 ul.square {
99 ul.square {
100 list-style-type:square;
100 list-style-type:square;
101 }
101 }
102
102
103 ol.lower-roman {
103 ol.lower-roman {
104 list-style-type:lower-roman;
104 list-style-type:lower-roman;
105 }
105 }
106
106
107 ol.upper-roman {
107 ol.upper-roman {
108 list-style-type:upper-roman;
108 list-style-type:upper-roman;
109 }
109 }
110
110
111 ol.lower-alpha {
111 ol.lower-alpha {
112 list-style-type:lower-alpha;
112 list-style-type:lower-alpha;
113 }
113 }
114
114
115 ol.upper-alpha {
115 ol.upper-alpha {
116 list-style-type:upper-alpha;
116 list-style-type:upper-alpha;
117 }
117 }
118
118
119 ol.decimal {
119 ol.decimal {
120 list-style-type:decimal;
120 list-style-type:decimal;
121 }
121 }
122
122
123 div.color {
123 div.color {
124 clear:both;
124 clear:both;
125 overflow:hidden;
125 overflow:hidden;
126 position:absolute;
126 position:absolute;
127 background:#FFF;
127 background:#FFF;
128 margin:7px 0 0 60px;
128 margin:7px 0 0 60px;
129 padding:1px 1px 1px 0;
129 padding:1px 1px 1px 0;
130 }
130 }
131
131
132 div.color a {
132 div.color a {
133 width:15px;
133 width:15px;
134 height:15px;
134 height:15px;
135 display:block;
135 display:block;
136 float:left;
136 float:left;
137 margin:0 0 0 1px;
137 margin:0 0 0 1px;
138 padding:0;
138 padding:0;
139 }
139 }
140
140
141 div.options {
141 div.options {
142 clear:both;
142 clear:both;
143 overflow:hidden;
143 overflow:hidden;
144 position:absolute;
144 position:absolute;
145 background:#FFF;
145 background:#FFF;
146 margin:7px 0 0 162px;
146 margin:7px 0 0 162px;
147 padding:0;
147 padding:0;
148 }
148 }
149
149
150 div.options a {
150 div.options a {
151 height:1%;
151 height:1%;
152 display:block;
152 display:block;
153 text-decoration:none;
153 text-decoration:none;
154 margin:0;
154 margin:0;
155 padding:3px 8px;
155 padding:3px 8px;
156 }
156 }
157
157
158 .top-left-rounded-corner {
158 .top-left-rounded-corner {
159 -webkit-border-top-left-radius: 8px;
159 -webkit-border-top-left-radius: 8px;
160 -khtml-border-radius-topleft: 8px;
160 -khtml-border-radius-topleft: 8px;
161 -moz-border-radius-topleft: 8px;
161 -moz-border-radius-topleft: 8px;
162 border-top-left-radius: 8px;
162 border-top-left-radius: 8px;
163 }
163 }
164
164
165 .top-right-rounded-corner {
165 .top-right-rounded-corner {
166 -webkit-border-top-right-radius: 8px;
166 -webkit-border-top-right-radius: 8px;
167 -khtml-border-radius-topright: 8px;
167 -khtml-border-radius-topright: 8px;
168 -moz-border-radius-topright: 8px;
168 -moz-border-radius-topright: 8px;
169 border-top-right-radius: 8px;
169 border-top-right-radius: 8px;
170 }
170 }
171
171
172 .bottom-left-rounded-corner {
172 .bottom-left-rounded-corner {
173 -webkit-border-bottom-left-radius: 8px;
173 -webkit-border-bottom-left-radius: 8px;
174 -khtml-border-radius-bottomleft: 8px;
174 -khtml-border-radius-bottomleft: 8px;
175 -moz-border-radius-bottomleft: 8px;
175 -moz-border-radius-bottomleft: 8px;
176 border-bottom-left-radius: 8px;
176 border-bottom-left-radius: 8px;
177 }
177 }
178
178
179 .bottom-right-rounded-corner {
179 .bottom-right-rounded-corner {
180 -webkit-border-bottom-right-radius: 8px;
180 -webkit-border-bottom-right-radius: 8px;
181 -khtml-border-radius-bottomright: 8px;
181 -khtml-border-radius-bottomright: 8px;
182 -moz-border-radius-bottomright: 8px;
182 -moz-border-radius-bottomright: 8px;
183 border-bottom-right-radius: 8px;
183 border-bottom-right-radius: 8px;
184 }
184 }
185
185
186
186
187 #header {
187 #header {
188 margin:0;
188 margin:0;
189 padding:0 10px;
189 padding:0 10px;
190 }
190 }
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:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
200 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
201 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
201 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
202 }
202 }
203
203
204 #header ul#logged-user li {
204 #header ul#logged-user li {
205 list-style:none;
205 list-style:none;
206 float:left;
206 float:left;
207 margin:8px 0 0;
207 margin:8px 0 0;
208 padding:4px 12px;
208 padding:4px 12px;
209 border-left: 1px solid #316293;
209 border-left: 1px solid #316293;
210 }
210 }
211
211
212 #header ul#logged-user li.first {
212 #header ul#logged-user li.first {
213 border-left:none;
213 border-left:none;
214 margin:4px;
214 margin:4px;
215 }
215 }
216
216
217 #header ul#logged-user li.first div.gravatar {
217 #header ul#logged-user li.first div.gravatar {
218 margin-top:-2px;
218 margin-top:-2px;
219 }
219 }
220
220
221 #header ul#logged-user li.first div.account {
221 #header ul#logged-user li.first div.account {
222 padding-top:4px;
222 padding-top:4px;
223 float:left;
223 float:left;
224 }
224 }
225
225
226 #header ul#logged-user li.last {
226 #header ul#logged-user li.last {
227 border-right:none;
227 border-right:none;
228 }
228 }
229
229
230 #header ul#logged-user li a {
230 #header ul#logged-user li a {
231 color:#fff;
231 color:#fff;
232 font-weight:700;
232 font-weight:700;
233 text-decoration:none;
233 text-decoration:none;
234 }
234 }
235
235
236 #header ul#logged-user li a:hover {
236 #header ul#logged-user li a:hover {
237 text-decoration:underline;
237 text-decoration:underline;
238 }
238 }
239
239
240 #header ul#logged-user li.highlight a {
240 #header ul#logged-user li.highlight a {
241 color:#fff;
241 color:#fff;
242 }
242 }
243
243
244 #header ul#logged-user li.highlight a:hover {
244 #header ul#logged-user li.highlight a:hover {
245 color:#FFF;
245 color:#FFF;
246 }
246 }
247
247
248 #header #header-inner {
248 #header #header-inner {
249 height:40px;
249 height:40px;
250 clear:both;
250 clear:both;
251 position:relative;
251 position:relative;
252 background:#003367 url("../images/header_inner.png") repeat-x;
252 background:#003367 url("../images/header_inner.png") repeat-x;
253 margin:0;
253 margin:0;
254 padding:0;
254 padding:0;
255 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
255 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
256 -webkit-border-radius: 4px 4px 4px 4px;
256 -webkit-border-radius: 4px 4px 4px 4px;
257 -khtml-border-radius: 4px 4px 4px 4px;
257 -khtml-border-radius: 4px 4px 4px 4px;
258 -moz-border-radius: 4px 4px 4px 4px;
258 -moz-border-radius: 4px 4px 4px 4px;
259 border-radius: 4px 4px 4px 4px;
259 border-radius: 4px 4px 4px 4px;
260 }
260 }
261
261
262 #header #header-inner #home a {
262 #header #header-inner #home a {
263 height:40px;
263 height:40px;
264 width:46px;
264 width:46px;
265 display:block;
265 display:block;
266 background:url("../images/button_home.png");
266 background:url("../images/button_home.png");
267 background-position:0 0;
267 background-position:0 0;
268 margin:0;
268 margin:0;
269 padding:0;
269 padding:0;
270 }
270 }
271
271
272 #header #header-inner #home a:hover {
272 #header #header-inner #home a:hover {
273 background-position:0 -40px;
273 background-position:0 -40px;
274 }
274 }
275
275
276 #header #header-inner #logo h1 {
276 #header #header-inner #logo h1 {
277 color:#FFF;
277 color:#FFF;
278 font-size:18px;
278 font-size:18px;
279 margin:10px 0 0 13px;
279 margin:10px 0 0 13px;
280 padding:0;
280 padding:0;
281 }
281 }
282
282
283 #header #header-inner #logo a {
283 #header #header-inner #logo a {
284 color:#fff;
284 color:#fff;
285 text-decoration:none;
285 text-decoration:none;
286 }
286 }
287
287
288 #header #header-inner #logo a:hover {
288 #header #header-inner #logo a:hover {
289 color:#bfe3ff;
289 color:#bfe3ff;
290 }
290 }
291
291
292 #header #header-inner #quick,#header #header-inner #quick ul {
292 #header #header-inner #quick,#header #header-inner #quick ul {
293 position:relative;
293 position:relative;
294 float:right;
294 float:right;
295 list-style-type:none;
295 list-style-type:none;
296 list-style-position:outside;
296 list-style-position:outside;
297 margin:6px 5px 0 0;
297 margin:6px 5px 0 0;
298 padding:0;
298 padding:0;
299 }
299 }
300
300
301 #header #header-inner #quick li {
301 #header #header-inner #quick li {
302 position:relative;
302 position:relative;
303 float:left;
303 float:left;
304 margin:0 5px 0 0;
304 margin:0 5px 0 0;
305 padding:0;
305 padding:0;
306 }
306 }
307
307
308 #header #header-inner #quick li a {
308 #header #header-inner #quick li a {
309 top:0;
309 top:0;
310 left:0;
310 left:0;
311 height:1%;
311 height:1%;
312 display:block;
312 display:block;
313 clear:both;
313 clear:both;
314 overflow:hidden;
314 overflow:hidden;
315 color:#FFF;
315 color:#FFF;
316 font-weight:700;
316 font-weight:700;
317 text-decoration:none;
317 text-decoration:none;
318 background:#369;
318 background:#369;
319 padding:0;
319 padding:0;
320 -webkit-border-radius: 4px 4px 4px 4px;
320 -webkit-border-radius: 4px 4px 4px 4px;
321 -khtml-border-radius: 4px 4px 4px 4px;
321 -khtml-border-radius: 4px 4px 4px 4px;
322 -moz-border-radius: 4px 4px 4px 4px;
322 -moz-border-radius: 4px 4px 4px 4px;
323 border-radius: 4px 4px 4px 4px;
323 border-radius: 4px 4px 4px 4px;
324 }
324 }
325
325
326 #header #header-inner #quick li span.short {
326 #header #header-inner #quick li span.short {
327 padding:9px 6px 8px 6px;
327 padding:9px 6px 8px 6px;
328 }
328 }
329
329
330 #header #header-inner #quick li span {
330 #header #header-inner #quick li span {
331 top:0;
331 top:0;
332 right:0;
332 right:0;
333 height:1%;
333 height:1%;
334 display:block;
334 display:block;
335 float:left;
335 float:left;
336 border-left:1px solid #3f6f9f;
336 border-left:1px solid #3f6f9f;
337 margin:0;
337 margin:0;
338 padding:10px 12px 8px 10px;
338 padding:10px 12px 8px 10px;
339 }
339 }
340
340
341 #header #header-inner #quick li span.normal {
341 #header #header-inner #quick li span.normal {
342 border:none;
342 border:none;
343 padding:10px 12px 8px;
343 padding:10px 12px 8px;
344 }
344 }
345
345
346 #header #header-inner #quick li span.icon {
346 #header #header-inner #quick li span.icon {
347 top:0;
347 top:0;
348 left:0;
348 left:0;
349 border-left:none;
349 border-left:none;
350 border-right:1px solid #2e5c89;
350 border-right:1px solid #2e5c89;
351 padding:8px 8px 4px;
351 padding:8px 8px 4px;
352 }
352 }
353
353
354 #header #header-inner #quick li span.icon_short {
354 #header #header-inner #quick li span.icon_short {
355 top:0;
355 top:0;
356 left:0;
356 left:0;
357 border-left:none;
357 border-left:none;
358 border-right:1px solid #2e5c89;
358 border-right:1px solid #2e5c89;
359 padding:9px 4px 4px;
359 padding:9px 4px 4px;
360 }
360 }
361
361
362 #header #header-inner #quick li a:hover {
362 #header #header-inner #quick li a:hover {
363 background:#4e4e4e no-repeat top left;
363 background:#4e4e4e no-repeat top left;
364 }
364 }
365
365
366 #header #header-inner #quick li a:hover span {
366 #header #header-inner #quick li a:hover span {
367 border-left:1px solid #545454;
367 border-left:1px solid #545454;
368 }
368 }
369
369
370 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short {
370 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short {
371 border-left:none;
371 border-left:none;
372 border-right:1px solid #464646;
372 border-right:1px solid #464646;
373 }
373 }
374
374
375 #header #header-inner #quick ul {
375 #header #header-inner #quick ul {
376 top:29px;
376 top:29px;
377 right:0;
377 right:0;
378 min-width:200px;
378 min-width:200px;
379 display:none;
379 display:none;
380 position:absolute;
380 position:absolute;
381 background:#FFF;
381 background:#FFF;
382 border:1px solid #666;
382 border:1px solid #666;
383 border-top:1px solid #003367;
383 border-top:1px solid #003367;
384 z-index:100;
384 z-index:100;
385 margin:0;
385 margin:0;
386 padding:0;
386 padding:0;
387 }
387 }
388
388
389 #header #header-inner #quick ul.repo_switcher {
389 #header #header-inner #quick ul.repo_switcher {
390 max-height:275px;
390 max-height:275px;
391 overflow-x:hidden;
391 overflow-x:hidden;
392 overflow-y:auto;
392 overflow-y:auto;
393 }
393 }
394 #header #header-inner #quick ul.repo_switcher li.qfilter_rs {
394 #header #header-inner #quick ul.repo_switcher li.qfilter_rs {
395 float:none;
395 float:none;
396 margin:0;
396 margin:0;
397 border-bottom:2px solid #003367;
397 border-bottom:2px solid #003367;
398 }
398 }
399
399
400
400
401 #header #header-inner #quick .repo_switcher_type{
401 #header #header-inner #quick .repo_switcher_type{
402 position:absolute;
402 position:absolute;
403 left:0;
403 left:0;
404 top:9px;
404 top:9px;
405
405
406 }
406 }
407 #header #header-inner #quick li ul li {
407 #header #header-inner #quick li ul li {
408 border-bottom:1px solid #ddd;
408 border-bottom:1px solid #ddd;
409 }
409 }
410
410
411 #header #header-inner #quick li ul li a {
411 #header #header-inner #quick li ul li a {
412 width:182px;
412 width:182px;
413 height:auto;
413 height:auto;
414 display:block;
414 display:block;
415 float:left;
415 float:left;
416 background:#FFF;
416 background:#FFF;
417 color:#003367;
417 color:#003367;
418 font-weight:400;
418 font-weight:400;
419 margin:0;
419 margin:0;
420 padding:7px 9px;
420 padding:7px 9px;
421 }
421 }
422
422
423 #header #header-inner #quick li ul li a:hover {
423 #header #header-inner #quick li ul li a:hover {
424 color:#000;
424 color:#000;
425 background:#FFF;
425 background:#FFF;
426 }
426 }
427
427
428 #header #header-inner #quick ul ul {
428 #header #header-inner #quick ul ul {
429 top:auto;
429 top:auto;
430 }
430 }
431
431
432 #header #header-inner #quick li ul ul {
432 #header #header-inner #quick li ul ul {
433 right:200px;
433 right:200px;
434 max-height:275px;
434 max-height:275px;
435 overflow:auto;
435 overflow:auto;
436 overflow-x:hidden;
436 overflow-x:hidden;
437 white-space:normal;
437 white-space:normal;
438 }
438 }
439
439
440 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
440 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
441 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
441 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
442 width:167px;
442 width:167px;
443 margin:0;
443 margin:0;
444 padding:12px 9px 7px 24px;
444 padding:12px 9px 7px 24px;
445 }
445 }
446
446
447 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
447 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
448 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
448 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
449 min-width:167px;
449 min-width:167px;
450 margin:0;
450 margin:0;
451 padding:12px 9px 7px 24px;
451 padding:12px 9px 7px 24px;
452 }
452 }
453
453
454 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
454 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
455 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
455 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
456 min-width:167px;
456 min-width:167px;
457 margin:0;
457 margin:0;
458 padding:12px 9px 7px 24px;
458 padding:12px 9px 7px 24px;
459 }
459 }
460
460
461 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover {
461 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover {
462 background:url("../images/icons/hgicon.png") no-repeat scroll 4px 9px #FFF;
462 background:url("../images/icons/hgicon.png") no-repeat scroll 4px 9px #FFF;
463 min-width:167px;
463 min-width:167px;
464 margin:0 0 0 14px;
464 margin:0 0 0 14px;
465 padding:12px 9px 7px 24px;
465 padding:12px 9px 7px 24px;
466 }
466 }
467
467
468 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover {
468 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover {
469 background:url("../images/icons/giticon.png") no-repeat scroll 4px 9px #FFF;
469 background:url("../images/icons/giticon.png") no-repeat scroll 4px 9px #FFF;
470 min-width:167px;
470 min-width:167px;
471 margin:0 0 0 14px;
471 margin:0 0 0 14px;
472 padding:12px 9px 7px 24px;
472 padding:12px 9px 7px 24px;
473 }
473 }
474
474
475 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
475 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
476 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
476 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
477 width:167px;
477 width:167px;
478 margin:0;
478 margin:0;
479 padding:12px 9px 7px 24px;
479 padding:12px 9px 7px 24px;
480 }
480 }
481
481
482 #header #header-inner #quick li ul li a.repos_groups,#header #header-inner #quick li ul li a.repos_groups:hover {
482 #header #header-inner #quick li ul li a.repos_groups,#header #header-inner #quick li ul li a.repos_groups:hover {
483 background:url("../images/icons/database_link.png") no-repeat scroll 4px 9px #FFF;
483 background:url("../images/icons/database_link.png") no-repeat scroll 4px 9px #FFF;
484 width:167px;
484 width:167px;
485 margin:0;
485 margin:0;
486 padding:12px 9px 7px 24px;
486 padding:12px 9px 7px 24px;
487 }
487 }
488
488
489 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
489 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
490 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
490 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
491 width:167px;
491 width:167px;
492 margin:0;
492 margin:0;
493 padding:12px 9px 7px 24px;
493 padding:12px 9px 7px 24px;
494 }
494 }
495
495
496 #header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover {
496 #header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover {
497 background:#FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
497 background:#FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
498 width:167px;
498 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.settings,#header #header-inner #quick li ul li a.settings:hover {
503 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover {
504 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
504 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
505 width:167px;
505 width:167px;
506 margin:0;
506 margin:0;
507 padding:12px 9px 7px 24px;
507 padding:12px 9px 7px 24px;
508 }
508 }
509
509
510 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
510 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
511 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
511 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
512 width:167px;
512 width:167px;
513 margin:0;
513 margin:0;
514 padding:12px 9px 7px 24px;
514 padding:12px 9px 7px 24px;
515 }
515 }
516
516
517 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover {
517 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover {
518 background:#FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
518 background:#FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
519 width:167px;
519 width:167px;
520 margin:0;
520 margin:0;
521 padding:12px 9px 7px 24px;
521 padding:12px 9px 7px 24px;
522 }
522 }
523
523
524 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
524 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
525 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
525 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
526 width:167px;
526 width:167px;
527 margin:0;
527 margin:0;
528 padding:12px 9px 7px 24px;
528 padding:12px 9px 7px 24px;
529 }
529 }
530
530
531 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
531 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
532 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
532 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
533 width:167px;
533 width:167px;
534 margin:0;
534 margin:0;
535 padding:12px 9px 7px 24px;
535 padding:12px 9px 7px 24px;
536 }
536 }
537
537
538 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
538 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
539 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
539 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
540 width:167px;
540 width:167px;
541 margin:0;
541 margin:0;
542 padding:12px 9px 7px 24px;
542 padding:12px 9px 7px 24px;
543 }
543 }
544
544
545 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
545 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
546 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
546 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
547 width:167px;
547 width:167px;
548 margin:0;
548 margin:0;
549 padding:12px 9px 7px 24px;
549 padding:12px 9px 7px 24px;
550 }
550 }
551
551
552 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
552 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
553 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
553 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
554 width:167px;
554 width:167px;
555 margin:0;
555 margin:0;
556 padding:12px 9px 7px 24px;
556 padding:12px 9px 7px 24px;
557 }
557 }
558
558
559 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
559 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
560 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
560 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
561 width:167px;
561 width:167px;
562 margin:0;
562 margin:0;
563 padding:12px 9px 7px 24px;
563 padding:12px 9px 7px 24px;
564 }
564 }
565
565
566
566
567 .quick_repo_menu{
567 .quick_repo_menu{
568 background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important;
568 background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important;
569 cursor: pointer;
569 cursor: pointer;
570 width: 8px;
570 width: 8px;
571 }
571 }
572 .quick_repo_menu.active{
572 .quick_repo_menu.active{
573 background: #FFF url("../images/horizontal-indicator.png") 4px 50% no-repeat !important;
573 background: #FFF url("../images/horizontal-indicator.png") 4px 50% no-repeat !important;
574 cursor: pointer;
574 cursor: pointer;
575 }
575 }
576 .quick_repo_menu .menu_items{
576 .quick_repo_menu .menu_items{
577 margin-top:6px;
577 margin-top:6px;
578 width:150px;
578 width:150px;
579 position: absolute;
579 position: absolute;
580 background-color:#FFF;
580 background-color:#FFF;
581 background: none repeat scroll 0 0 #FFFFFF;
581 background: none repeat scroll 0 0 #FFFFFF;
582 border-color: #003367 #666666 #666666;
582 border-color: #003367 #666666 #666666;
583 border-right: 1px solid #666666;
583 border-right: 1px solid #666666;
584 border-style: solid;
584 border-style: solid;
585 border-width: 1px;
585 border-width: 1px;
586 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
586 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
587 }
587 }
588 .quick_repo_menu .menu_items li{
588 .quick_repo_menu .menu_items li{
589 padding:0 !important;
589 padding:0 !important;
590 }
590 }
591 .quick_repo_menu .menu_items a{
591 .quick_repo_menu .menu_items a{
592 display: block;
592 display: block;
593 padding: 4px 12px 4px 8px;
593 padding: 4px 12px 4px 8px;
594 }
594 }
595 .quick_repo_menu .menu_items a:hover{
595 .quick_repo_menu .menu_items a:hover{
596 background-color: #EEE;
596 background-color: #EEE;
597 text-decoration: none;
597 text-decoration: none;
598
598
599 }
599 }
600 .quick_repo_menu .menu_items .icon img{
600 .quick_repo_menu .menu_items .icon img{
601 margin-bottom:-2px;
601 margin-bottom:-2px;
602 }
602 }
603 .quick_repo_menu .menu_items.hidden{
603 .quick_repo_menu .menu_items.hidden{
604 display: none;
604 display: none;
605 }
605 }
606
606
607 #content #left {
607 #content #left {
608 left:0;
608 left:0;
609 width:280px;
609 width:280px;
610 position:absolute;
610 position:absolute;
611 }
611 }
612
612
613 #content #right {
613 #content #right {
614 margin:0 60px 10px 290px;
614 margin:0 60px 10px 290px;
615 }
615 }
616
616
617 #content div.box {
617 #content div.box {
618 clear:both;
618 clear:both;
619 overflow:hidden;
619 overflow:hidden;
620 background:#fff;
620 background:#fff;
621 margin:0 0 10px;
621 margin:0 0 10px;
622 padding:0 0 10px;
622 padding:0 0 10px;
623 -webkit-border-radius: 4px 4px 4px 4px;
623 -webkit-border-radius: 4px 4px 4px 4px;
624 -khtml-border-radius: 4px 4px 4px 4px;
624 -khtml-border-radius: 4px 4px 4px 4px;
625 -moz-border-radius: 4px 4px 4px 4px;
625 -moz-border-radius: 4px 4px 4px 4px;
626 border-radius: 4px 4px 4px 4px;
626 border-radius: 4px 4px 4px 4px;
627 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
627 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
628
628
629 }
629 }
630
630
631 #content div.box-left {
631 #content div.box-left {
632 width:49%;
632 width:49%;
633 clear:none;
633 clear:none;
634 float:left;
634 float:left;
635 margin:0 0 10px;
635 margin:0 0 10px;
636 }
636 }
637
637
638 #content div.box-right {
638 #content div.box-right {
639 width:49%;
639 width:49%;
640 clear:none;
640 clear:none;
641 float:right;
641 float:right;
642 margin:0 0 10px;
642 margin:0 0 10px;
643 }
643 }
644
644
645 #content div.box div.title {
645 #content div.box div.title {
646 clear:both;
646 clear:both;
647 overflow:hidden;
647 overflow:hidden;
648 background:#369 url("../images/header_inner.png") repeat-x;
648 background:#369 url("../images/header_inner.png") repeat-x;
649 margin:0 0 20px;
649 margin:0 0 20px;
650 padding:0;
650 padding:0;
651 }
651 }
652
652
653 #content div.box div.title h5 {
653 #content div.box div.title h5 {
654 float:left;
654 float:left;
655 border:none;
655 border:none;
656 color:#fff;
656 color:#fff;
657 text-transform:uppercase;
657 text-transform:uppercase;
658 margin:0;
658 margin:0;
659 padding:11px 0 11px 10px;
659 padding:11px 0 11px 10px;
660 }
660 }
661
661
662 #content div.box div.title ul.links li {
662 #content div.box div.title ul.links li {
663 list-style:none;
663 list-style:none;
664 float:left;
664 float:left;
665 margin:0;
665 margin:0;
666 padding:0;
666 padding:0;
667 }
667 }
668
668
669 #content div.box div.title ul.links li a {
669 #content div.box div.title ul.links li a {
670 border-left: 1px solid #316293;
670 border-left: 1px solid #316293;
671 color: #FFFFFF;
671 color: #FFFFFF;
672 display: block;
672 display: block;
673 float: left;
673 float: left;
674 font-size: 13px;
674 font-size: 13px;
675 font-weight: 700;
675 font-weight: 700;
676 height: 1%;
676 height: 1%;
677 margin: 0;
677 margin: 0;
678 padding: 11px 22px 12px;
678 padding: 11px 22px 12px;
679 text-decoration: none;
679 text-decoration: none;
680 }
680 }
681
681
682 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
682 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
683 clear:both;
683 clear:both;
684 overflow:hidden;
684 overflow:hidden;
685 border-bottom:1px solid #DDD;
685 border-bottom:1px solid #DDD;
686 margin:10px 20px;
686 margin:10px 20px;
687 padding:0 0 15px;
687 padding:0 0 15px;
688 }
688 }
689
689
690 #content div.box p {
690 #content div.box p {
691 color:#5f5f5f;
691 color:#5f5f5f;
692 font-size:12px;
692 font-size:12px;
693 line-height:150%;
693 line-height:150%;
694 margin:0 24px 10px;
694 margin:0 24px 10px;
695 padding:0;
695 padding:0;
696 }
696 }
697
697
698 #content div.box blockquote {
698 #content div.box blockquote {
699 border-left:4px solid #DDD;
699 border-left:4px solid #DDD;
700 color:#5f5f5f;
700 color:#5f5f5f;
701 font-size:11px;
701 font-size:11px;
702 line-height:150%;
702 line-height:150%;
703 margin:0 34px;
703 margin:0 34px;
704 padding:0 0 0 14px;
704 padding:0 0 0 14px;
705 }
705 }
706
706
707 #content div.box blockquote p {
707 #content div.box blockquote p {
708 margin:10px 0;
708 margin:10px 0;
709 padding:0;
709 padding:0;
710 }
710 }
711
711
712 #content div.box dl {
712 #content div.box dl {
713 margin:10px 24px;
713 margin:10px 24px;
714 }
714 }
715
715
716 #content div.box dt {
716 #content div.box dt {
717 font-size:12px;
717 font-size:12px;
718 margin:0;
718 margin:0;
719 }
719 }
720
720
721 #content div.box dd {
721 #content div.box dd {
722 font-size:12px;
722 font-size:12px;
723 margin:0;
723 margin:0;
724 padding:8px 0 8px 15px;
724 padding:8px 0 8px 15px;
725 }
725 }
726
726
727 #content div.box li {
727 #content div.box li {
728 font-size:12px;
728 font-size:12px;
729 padding:4px 0;
729 padding:4px 0;
730 }
730 }
731
731
732 #content div.box ul.disc,#content div.box ul.circle {
732 #content div.box ul.disc,#content div.box ul.circle {
733 margin:10px 24px 10px 38px;
733 margin:10px 24px 10px 38px;
734 }
734 }
735
735
736 #content div.box ul.square {
736 #content div.box ul.square {
737 margin:10px 24px 10px 40px;
737 margin:10px 24px 10px 40px;
738 }
738 }
739
739
740 #content div.box img.left {
740 #content div.box img.left {
741 border:none;
741 border:none;
742 float:left;
742 float:left;
743 margin:10px 10px 10px 0;
743 margin:10px 10px 10px 0;
744 }
744 }
745
745
746 #content div.box img.right {
746 #content div.box img.right {
747 border:none;
747 border:none;
748 float:right;
748 float:right;
749 margin:10px 0 10px 10px;
749 margin:10px 0 10px 10px;
750 }
750 }
751
751
752 #content div.box div.messages {
752 #content div.box div.messages {
753 clear:both;
753 clear:both;
754 overflow:hidden;
754 overflow:hidden;
755 margin:0 20px;
755 margin:0 20px;
756 padding:0;
756 padding:0;
757 }
757 }
758
758
759 #content div.box div.message {
759 #content div.box div.message {
760 clear:both;
760 clear:both;
761 overflow:hidden;
761 overflow:hidden;
762 margin:0;
762 margin:0;
763 padding:10px 0;
763 padding:10px 0;
764 }
764 }
765
765
766 #content div.box div.message a {
766 #content div.box div.message a {
767 font-weight:400 !important;
767 font-weight:400 !important;
768 }
768 }
769
769
770 #content div.box div.message div.image {
770 #content div.box div.message div.image {
771 float:left;
771 float:left;
772 margin:9px 0 0 5px;
772 margin:9px 0 0 5px;
773 padding:6px;
773 padding:6px;
774 }
774 }
775
775
776 #content div.box div.message div.image img {
776 #content div.box div.message div.image img {
777 vertical-align:middle;
777 vertical-align:middle;
778 margin:0;
778 margin:0;
779 }
779 }
780
780
781 #content div.box div.message div.text {
781 #content div.box div.message div.text {
782 float:left;
782 float:left;
783 margin:0;
783 margin:0;
784 padding:9px 6px;
784 padding:9px 6px;
785 }
785 }
786
786
787 #content div.box div.message div.dismiss a {
787 #content div.box div.message div.dismiss a {
788 height:16px;
788 height:16px;
789 width:16px;
789 width:16px;
790 display:block;
790 display:block;
791 background:url("../images/icons/cross.png") no-repeat;
791 background:url("../images/icons/cross.png") no-repeat;
792 margin:15px 14px 0 0;
792 margin:15px 14px 0 0;
793 padding:0;
793 padding:0;
794 }
794 }
795
795
796 #content div.box div.message div.text h1,#content div.box div.message div.text h2,#content div.box div.message div.text h3,#content div.box div.message div.text h4,#content div.box div.message div.text h5,#content div.box div.message div.text h6 {
796 #content div.box div.message div.text h1,#content div.box div.message div.text h2,#content div.box div.message div.text h3,#content div.box div.message div.text h4,#content div.box div.message div.text h5,#content div.box div.message div.text h6 {
797 border:none;
797 border:none;
798 margin:0;
798 margin:0;
799 padding:0;
799 padding:0;
800 }
800 }
801
801
802 #content div.box div.message div.text span {
802 #content div.box div.message div.text span {
803 height:1%;
803 height:1%;
804 display:block;
804 display:block;
805 margin:0;
805 margin:0;
806 padding:5px 0 0;
806 padding:5px 0 0;
807 }
807 }
808
808
809 #content div.box div.message-error {
809 #content div.box div.message-error {
810 height:1%;
810 height:1%;
811 clear:both;
811 clear:both;
812 overflow:hidden;
812 overflow:hidden;
813 background:#FBE3E4;
813 background:#FBE3E4;
814 border:1px solid #FBC2C4;
814 border:1px solid #FBC2C4;
815 color:#860006;
815 color:#860006;
816 }
816 }
817
817
818 #content div.box div.message-error h6 {
818 #content div.box div.message-error h6 {
819 color:#860006;
819 color:#860006;
820 }
820 }
821
821
822 #content div.box div.message-warning {
822 #content div.box div.message-warning {
823 height:1%;
823 height:1%;
824 clear:both;
824 clear:both;
825 overflow:hidden;
825 overflow:hidden;
826 background:#FFF6BF;
826 background:#FFF6BF;
827 border:1px solid #FFD324;
827 border:1px solid #FFD324;
828 color:#5f5200;
828 color:#5f5200;
829 }
829 }
830
830
831 #content div.box div.message-warning h6 {
831 #content div.box div.message-warning h6 {
832 color:#5f5200;
832 color:#5f5200;
833 }
833 }
834
834
835 #content div.box div.message-notice {
835 #content div.box div.message-notice {
836 height:1%;
836 height:1%;
837 clear:both;
837 clear:both;
838 overflow:hidden;
838 overflow:hidden;
839 background:#8FBDE0;
839 background:#8FBDE0;
840 border:1px solid #6BACDE;
840 border:1px solid #6BACDE;
841 color:#003863;
841 color:#003863;
842 }
842 }
843
843
844 #content div.box div.message-notice h6 {
844 #content div.box div.message-notice h6 {
845 color:#003863;
845 color:#003863;
846 }
846 }
847
847
848 #content div.box div.message-success {
848 #content div.box div.message-success {
849 height:1%;
849 height:1%;
850 clear:both;
850 clear:both;
851 overflow:hidden;
851 overflow:hidden;
852 background:#E6EFC2;
852 background:#E6EFC2;
853 border:1px solid #C6D880;
853 border:1px solid #C6D880;
854 color:#4e6100;
854 color:#4e6100;
855 }
855 }
856
856
857 #content div.box div.message-success h6 {
857 #content div.box div.message-success h6 {
858 color:#4e6100;
858 color:#4e6100;
859 }
859 }
860
860
861 #content div.box div.form div.fields div.field {
861 #content div.box div.form div.fields div.field {
862 height:1%;
862 height:1%;
863 border-bottom:1px solid #DDD;
863 border-bottom:1px solid #DDD;
864 clear:both;
864 clear:both;
865 margin:0;
865 margin:0;
866 padding:10px 0;
866 padding:10px 0;
867 }
867 }
868
868
869 #content div.box div.form div.fields div.field-first {
869 #content div.box div.form div.fields div.field-first {
870 padding:0 0 10px;
870 padding:0 0 10px;
871 }
871 }
872
872
873 #content div.box div.form div.fields div.field-noborder {
873 #content div.box div.form div.fields div.field-noborder {
874 border-bottom:0 !important;
874 border-bottom:0 !important;
875 }
875 }
876
876
877 #content div.box div.form div.fields div.field span.error-message {
877 #content div.box div.form div.fields div.field span.error-message {
878 height:1%;
878 height:1%;
879 display:inline-block;
879 display:inline-block;
880 color:red;
880 color:red;
881 margin:8px 0 0 4px;
881 margin:8px 0 0 4px;
882 padding:0;
882 padding:0;
883 }
883 }
884
884
885 #content div.box div.form div.fields div.field span.success {
885 #content div.box div.form div.fields div.field span.success {
886 height:1%;
886 height:1%;
887 display:block;
887 display:block;
888 color:#316309;
888 color:#316309;
889 margin:8px 0 0;
889 margin:8px 0 0;
890 padding:0;
890 padding:0;
891 }
891 }
892
892
893 #content div.box div.form div.fields div.field div.label {
893 #content div.box div.form div.fields div.field div.label {
894 left:70px;
894 left:70px;
895 width:155px;
895 width:155px;
896 position:absolute;
896 position:absolute;
897 margin:0;
897 margin:0;
898 padding:8px 0 0 5px;
898 padding:8px 0 0 5px;
899 }
899 }
900
900
901 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
901 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
902 clear:both;
902 clear:both;
903 overflow:hidden;
903 overflow:hidden;
904 left:0;
904 left:0;
905 width:auto;
905 width:auto;
906 position:relative;
906 position:relative;
907 margin:0;
907 margin:0;
908 padding:0 0 8px;
908 padding:0 0 8px;
909 }
909 }
910
910
911 #content div.box div.form div.fields div.field div.label-select {
911 #content div.box div.form div.fields div.field div.label-select {
912 padding:5px 0 0 5px;
912 padding:5px 0 0 5px;
913 }
913 }
914
914
915 #content div.box-left div.form div.fields div.field div.label-select,#content div.box-right div.form div.fields div.field div.label-select {
915 #content div.box-left div.form div.fields div.field div.label-select,#content div.box-right div.form div.fields div.field div.label-select {
916 padding:0 0 8px;
916 padding:0 0 8px;
917 }
917 }
918
918
919 #content div.box-left div.form div.fields div.field div.label-textarea,#content div.box-right div.form div.fields div.field div.label-textarea {
919 #content div.box-left div.form div.fields div.field div.label-textarea,#content div.box-right div.form div.fields div.field div.label-textarea {
920 padding:0 0 8px !important;
920 padding:0 0 8px !important;
921 }
921 }
922
922
923 #content div.box div.form div.fields div.field div.label label, div.label label{
923 #content div.box div.form div.fields div.field div.label label, div.label label{
924 color:#393939;
924 color:#393939;
925 font-weight:700;
925 font-weight:700;
926 }
926 }
927
927
928 #content div.box div.form div.fields div.field div.input {
928 #content div.box div.form div.fields div.field div.input {
929 margin:0 0 0 200px;
929 margin:0 0 0 200px;
930 }
930 }
931 #content div.box div.form div.fields div.field div.file {
932 margin:0 0 0 200px;
933 }
931 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
934 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
932 margin:0 0 0 0px;
935 margin:0 0 0 0px;
933 }
936 }
934
937
935 #content div.box div.form div.fields div.field div.input input {
938 #content div.box div.form div.fields div.field div.input input {
936 background:#FFF;
939 background:#FFF;
937 border-top:1px solid #b3b3b3;
940 border-top:1px solid #b3b3b3;
938 border-left:1px solid #b3b3b3;
941 border-left:1px solid #b3b3b3;
939 border-right:1px solid #eaeaea;
942 border-right:1px solid #eaeaea;
940 border-bottom:1px solid #eaeaea;
943 border-bottom:1px solid #eaeaea;
941 color:#000;
944 color:#000;
942 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
945 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
943 font-size:11px;
946 font-size:11px;
944 margin:0;
947 margin:0;
945 padding:7px 7px 6px;
948 padding:7px 7px 6px;
946 }
949 }
947
950
951 #content div.box div.form div.fields div.field div.file input {
952 background: none repeat scroll 0 0 #FFFFFF;
953 border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
954 border-style: solid;
955 border-width: 1px;
956 color: #000000;
957 font-family: Lucida Grande,Verdana,Lucida Sans Regular,Lucida Sans Unicode,Arial,sans-serif;
958 font-size: 11px;
959 margin: 0;
960 padding: 7px 7px 6px;
961 }
948
962
949
963
950 #content div.box div.form div.fields div.field div.input input.small {
964 #content div.box div.form div.fields div.field div.input input.small {
951 width:30%;
965 width:30%;
952 }
966 }
953
967
954 #content div.box div.form div.fields div.field div.input input.medium {
968 #content div.box div.form div.fields div.field div.input input.medium {
955 width:55%;
969 width:55%;
956 }
970 }
957
971
958 #content div.box div.form div.fields div.field div.input input.large {
972 #content div.box div.form div.fields div.field div.input input.large {
959 width:85%;
973 width:85%;
960 }
974 }
961
975
962 #content div.box div.form div.fields div.field div.input input.date {
976 #content div.box div.form div.fields div.field div.input input.date {
963 width:177px;
977 width:177px;
964 }
978 }
965
979
966 #content div.box div.form div.fields div.field div.input input.button {
980 #content div.box div.form div.fields div.field div.input input.button {
967 background:#D4D0C8;
981 background:#D4D0C8;
968 border-top:1px solid #FFF;
982 border-top:1px solid #FFF;
969 border-left:1px solid #FFF;
983 border-left:1px solid #FFF;
970 border-right:1px solid #404040;
984 border-right:1px solid #404040;
971 border-bottom:1px solid #404040;
985 border-bottom:1px solid #404040;
972 color:#000;
986 color:#000;
973 margin:0;
987 margin:0;
974 padding:4px 8px;
988 padding:4px 8px;
975 }
989 }
976
990
977 #content div.box div.form div.fields div.field div.textarea {
991 #content div.box div.form div.fields div.field div.textarea {
978 border-top:1px solid #b3b3b3;
992 border-top:1px solid #b3b3b3;
979 border-left:1px solid #b3b3b3;
993 border-left:1px solid #b3b3b3;
980 border-right:1px solid #eaeaea;
994 border-right:1px solid #eaeaea;
981 border-bottom:1px solid #eaeaea;
995 border-bottom:1px solid #eaeaea;
982 margin:0 0 0 200px;
996 margin:0 0 0 200px;
983 padding:10px;
997 padding:10px;
984 }
998 }
985
999
986 #content div.box div.form div.fields div.field div.textarea-editor {
1000 #content div.box div.form div.fields div.field div.textarea-editor {
987 border:1px solid #ddd;
1001 border:1px solid #ddd;
988 padding:0;
1002 padding:0;
989 }
1003 }
990
1004
991 #content div.box div.form div.fields div.field div.textarea textarea {
1005 #content div.box div.form div.fields div.field div.textarea textarea {
992 width:100%;
1006 width:100%;
993 height:220px;
1007 height:220px;
994 overflow:hidden;
1008 overflow:hidden;
995 background:#FFF;
1009 background:#FFF;
996 color:#000;
1010 color:#000;
997 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1011 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
998 font-size:11px;
1012 font-size:11px;
999 outline:none;
1013 outline:none;
1000 border-width:0;
1014 border-width:0;
1001 margin:0;
1015 margin:0;
1002 padding:0;
1016 padding:0;
1003 }
1017 }
1004
1018
1005 #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 {
1019 #content div.box-left div.form div.fields div.field div.textarea textarea,#content div.box-right div.form div.fields div.field div.textarea textarea {
1006 width:100%;
1020 width:100%;
1007 height:100px;
1021 height:100px;
1008 }
1022 }
1009
1023
1010 #content div.box div.form div.fields div.field div.textarea table {
1024 #content div.box div.form div.fields div.field div.textarea table {
1011 width:100%;
1025 width:100%;
1012 border:none;
1026 border:none;
1013 margin:0;
1027 margin:0;
1014 padding:0;
1028 padding:0;
1015 }
1029 }
1016
1030
1017 #content div.box div.form div.fields div.field div.textarea table td {
1031 #content div.box div.form div.fields div.field div.textarea table td {
1018 background:#DDD;
1032 background:#DDD;
1019 border:none;
1033 border:none;
1020 padding:0;
1034 padding:0;
1021 }
1035 }
1022
1036
1023 #content div.box div.form div.fields div.field div.textarea table td table {
1037 #content div.box div.form div.fields div.field div.textarea table td table {
1024 width:auto;
1038 width:auto;
1025 border:none;
1039 border:none;
1026 margin:0;
1040 margin:0;
1027 padding:0;
1041 padding:0;
1028 }
1042 }
1029
1043
1030 #content div.box div.form div.fields div.field div.textarea table td table td {
1044 #content div.box div.form div.fields div.field div.textarea table td table td {
1031 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1045 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1032 font-size:11px;
1046 font-size:11px;
1033 padding:5px 5px 5px 0;
1047 padding:5px 5px 5px 0;
1034 }
1048 }
1035
1049
1036 #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 {
1050 #content div.box div.form div.fields div.field input[type=text]:focus,#content div.box div.form div.fields div.field input[type=password]:focus,#content div.box div.form div.fields div.field input[type=file]:focus,#content div.box div.form div.fields div.field textarea:focus,#content div.box div.form div.fields div.field select:focus {
1037 background:#f6f6f6;
1051 background:#f6f6f6;
1038 border-color:#666;
1052 border-color:#666;
1039 }
1053 }
1040
1054
1041 div.form div.fields div.field div.button {
1055 div.form div.fields div.field div.button {
1042 margin:0;
1056 margin:0;
1043 padding:0 0 0 8px;
1057 padding:0 0 0 8px;
1044 }
1058 }
1045
1059
1046
1060
1047 #content div.box table {
1061 #content div.box table {
1048 width:100%;
1062 width:100%;
1049 border-collapse:collapse;
1063 border-collapse:collapse;
1050 margin:0;
1064 margin:0;
1051 padding:0;
1065 padding:0;
1052 border: 1px solid #eee;
1066 border: 1px solid #eee;
1053 }
1067 }
1054
1068
1055 #content div.box table th {
1069 #content div.box table th {
1056 background:#eee;
1070 background:#eee;
1057 border-bottom:1px solid #ddd;
1071 border-bottom:1px solid #ddd;
1058 padding:5px 0px 5px 5px;
1072 padding:5px 0px 5px 5px;
1059 }
1073 }
1060
1074
1061 #content div.box table th.left {
1075 #content div.box table th.left {
1062 text-align:left;
1076 text-align:left;
1063 }
1077 }
1064
1078
1065 #content div.box table th.right {
1079 #content div.box table th.right {
1066 text-align:right;
1080 text-align:right;
1067 }
1081 }
1068
1082
1069 #content div.box table th.center {
1083 #content div.box table th.center {
1070 text-align:center;
1084 text-align:center;
1071 }
1085 }
1072
1086
1073 #content div.box table th.selected {
1087 #content div.box table th.selected {
1074 vertical-align:middle;
1088 vertical-align:middle;
1075 padding:0;
1089 padding:0;
1076 }
1090 }
1077
1091
1078 #content div.box table td {
1092 #content div.box table td {
1079 background:#fff;
1093 background:#fff;
1080 border-bottom:1px solid #cdcdcd;
1094 border-bottom:1px solid #cdcdcd;
1081 vertical-align:middle;
1095 vertical-align:middle;
1082 padding:5px;
1096 padding:5px;
1083 }
1097 }
1084
1098
1085 #content div.box table tr.selected td {
1099 #content div.box table tr.selected td {
1086 background:#FFC;
1100 background:#FFC;
1087 }
1101 }
1088
1102
1089 #content div.box table td.selected {
1103 #content div.box table td.selected {
1090 width:3%;
1104 width:3%;
1091 text-align:center;
1105 text-align:center;
1092 vertical-align:middle;
1106 vertical-align:middle;
1093 padding:0;
1107 padding:0;
1094 }
1108 }
1095
1109
1096 #content div.box table td.action {
1110 #content div.box table td.action {
1097 width:45%;
1111 width:45%;
1098 text-align:left;
1112 text-align:left;
1099 }
1113 }
1100
1114
1101 #content div.box table td.date {
1115 #content div.box table td.date {
1102 width:33%;
1116 width:33%;
1103 text-align:center;
1117 text-align:center;
1104 }
1118 }
1105
1119
1106 #content div.box div.action {
1120 #content div.box div.action {
1107 float:right;
1121 float:right;
1108 background:#FFF;
1122 background:#FFF;
1109 text-align:right;
1123 text-align:right;
1110 margin:10px 0 0;
1124 margin:10px 0 0;
1111 padding:0;
1125 padding:0;
1112 }
1126 }
1113
1127
1114 #content div.box div.action select {
1128 #content div.box div.action select {
1115 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1129 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1116 font-size:11px;
1130 font-size:11px;
1117 margin:0;
1131 margin:0;
1118 }
1132 }
1119
1133
1120 #content div.box div.action .ui-selectmenu {
1134 #content div.box div.action .ui-selectmenu {
1121 margin:0;
1135 margin:0;
1122 padding:0;
1136 padding:0;
1123 }
1137 }
1124
1138
1125 #content div.box div.pagination {
1139 #content div.box div.pagination {
1126 height:1%;
1140 height:1%;
1127 clear:both;
1141 clear:both;
1128 overflow:hidden;
1142 overflow:hidden;
1129 margin:10px 0 0;
1143 margin:10px 0 0;
1130 padding:0;
1144 padding:0;
1131 }
1145 }
1132
1146
1133 #content div.box div.pagination ul.pager {
1147 #content div.box div.pagination ul.pager {
1134 float:right;
1148 float:right;
1135 text-align:right;
1149 text-align:right;
1136 margin:0;
1150 margin:0;
1137 padding:0;
1151 padding:0;
1138 }
1152 }
1139
1153
1140 #content div.box div.pagination ul.pager li {
1154 #content div.box div.pagination ul.pager li {
1141 height:1%;
1155 height:1%;
1142 float:left;
1156 float:left;
1143 list-style:none;
1157 list-style:none;
1144 background:#ebebeb url("../images/pager.png") repeat-x;
1158 background:#ebebeb url("../images/pager.png") repeat-x;
1145 border-top:1px solid #dedede;
1159 border-top:1px solid #dedede;
1146 border-left:1px solid #cfcfcf;
1160 border-left:1px solid #cfcfcf;
1147 border-right:1px solid #c4c4c4;
1161 border-right:1px solid #c4c4c4;
1148 border-bottom:1px solid #c4c4c4;
1162 border-bottom:1px solid #c4c4c4;
1149 color:#4A4A4A;
1163 color:#4A4A4A;
1150 font-weight:700;
1164 font-weight:700;
1151 margin:0 0 0 4px;
1165 margin:0 0 0 4px;
1152 padding:0;
1166 padding:0;
1153 }
1167 }
1154
1168
1155 #content div.box div.pagination ul.pager li.separator {
1169 #content div.box div.pagination ul.pager li.separator {
1156 padding:6px;
1170 padding:6px;
1157 }
1171 }
1158
1172
1159 #content div.box div.pagination ul.pager li.current {
1173 #content div.box div.pagination ul.pager li.current {
1160 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1174 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1161 border-top:1px solid #ccc;
1175 border-top:1px solid #ccc;
1162 border-left:1px solid #bebebe;
1176 border-left:1px solid #bebebe;
1163 border-right:1px solid #b1b1b1;
1177 border-right:1px solid #b1b1b1;
1164 border-bottom:1px solid #afafaf;
1178 border-bottom:1px solid #afafaf;
1165 color:#515151;
1179 color:#515151;
1166 padding:6px;
1180 padding:6px;
1167 }
1181 }
1168
1182
1169 #content div.box div.pagination ul.pager li a {
1183 #content div.box div.pagination ul.pager li a {
1170 height:1%;
1184 height:1%;
1171 display:block;
1185 display:block;
1172 float:left;
1186 float:left;
1173 color:#515151;
1187 color:#515151;
1174 text-decoration:none;
1188 text-decoration:none;
1175 margin:0;
1189 margin:0;
1176 padding:6px;
1190 padding:6px;
1177 }
1191 }
1178
1192
1179 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1193 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1180 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1194 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1181 border-top:1px solid #ccc;
1195 border-top:1px solid #ccc;
1182 border-left:1px solid #bebebe;
1196 border-left:1px solid #bebebe;
1183 border-right:1px solid #b1b1b1;
1197 border-right:1px solid #b1b1b1;
1184 border-bottom:1px solid #afafaf;
1198 border-bottom:1px solid #afafaf;
1185 margin:-1px;
1199 margin:-1px;
1186 }
1200 }
1187
1201
1188 #content div.box div.pagination-wh {
1202 #content div.box div.pagination-wh {
1189 height:1%;
1203 height:1%;
1190 clear:both;
1204 clear:both;
1191 overflow:hidden;
1205 overflow:hidden;
1192 text-align:right;
1206 text-align:right;
1193 margin:10px 0 0;
1207 margin:10px 0 0;
1194 padding:0;
1208 padding:0;
1195 }
1209 }
1196
1210
1197 #content div.box div.pagination-right {
1211 #content div.box div.pagination-right {
1198 float:right;
1212 float:right;
1199 }
1213 }
1200
1214
1201 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1215 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1202 height:1%;
1216 height:1%;
1203 float:left;
1217 float:left;
1204 background:#ebebeb url("../images/pager.png") repeat-x;
1218 background:#ebebeb url("../images/pager.png") repeat-x;
1205 border-top:1px solid #dedede;
1219 border-top:1px solid #dedede;
1206 border-left:1px solid #cfcfcf;
1220 border-left:1px solid #cfcfcf;
1207 border-right:1px solid #c4c4c4;
1221 border-right:1px solid #c4c4c4;
1208 border-bottom:1px solid #c4c4c4;
1222 border-bottom:1px solid #c4c4c4;
1209 color:#4A4A4A;
1223 color:#4A4A4A;
1210 font-weight:700;
1224 font-weight:700;
1211 margin:0 0 0 4px;
1225 margin:0 0 0 4px;
1212 padding:6px;
1226 padding:6px;
1213 }
1227 }
1214
1228
1215 #content div.box div.pagination-wh span.pager_curpage {
1229 #content div.box div.pagination-wh span.pager_curpage {
1216 height:1%;
1230 height:1%;
1217 float:left;
1231 float:left;
1218 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1232 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1219 border-top:1px solid #ccc;
1233 border-top:1px solid #ccc;
1220 border-left:1px solid #bebebe;
1234 border-left:1px solid #bebebe;
1221 border-right:1px solid #b1b1b1;
1235 border-right:1px solid #b1b1b1;
1222 border-bottom:1px solid #afafaf;
1236 border-bottom:1px solid #afafaf;
1223 color:#515151;
1237 color:#515151;
1224 font-weight:700;
1238 font-weight:700;
1225 margin:0 0 0 4px;
1239 margin:0 0 0 4px;
1226 padding:6px;
1240 padding:6px;
1227 }
1241 }
1228
1242
1229 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1243 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1230 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1244 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1231 border-top:1px solid #ccc;
1245 border-top:1px solid #ccc;
1232 border-left:1px solid #bebebe;
1246 border-left:1px solid #bebebe;
1233 border-right:1px solid #b1b1b1;
1247 border-right:1px solid #b1b1b1;
1234 border-bottom:1px solid #afafaf;
1248 border-bottom:1px solid #afafaf;
1235 text-decoration:none;
1249 text-decoration:none;
1236 }
1250 }
1237
1251
1238 #content div.box div.traffic div.legend {
1252 #content div.box div.traffic div.legend {
1239 clear:both;
1253 clear:both;
1240 overflow:hidden;
1254 overflow:hidden;
1241 border-bottom:1px solid #ddd;
1255 border-bottom:1px solid #ddd;
1242 margin:0 0 10px;
1256 margin:0 0 10px;
1243 padding:0 0 10px;
1257 padding:0 0 10px;
1244 }
1258 }
1245
1259
1246 #content div.box div.traffic div.legend h6 {
1260 #content div.box div.traffic div.legend h6 {
1247 float:left;
1261 float:left;
1248 border:none;
1262 border:none;
1249 margin:0;
1263 margin:0;
1250 padding:0;
1264 padding:0;
1251 }
1265 }
1252
1266
1253 #content div.box div.traffic div.legend li {
1267 #content div.box div.traffic div.legend li {
1254 list-style:none;
1268 list-style:none;
1255 float:left;
1269 float:left;
1256 font-size:11px;
1270 font-size:11px;
1257 margin:0;
1271 margin:0;
1258 padding:0 8px 0 4px;
1272 padding:0 8px 0 4px;
1259 }
1273 }
1260
1274
1261 #content div.box div.traffic div.legend li.visits {
1275 #content div.box div.traffic div.legend li.visits {
1262 border-left:12px solid #edc240;
1276 border-left:12px solid #edc240;
1263 }
1277 }
1264
1278
1265 #content div.box div.traffic div.legend li.pageviews {
1279 #content div.box div.traffic div.legend li.pageviews {
1266 border-left:12px solid #afd8f8;
1280 border-left:12px solid #afd8f8;
1267 }
1281 }
1268
1282
1269 #content div.box div.traffic table {
1283 #content div.box div.traffic table {
1270 width:auto;
1284 width:auto;
1271 }
1285 }
1272
1286
1273 #content div.box div.traffic table td {
1287 #content div.box div.traffic table td {
1274 background:transparent;
1288 background:transparent;
1275 border:none;
1289 border:none;
1276 padding:2px 3px 3px;
1290 padding:2px 3px 3px;
1277 }
1291 }
1278
1292
1279 #content div.box div.traffic table td.legendLabel {
1293 #content div.box div.traffic table td.legendLabel {
1280 padding:0 3px 2px;
1294 padding:0 3px 2px;
1281 }
1295 }
1282
1296
1283 #summary{
1297 #summary{
1284
1298
1285 }
1299 }
1286
1300
1287 #summary .desc{
1301 #summary .desc{
1288 white-space: pre;
1302 white-space: pre;
1289 width: 100%;
1303 width: 100%;
1290 }
1304 }
1291
1305
1292 #summary .repo_name{
1306 #summary .repo_name{
1293 font-size: 1.6em;
1307 font-size: 1.6em;
1294 font-weight: bold;
1308 font-weight: bold;
1295 vertical-align: baseline;
1309 vertical-align: baseline;
1296 clear:right
1310 clear:right
1297 }
1311 }
1298
1312
1299
1313
1300 #footer {
1314 #footer {
1301 clear:both;
1315 clear:both;
1302 overflow:hidden;
1316 overflow:hidden;
1303 text-align:right;
1317 text-align:right;
1304 margin:0;
1318 margin:0;
1305 padding:0 10px 4px;
1319 padding:0 10px 4px;
1306 margin:-10px 0 0;
1320 margin:-10px 0 0;
1307 }
1321 }
1308
1322
1309 #footer div#footer-inner {
1323 #footer div#footer-inner {
1310 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1324 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1311 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1325 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1312 -webkit-border-radius: 4px 4px 4px 4px;
1326 -webkit-border-radius: 4px 4px 4px 4px;
1313 -khtml-border-radius: 4px 4px 4px 4px;
1327 -khtml-border-radius: 4px 4px 4px 4px;
1314 -moz-border-radius: 4px 4px 4px 4px;
1328 -moz-border-radius: 4px 4px 4px 4px;
1315 border-radius: 4px 4px 4px 4px;
1329 border-radius: 4px 4px 4px 4px;
1316 }
1330 }
1317
1331
1318 #footer div#footer-inner p {
1332 #footer div#footer-inner p {
1319 padding:15px 25px 15px 0;
1333 padding:15px 25px 15px 0;
1320 color:#FFF;
1334 color:#FFF;
1321 font-weight:700;
1335 font-weight:700;
1322 }
1336 }
1323 #footer div#footer-inner .footer-link {
1337 #footer div#footer-inner .footer-link {
1324 float:left;
1338 float:left;
1325 padding-left:10px;
1339 padding-left:10px;
1326 }
1340 }
1327 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a {
1341 #footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a {
1328 color:#FFF;
1342 color:#FFF;
1329 }
1343 }
1330
1344
1331 #login div.title {
1345 #login div.title {
1332 width:420px;
1346 width:420px;
1333 clear:both;
1347 clear:both;
1334 overflow:hidden;
1348 overflow:hidden;
1335 position:relative;
1349 position:relative;
1336 background:#003367 url("../images/header_inner.png") repeat-x;
1350 background:#003367 url("../images/header_inner.png") repeat-x;
1337 margin:0 auto;
1351 margin:0 auto;
1338 padding:0;
1352 padding:0;
1339 }
1353 }
1340
1354
1341 #login div.inner {
1355 #login div.inner {
1342 width:380px;
1356 width:380px;
1343 background:#FFF url("../images/login.png") no-repeat top left;
1357 background:#FFF url("../images/login.png") no-repeat top left;
1344 border-top:none;
1358 border-top:none;
1345 border-bottom:none;
1359 border-bottom:none;
1346 margin:0 auto;
1360 margin:0 auto;
1347 padding:20px;
1361 padding:20px;
1348 }
1362 }
1349
1363
1350 #login div.form div.fields div.field div.label {
1364 #login div.form div.fields div.field div.label {
1351 width:173px;
1365 width:173px;
1352 float:left;
1366 float:left;
1353 text-align:right;
1367 text-align:right;
1354 margin:2px 10px 0 0;
1368 margin:2px 10px 0 0;
1355 padding:5px 0 0 5px;
1369 padding:5px 0 0 5px;
1356 }
1370 }
1357
1371
1358 #login div.form div.fields div.field div.input input {
1372 #login div.form div.fields div.field div.input input {
1359 width:176px;
1373 width:176px;
1360 background:#FFF;
1374 background:#FFF;
1361 border-top:1px solid #b3b3b3;
1375 border-top:1px solid #b3b3b3;
1362 border-left:1px solid #b3b3b3;
1376 border-left:1px solid #b3b3b3;
1363 border-right:1px solid #eaeaea;
1377 border-right:1px solid #eaeaea;
1364 border-bottom:1px solid #eaeaea;
1378 border-bottom:1px solid #eaeaea;
1365 color:#000;
1379 color:#000;
1366 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1380 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1367 font-size:11px;
1381 font-size:11px;
1368 margin:0;
1382 margin:0;
1369 padding:7px 7px 6px;
1383 padding:7px 7px 6px;
1370 }
1384 }
1371
1385
1372 #login div.form div.fields div.buttons {
1386 #login div.form div.fields div.buttons {
1373 clear:both;
1387 clear:both;
1374 overflow:hidden;
1388 overflow:hidden;
1375 border-top:1px solid #DDD;
1389 border-top:1px solid #DDD;
1376 text-align:right;
1390 text-align:right;
1377 margin:0;
1391 margin:0;
1378 padding:10px 0 0;
1392 padding:10px 0 0;
1379 }
1393 }
1380
1394
1381 #login div.form div.links {
1395 #login div.form div.links {
1382 clear:both;
1396 clear:both;
1383 overflow:hidden;
1397 overflow:hidden;
1384 margin:10px 0 0;
1398 margin:10px 0 0;
1385 padding:0 0 2px;
1399 padding:0 0 2px;
1386 }
1400 }
1387
1401
1388 #quick_login{
1402 #quick_login{
1389 top: 31px;
1403 top: 31px;
1390 background-color: rgb(0, 51, 103);
1404 background-color: rgb(0, 51, 103);
1391 z-index: 999;
1405 z-index: 999;
1392 height: 150px;
1406 height: 150px;
1393 position: absolute;
1407 position: absolute;
1394 margin-left: -16px;
1408 margin-left: -16px;
1395 width: 281px;
1409 width: 281px;
1396 -webkit-border-radius: 0px 0px 4px 4px;
1410 -webkit-border-radius: 0px 0px 4px 4px;
1397 -khtml-border-radius: 0px 0px 4px 4px;
1411 -khtml-border-radius: 0px 0px 4px 4px;
1398 -moz-border-radius: 0px 0px 4px 4px;
1412 -moz-border-radius: 0px 0px 4px 4px;
1399 border-radius: 0px 0px 4px 4px;
1413 border-radius: 0px 0px 4px 4px;
1400
1414
1401 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1415 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
1402 }
1416 }
1403
1417
1404 #quick_login .password_forgoten{
1418 #quick_login .password_forgoten{
1405 padding-right:10px;
1419 padding-right:10px;
1406 padding-top:0px;
1420 padding-top:0px;
1407 float:left;
1421 float:left;
1408 }
1422 }
1409 #quick_login .password_forgoten a{
1423 #quick_login .password_forgoten a{
1410 font-size: 10px
1424 font-size: 10px
1411 }
1425 }
1412
1426
1413 #quick_login .register{
1427 #quick_login .register{
1414 padding-right:10px;
1428 padding-right:10px;
1415 padding-top:5px;
1429 padding-top:5px;
1416 float:left;
1430 float:left;
1417 }
1431 }
1418
1432
1419 #quick_login .register a{
1433 #quick_login .register a{
1420 font-size: 10px
1434 font-size: 10px
1421 }
1435 }
1422 #quick_login div.form div.fields{
1436 #quick_login div.form div.fields{
1423 padding-top: 2px;
1437 padding-top: 2px;
1424 padding-left:10px;
1438 padding-left:10px;
1425 }
1439 }
1426
1440
1427 #quick_login div.form div.fields div.field{
1441 #quick_login div.form div.fields div.field{
1428 padding: 5px;
1442 padding: 5px;
1429 }
1443 }
1430
1444
1431 #quick_login div.form div.fields div.field div.label label{
1445 #quick_login div.form div.fields div.field div.label label{
1432 color:#fff;
1446 color:#fff;
1433 padding-bottom: 3px;
1447 padding-bottom: 3px;
1434 }
1448 }
1435
1449
1436 #quick_login div.form div.fields div.field div.input input {
1450 #quick_login div.form div.fields div.field div.input input {
1437 width:236px;
1451 width:236px;
1438 background:#FFF;
1452 background:#FFF;
1439 border-top:1px solid #b3b3b3;
1453 border-top:1px solid #b3b3b3;
1440 border-left:1px solid #b3b3b3;
1454 border-left:1px solid #b3b3b3;
1441 border-right:1px solid #eaeaea;
1455 border-right:1px solid #eaeaea;
1442 border-bottom:1px solid #eaeaea;
1456 border-bottom:1px solid #eaeaea;
1443 color:#000;
1457 color:#000;
1444 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1458 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1445 font-size:11px;
1459 font-size:11px;
1446 margin:0;
1460 margin:0;
1447 padding:5px 7px 4px;
1461 padding:5px 7px 4px;
1448 }
1462 }
1449
1463
1450 #quick_login div.form div.fields div.buttons {
1464 #quick_login div.form div.fields div.buttons {
1451 clear:both;
1465 clear:both;
1452 overflow:hidden;
1466 overflow:hidden;
1453 text-align:right;
1467 text-align:right;
1454 margin:0;
1468 margin:0;
1455 padding:10px 14px 3px 5px;
1469 padding:10px 14px 3px 5px;
1456 }
1470 }
1457
1471
1458 #quick_login div.form div.links {
1472 #quick_login div.form div.links {
1459 clear:both;
1473 clear:both;
1460 overflow:hidden;
1474 overflow:hidden;
1461 margin:10px 0 0;
1475 margin:10px 0 0;
1462 padding:0 0 2px;
1476 padding:0 0 2px;
1463 }
1477 }
1464
1478
1465 #register div.title {
1479 #register div.title {
1466 clear:both;
1480 clear:both;
1467 overflow:hidden;
1481 overflow:hidden;
1468 position:relative;
1482 position:relative;
1469 background:#003367 url("../images/header_inner.png") repeat-x;
1483 background:#003367 url("../images/header_inner.png") repeat-x;
1470 margin:0 auto;
1484 margin:0 auto;
1471 padding:0;
1485 padding:0;
1472 }
1486 }
1473
1487
1474 #register div.inner {
1488 #register div.inner {
1475 background:#FFF;
1489 background:#FFF;
1476 border-top:none;
1490 border-top:none;
1477 border-bottom:none;
1491 border-bottom:none;
1478 margin:0 auto;
1492 margin:0 auto;
1479 padding:20px;
1493 padding:20px;
1480 }
1494 }
1481
1495
1482 #register div.form div.fields div.field div.label {
1496 #register div.form div.fields div.field div.label {
1483 width:135px;
1497 width:135px;
1484 float:left;
1498 float:left;
1485 text-align:right;
1499 text-align:right;
1486 margin:2px 10px 0 0;
1500 margin:2px 10px 0 0;
1487 padding:5px 0 0 5px;
1501 padding:5px 0 0 5px;
1488 }
1502 }
1489
1503
1490 #register div.form div.fields div.field div.input input {
1504 #register div.form div.fields div.field div.input input {
1491 width:300px;
1505 width:300px;
1492 background:#FFF;
1506 background:#FFF;
1493 border-top:1px solid #b3b3b3;
1507 border-top:1px solid #b3b3b3;
1494 border-left:1px solid #b3b3b3;
1508 border-left:1px solid #b3b3b3;
1495 border-right:1px solid #eaeaea;
1509 border-right:1px solid #eaeaea;
1496 border-bottom:1px solid #eaeaea;
1510 border-bottom:1px solid #eaeaea;
1497 color:#000;
1511 color:#000;
1498 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1512 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1499 font-size:11px;
1513 font-size:11px;
1500 margin:0;
1514 margin:0;
1501 padding:7px 7px 6px;
1515 padding:7px 7px 6px;
1502 }
1516 }
1503
1517
1504 #register div.form div.fields div.buttons {
1518 #register div.form div.fields div.buttons {
1505 clear:both;
1519 clear:both;
1506 overflow:hidden;
1520 overflow:hidden;
1507 border-top:1px solid #DDD;
1521 border-top:1px solid #DDD;
1508 text-align:left;
1522 text-align:left;
1509 margin:0;
1523 margin:0;
1510 padding:10px 0 0 150px;
1524 padding:10px 0 0 150px;
1511 }
1525 }
1512
1526
1513
1527
1514 #register div.form div.activation_msg {
1528 #register div.form div.activation_msg {
1515 padding-top:4px;
1529 padding-top:4px;
1516 padding-bottom:4px;
1530 padding-bottom:4px;
1517 }
1531 }
1518
1532
1519 #journal .journal_day{
1533 #journal .journal_day{
1520 font-size:20px;
1534 font-size:20px;
1521 padding:10px 0px;
1535 padding:10px 0px;
1522 border-bottom:2px solid #DDD;
1536 border-bottom:2px solid #DDD;
1523 margin-left:10px;
1537 margin-left:10px;
1524 margin-right:10px;
1538 margin-right:10px;
1525 }
1539 }
1526
1540
1527 #journal .journal_container{
1541 #journal .journal_container{
1528 padding:5px;
1542 padding:5px;
1529 clear:both;
1543 clear:both;
1530 margin:0px 5px 0px 10px;
1544 margin:0px 5px 0px 10px;
1531 }
1545 }
1532
1546
1533 #journal .journal_action_container{
1547 #journal .journal_action_container{
1534 padding-left:38px;
1548 padding-left:38px;
1535 }
1549 }
1536
1550
1537 #journal .journal_user{
1551 #journal .journal_user{
1538 color: #747474;
1552 color: #747474;
1539 font-size: 14px;
1553 font-size: 14px;
1540 font-weight: bold;
1554 font-weight: bold;
1541 height: 30px;
1555 height: 30px;
1542 }
1556 }
1543 #journal .journal_icon{
1557 #journal .journal_icon{
1544 clear: both;
1558 clear: both;
1545 float: left;
1559 float: left;
1546 padding-right: 4px;
1560 padding-right: 4px;
1547 padding-top: 3px;
1561 padding-top: 3px;
1548 }
1562 }
1549 #journal .journal_action{
1563 #journal .journal_action{
1550 padding-top:4px;
1564 padding-top:4px;
1551 min-height:2px;
1565 min-height:2px;
1552 float:left
1566 float:left
1553 }
1567 }
1554 #journal .journal_action_params{
1568 #journal .journal_action_params{
1555 clear: left;
1569 clear: left;
1556 padding-left: 22px;
1570 padding-left: 22px;
1557 }
1571 }
1558 #journal .journal_repo{
1572 #journal .journal_repo{
1559 float: left;
1573 float: left;
1560 margin-left: 6px;
1574 margin-left: 6px;
1561 padding-top: 3px;
1575 padding-top: 3px;
1562 }
1576 }
1563 #journal .date{
1577 #journal .date{
1564 clear: both;
1578 clear: both;
1565 color: #777777;
1579 color: #777777;
1566 font-size: 11px;
1580 font-size: 11px;
1567 padding-left: 22px;
1581 padding-left: 22px;
1568 }
1582 }
1569 #journal .journal_repo .journal_repo_name{
1583 #journal .journal_repo .journal_repo_name{
1570 font-weight: bold;
1584 font-weight: bold;
1571 font-size: 1.1em;
1585 font-size: 1.1em;
1572 }
1586 }
1573 #journal .compare_view{
1587 #journal .compare_view{
1574 padding: 5px 0px 5px 0px;
1588 padding: 5px 0px 5px 0px;
1575 width: 95px;
1589 width: 95px;
1576 }
1590 }
1577 .journal_highlight{
1591 .journal_highlight{
1578 font-weight: bold;
1592 font-weight: bold;
1579 padding: 0 2px;
1593 padding: 0 2px;
1580 vertical-align: bottom;
1594 vertical-align: bottom;
1581 }
1595 }
1582 .trending_language_tbl,.trending_language_tbl td {
1596 .trending_language_tbl,.trending_language_tbl td {
1583 border:0 !important;
1597 border:0 !important;
1584 margin:0 !important;
1598 margin:0 !important;
1585 padding:0 !important;
1599 padding:0 !important;
1586 }
1600 }
1587
1601
1588 .trending_language {
1602 .trending_language {
1589 background-color:#003367;
1603 background-color:#003367;
1590 color:#FFF;
1604 color:#FFF;
1591 display:block;
1605 display:block;
1592 min-width:20px;
1606 min-width:20px;
1593 text-decoration:none;
1607 text-decoration:none;
1594 height:12px;
1608 height:12px;
1595 margin-bottom:4px;
1609 margin-bottom:4px;
1596 margin-left:5px;
1610 margin-left:5px;
1597 white-space:pre;
1611 white-space:pre;
1598 padding:3px;
1612 padding:3px;
1599 }
1613 }
1600
1614
1601 h3.files_location {
1615 h3.files_location {
1602 font-size:1.8em;
1616 font-size:1.8em;
1603 font-weight:700;
1617 font-weight:700;
1604 border-bottom:none !important;
1618 border-bottom:none !important;
1605 margin:10px 0 !important;
1619 margin:10px 0 !important;
1606 }
1620 }
1607
1621
1608 #files_data dl dt {
1622 #files_data dl dt {
1609 float:left;
1623 float:left;
1610 width:115px;
1624 width:115px;
1611 margin:0 !important;
1625 margin:0 !important;
1612 padding:5px;
1626 padding:5px;
1613 }
1627 }
1614
1628
1615 #files_data dl dd {
1629 #files_data dl dd {
1616 margin:0 !important;
1630 margin:0 !important;
1617 padding:5px !important;
1631 padding:5px !important;
1618 }
1632 }
1619
1633
1620 #changeset_content {
1634 #changeset_content {
1621 border:1px solid #CCC;
1635 border:1px solid #CCC;
1622 padding:5px;
1636 padding:5px;
1623 }
1637 }
1624 #changeset_compare_view_content{
1638 #changeset_compare_view_content{
1625 border:1px solid #CCC;
1639 border:1px solid #CCC;
1626 padding:5px;
1640 padding:5px;
1627 }
1641 }
1628
1642
1629 #changeset_content .container {
1643 #changeset_content .container {
1630 min-height:120px;
1644 min-height:120px;
1631 font-size:1.2em;
1645 font-size:1.2em;
1632 overflow:hidden;
1646 overflow:hidden;
1633 }
1647 }
1634
1648
1635 #changeset_compare_view_content .compare_view_commits{
1649 #changeset_compare_view_content .compare_view_commits{
1636 width: auto !important;
1650 width: auto !important;
1637 }
1651 }
1638
1652
1639 #changeset_compare_view_content .compare_view_commits td{
1653 #changeset_compare_view_content .compare_view_commits td{
1640 padding:0px 0px 0px 12px !important;
1654 padding:0px 0px 0px 12px !important;
1641 }
1655 }
1642
1656
1643 #changeset_content .container .right {
1657 #changeset_content .container .right {
1644 float:right;
1658 float:right;
1645 width:25%;
1659 width:25%;
1646 text-align:right;
1660 text-align:right;
1647 }
1661 }
1648
1662
1649 #changeset_content .container .left .message {
1663 #changeset_content .container .left .message {
1650 font-style:italic;
1664 font-style:italic;
1651 color:#556CB5;
1665 color:#556CB5;
1652 white-space:pre-wrap;
1666 white-space:pre-wrap;
1653 }
1667 }
1654
1668
1655 .cs_files .cur_cs{
1669 .cs_files .cur_cs{
1656 margin:10px 2px;
1670 margin:10px 2px;
1657 font-weight: bold;
1671 font-weight: bold;
1658 }
1672 }
1659
1673
1660 .cs_files .node{
1674 .cs_files .node{
1661 float: left;
1675 float: left;
1662 }
1676 }
1663 .cs_files .changes{
1677 .cs_files .changes{
1664 float: right;
1678 float: right;
1665 }
1679 }
1666 .cs_files .changes .added{
1680 .cs_files .changes .added{
1667 background-color: #BBFFBB;
1681 background-color: #BBFFBB;
1668 float: left;
1682 float: left;
1669 text-align: center;
1683 text-align: center;
1670 font-size: 90%;
1684 font-size: 90%;
1671 }
1685 }
1672 .cs_files .changes .deleted{
1686 .cs_files .changes .deleted{
1673 background-color: #FF8888;
1687 background-color: #FF8888;
1674 float: left;
1688 float: left;
1675 text-align: center;
1689 text-align: center;
1676 font-size: 90%;
1690 font-size: 90%;
1677 }
1691 }
1678 .cs_files .cs_added {
1692 .cs_files .cs_added {
1679 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1693 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1680 height:16px;
1694 height:16px;
1681 padding-left:20px;
1695 padding-left:20px;
1682 margin-top:7px;
1696 margin-top:7px;
1683 text-align:left;
1697 text-align:left;
1684 }
1698 }
1685
1699
1686 .cs_files .cs_changed {
1700 .cs_files .cs_changed {
1687 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1701 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1688 height:16px;
1702 height:16px;
1689 padding-left:20px;
1703 padding-left:20px;
1690 margin-top:7px;
1704 margin-top:7px;
1691 text-align:left;
1705 text-align:left;
1692 }
1706 }
1693
1707
1694 .cs_files .cs_removed {
1708 .cs_files .cs_removed {
1695 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1709 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1696 height:16px;
1710 height:16px;
1697 padding-left:20px;
1711 padding-left:20px;
1698 margin-top:7px;
1712 margin-top:7px;
1699 text-align:left;
1713 text-align:left;
1700 }
1714 }
1701
1715
1702 #graph {
1716 #graph {
1703 overflow:hidden;
1717 overflow:hidden;
1704 }
1718 }
1705
1719
1706 #graph_nodes {
1720 #graph_nodes {
1707 float: left;
1721 float: left;
1708 margin-right: -6px;
1722 margin-right: -6px;
1709 margin-top: -4px;
1723 margin-top: -4px;
1710 }
1724 }
1711
1725
1712 #graph_content {
1726 #graph_content {
1713 width:800px;
1727 width:800px;
1714 float:left;
1728 float:left;
1715
1729
1716 }
1730 }
1717
1731
1718 #graph_content .container_header {
1732 #graph_content .container_header {
1719 border:1px solid #CCC;
1733 border:1px solid #CCC;
1720 padding:10px;
1734 padding:10px;
1721 }
1735 }
1722 #graph_content #rev_range_container{
1736 #graph_content #rev_range_container{
1723 padding:10px 0px;
1737 padding:10px 0px;
1724 }
1738 }
1725 #graph_content .container {
1739 #graph_content .container {
1726 border-bottom:1px solid #CCC;
1740 border-bottom:1px solid #CCC;
1727 border-left:1px solid #CCC;
1741 border-left:1px solid #CCC;
1728 border-right:1px solid #CCC;
1742 border-right:1px solid #CCC;
1729 min-height:70px;
1743 min-height:70px;
1730 overflow:hidden;
1744 overflow:hidden;
1731 font-size:1.2em;
1745 font-size:1.2em;
1732 }
1746 }
1733
1747
1734 #graph_content .container .right {
1748 #graph_content .container .right {
1735 float:right;
1749 float:right;
1736 width:28%;
1750 width:28%;
1737 text-align:right;
1751 text-align:right;
1738 padding-bottom:5px;
1752 padding-bottom:5px;
1739 }
1753 }
1740
1754
1741 #graph_content .container .left .date {
1755 #graph_content .container .left .date {
1742 font-weight:700;
1756 font-weight:700;
1743 padding-bottom:5px;
1757 padding-bottom:5px;
1744 }
1758 }
1745 #graph_content .container .left .date span{
1759 #graph_content .container .left .date span{
1746 vertical-align: text-top;
1760 vertical-align: text-top;
1747 }
1761 }
1748
1762
1749 #graph_content .container .left .author{
1763 #graph_content .container .left .author{
1750 height: 22px;
1764 height: 22px;
1751 }
1765 }
1752 #graph_content .container .left .author .user{
1766 #graph_content .container .left .author .user{
1753 color: #444444;
1767 color: #444444;
1754 float: left;
1768 float: left;
1755 font-size: 12px;
1769 font-size: 12px;
1756 margin-left: -4px;
1770 margin-left: -4px;
1757 margin-top: 4px;
1771 margin-top: 4px;
1758 }
1772 }
1759
1773
1760 #graph_content .container .left .message {
1774 #graph_content .container .left .message {
1761 font-size:100%;
1775 font-size:100%;
1762 padding-top:3px;
1776 padding-top:3px;
1763 white-space:pre-wrap;
1777 white-space:pre-wrap;
1764 }
1778 }
1765
1779
1766 .right div {
1780 .right div {
1767 clear:both;
1781 clear:both;
1768 }
1782 }
1769
1783
1770 .right .changes .changed_total{
1784 .right .changes .changed_total{
1771 border:1px solid #DDD;
1785 border:1px solid #DDD;
1772 display:block;
1786 display:block;
1773 float:right;
1787 float:right;
1774 text-align:center;
1788 text-align:center;
1775 min-width:45px;
1789 min-width:45px;
1776 cursor: pointer;
1790 cursor: pointer;
1777 background:#FD8;
1791 background:#FD8;
1778 font-weight: bold;
1792 font-weight: bold;
1779 }
1793 }
1780 .right .changes .added,.changed,.removed {
1794 .right .changes .added,.changed,.removed {
1781 border:1px solid #DDD;
1795 border:1px solid #DDD;
1782 display:block;
1796 display:block;
1783 float:right;
1797 float:right;
1784 text-align:center;
1798 text-align:center;
1785 min-width:15px;
1799 min-width:15px;
1786 cursor: help;
1800 cursor: help;
1787 }
1801 }
1788 .right .changes .large {
1802 .right .changes .large {
1789 border:1px solid #DDD;
1803 border:1px solid #DDD;
1790 display:block;
1804 display:block;
1791 float:right;
1805 float:right;
1792 text-align:center;
1806 text-align:center;
1793 min-width:45px;
1807 min-width:45px;
1794 cursor: help;
1808 cursor: help;
1795 background: #54A9F7;
1809 background: #54A9F7;
1796 }
1810 }
1797
1811
1798 .right .changes .added {
1812 .right .changes .added {
1799 background:#BFB;
1813 background:#BFB;
1800 }
1814 }
1801
1815
1802 .right .changes .changed {
1816 .right .changes .changed {
1803 background:#FD8;
1817 background:#FD8;
1804 }
1818 }
1805
1819
1806 .right .changes .removed {
1820 .right .changes .removed {
1807 background:#F88;
1821 background:#F88;
1808 }
1822 }
1809
1823
1810 .right .merge {
1824 .right .merge {
1811 vertical-align:top;
1825 vertical-align:top;
1812 font-size:0.75em;
1826 font-size:0.75em;
1813 font-weight:700;
1827 font-weight:700;
1814 }
1828 }
1815
1829
1816 .right .parent {
1830 .right .parent {
1817 font-size:90%;
1831 font-size:90%;
1818 font-family:monospace;
1832 font-family:monospace;
1819 }
1833 }
1820
1834
1821 .right .logtags .branchtag {
1835 .right .logtags .branchtag {
1822 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1836 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1823 display:block;
1837 display:block;
1824 font-size:0.8em;
1838 font-size:0.8em;
1825 padding:11px 16px 0 0;
1839 padding:11px 16px 0 0;
1826 }
1840 }
1827
1841
1828 .right .logtags .tagtag {
1842 .right .logtags .tagtag {
1829 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1843 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1830 display:block;
1844 display:block;
1831 font-size:0.8em;
1845 font-size:0.8em;
1832 padding:11px 16px 0 0;
1846 padding:11px 16px 0 0;
1833 }
1847 }
1834
1848
1835 div.browserblock {
1849 div.browserblock {
1836 overflow:hidden;
1850 overflow:hidden;
1837 border:1px solid #ccc;
1851 border:1px solid #ccc;
1838 background:#f8f8f8;
1852 background:#f8f8f8;
1839 font-size:100%;
1853 font-size:100%;
1840 line-height:125%;
1854 line-height:125%;
1841 padding:0;
1855 padding:0;
1842 }
1856 }
1843
1857
1844 div.browserblock .browser-header {
1858 div.browserblock .browser-header {
1845 background:#FFF;
1859 background:#FFF;
1846 padding:10px 0px 15px 0px;
1860 padding:10px 0px 15px 0px;
1847 width: 100%;
1861 width: 100%;
1848 }
1862 }
1849 div.browserblock .browser-nav {
1863 div.browserblock .browser-nav {
1850 float:left
1864 float:left
1851 }
1865 }
1852
1866
1853 div.browserblock .browser-branch {
1867 div.browserblock .browser-branch {
1854 float:left;
1868 float:left;
1855 }
1869 }
1856
1870
1857 div.browserblock .browser-branch label {
1871 div.browserblock .browser-branch label {
1858 color:#4A4A4A;
1872 color:#4A4A4A;
1859 vertical-align:text-top;
1873 vertical-align:text-top;
1860 }
1874 }
1861
1875
1862 div.browserblock .browser-header span {
1876 div.browserblock .browser-header span {
1863 margin-left:5px;
1877 margin-left:5px;
1864 font-weight:700;
1878 font-weight:700;
1865 }
1879 }
1866
1880
1867 div.browserblock .browser-search{
1881 div.browserblock .browser-search{
1868 clear:both;
1882 clear:both;
1869 padding:8px 8px 0px 5px;
1883 padding:8px 8px 0px 5px;
1870 height: 20px;
1884 height: 20px;
1871 }
1885 }
1872 div.browserblock #node_filter_box {
1886 div.browserblock #node_filter_box {
1873 }
1887 }
1874
1888
1875 div.browserblock .search_activate{
1889 div.browserblock .search_activate{
1876 float: left
1890 float: left
1877 }
1891 }
1878
1892
1879 div.browserblock .add_node{
1893 div.browserblock .add_node{
1880 float: left;
1894 float: left;
1881 padding-left: 5px;
1895 padding-left: 5px;
1882 }
1896 }
1883
1897
1884 div.browserblock .search_activate #filter_activate,div.browserblock .add_node a{
1898 div.browserblock .search_activate #filter_activate,div.browserblock .add_node a{
1885 vertical-align: sub;
1899 vertical-align: sub;
1886 border: 1px solid;
1900 border: 1px solid;
1887 padding:2px;
1901 padding:2px;
1888 -webkit-border-radius: 4px 4px 4px 4px;
1902 -webkit-border-radius: 4px 4px 4px 4px;
1889 -khtml-border-radius: 4px 4px 4px 4px;
1903 -khtml-border-radius: 4px 4px 4px 4px;
1890 -moz-border-radius: 4px 4px 4px 4px;
1904 -moz-border-radius: 4px 4px 4px 4px;
1891 border-radius: 4px 4px 4px 4px;
1905 border-radius: 4px 4px 4px 4px;
1892 background: url("../images/button.png") repeat-x scroll 0 0 #E5E3E3;
1906 background: url("../images/button.png") repeat-x scroll 0 0 #E5E3E3;
1893 border-color: #DDDDDD #DDDDDD #C6C6C6 #C6C6C6;
1907 border-color: #DDDDDD #DDDDDD #C6C6C6 #C6C6C6;
1894 color: #515151;
1908 color: #515151;
1895 }
1909 }
1896
1910
1897 div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover{
1911 div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover{
1898 text-decoration: none !important;
1912 text-decoration: none !important;
1899 }
1913 }
1900
1914
1901 div.browserblock .browser-body {
1915 div.browserblock .browser-body {
1902 background:#EEE;
1916 background:#EEE;
1903 border-top:1px solid #CCC;
1917 border-top:1px solid #CCC;
1904 }
1918 }
1905
1919
1906 table.code-browser {
1920 table.code-browser {
1907 border-collapse:collapse;
1921 border-collapse:collapse;
1908 width:100%;
1922 width:100%;
1909 }
1923 }
1910
1924
1911 table.code-browser tr {
1925 table.code-browser tr {
1912 margin:3px;
1926 margin:3px;
1913 }
1927 }
1914
1928
1915 table.code-browser thead th {
1929 table.code-browser thead th {
1916 background-color:#EEE;
1930 background-color:#EEE;
1917 height:20px;
1931 height:20px;
1918 font-size:1.1em;
1932 font-size:1.1em;
1919 font-weight:700;
1933 font-weight:700;
1920 text-align:left;
1934 text-align:left;
1921 padding-left:10px;
1935 padding-left:10px;
1922 }
1936 }
1923
1937
1924 table.code-browser tbody td {
1938 table.code-browser tbody td {
1925 padding-left:10px;
1939 padding-left:10px;
1926 height:20px;
1940 height:20px;
1927 }
1941 }
1928
1942
1929 table.code-browser .browser-file {
1943 table.code-browser .browser-file {
1930 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1944 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1931 height:16px;
1945 height:16px;
1932 padding-left:20px;
1946 padding-left:20px;
1933 text-align:left;
1947 text-align:left;
1934 }
1948 }
1935 .diffblock .changeset_file{
1949 .diffblock .changeset_file{
1936 background:url("../images/icons/file.png") no-repeat scroll 3px;
1950 background:url("../images/icons/file.png") no-repeat scroll 3px;
1937 height:16px;
1951 height:16px;
1938 padding-left:22px;
1952 padding-left:22px;
1939 text-align:left;
1953 text-align:left;
1940 font-size: 14px;
1954 font-size: 14px;
1941 }
1955 }
1942
1956
1943 .diffblock .changeset_header{
1957 .diffblock .changeset_header{
1944 margin-left: 6px !important;
1958 margin-left: 6px !important;
1945 }
1959 }
1946
1960
1947 table.code-browser .browser-dir {
1961 table.code-browser .browser-dir {
1948 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1962 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1949 height:16px;
1963 height:16px;
1950 padding-left:20px;
1964 padding-left:20px;
1951 text-align:left;
1965 text-align:left;
1952 }
1966 }
1953
1967
1954 .box .search {
1968 .box .search {
1955 clear:both;
1969 clear:both;
1956 overflow:hidden;
1970 overflow:hidden;
1957 margin:0;
1971 margin:0;
1958 padding:0 20px 10px;
1972 padding:0 20px 10px;
1959 }
1973 }
1960
1974
1961 .box .search div.search_path {
1975 .box .search div.search_path {
1962 background:none repeat scroll 0 0 #EEE;
1976 background:none repeat scroll 0 0 #EEE;
1963 border:1px solid #CCC;
1977 border:1px solid #CCC;
1964 color:blue;
1978 color:blue;
1965 margin-bottom:10px;
1979 margin-bottom:10px;
1966 padding:10px 0;
1980 padding:10px 0;
1967 }
1981 }
1968
1982
1969 .box .search div.search_path div.link {
1983 .box .search div.search_path div.link {
1970 font-weight:700;
1984 font-weight:700;
1971 margin-left:25px;
1985 margin-left:25px;
1972 }
1986 }
1973
1987
1974 .box .search div.search_path div.link a {
1988 .box .search div.search_path div.link a {
1975 color:#003367;
1989 color:#003367;
1976 cursor:pointer;
1990 cursor:pointer;
1977 text-decoration:none;
1991 text-decoration:none;
1978 }
1992 }
1979
1993
1980 #path_unlock {
1994 #path_unlock {
1981 color:red;
1995 color:red;
1982 font-size:1.2em;
1996 font-size:1.2em;
1983 padding-left:4px;
1997 padding-left:4px;
1984 }
1998 }
1985
1999
1986 .info_box span {
2000 .info_box span {
1987 margin-left:3px;
2001 margin-left:3px;
1988 margin-right:3px;
2002 margin-right:3px;
1989 }
2003 }
1990
2004
1991 .info_box .rev {
2005 .info_box .rev {
1992 color: #003367;
2006 color: #003367;
1993 font-size: 1.6em;
2007 font-size: 1.6em;
1994 font-weight: bold;
2008 font-weight: bold;
1995 vertical-align: sub;
2009 vertical-align: sub;
1996 }
2010 }
1997
2011
1998
2012
1999 .info_box input#at_rev,.info_box input#size {
2013 .info_box input#at_rev,.info_box input#size {
2000 background:#FFF;
2014 background:#FFF;
2001 border-top:1px solid #b3b3b3;
2015 border-top:1px solid #b3b3b3;
2002 border-left:1px solid #b3b3b3;
2016 border-left:1px solid #b3b3b3;
2003 border-right:1px solid #eaeaea;
2017 border-right:1px solid #eaeaea;
2004 border-bottom:1px solid #eaeaea;
2018 border-bottom:1px solid #eaeaea;
2005 color:#000;
2019 color:#000;
2006 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2020 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2007 font-size:12px;
2021 font-size:12px;
2008 margin:0;
2022 margin:0;
2009 padding:1px 5px 1px;
2023 padding:1px 5px 1px;
2010 }
2024 }
2011
2025
2012 .info_box input#view {
2026 .info_box input#view {
2013 text-align:center;
2027 text-align:center;
2014 padding:4px 3px 2px 2px;
2028 padding:4px 3px 2px 2px;
2015 }
2029 }
2016
2030
2017 .yui-overlay,.yui-panel-container {
2031 .yui-overlay,.yui-panel-container {
2018 visibility:hidden;
2032 visibility:hidden;
2019 position:absolute;
2033 position:absolute;
2020 z-index:2;
2034 z-index:2;
2021 }
2035 }
2022
2036
2023 .yui-tt {
2037 .yui-tt {
2024 visibility:hidden;
2038 visibility:hidden;
2025 position:absolute;
2039 position:absolute;
2026 color:#666;
2040 color:#666;
2027 background-color:#FFF;
2041 background-color:#FFF;
2028 font-family:arial, helvetica, verdana, sans-serif;
2042 font-family:arial, helvetica, verdana, sans-serif;
2029 border:2px solid #003367;
2043 border:2px solid #003367;
2030 font:100% sans-serif;
2044 font:100% sans-serif;
2031 width:auto;
2045 width:auto;
2032 opacity:1px;
2046 opacity:1px;
2033 padding:8px;
2047 padding:8px;
2034 white-space: pre-wrap;
2048 white-space: pre-wrap;
2035 -webkit-border-radius: 8px 8px 8px 8px;
2049 -webkit-border-radius: 8px 8px 8px 8px;
2036 -khtml-border-radius: 8px 8px 8px 8px;
2050 -khtml-border-radius: 8px 8px 8px 8px;
2037 -moz-border-radius: 8px 8px 8px 8px;
2051 -moz-border-radius: 8px 8px 8px 8px;
2038 border-radius: 8px 8px 8px 8px;
2052 border-radius: 8px 8px 8px 8px;
2039 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
2053 box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
2040 }
2054 }
2041
2055
2042 .ac {
2056 .ac {
2043 vertical-align:top;
2057 vertical-align:top;
2044 }
2058 }
2045
2059
2046 .ac .yui-ac {
2060 .ac .yui-ac {
2047 position:relative;
2061 position:relative;
2048 font-family:arial;
2062 font-family:arial;
2049 font-size:100%;
2063 font-size:100%;
2050 }
2064 }
2051
2065
2052 .ac .perm_ac {
2066 .ac .perm_ac {
2053 width:15em;
2067 width:15em;
2054 }
2068 }
2055
2069
2056 .ac .yui-ac-input {
2070 .ac .yui-ac-input {
2057 width:100%;
2071 width:100%;
2058 }
2072 }
2059
2073
2060 .ac .yui-ac-container {
2074 .ac .yui-ac-container {
2061 position:absolute;
2075 position:absolute;
2062 top:1.6em;
2076 top:1.6em;
2063 width:100%;
2077 width:100%;
2064 }
2078 }
2065
2079
2066 .ac .yui-ac-content {
2080 .ac .yui-ac-content {
2067 position:absolute;
2081 position:absolute;
2068 width:100%;
2082 width:100%;
2069 border:1px solid gray;
2083 border:1px solid gray;
2070 background:#fff;
2084 background:#fff;
2071 overflow:hidden;
2085 overflow:hidden;
2072 z-index:9050;
2086 z-index:9050;
2073 }
2087 }
2074
2088
2075 .ac .yui-ac-shadow {
2089 .ac .yui-ac-shadow {
2076 position:absolute;
2090 position:absolute;
2077 width:100%;
2091 width:100%;
2078 background:#000;
2092 background:#000;
2079 -moz-opacity:0.1px;
2093 -moz-opacity:0.1px;
2080 opacity:.10;
2094 opacity:.10;
2081 filter:alpha(opacity = 10);
2095 filter:alpha(opacity = 10);
2082 z-index:9049;
2096 z-index:9049;
2083 margin:.3em;
2097 margin:.3em;
2084 }
2098 }
2085
2099
2086 .ac .yui-ac-content ul {
2100 .ac .yui-ac-content ul {
2087 width:100%;
2101 width:100%;
2088 margin:0;
2102 margin:0;
2089 padding:0;
2103 padding:0;
2090 }
2104 }
2091
2105
2092 .ac .yui-ac-content li {
2106 .ac .yui-ac-content li {
2093 cursor:default;
2107 cursor:default;
2094 white-space:nowrap;
2108 white-space:nowrap;
2095 margin:0;
2109 margin:0;
2096 padding:2px 5px;
2110 padding:2px 5px;
2097 }
2111 }
2098
2112
2099 .ac .yui-ac-content li.yui-ac-prehighlight {
2113 .ac .yui-ac-content li.yui-ac-prehighlight {
2100 background:#B3D4FF;
2114 background:#B3D4FF;
2101 }
2115 }
2102
2116
2103 .ac .yui-ac-content li.yui-ac-highlight {
2117 .ac .yui-ac-content li.yui-ac-highlight {
2104 background:#556CB5;
2118 background:#556CB5;
2105 color:#FFF;
2119 color:#FFF;
2106 }
2120 }
2107
2121
2108
2122
2109 .follow{
2123 .follow{
2110 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
2124 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
2111 height: 16px;
2125 height: 16px;
2112 width: 20px;
2126 width: 20px;
2113 cursor: pointer;
2127 cursor: pointer;
2114 display: block;
2128 display: block;
2115 float: right;
2129 float: right;
2116 margin-top: 2px;
2130 margin-top: 2px;
2117 }
2131 }
2118
2132
2119 .following{
2133 .following{
2120 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2134 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2121 height: 16px;
2135 height: 16px;
2122 width: 20px;
2136 width: 20px;
2123 cursor: pointer;
2137 cursor: pointer;
2124 display: block;
2138 display: block;
2125 float: right;
2139 float: right;
2126 margin-top: 2px;
2140 margin-top: 2px;
2127 }
2141 }
2128
2142
2129 .currently_following{
2143 .currently_following{
2130 padding-left: 10px;
2144 padding-left: 10px;
2131 padding-bottom:5px;
2145 padding-bottom:5px;
2132 }
2146 }
2133
2147
2134 .add_icon {
2148 .add_icon {
2135 background:url("../images/icons/add.png") no-repeat scroll 3px;
2149 background:url("../images/icons/add.png") no-repeat scroll 3px;
2136 padding-left:20px;
2150 padding-left:20px;
2137 padding-top:0px;
2151 padding-top:0px;
2138 text-align:left;
2152 text-align:left;
2139 }
2153 }
2140
2154
2141 .edit_icon {
2155 .edit_icon {
2142 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
2156 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
2143 padding-left:20px;
2157 padding-left:20px;
2144 padding-top:0px;
2158 padding-top:0px;
2145 text-align:left;
2159 text-align:left;
2146 }
2160 }
2147
2161
2148 .delete_icon {
2162 .delete_icon {
2149 background:url("../images/icons/delete.png") no-repeat scroll 3px;
2163 background:url("../images/icons/delete.png") no-repeat scroll 3px;
2150 padding-left:20px;
2164 padding-left:20px;
2151 padding-top:0px;
2165 padding-top:0px;
2152 text-align:left;
2166 text-align:left;
2153 }
2167 }
2154
2168
2155 .refresh_icon {
2169 .refresh_icon {
2156 background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
2170 background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
2157 padding-left:20px;
2171 padding-left:20px;
2158 padding-top:0px;
2172 padding-top:0px;
2159 text-align:left;
2173 text-align:left;
2160 }
2174 }
2161
2175
2162 .pull_icon {
2176 .pull_icon {
2163 background:url("../images/icons/connect.png") no-repeat scroll 3px;
2177 background:url("../images/icons/connect.png") no-repeat scroll 3px;
2164 padding-left:20px;
2178 padding-left:20px;
2165 padding-top:0px;
2179 padding-top:0px;
2166 text-align:left;
2180 text-align:left;
2167 }
2181 }
2168
2182
2169 .rss_icon {
2183 .rss_icon {
2170 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
2184 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
2171 padding-left:20px;
2185 padding-left:20px;
2172 padding-top:0px;
2186 padding-top:0px;
2173 text-align:left;
2187 text-align:left;
2174 }
2188 }
2175
2189
2176 .atom_icon {
2190 .atom_icon {
2177 background:url("../images/icons/atom.png") no-repeat scroll 3px;
2191 background:url("../images/icons/atom.png") no-repeat scroll 3px;
2178 padding-left:20px;
2192 padding-left:20px;
2179 padding-top:0px;
2193 padding-top:0px;
2180 text-align:left;
2194 text-align:left;
2181 }
2195 }
2182
2196
2183 .archive_icon {
2197 .archive_icon {
2184 background:url("../images/icons/compress.png") no-repeat scroll 3px;
2198 background:url("../images/icons/compress.png") no-repeat scroll 3px;
2185 padding-left:20px;
2199 padding-left:20px;
2186 text-align:left;
2200 text-align:left;
2187 padding-top:1px;
2201 padding-top:1px;
2188 }
2202 }
2189
2203
2190 .start_following_icon {
2204 .start_following_icon {
2191 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
2205 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
2192 padding-left:20px;
2206 padding-left:20px;
2193 text-align:left;
2207 text-align:left;
2194 padding-top:0px;
2208 padding-top:0px;
2195 }
2209 }
2196
2210
2197 .stop_following_icon {
2211 .stop_following_icon {
2198 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2212 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
2199 padding-left:20px;
2213 padding-left:20px;
2200 text-align:left;
2214 text-align:left;
2201 padding-top:0px;
2215 padding-top:0px;
2202 }
2216 }
2203
2217
2204 .action_button {
2218 .action_button {
2205 border:0;
2219 border:0;
2206 display:inline;
2220 display:inline;
2207 }
2221 }
2208
2222
2209 .action_button:hover {
2223 .action_button:hover {
2210 border:0;
2224 border:0;
2211 text-decoration:underline;
2225 text-decoration:underline;
2212 cursor:pointer;
2226 cursor:pointer;
2213 }
2227 }
2214
2228
2215 #switch_repos {
2229 #switch_repos {
2216 position:absolute;
2230 position:absolute;
2217 height:25px;
2231 height:25px;
2218 z-index:1;
2232 z-index:1;
2219 }
2233 }
2220
2234
2221 #switch_repos select {
2235 #switch_repos select {
2222 min-width:150px;
2236 min-width:150px;
2223 max-height:250px;
2237 max-height:250px;
2224 z-index:1;
2238 z-index:1;
2225 }
2239 }
2226
2240
2227 .breadcrumbs {
2241 .breadcrumbs {
2228 border:medium none;
2242 border:medium none;
2229 color:#FFF;
2243 color:#FFF;
2230 float:left;
2244 float:left;
2231 text-transform:uppercase;
2245 text-transform:uppercase;
2232 font-weight:700;
2246 font-weight:700;
2233 font-size:14px;
2247 font-size:14px;
2234 margin:0;
2248 margin:0;
2235 padding:11px 0 11px 10px;
2249 padding:11px 0 11px 10px;
2236 }
2250 }
2237
2251
2238 .breadcrumbs a {
2252 .breadcrumbs a {
2239 color:#FFF;
2253 color:#FFF;
2240 }
2254 }
2241
2255
2242 .flash_msg ul {
2256 .flash_msg ul {
2243 margin:0;
2257 margin:0;
2244 padding:0 0 10px;
2258 padding:0 0 10px;
2245 }
2259 }
2246
2260
2247 .error_msg {
2261 .error_msg {
2248 background-color:#FFCFCF;
2262 background-color:#FFCFCF;
2249 background-image:url("../images/icons/error_msg.png");
2263 background-image:url("../images/icons/error_msg.png");
2250 border:1px solid #FF9595;
2264 border:1px solid #FF9595;
2251 color:#C30;
2265 color:#C30;
2252 }
2266 }
2253
2267
2254 .warning_msg {
2268 .warning_msg {
2255 background-color:#FFFBCC;
2269 background-color:#FFFBCC;
2256 background-image:url("../images/icons/warning_msg.png");
2270 background-image:url("../images/icons/warning_msg.png");
2257 border:1px solid #FFF35E;
2271 border:1px solid #FFF35E;
2258 color:#C69E00;
2272 color:#C69E00;
2259 }
2273 }
2260
2274
2261 .success_msg {
2275 .success_msg {
2262 background-color:#D5FFCF;
2276 background-color:#D5FFCF;
2263 background-image:url("../images/icons/success_msg.png");
2277 background-image:url("../images/icons/success_msg.png");
2264 border:1px solid #97FF88;
2278 border:1px solid #97FF88;
2265 color:#090;
2279 color:#090;
2266 }
2280 }
2267
2281
2268 .notice_msg {
2282 .notice_msg {
2269 background-color:#DCE3FF;
2283 background-color:#DCE3FF;
2270 background-image:url("../images/icons/notice_msg.png");
2284 background-image:url("../images/icons/notice_msg.png");
2271 border:1px solid #93A8FF;
2285 border:1px solid #93A8FF;
2272 color:#556CB5;
2286 color:#556CB5;
2273 }
2287 }
2274
2288
2275 .success_msg,.error_msg,.notice_msg,.warning_msg {
2289 .success_msg,.error_msg,.notice_msg,.warning_msg {
2276 background-position:10px center;
2290 background-position:10px center;
2277 background-repeat:no-repeat;
2291 background-repeat:no-repeat;
2278 font-size:12px;
2292 font-size:12px;
2279 font-weight:700;
2293 font-weight:700;
2280 min-height:14px;
2294 min-height:14px;
2281 line-height:14px;
2295 line-height:14px;
2282 margin-bottom:0;
2296 margin-bottom:0;
2283 margin-top:0;
2297 margin-top:0;
2284 display:block;
2298 display:block;
2285 overflow:auto;
2299 overflow:auto;
2286 padding:6px 10px 6px 40px;
2300 padding:6px 10px 6px 40px;
2287 }
2301 }
2288
2302
2289 #msg_close {
2303 #msg_close {
2290 background:transparent url("../icons/cross_grey_small.png") no-repeat scroll 0 0;
2304 background:transparent url("../icons/cross_grey_small.png") no-repeat scroll 0 0;
2291 cursor:pointer;
2305 cursor:pointer;
2292 height:16px;
2306 height:16px;
2293 position:absolute;
2307 position:absolute;
2294 right:5px;
2308 right:5px;
2295 top:5px;
2309 top:5px;
2296 width:16px;
2310 width:16px;
2297 }
2311 }
2298
2312
2299 div#legend_container table,div#legend_choices table {
2313 div#legend_container table,div#legend_choices table {
2300 width:auto !important;
2314 width:auto !important;
2301 }
2315 }
2302
2316
2303 table#permissions_manage {
2317 table#permissions_manage {
2304 width:0 !important;
2318 width:0 !important;
2305 }
2319 }
2306
2320
2307 table#permissions_manage span.private_repo_msg {
2321 table#permissions_manage span.private_repo_msg {
2308 font-size:0.8em;
2322 font-size:0.8em;
2309 opacity:0.6px;
2323 opacity:0.6px;
2310 }
2324 }
2311
2325
2312 table#permissions_manage td.private_repo_msg {
2326 table#permissions_manage td.private_repo_msg {
2313 font-size:0.8em;
2327 font-size:0.8em;
2314 }
2328 }
2315
2329
2316 table#permissions_manage tr#add_perm_input td {
2330 table#permissions_manage tr#add_perm_input td {
2317 vertical-align:middle;
2331 vertical-align:middle;
2318 }
2332 }
2319
2333
2320 div.gravatar {
2334 div.gravatar {
2321 background-color:#FFF;
2335 background-color:#FFF;
2322 border:1px solid #D0D0D0;
2336 border:1px solid #D0D0D0;
2323 float:left;
2337 float:left;
2324 margin-right:0.7em;
2338 margin-right:0.7em;
2325 padding:2px 2px 0;
2339 padding:2px 2px 0;
2326
2340
2327 -webkit-border-radius: 6px;
2341 -webkit-border-radius: 6px;
2328 -khtml-border-radius: 6px;
2342 -khtml-border-radius: 6px;
2329 -moz-border-radius: 6px;
2343 -moz-border-radius: 6px;
2330 border-radius: 6px;
2344 border-radius: 6px;
2331
2345
2332 }
2346 }
2333
2347
2334 div.gravatar img {
2348 div.gravatar img {
2335 -webkit-border-radius: 4px;
2349 -webkit-border-radius: 4px;
2336 -khtml-border-radius: 4px;
2350 -khtml-border-radius: 4px;
2337 -moz-border-radius: 4px;
2351 -moz-border-radius: 4px;
2338 border-radius: 4px;
2352 border-radius: 4px;
2339 }
2353 }
2340
2354
2341 #header,#content,#footer {
2355 #header,#content,#footer {
2342 min-width:978px;
2356 min-width:978px;
2343 }
2357 }
2344
2358
2345 #content {
2359 #content {
2346 clear:both;
2360 clear:both;
2347 overflow:hidden;
2361 overflow:hidden;
2348 padding:14px 10px;
2362 padding:14px 10px;
2349 }
2363 }
2350
2364
2351 #content div.box div.title div.search {
2365 #content div.box div.title div.search {
2352 background:url("../images/title_link.png") no-repeat top left;
2366 background:url("../images/title_link.png") no-repeat top left;
2353 border-left:1px solid #316293;
2367 border-left:1px solid #316293;
2354 }
2368 }
2355
2369
2356 #content div.box div.title div.search div.input input {
2370 #content div.box div.title div.search div.input input {
2357 border:1px solid #316293;
2371 border:1px solid #316293;
2358 }
2372 }
2359
2373
2360
2374
2361 input.ui-button-small {
2375 input.ui-button-small {
2362 background:#e5e3e3 url("../images/button.png") repeat-x;
2376 background:#e5e3e3 url("../images/button.png") repeat-x !important;
2363 border-top:1px solid #DDD;
2377 border-top:1px solid #DDD !important;
2364 border-left:1px solid #c6c6c6;
2378 border-left:1px solid #c6c6c6 !important;
2365 border-right:1px solid #DDD;
2379 border-right:1px solid #DDD !important;
2366 border-bottom:1px solid #c6c6c6;
2380 border-bottom:1px solid #c6c6c6 !important;
2367 color:#515151;
2381 color:#515151 !important;
2368 outline:none;
2382 outline:none !important;
2369 margin:0;
2383 margin:0 !important;
2370 -webkit-border-radius: 4px 4px 4px 4px;
2384 -webkit-border-radius: 4px 4px 4px 4px !important;
2371 -khtml-border-radius: 4px 4px 4px 4px;
2385 -khtml-border-radius: 4px 4px 4px 4px !important;
2372 -moz-border-radius: 4px 4px 4px 4px;
2386 -moz-border-radius: 4px 4px 4px 4px !important;
2373 border-radius: 4px 4px 4px 4px;
2387 border-radius: 4px 4px 4px 4px !important;
2374 box-shadow: 0 1px 0 #ececec;
2388 box-shadow: 0 1px 0 #ececec !important;
2375 cursor: pointer;
2389 cursor: pointer !important;
2376 }
2390 }
2377
2391
2378 input.ui-button-small:hover {
2392 input.ui-button-small:hover {
2379 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2393 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2380 border-top:1px solid #ccc;
2394 border-top:1px solid #ccc;
2381 border-left:1px solid #bebebe;
2395 border-left:1px solid #bebebe;
2382 border-right:1px solid #b1b1b1;
2396 border-right:1px solid #b1b1b1;
2383 border-bottom:1px solid #afafaf;
2397 border-bottom:1px solid #afafaf;
2384 }
2398 }
2385
2399
2386 input.ui-button-small-blue {
2400 input.ui-button-small-blue {
2387 background:#4e85bb url("../images/button_highlight.png") repeat-x;
2401 background:#4e85bb url("../images/button_highlight.png") repeat-x;
2388 border-top:1px solid #5c91a4;
2402 border-top:1px solid #5c91a4;
2389 border-left:1px solid #2a6f89;
2403 border-left:1px solid #2a6f89;
2390 border-right:1px solid #2b7089;
2404 border-right:1px solid #2b7089;
2391 border-bottom:1px solid #1a6480;
2405 border-bottom:1px solid #1a6480;
2392 color:#fff;
2406 color:#fff;
2393 -webkit-border-radius: 4px 4px 4px 4px;
2407 -webkit-border-radius: 4px 4px 4px 4px;
2394 -khtml-border-radius: 4px 4px 4px 4px;
2408 -khtml-border-radius: 4px 4px 4px 4px;
2395 -moz-border-radius: 4px 4px 4px 4px;
2409 -moz-border-radius: 4px 4px 4px 4px;
2396 border-radius: 4px 4px 4px 4px;
2410 border-radius: 4px 4px 4px 4px;
2397 box-shadow: 0 1px 0 #ececec;
2411 box-shadow: 0 1px 0 #ececec;
2398 cursor: pointer;
2412 cursor: pointer;
2399 }
2413 }
2400
2414
2401 input.ui-button-small-blue:hover {
2415 input.ui-button-small-blue:hover {
2402
2416
2403 }
2417 }
2404
2418
2405
2419
2406 ins,div.options a:hover {
2420 ins,div.options a:hover {
2407 text-decoration:none;
2421 text-decoration:none;
2408 }
2422 }
2409
2423
2410 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 {
2424 img,#header #header-inner #quick li a:hover span.normal,#header #header-inner #quick li ul li.last,#content div.box div.form div.fields div.field div.textarea table td table td a,#clone_url {
2411 border:none;
2425 border:none;
2412 }
2426 }
2413
2427
2414 img.icon,.right .merge img {
2428 img.icon,.right .merge img {
2415 vertical-align:bottom;
2429 vertical-align:bottom;
2416 }
2430 }
2417
2431
2418 #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 {
2432 #header ul#logged-user,#content div.box div.title ul.links,#content div.box div.message div.dismiss,#content div.box div.traffic div.legend ul {
2419 float:right;
2433 float:right;
2420 margin:0;
2434 margin:0;
2421 padding:0;
2435 padding:0;
2422 }
2436 }
2423
2437
2424
2438
2425 #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 {
2439 #header #header-inner #home,#header #header-inner #logo,#content div.box ul.left,#content div.box ol.left,#content div.box div.pagination-left,div#commit_history,div#legend_data,div#legend_container,div#legend_choices {
2426 float:left;
2440 float:left;
2427 }
2441 }
2428
2442
2429 #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 {
2443 #header #header-inner #quick li:hover ul ul,#header #header-inner #quick li:hover ul ul ul,#header #header-inner #quick li:hover ul ul ul ul,#content #left #menu ul.closed,#content #left #menu li ul.collapsed,.yui-tt-shadow {
2430 display:none;
2444 display:none;
2431 }
2445 }
2432
2446
2433 #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 {
2447 #header #header-inner #quick li:hover ul,#header #header-inner #quick li li:hover ul,#header #header-inner #quick li li li:hover ul,#header #header-inner #quick li li li li:hover ul,#content #left #menu ul.opened,#content #left #menu li ul.expanded {
2434 display:block;
2448 display:block;
2435 }
2449 }
2436
2450
2437 #content div.graph{
2451 #content div.graph{
2438 padding:0 10px 10px;
2452 padding:0 10px 10px;
2439 }
2453 }
2440
2454
2441 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2455 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2442 color:#bfe3ff;
2456 color:#bfe3ff;
2443 }
2457 }
2444
2458
2445 #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 {
2459 #content div.box ol.lower-roman,#content div.box ol.upper-roman,#content div.box ol.lower-alpha,#content div.box ol.upper-alpha,#content div.box ol.decimal {
2446 margin:10px 24px 10px 44px;
2460 margin:10px 24px 10px 44px;
2447 }
2461 }
2448
2462
2449 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2463 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2450 clear:both;
2464 clear:both;
2451 overflow:hidden;
2465 overflow:hidden;
2452 margin:0;
2466 margin:0;
2453 padding:0 20px 10px;
2467 padding:0 20px 10px;
2454 }
2468 }
2455
2469
2456 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2470 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2457 clear:both;
2471 clear:both;
2458 overflow:hidden;
2472 overflow:hidden;
2459 margin:0;
2473 margin:0;
2460 padding:0;
2474 padding:0;
2461 }
2475 }
2462
2476
2463 #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 {
2477 #content div.box div.form div.fields div.field div.label span,#login div.form div.fields div.field div.label span,#register div.form div.fields div.field div.label span {
2464 height:1%;
2478 height:1%;
2465 display:block;
2479 display:block;
2466 color:#363636;
2480 color:#363636;
2467 margin:0;
2481 margin:0;
2468 padding:2px 0 0;
2482 padding:2px 0 0;
2469 }
2483 }
2470
2484
2471 #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 {
2485 #content div.box div.form div.fields div.field div.input input.error,#login div.form div.fields div.field div.input input.error,#register div.form div.fields div.field div.input input.error {
2472 background:#FBE3E4;
2486 background:#FBE3E4;
2473 border-top:1px solid #e1b2b3;
2487 border-top:1px solid #e1b2b3;
2474 border-left:1px solid #e1b2b3;
2488 border-left:1px solid #e1b2b3;
2475 border-right:1px solid #FBC2C4;
2489 border-right:1px solid #FBC2C4;
2476 border-bottom:1px solid #FBC2C4;
2490 border-bottom:1px solid #FBC2C4;
2477 }
2491 }
2478
2492
2479 #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 {
2493 #content div.box div.form div.fields div.field div.input input.success,#login div.form div.fields div.field div.input input.success,#register div.form div.fields div.field div.input input.success {
2480 background:#E6EFC2;
2494 background:#E6EFC2;
2481 border-top:1px solid #cebb98;
2495 border-top:1px solid #cebb98;
2482 border-left:1px solid #cebb98;
2496 border-left:1px solid #cebb98;
2483 border-right:1px solid #c6d880;
2497 border-right:1px solid #c6d880;
2484 border-bottom:1px solid #c6d880;
2498 border-bottom:1px solid #c6d880;
2485 }
2499 }
2486
2500
2487 #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 {
2501 #content div.box-left div.form div.fields div.field div.textarea,#content div.box-right div.form div.fields div.field div.textarea,#content div.box div.form div.fields div.field div.select select,#content div.box table th.selected input,#content div.box table td.selected input {
2488 margin:0;
2502 margin:0;
2489 }
2503 }
2490
2504
2491 #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{
2505 #content div.box-left div.form div.fields div.field div.select,#content div.box-left div.form div.fields div.field div.checkboxes,#content div.box-left div.form div.fields div.field div.radios,#content div.box-right div.form div.fields div.field div.select,#content div.box-right div.form div.fields div.field div.checkboxes,#content div.box-right div.form div.fields div.field div.radios{
2492 margin:0 0 0 0px !important;
2506 margin:0 0 0 0px !important;
2493 padding:0;
2507 padding:0;
2494 }
2508 }
2495
2509
2496 #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 {
2510 #content div.box div.form div.fields div.field div.select,#content div.box div.form div.fields div.field div.checkboxes,#content div.box div.form div.fields div.field div.radios {
2497 margin:0 0 0 200px;
2511 margin:0 0 0 200px;
2498 padding:0;
2512 padding:0;
2499 }
2513 }
2500
2514
2501
2515
2502 #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 {
2516 #content div.box div.form div.fields div.field div.select a:hover,#content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover,#content div.box div.action a:hover {
2503 color:#000;
2517 color:#000;
2504 text-decoration:none;
2518 text-decoration:none;
2505 }
2519 }
2506
2520
2507 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2521 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2508 border:1px solid #666;
2522 border:1px solid #666;
2509 }
2523 }
2510
2524
2511 #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 {
2525 #content div.box div.form div.fields div.field div.checkboxes div.checkbox,#content div.box div.form div.fields div.field div.radios div.radio {
2512 clear:both;
2526 clear:both;
2513 overflow:hidden;
2527 overflow:hidden;
2514 margin:0;
2528 margin:0;
2515 padding:8px 0 2px;
2529 padding:8px 0 2px;
2516 }
2530 }
2517
2531
2518 #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 {
2532 #content div.box div.form div.fields div.field div.checkboxes div.checkbox input,#content div.box div.form div.fields div.field div.radios div.radio input {
2519 float:left;
2533 float:left;
2520 margin:0;
2534 margin:0;
2521 }
2535 }
2522
2536
2523 #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 {
2537 #content div.box div.form div.fields div.field div.checkboxes div.checkbox label,#content div.box div.form div.fields div.field div.radios div.radio label {
2524 height:1%;
2538 height:1%;
2525 display:block;
2539 display:block;
2526 float:left;
2540 float:left;
2527 margin:2px 0 0 4px;
2541 margin:2px 0 0 4px;
2528 }
2542 }
2529
2543
2530 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 {
2544 div.form div.fields div.field div.button input,#content div.box div.form div.fields div.buttons input,div.form div.fields div.buttons input,#content div.box div.action div.button input {
2531 color:#000;
2545 color:#000;
2532 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2546 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2533 font-size:11px;
2547 font-size:11px;
2534 font-weight:700;
2548 font-weight:700;
2535 margin:0;
2549 margin:0;
2536 }
2550 }
2537
2551
2538 input.ui-button {
2552 input.ui-button {
2539 background:#e5e3e3 url("../images/button.png") repeat-x;
2553 background:#e5e3e3 url("../images/button.png") repeat-x;
2540 border-top:1px solid #DDD;
2554 border-top:1px solid #DDD;
2541 border-left:1px solid #c6c6c6;
2555 border-left:1px solid #c6c6c6;
2542 border-right:1px solid #DDD;
2556 border-right:1px solid #DDD;
2543 border-bottom:1px solid #c6c6c6;
2557 border-bottom:1px solid #c6c6c6;
2544 color:#515151;
2558 color:#515151;
2545 outline:none;
2559 outline:none;
2546 margin:0;
2560 margin:0;
2547 padding:6px 12px;
2561 padding:6px 12px;
2548 -webkit-border-radius: 4px 4px 4px 4px;
2562 -webkit-border-radius: 4px 4px 4px 4px;
2549 -khtml-border-radius: 4px 4px 4px 4px;
2563 -khtml-border-radius: 4px 4px 4px 4px;
2550 -moz-border-radius: 4px 4px 4px 4px;
2564 -moz-border-radius: 4px 4px 4px 4px;
2551 border-radius: 4px 4px 4px 4px;
2565 border-radius: 4px 4px 4px 4px;
2552 box-shadow: 0 1px 0 #ececec;
2566 box-shadow: 0 1px 0 #ececec;
2553 cursor: pointer;
2567 cursor: pointer;
2554 }
2568 }
2555
2569
2556 input.ui-button:hover {
2570 input.ui-button:hover {
2557 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2571 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2558 border-top:1px solid #ccc;
2572 border-top:1px solid #ccc;
2559 border-left:1px solid #bebebe;
2573 border-left:1px solid #bebebe;
2560 border-right:1px solid #b1b1b1;
2574 border-right:1px solid #b1b1b1;
2561 border-bottom:1px solid #afafaf;
2575 border-bottom:1px solid #afafaf;
2562 }
2576 }
2563
2577
2564 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2578 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2565 display:inline;
2579 display:inline;
2566 }
2580 }
2567
2581
2568 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2582 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2569 margin:10px 0 0 200px;
2583 margin:10px 0 0 200px;
2570 padding:0;
2584 padding:0;
2571 }
2585 }
2572
2586
2573 #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 {
2587 #content div.box-left div.form div.fields div.buttons,#content div.box-right div.form div.fields div.buttons,div.box-left div.form div.fields div.buttons,div.box-right div.form div.fields div.buttons {
2574 margin:10px 0 0;
2588 margin:10px 0 0;
2575 }
2589 }
2576
2590
2577 #content div.box table td.user,#content div.box table td.address {
2591 #content div.box table td.user,#content div.box table td.address {
2578 width:10%;
2592 width:10%;
2579 text-align:center;
2593 text-align:center;
2580 }
2594 }
2581
2595
2582 #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 {
2596 #content div.box div.action div.button,#login div.form div.fields div.field div.input div.link,#register div.form div.fields div.field div.input div.link {
2583 text-align:right;
2597 text-align:right;
2584 margin:6px 0 0;
2598 margin:6px 0 0;
2585 padding:0;
2599 padding:0;
2586 }
2600 }
2587
2601
2588
2602
2589 #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 {
2603 #content div.box div.action div.button input.ui-state-hover,#login div.form div.fields div.buttons input.ui-state-hover,#register div.form div.fields div.buttons input.ui-state-hover {
2590 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2604 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2591 border-top:1px solid #ccc;
2605 border-top:1px solid #ccc;
2592 border-left:1px solid #bebebe;
2606 border-left:1px solid #bebebe;
2593 border-right:1px solid #b1b1b1;
2607 border-right:1px solid #b1b1b1;
2594 border-bottom:1px solid #afafaf;
2608 border-bottom:1px solid #afafaf;
2595 color:#515151;
2609 color:#515151;
2596 margin:0;
2610 margin:0;
2597 padding:6px 12px;
2611 padding:6px 12px;
2598 }
2612 }
2599
2613
2600 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2614 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2601 text-align:left;
2615 text-align:left;
2602 float:left;
2616 float:left;
2603 margin:0;
2617 margin:0;
2604 padding:0;
2618 padding:0;
2605 }
2619 }
2606
2620
2607 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2621 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2608 height:1%;
2622 height:1%;
2609 display:block;
2623 display:block;
2610 float:left;
2624 float:left;
2611 background:#ebebeb url("../images/pager.png") repeat-x;
2625 background:#ebebeb url("../images/pager.png") repeat-x;
2612 border-top:1px solid #dedede;
2626 border-top:1px solid #dedede;
2613 border-left:1px solid #cfcfcf;
2627 border-left:1px solid #cfcfcf;
2614 border-right:1px solid #c4c4c4;
2628 border-right:1px solid #c4c4c4;
2615 border-bottom:1px solid #c4c4c4;
2629 border-bottom:1px solid #c4c4c4;
2616 color:#4A4A4A;
2630 color:#4A4A4A;
2617 font-weight:700;
2631 font-weight:700;
2618 margin:0;
2632 margin:0;
2619 padding:6px 8px;
2633 padding:6px 8px;
2620 }
2634 }
2621
2635
2622 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2636 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2623 color:#B4B4B4;
2637 color:#B4B4B4;
2624 padding:6px;
2638 padding:6px;
2625 }
2639 }
2626
2640
2627 #login,#register {
2641 #login,#register {
2628 width:520px;
2642 width:520px;
2629 margin:10% auto 0;
2643 margin:10% auto 0;
2630 padding:0;
2644 padding:0;
2631 }
2645 }
2632
2646
2633 #login div.color,#register div.color {
2647 #login div.color,#register div.color {
2634 clear:both;
2648 clear:both;
2635 overflow:hidden;
2649 overflow:hidden;
2636 background:#FFF;
2650 background:#FFF;
2637 margin:10px auto 0;
2651 margin:10px auto 0;
2638 padding:3px 3px 3px 0;
2652 padding:3px 3px 3px 0;
2639 }
2653 }
2640
2654
2641 #login div.color a,#register div.color a {
2655 #login div.color a,#register div.color a {
2642 width:20px;
2656 width:20px;
2643 height:20px;
2657 height:20px;
2644 display:block;
2658 display:block;
2645 float:left;
2659 float:left;
2646 margin:0 0 0 3px;
2660 margin:0 0 0 3px;
2647 padding:0;
2661 padding:0;
2648 }
2662 }
2649
2663
2650 #login div.title h5,#register div.title h5 {
2664 #login div.title h5,#register div.title h5 {
2651 color:#fff;
2665 color:#fff;
2652 margin:10px;
2666 margin:10px;
2653 padding:0;
2667 padding:0;
2654 }
2668 }
2655
2669
2656 #login div.form div.fields div.field,#register div.form div.fields div.field {
2670 #login div.form div.fields div.field,#register div.form div.fields div.field {
2657 clear:both;
2671 clear:both;
2658 overflow:hidden;
2672 overflow:hidden;
2659 margin:0;
2673 margin:0;
2660 padding:0 0 10px;
2674 padding:0 0 10px;
2661 }
2675 }
2662
2676
2663 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2677 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2664 height:1%;
2678 height:1%;
2665 display:block;
2679 display:block;
2666 color:red;
2680 color:red;
2667 margin:8px 0 0;
2681 margin:8px 0 0;
2668 padding:0;
2682 padding:0;
2669 max-width: 320px;
2683 max-width: 320px;
2670 }
2684 }
2671
2685
2672 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2686 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2673 color:#000;
2687 color:#000;
2674 font-weight:700;
2688 font-weight:700;
2675 }
2689 }
2676
2690
2677 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2691 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2678 float:left;
2692 float:left;
2679 margin:0;
2693 margin:0;
2680 padding:0;
2694 padding:0;
2681 }
2695 }
2682
2696
2683 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2697 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2684 margin:0 0 0 184px;
2698 margin:0 0 0 184px;
2685 padding:0;
2699 padding:0;
2686 }
2700 }
2687
2701
2688 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2702 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2689 color:#565656;
2703 color:#565656;
2690 font-weight:700;
2704 font-weight:700;
2691 }
2705 }
2692
2706
2693 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2707 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2694 color:#000;
2708 color:#000;
2695 font-size:1em;
2709 font-size:1em;
2696 font-weight:700;
2710 font-weight:700;
2697 font-family:Verdana, Helvetica, Sans-Serif;
2711 font-family:Verdana, Helvetica, Sans-Serif;
2698 margin:0;
2712 margin:0;
2699 }
2713 }
2700
2714
2701 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2715 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2702 width:600px;
2716 width:600px;
2703 }
2717 }
2704
2718
2705 #changeset_content .container .left,#graph_content .container .left {
2719 #changeset_content .container .left,#graph_content .container .left {
2706 float:left;
2720 float:left;
2707 width:70%;
2721 width:70%;
2708 padding-left:5px;
2722 padding-left:5px;
2709 }
2723 }
2710
2724
2711 #changeset_content .container .left .date,.ac .match {
2725 #changeset_content .container .left .date,.ac .match {
2712 font-weight:700;
2726 font-weight:700;
2713 padding-top: 5px;
2727 padding-top: 5px;
2714 padding-bottom:5px;
2728 padding-bottom:5px;
2715 }
2729 }
2716
2730
2717 div#legend_container table td,div#legend_choices table td {
2731 div#legend_container table td,div#legend_choices table td {
2718 border:none !important;
2732 border:none !important;
2719 height:20px !important;
2733 height:20px !important;
2720 padding:0 !important;
2734 padding:0 !important;
2721 }
2735 }
2722
2736
2723 #q_filter{
2737 #q_filter{
2724 border:0 none;
2738 border:0 none;
2725 color:#AAAAAA;
2739 color:#AAAAAA;
2726 margin-bottom:-4px;
2740 margin-bottom:-4px;
2727 margin-top:-4px;
2741 margin-top:-4px;
2728 padding-left:3px;
2742 padding-left:3px;
2729 }
2743 }
2730
2744
2731 #node_filter{
2745 #node_filter{
2732 border:0px solid #545454;
2746 border:0px solid #545454;
2733 color:#AAAAAA;
2747 color:#AAAAAA;
2734 padding-left:3px;
2748 padding-left:3px;
2735 }
2749 }
@@ -1,86 +1,111 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} ${_('Edit file')} - ${c.rhodecode_name}
4 ${c.repo_name} ${_('Edit file')} - ${c.rhodecode_name}
5 </%def>
5 </%def>
6
6
7 <%def name="js_extra()">
7 <%def name="js_extra()">
8 <script type="text/javascript" src="${h.url('/js/codemirror.js')}"></script>
8 <script type="text/javascript" src="${h.url('/js/codemirror.js')}"></script>
9 </%def>
9 </%def>
10 <%def name="css_extra()">
10 <%def name="css_extra()">
11 <link rel="stylesheet" type="text/css" href="${h.url('/css/codemirror.css')}"/>
11 <link rel="stylesheet" type="text/css" href="${h.url('/css/codemirror.css')}"/>
12 </%def>
12 </%def>
13
13
14 <%def name="breadcrumbs_links()">
14 <%def name="breadcrumbs_links()">
15 ${h.link_to(u'Home',h.url('/'))}
15 ${h.link_to(u'Home',h.url('/'))}
16 &raquo;
16 &raquo;
17 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
17 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
18 &raquo;
18 &raquo;
19 ${_('add file')} @ R${c.cs.revision}:${h.short_id(c.cs.raw_id)}
19 ${_('add file')} @ R${c.cs.revision}:${h.short_id(c.cs.raw_id)}
20 </%def>
20 </%def>
21
21
22 <%def name="page_nav()">
22 <%def name="page_nav()">
23 ${self.menu('files')}
23 ${self.menu('files')}
24 </%def>
24 </%def>
25 <%def name="main()">
25 <%def name="main()">
26 <div class="box">
26 <div class="box">
27 <!-- box / title -->
27 <!-- box / title -->
28 <div class="title">
28 <div class="title">
29 ${self.breadcrumbs()}
29 ${self.breadcrumbs()}
30 <ul class="links">
30 <ul class="links">
31 <li>
31 <li>
32 <span style="text-transform: uppercase;">
32 <span style="text-transform: uppercase;">
33 <a href="#">${_('branch')}: ${c.cs.branch}</a></span>
33 <a href="#">${_('branch')}: ${c.cs.branch}</a></span>
34 </li>
34 </li>
35 </ul>
35 </ul>
36 </div>
36 </div>
37 <div class="table">
37 <div class="table">
38 <div id="files_data">
38 <div id="files_data">
39 ${h.form(h.url.current(),method='post',id='eform')}
39 ${h.form(h.url.current(),method='post',id='eform',enctype="multipart/form-data")}
40 <h3>${_('Add new file')}</h3>
40 <h3>${_('Add new file')}</h3>
41 <div class="form">
41 <div class="form">
42 <div class="fields">
42 <div class="fields">
43 <div class="field">
43 <div class="field">
44 <div class="label">
44 <div class="label">
45 <label for="location">${_('Location')}</label>
45 <label for="location">${_('Location')}</label>
46 </div>
46 </div>
47 <div class="input">
47 <div class="input">
48 <input type="text" value="${c.f_path}" size="30" name="location" id="location">
48 <input type="text" value="${c.f_path}" size="30" name="location" id="location">
49 ${_('use / to separate directories')}
49 ${_('use / to separate directories')}
50 </div>
50 </div>
51 </div>
51 </div>
52
52
53 <div class="field">
53 <div id="filename_container" class="field file">
54 <div class="label">
54 <div class="label">
55 <label for="filename">${_('File Name')}:</label>
55 <label for="filename">${_('File Name')}:</label>
56 </div>
56 </div>
57 <div class="input">
57 <div class="input">
58 <input type="text" value="" size="30" name="filename" id="filename">
58 <input type="text" value="" size="30" name="filename" id="filename">
59 <input type="button" class="ui-button-small" value="upload file" id="upload_file_enable">
60 </div>
61 </div>
62 <div id="upload_file_container" class="field" style="display:none">
63 <div class="label">
64 <label for="location">${_('Upload file')}</label>
65 </div>
66 <div class="file">
67 <input type="file" size="30" name="upload_file" id="upload_file">
68 <input type="button" class="ui-button-small" value="create file" id="file_enable">
59 </div>
69 </div>
60 </div>
70 </div>
61 </div>
71 </div>
62 </div>
72 </div>
63 <div id="body" class="codeblock">
73 <div id="body" class="codeblock">
74 <div id="editor_container">
64 <pre id="editor_pre"></pre>
75 <pre id="editor_pre"></pre>
65 <textarea id="editor" name="content" style="display:none"></textarea>
76 <textarea id="editor" name="content" style="display:none"></textarea>
77 </div>
66 <div style="padding: 10px;color:#666666">${_('commit message')}</div>
78 <div style="padding: 10px;color:#666666">${_('commit message')}</div>
67 <textarea id="commit" name="message" style="height: 100px;width: 99%"></textarea>
79 <textarea id="commit" name="message" style="height: 100px;width: 99%;margin-left:4px"></textarea>
68 </div>
80 </div>
69 <div style="text-align: right;padding-top: 5px">
81 <div style="text-align: right;padding-top: 5px">
70 <input id="reset" type="button" value="${_('Reset')}" class="ui-button-small" />
82 <input id="reset" type="button" value="${_('Reset')}" class="ui-button-small" />
71 ${h.submit('commit',_('Commit changes'),class_="ui-button-small-blue")}
83 ${h.submit('commit',_('Commit changes'),class_="ui-button-small-blue")}
72 </div>
84 </div>
73 ${h.end_form()}
85 ${h.end_form()}
74 <script type="text/javascript">
86 <script type="text/javascript">
75 var myCodeMirror = CodeMirror.fromTextArea(YUD.get('editor'),{
87 var myCodeMirror = CodeMirror.fromTextArea(YUD.get('editor'),{
76 mode: "null",
88 mode: "null",
77 lineNumbers:true
89 lineNumbers:true
78 });
90 });
79 YUE.on('reset','click',function(){
91 YUE.on('reset','click',function(e){
80 window.location="${h.url('files_home',repo_name=c.repo_name,revision=c.cs.revision,f_path=c.f_path)}";
92 window.location="${h.url('files_home',repo_name=c.repo_name,revision=c.cs.revision,f_path=c.f_path)}";
81 })
93 });
94
95 YUE.on('file_enable','click',function(){
96 YUD.setStyle('editor_container','display','');
97 YUD.setStyle('upload_file_container','display','none');
98 YUD.setStyle('filename_container','display','');
99 });
100
101 YUE.on('upload_file_enable','click',function(){
102 YUD.setStyle('editor_container','display','none');
103 YUD.setStyle('upload_file_container','display','');
104 YUD.setStyle('filename_container','display','none');
105 });
106
82 </script>
107 </script>
83 </div>
108 </div>
84 </div>
109 </div>
85 </div>
110 </div>
86 </%def> No newline at end of file
111 </%def>
@@ -1,64 +1,64 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} ${_('Edit file')} - ${c.rhodecode_name}
4 ${c.repo_name} ${_('Edit file')} - ${c.rhodecode_name}
5 </%def>
5 </%def>
6
6
7 <%def name="js_extra()">
7 <%def name="js_extra()">
8 <script type="text/javascript" src="${h.url('/js/codemirror.js')}"></script>
8 <script type="text/javascript" src="${h.url('/js/codemirror.js')}"></script>
9 </%def>
9 </%def>
10 <%def name="css_extra()">
10 <%def name="css_extra()">
11 <link rel="stylesheet" type="text/css" href="${h.url('/css/codemirror.css')}"/>
11 <link rel="stylesheet" type="text/css" href="${h.url('/css/codemirror.css')}"/>
12 </%def>
12 </%def>
13
13
14 <%def name="breadcrumbs_links()">
14 <%def name="breadcrumbs_links()">
15 ${h.link_to(u'Home',h.url('/'))}
15 ${h.link_to(u'Home',h.url('/'))}
16 &raquo;
16 &raquo;
17 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
17 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
18 &raquo;
18 &raquo;
19 ${_('edit file')} @ R${c.cs.revision}:${h.short_id(c.cs.raw_id)}
19 ${_('edit file')} @ R${c.cs.revision}:${h.short_id(c.cs.raw_id)}
20 </%def>
20 </%def>
21
21
22 <%def name="page_nav()">
22 <%def name="page_nav()">
23 ${self.menu('files')}
23 ${self.menu('files')}
24 </%def>
24 </%def>
25 <%def name="main()">
25 <%def name="main()">
26 <div class="box">
26 <div class="box">
27 <!-- box / title -->
27 <!-- box / title -->
28 <div class="title">
28 <div class="title">
29 ${self.breadcrumbs()}
29 ${self.breadcrumbs()}
30 <ul class="links">
30 <ul class="links">
31 <li>
31 <li>
32 <span style="text-transform: uppercase;">
32 <span style="text-transform: uppercase;">
33 <a href="#">${_('branch')}: ${c.cs.branch}</a></span>
33 <a href="#">${_('branch')}: ${c.cs.branch}</a></span>
34 </li>
34 </li>
35 </ul>
35 </ul>
36 </div>
36 </div>
37 <div class="table">
37 <div class="table">
38 <div id="files_data">
38 <div id="files_data">
39 <h3 class="files_location">${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cs.revision,c.file.path)}</h3>
39 <h3 class="files_location">${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cs.revision,c.file.path)}</h3>
40 ${h.form(h.url.current(),method='post',id='eform')}
40 ${h.form(h.url.current(),method='post',id='eform')}
41 <div id="body" class="codeblock">
41 <div id="body" class="codeblock">
42 <pre id="editor_pre"></pre>
42 <pre id="editor_pre"></pre>
43 <textarea id="editor" name="content" style="display:none">${c.file.content|n}</textarea>
43 <textarea id="editor" name="content" style="display:none">${c.file.content|n}</textarea>
44 <div style="padding: 10px;color:#666666">${_('commit message')}</div>
44 <div style="padding: 10px;color:#666666">${_('commit message')}</div>
45 <textarea id="commit" name="message" style="height: 100px;width: 99%"></textarea>
45 <textarea id="commit" name="message" style="height: 60px;width: 99%;margin-left:4px"></textarea>
46 </div>
46 </div>
47 <div style="text-align: right;padding-top: 5px">
47 <div style="text-align: right;padding-top: 5px">
48 <input id="reset" type="button" value="${_('Reset')}" class="ui-button-small" />
48 <input id="reset" type="button" value="${_('Reset')}" class="ui-button-small" />
49 ${h.submit('commit',_('Commit changes'),class_="ui-button-small-blue")}
49 ${h.submit('commit',_('Commit changes'),class_="ui-button-small-blue")}
50 </div>
50 </div>
51 ${h.end_form()}
51 ${h.end_form()}
52 <script type="text/javascript">
52 <script type="text/javascript">
53 var myCodeMirror = CodeMirror.fromTextArea(YUD.get('editor'),{
53 var myCodeMirror = CodeMirror.fromTextArea(YUD.get('editor'),{
54 mode: "null",
54 mode: "null",
55 lineNumbers:true
55 lineNumbers:true
56 });
56 });
57 YUE.on('reset','click',function(){
57 YUE.on('reset','click',function(){
58 window.location="${h.url('files_home',repo_name=c.repo_name,revision=c.cs.revision,f_path=c.file.path)}";
58 window.location="${h.url('files_home',repo_name=c.repo_name,revision=c.cs.revision,f_path=c.file.path)}";
59 })
59 })
60 </script>
60 </script>
61 </div>
61 </div>
62 </div>
62 </div>
63 </div>
63 </div>
64 </%def> No newline at end of file
64 </%def>
General Comments 0
You need to be logged in to leave comments. Login now