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