##// END OF EJS Templates
fixes #77 moved out ldap config to it's own section
marcink -
r769:4bdcc08b beta
parent child Browse files
Show More
@@ -0,0 +1,106 b''
1 # -*- coding: utf-8 -*-
2 """
3 package.rhodecode.controllers.admin.ldap_settings
4 ~~~~~~~~~~~~~~
5
6 ldap controller for RhodeCode
7 :created_on: Nov 26, 2010
8 :author: marcink
9 :copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
10 :license: GPLv3, see COPYING for more details.
11 """
12 # This program is free software; you can redistribute it and/or
13 # modify it under the terms of the GNU General Public License
14 # as published by the Free Software Foundation; version 2
15 # of the License or (at your opinion) any later version of the license.
16 #
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
21 #
22 # You should have received a copy of the GNU General Public License
23 # along with this program; if not, write to the Free Software
24 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
25 # MA 02110-1301, USA.
26 import logging
27 import formencode
28 import traceback
29
30 from formencode import htmlfill
31
32 from pylons import request, response, session, tmpl_context as c, url
33 from pylons.controllers.util import abort, redirect
34 from pylons.i18n.translation import _
35
36 from rhodecode.lib.base import BaseController, render
37 from rhodecode.lib import helpers as h
38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
39 from rhodecode.lib.auth_ldap import LdapImportError
40 from rhodecode.model.settings import SettingsModel
41 from rhodecode.model.forms import LdapSettingsForm
42 from sqlalchemy.exc import DatabaseError
43
44 log = logging.getLogger(__name__)
45
46
47
48 class LdapSettingsController(BaseController):
49
50 @LoginRequired()
51 @HasPermissionAllDecorator('hg.admin')
52 def __before__(self):
53 c.admin_user = session.get('admin_user')
54 c.admin_username = session.get('admin_username')
55 super(LdapSettingsController, self).__before__()
56
57 def index(self):
58 defaults = SettingsModel().get_ldap_settings()
59
60 return htmlfill.render(
61 render('admin/ldap/ldap.html'),
62 defaults=defaults,
63 encoding="UTF-8",
64 force_defaults=True,)
65
66 def ldap_settings(self):
67 """
68 POST ldap create and store ldap settings
69 """
70
71 settings_model = SettingsModel()
72 _form = LdapSettingsForm()()
73
74 try:
75 form_result = _form.to_python(dict(request.POST))
76 try:
77
78 for k, v in form_result.items():
79 if k.startswith('ldap_'):
80 setting = settings_model.get(k)
81 setting.app_settings_value = v
82 self.sa.add(setting)
83
84 self.sa.commit()
85 h.flash(_('Ldap settings updated successfully'),
86 category='success')
87 except (DatabaseError,):
88 raise
89 except LdapImportError:
90 h.flash(_('Unable to activate ldap. The "ldap-python" library '
91 'is missing.'), category='warning')
92
93 except formencode.Invalid, errors:
94
95 return htmlfill.render(
96 render('admin/ldap/ldap.html'),
97 defaults=errors.value,
98 errors=errors.error_dict or {},
99 prefix_error=False,
100 encoding="UTF-8")
101 except Exception:
102 log.error(traceback.format_exc())
103 h.flash(_('error occured during update of ldap settings'),
104 category='error')
105
106 return redirect(url('ldap_home'))
@@ -0,0 +1,73 b''
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
3
4 <%def name="title()">
5 ${_('LDAP administration')} - ${c.rhodecode_name}
6 </%def>
7
8 <%def name="breadcrumbs_links()">
9 ${h.link_to(_('Admin'),h.url('admin_home'))}
10 &raquo;
11 ${_('Ldap')}
12 </%def>
13
14 <%def name="page_nav()">
15 ${self.menu('admin')}
16 </%def>
17
18 <%def name="main()">
19 <div class="box">
20 <!-- box / title -->
21 <div class="title">
22 ${self.breadcrumbs()}
23 </div>
24 <h3>${_('LDAP administration')}</h3>
25 ${h.form(url('ldap_settings'))}
26 <div class="form">
27 <div class="fields">
28
29 <div class="field">
30 <div class="label label-checkbox"><label for="ldap_active">${_('Enable ldap')}</label></div>
31 <div class="checkboxes"><div class="checkbox">${h.checkbox('ldap_active',True,class_='small')}</div></div>
32 </div>
33 <div class="field">
34 <div class="label"><label for="ldap_host">${_('Host')}</label></div>
35 <div class="input">${h.text('ldap_host',class_='small')}</div>
36 </div>
37 <div class="field">
38 <div class="label"><label for="ldap_port">${_('Port')}</label></div>
39 <div class="input">${h.text('ldap_port',class_='small')}</div>
40 </div>
41 <div class="field">
42 <div class="label label-checkbox"><label for="ldap_ldaps">${_('Enable LDAPS')}</label></div>
43 <div class="checkboxes"><div class="checkbox">${h.checkbox('ldap_ldaps',True,class_='small')}</div></div>
44 </div>
45 <div class="field">
46 <div class="label"><label for="ldap_dn_user">${_('Account')}</label></div>
47 <div class="input">${h.text('ldap_dn_user',class_='small')}</div>
48 </div>
49 <div class="field">
50 <div class="label"><label for="ldap_dn_pass">${_('Password')}</label></div>
51 <div class="input">${h.password('ldap_dn_pass',class_='small')}</div>
52 </div>
53 <div class="field">
54 <div class="label"><label for="ldap_base_dn">${_('Base DN')}</label></div>
55 <div class="input">${h.text('ldap_base_dn',class_='small')}</div>
56 </div>
57
58 <div class="buttons">
59 ${h.submit('save','Save',class_="ui-button ui-widget ui-state-default ui-corner-all")}
60 </div>
61 </div>
62 </div>
63 ${h.end_form()}
64 </div>
65 </%def>
66
67
68
69
70
71
72
73
@@ -0,0 +1,7 b''
1 from rhodecode.tests import *
2
3 class TestLdapSettingsController(TestController):
4
5 def test_index(self):
6 response = self.app.get(url(controller='admin/ldap_settings', action='index'))
7 # Test response...
@@ -1,206 +1,212 b''
1 1 """
2 2 Routes configuration
3 3
4 4 The more specific and detailed routes should be defined first so they
5 5 may take precedent over the more generic routes. For more information
6 6 refer to the routes manual at http://routes.groovie.org/docs/
7 7 """
8 8 from __future__ import with_statement
9 9 from routes import Mapper
10 10 from rhodecode.lib.utils import check_repo_fast as cr
11 11
12 12 def make_map(config):
13 13 """Create, configure and return the routes Mapper"""
14 14 map = Mapper(directory=config['pylons.paths']['controllers'],
15 15 always_scan=config['debug'])
16 16 map.minimization = False
17 17 map.explicit = False
18 18
19 19 def check_repo(environ, match_dict):
20 20 """
21 21 check for valid repository for proper 404 handling
22 22 :param environ:
23 23 :param match_dict:
24 24 """
25 25 repo_name = match_dict.get('repo_name')
26 26 return not cr(repo_name, config['base_path'])
27 27
28 28 # The ErrorController route (handles 404/500 error pages); it should
29 29 # likely stay at the top, ensuring it can always be resolved
30 30 map.connect('/error/{action}', controller='error')
31 31 map.connect('/error/{action}/{id}', controller='error')
32 32
33 33 #==========================================================================
34 34 # CUSTOM ROUTES HERE
35 35 #==========================================================================
36 36
37 37 #MAIN PAGE
38 38 map.connect('home', '/', controller='home', action='index')
39 39 map.connect('bugtracker', "http://bitbucket.org/marcinkuzminski/rhodecode/issues", _static=True)
40 40 map.connect('gpl_license', "http://www.gnu.org/licenses/gpl.html", _static=True)
41 41 #ADMIN REPOSITORY REST ROUTES
42 42 with map.submapper(path_prefix='/_admin', controller='admin/repos') as m:
43 43 m.connect("repos", "/repos",
44 44 action="create", conditions=dict(method=["POST"]))
45 45 m.connect("repos", "/repos",
46 46 action="index", conditions=dict(method=["GET"]))
47 47 m.connect("formatted_repos", "/repos.{format}",
48 48 action="index",
49 49 conditions=dict(method=["GET"]))
50 50 m.connect("new_repo", "/repos/new",
51 51 action="new", conditions=dict(method=["GET"]))
52 52 m.connect("formatted_new_repo", "/repos/new.{format}",
53 53 action="new", conditions=dict(method=["GET"]))
54 54 m.connect("/repos/{repo_name:.*}",
55 55 action="update", conditions=dict(method=["PUT"],
56 56 function=check_repo))
57 57 m.connect("/repos/{repo_name:.*}",
58 58 action="delete", conditions=dict(method=["DELETE"],
59 59 function=check_repo))
60 60 m.connect("edit_repo", "/repos/{repo_name:.*}/edit",
61 61 action="edit", conditions=dict(method=["GET"],
62 62 function=check_repo))
63 63 m.connect("formatted_edit_repo", "/repos/{repo_name:.*}.{format}/edit",
64 64 action="edit", conditions=dict(method=["GET"],
65 65 function=check_repo))
66 66 m.connect("repo", "/repos/{repo_name:.*}",
67 67 action="show", conditions=dict(method=["GET"],
68 68 function=check_repo))
69 69 m.connect("formatted_repo", "/repos/{repo_name:.*}.{format}",
70 70 action="show", conditions=dict(method=["GET"],
71 71 function=check_repo))
72 72 #ajax delete repo perm user
73 73 m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*}",
74 74 action="delete_perm_user", conditions=dict(method=["DELETE"],
75 75 function=check_repo))
76 76 #settings actions
77 77 m.connect('repo_stats', "/repos_stats/{repo_name:.*}",
78 78 action="repo_stats", conditions=dict(method=["DELETE"],
79 79 function=check_repo))
80 80 m.connect('repo_cache', "/repos_cache/{repo_name:.*}",
81 81 action="repo_cache", conditions=dict(method=["DELETE"],
82 82 function=check_repo))
83 83 #ADMIN USER REST ROUTES
84 84 map.resource('user', 'users', controller='admin/users', path_prefix='/_admin')
85 85
86 86 #ADMIN PERMISSIONS REST ROUTES
87 87 map.resource('permission', 'permissions', controller='admin/permissions', path_prefix='/_admin')
88 map.connect('permissions_ldap', '/_admin/permissions_ldap', controller='admin/permissions', action='ldap')
88
89
90 ##ADMIN LDAP SETTINGS
91 map.connect('ldap_settings', '/_admin/ldap', controller='admin/ldap_settings',
92 action='ldap_settings', conditions=dict(method=["POST"]))
93 map.connect('ldap_home', '/_admin/ldap', controller='admin/ldap_settings',)
94
89 95
90 96
91 97 #ADMIN SETTINGS REST ROUTES
92 98 with map.submapper(path_prefix='/_admin', controller='admin/settings') as m:
93 99 m.connect("admin_settings", "/settings",
94 100 action="create", conditions=dict(method=["POST"]))
95 101 m.connect("admin_settings", "/settings",
96 102 action="index", conditions=dict(method=["GET"]))
97 103 m.connect("formatted_admin_settings", "/settings.{format}",
98 104 action="index", conditions=dict(method=["GET"]))
99 105 m.connect("admin_new_setting", "/settings/new",
100 106 action="new", conditions=dict(method=["GET"]))
101 107 m.connect("formatted_admin_new_setting", "/settings/new.{format}",
102 108 action="new", conditions=dict(method=["GET"]))
103 109 m.connect("/settings/{setting_id}",
104 110 action="update", conditions=dict(method=["PUT"]))
105 111 m.connect("/settings/{setting_id}",
106 112 action="delete", conditions=dict(method=["DELETE"]))
107 113 m.connect("admin_edit_setting", "/settings/{setting_id}/edit",
108 114 action="edit", conditions=dict(method=["GET"]))
109 115 m.connect("formatted_admin_edit_setting", "/settings/{setting_id}.{format}/edit",
110 116 action="edit", conditions=dict(method=["GET"]))
111 117 m.connect("admin_setting", "/settings/{setting_id}",
112 118 action="show", conditions=dict(method=["GET"]))
113 119 m.connect("formatted_admin_setting", "/settings/{setting_id}.{format}",
114 120 action="show", conditions=dict(method=["GET"]))
115 121 m.connect("admin_settings_my_account", "/my_account",
116 122 action="my_account", conditions=dict(method=["GET"]))
117 123 m.connect("admin_settings_my_account_update", "/my_account_update",
118 124 action="my_account_update", conditions=dict(method=["PUT"]))
119 125 m.connect("admin_settings_create_repository", "/create_repository",
120 126 action="create_repository", conditions=dict(method=["GET"]))
121 127
122 128 #ADMIN MAIN PAGES
123 129 with map.submapper(path_prefix='/_admin', controller='admin/admin') as m:
124 130 m.connect('admin_home', '', action='index')#main page
125 131 m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
126 132 action='add_repo')
127 133
128 134
129 135 #USER JOURNAL
130 136 map.connect('journal', '/_admin/journal', controller='journal',)
131 137 map.connect('toggle_following', '/_admin/toggle_following', controller='journal',
132 138 action='toggle_following', conditions=dict(method=["POST"]))
133 139
134 140
135 141 #SEARCH
136 142 map.connect('search', '/_admin/search', controller='search',)
137 143 map.connect('search_repo', '/_admin/search/{search_repo:.*}', controller='search')
138 144
139 145 #LOGIN/LOGOUT/REGISTER/SIGN IN
140 146 map.connect('login_home', '/_admin/login', controller='login')
141 147 map.connect('logout_home', '/_admin/logout', controller='login', action='logout')
142 148 map.connect('register', '/_admin/register', controller='login', action='register')
143 149 map.connect('reset_password', '/_admin/password_reset', controller='login', action='password_reset')
144 150
145 151 #FEEDS
146 152 map.connect('rss_feed_home', '/{repo_name:.*}/feed/rss',
147 153 controller='feed', action='rss',
148 154 conditions=dict(function=check_repo))
149 155 map.connect('atom_feed_home', '/{repo_name:.*}/feed/atom',
150 156 controller='feed', action='atom',
151 157 conditions=dict(function=check_repo))
152 158
153 159
154 160 #REPOSITORY ROUTES
155 161 map.connect('changeset_home', '/{repo_name:.*}/changeset/{revision}',
156 162 controller='changeset', revision='tip',
157 163 conditions=dict(function=check_repo))
158 164 map.connect('raw_changeset_home', '/{repo_name:.*}/raw-changeset/{revision}',
159 165 controller='changeset', action='raw_changeset', revision='tip',
160 166 conditions=dict(function=check_repo))
161 167 map.connect('summary_home', '/{repo_name:.*}/summary',
162 168 controller='summary', conditions=dict(function=check_repo))
163 169 map.connect('shortlog_home', '/{repo_name:.*}/shortlog',
164 170 controller='shortlog', conditions=dict(function=check_repo))
165 171 map.connect('branches_home', '/{repo_name:.*}/branches',
166 172 controller='branches', conditions=dict(function=check_repo))
167 173 map.connect('tags_home', '/{repo_name:.*}/tags',
168 174 controller='tags', conditions=dict(function=check_repo))
169 175 map.connect('changelog_home', '/{repo_name:.*}/changelog',
170 176 controller='changelog', conditions=dict(function=check_repo))
171 177 map.connect('files_home', '/{repo_name:.*}/files/{revision}/{f_path:.*}',
172 178 controller='files', revision='tip', f_path='',
173 179 conditions=dict(function=check_repo))
174 180 map.connect('files_diff_home', '/{repo_name:.*}/diff/{f_path:.*}',
175 181 controller='files', action='diff', revision='tip', f_path='',
176 182 conditions=dict(function=check_repo))
177 183 map.connect('files_rawfile_home', '/{repo_name:.*}/rawfile/{revision}/{f_path:.*}',
178 184 controller='files', action='rawfile', revision='tip', f_path='',
179 185 conditions=dict(function=check_repo))
180 186 map.connect('files_raw_home', '/{repo_name:.*}/raw/{revision}/{f_path:.*}',
181 187 controller='files', action='raw', revision='tip', f_path='',
182 188 conditions=dict(function=check_repo))
183 189 map.connect('files_annotate_home', '/{repo_name:.*}/annotate/{revision}/{f_path:.*}',
184 190 controller='files', action='annotate', revision='tip', f_path='',
185 191 conditions=dict(function=check_repo))
186 192 map.connect('files_archive_home', '/{repo_name:.*}/archive/{revision}/{fileformat}',
187 193 controller='files', action='archivefile', revision='tip',
188 194 conditions=dict(function=check_repo))
189 195 map.connect('repo_settings_delete', '/{repo_name:.*}/settings',
190 196 controller='settings', action="delete",
191 197 conditions=dict(method=["DELETE"], function=check_repo))
192 198 map.connect('repo_settings_update', '/{repo_name:.*}/settings',
193 199 controller='settings', action="update",
194 200 conditions=dict(method=["PUT"], function=check_repo))
195 201 map.connect('repo_settings_home', '/{repo_name:.*}/settings',
196 202 controller='settings', action='index',
197 203 conditions=dict(function=check_repo))
198 204
199 205 map.connect('repo_fork_create_home', '/{repo_name:.*}/fork',
200 206 controller='settings', action='fork_create',
201 207 conditions=dict(function=check_repo, method=["POST"]))
202 208 map.connect('repo_fork_home', '/{repo_name:.*}/fork',
203 209 controller='settings', action='fork',
204 210 conditions=dict(function=check_repo))
205 211
206 212 return map
@@ -1,218 +1,170 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 package.rhodecode.controllers.admin.permissions
4 4 ~~~~~~~~~~~~~~
5 5 permissions controller for Rhodecode
6 6
7 7 :created_on: Apr 27, 2010
8 8 :author: marcink
9 9 :copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
10 10 :license: GPLv3, see COPYING for more details.
11 11 """
12 12 # This program is free software; you can redistribute it and/or
13 13 # modify it under the terms of the GNU General Public License
14 14 # as published by the Free Software Foundation; version 2
15 15 # of the License or (at your opinion) any later version of the license.
16 16 #
17 17 # This program is distributed in the hope that it will be useful,
18 18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 20 # GNU General Public License for more details.
21 21 #
22 22 # You should have received a copy of the GNU General Public License
23 23 # along with this program; if not, write to the Free Software
24 24 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
25 25 # MA 02110-1301, USA.
26 26
27 27 from formencode import htmlfill
28 28 from pylons import request, session, tmpl_context as c, url
29 29 from pylons.controllers.util import abort, redirect
30 30 from pylons.i18n.translation import _
31 31 from rhodecode.lib import helpers as h
32 32 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
33 33 from rhodecode.lib.auth_ldap import LdapImportError
34 34 from rhodecode.lib.base import BaseController, render
35 35 from rhodecode.model.forms import LdapSettingsForm, DefaultPermissionsForm
36 36 from rhodecode.model.permission import PermissionModel
37 37 from rhodecode.model.settings import SettingsModel
38 38 from rhodecode.model.user import UserModel
39 39 import formencode
40 40 import logging
41 41 import traceback
42 42
43 43 log = logging.getLogger(__name__)
44 44
45 45 class PermissionsController(BaseController):
46 46 """REST Controller styled on the Atom Publishing Protocol"""
47 47 # To properly map this controller, ensure your config/routing.py
48 48 # file has a resource setup:
49 49 # map.resource('permission', 'permissions')
50 50
51 51 @LoginRequired()
52 52 @HasPermissionAllDecorator('hg.admin')
53 53 def __before__(self):
54 54 c.admin_user = session.get('admin_user')
55 55 c.admin_username = session.get('admin_username')
56 56 super(PermissionsController, self).__before__()
57 57
58 58 self.perms_choices = [('repository.none', _('None'),),
59 59 ('repository.read', _('Read'),),
60 60 ('repository.write', _('Write'),),
61 61 ('repository.admin', _('Admin'),)]
62 62 self.register_choices = [
63 63 ('hg.register.none',
64 64 _('disabled')),
65 65 ('hg.register.manual_activate',
66 66 _('allowed with manual account activation')),
67 67 ('hg.register.auto_activate',
68 68 _('allowed with automatic account activation')), ]
69 69
70 70 self.create_choices = [('hg.create.none', _('Disabled')),
71 71 ('hg.create.repository', _('Enabled'))]
72 72
73 73
74 74 def index(self, format='html'):
75 75 """GET /permissions: All items in the collection"""
76 76 # url('permissions')
77 77
78 78 def create(self):
79 79 """POST /permissions: Create a new item"""
80 80 # url('permissions')
81 81
82 82 def new(self, format='html'):
83 83 """GET /permissions/new: Form to create a new item"""
84 84 # url('new_permission')
85 85
86 86 def update(self, id):
87 87 """PUT /permissions/id: Update an existing item"""
88 88 # Forms posted to this method should contain a hidden field:
89 89 # <input type="hidden" name="_method" value="PUT" />
90 90 # Or using helpers:
91 91 # h.form(url('permission', id=ID),
92 92 # method='put')
93 93 # url('permission', id=ID)
94 94
95 95 permission_model = PermissionModel()
96 96
97 97 _form = DefaultPermissionsForm([x[0] for x in self.perms_choices],
98 98 [x[0] for x in self.register_choices],
99 99 [x[0] for x in self.create_choices])()
100 100
101 101 try:
102 102 form_result = _form.to_python(dict(request.POST))
103 103 form_result.update({'perm_user_name':id})
104 104 permission_model.update(form_result)
105 105 h.flash(_('Default permissions updated successfully'),
106 106 category='success')
107 107
108 108 except formencode.Invalid, errors:
109 109 c.perms_choices = self.perms_choices
110 110 c.register_choices = self.register_choices
111 111 c.create_choices = self.create_choices
112 112 defaults = errors.value
113 defaults.update(SettingsModel().get_ldap_settings())
114 113
115 114 return htmlfill.render(
116 115 render('admin/permissions/permissions.html'),
117 116 defaults=defaults,
118 117 errors=errors.error_dict or {},
119 118 prefix_error=False,
120 119 encoding="UTF-8")
121 120 except Exception:
122 121 log.error(traceback.format_exc())
123 122 h.flash(_('error occured during update of permissions'),
124 123 category='error')
125 124
126 125 return redirect(url('edit_permission', id=id))
127 126
128 127
129 128
130 129 def delete(self, id):
131 130 """DELETE /permissions/id: Delete an existing item"""
132 131 # Forms posted to this method should contain a hidden field:
133 132 # <input type="hidden" name="_method" value="DELETE" />
134 133 # Or using helpers:
135 134 # h.form(url('permission', id=ID),
136 135 # method='delete')
137 136 # url('permission', id=ID)
138 137
139 138 def show(self, id, format='html'):
140 139 """GET /permissions/id: Show a specific item"""
141 140 # url('permission', id=ID)
142 141
143 142 def edit(self, id, format='html'):
144 143 """GET /permissions/id/edit: Form to edit an existing item"""
145 144 #url('edit_permission', id=ID)
146 145 c.perms_choices = self.perms_choices
147 146 c.register_choices = self.register_choices
148 147 c.create_choices = self.create_choices
149 148
150 149 if id == 'default':
151 150 default_user = UserModel().get_by_username('default')
152 151 defaults = {'_method':'put',
153 152 'anonymous':default_user.active}
154 defaults.update(SettingsModel().get_ldap_settings())
153
155 154 for p in default_user.user_perms:
156 155 if p.permission.permission_name.startswith('repository.'):
157 156 defaults['default_perm'] = p.permission.permission_name
158 157
159 158 if p.permission.permission_name.startswith('hg.register.'):
160 159 defaults['default_register'] = p.permission.permission_name
161 160
162 161 if p.permission.permission_name.startswith('hg.create.'):
163 162 defaults['default_create'] = p.permission.permission_name
164 163
165 164 return htmlfill.render(
166 165 render('admin/permissions/permissions.html'),
167 166 defaults=defaults,
168 167 encoding="UTF-8",
169 168 force_defaults=True,)
170 169 else:
171 170 return redirect(url('admin_home'))
172
173
174 def ldap(self, id_user='default'):
175 """
176 POST ldap create and store ldap settings
177 """
178
179 settings_model = SettingsModel()
180 _form = LdapSettingsForm()()
181
182 try:
183 form_result = _form.to_python(dict(request.POST))
184 try:
185
186 for k, v in form_result.items():
187 if k.startswith('ldap_'):
188 setting = settings_model.get(k)
189 setting.app_settings_value = v
190 self.sa.add(setting)
191
192 self.sa.commit()
193 h.flash(_('Ldap settings updated successfully'),
194 category='success')
195 except:
196 raise
197 except LdapImportError:
198 h.flash(_('Unable to activate ldap. The "ldap-python" library '
199 'is missing.'),
200 category='warning')
201
202 except formencode.Invalid, errors:
203 c.perms_choices = self.perms_choices
204 c.register_choices = self.register_choices
205 c.create_choices = self.create_choices
206
207 return htmlfill.render(
208 render('admin/permissions/permissions.html'),
209 defaults=errors.value,
210 errors=errors.error_dict or {},
211 prefix_error=False,
212 encoding="UTF-8")
213 except Exception:
214 log.error(traceback.format_exc())
215 h.flash(_('error occured during update of ldap settings'),
216 category='error')
217
218 return redirect(url('edit_permission', id=id_user))
@@ -1,2381 +1,2388 b''
1 1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
2 2 border:0;
3 3 outline:0;
4 4 font-size:100%;
5 5 vertical-align:baseline;
6 6 background:transparent;
7 7 margin:0;
8 8 padding:0;
9 9 }
10 10
11 11 body {
12 12 line-height:1;
13 13 height:100%;
14 14 background:url("../images/background.png") repeat scroll 0 0 #B0B0B0;
15 15 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
16 16 font-size:12px;
17 17 color:#000;
18 18 margin:0;
19 19 padding:0;
20 20 }
21 21
22 22 ol,ul {
23 23 list-style:none;
24 24 }
25 25
26 26 blockquote,q {
27 27 quotes:none;
28 28 }
29 29
30 30 blockquote:before,blockquote:after,q:before,q:after {
31 31 content:none;
32 32 }
33 33
34 34 :focus {
35 35 outline:0;
36 36 }
37 37
38 38 del {
39 39 text-decoration:line-through;
40 40 }
41 41
42 42 table {
43 43 border-collapse:collapse;
44 44 border-spacing:0;
45 45 }
46 46
47 47 html {
48 48 height:100%;
49 49 }
50 50
51 51 a {
52 52 color:#003367;
53 53 text-decoration:none;
54 54 cursor:pointer;
55 55 font-weight:700;
56 56 }
57 57
58 58 a:hover {
59 59 color:#316293;
60 60 text-decoration:underline;
61 61 }
62 62
63 63 h1,h2,h3,h4,h5,h6 {
64 64 color:#292929;
65 65 font-weight:700;
66 66 }
67 67
68 68 h1 {
69 69 font-size:22px;
70 70 }
71 71
72 72 h2 {
73 73 font-size:20px;
74 74 }
75 75
76 76 h3 {
77 77 font-size:18px;
78 78 }
79 79
80 80 h4 {
81 81 font-size:16px;
82 82 }
83 83
84 84 h5 {
85 85 font-size:14px;
86 86 }
87 87
88 88 h6 {
89 89 font-size:11px;
90 90 }
91 91
92 92 ul.circle {
93 93 list-style-type:circle;
94 94 }
95 95
96 96 ul.disc {
97 97 list-style-type:disc;
98 98 }
99 99
100 100 ul.square {
101 101 list-style-type:square;
102 102 }
103 103
104 104 ol.lower-roman {
105 105 list-style-type:lower-roman;
106 106 }
107 107
108 108 ol.upper-roman {
109 109 list-style-type:upper-roman;
110 110 }
111 111
112 112 ol.lower-alpha {
113 113 list-style-type:lower-alpha;
114 114 }
115 115
116 116 ol.upper-alpha {
117 117 list-style-type:upper-alpha;
118 118 }
119 119
120 120 ol.decimal {
121 121 list-style-type:decimal;
122 122 }
123 123
124 124 div.color {
125 125 clear:both;
126 126 overflow:hidden;
127 127 position:absolute;
128 128 background:#FFF;
129 129 margin:7px 0 0 60px;
130 130 padding:1px 1px 1px 0;
131 131 }
132 132
133 133 div.color a {
134 134 width:15px;
135 135 height:15px;
136 136 display:block;
137 137 float:left;
138 138 margin:0 0 0 1px;
139 139 padding:0;
140 140 }
141 141
142 142 div.options {
143 143 clear:both;
144 144 overflow:hidden;
145 145 position:absolute;
146 146 background:#FFF;
147 147 margin:7px 0 0 162px;
148 148 padding:0;
149 149 }
150 150
151 151 div.options a {
152 152 height:1%;
153 153 display:block;
154 154 text-decoration:none;
155 155 margin:0;
156 156 padding:3px 8px;
157 157 }
158 158
159 159 .top-left-rounded-corner {
160 160 -webkit-border-top-left-radius: 8px;
161 161 -khtml-border-radius-topleft: 8px;
162 162 -moz-border-radius-topleft: 8px;
163 163 border-top-left-radius: 8px;
164 164 }
165 165
166 166 .top-right-rounded-corner {
167 167 -webkit-border-top-right-radius: 8px;
168 168 -khtml-border-radius-topright: 8px;
169 169 -moz-border-radius-topright: 8px;
170 170 border-top-right-radius: 8px;
171 171 }
172 172
173 173 .bottom-left-rounded-corner {
174 174 -webkit-border-bottom-left-radius: 8px;
175 175 -khtml-border-radius-bottomleft: 8px;
176 176 -moz-border-radius-bottomleft: 8px;
177 177 border-bottom-left-radius: 8px;
178 178 }
179 179
180 180 .bottom-right-rounded-corner {
181 181 -webkit-border-bottom-right-radius: 8px;
182 182 -khtml-border-radius-bottomright: 8px;
183 183 -moz-border-radius-bottomright: 8px;
184 184 border-bottom-right-radius: 8px;
185 185 }
186 186
187 187
188 188 #header {
189 189 margin:0;
190 190 padding:0 30px;
191 191 }
192 192
193 193 #header ul#logged-user li {
194 194 list-style:none;
195 195 float:left;
196 196 border-left:1px solid #bbb;
197 197 border-right:1px solid #a5a5a5;
198 198 margin:-2px 0 0;
199 199 padding:10px 12px;
200 200 }
201 201
202 202 #header ul#logged-user li.first {
203 203 border-left:none;
204 204 margin:-6px;
205 205 }
206 206
207 207 #header ul#logged-user li.first div.account {
208 208 padding-top:4px;
209 209 float:left;
210 210 }
211 211
212 212 #header ul#logged-user li.last {
213 213 border-right:none;
214 214 }
215 215
216 216 #header ul#logged-user li a {
217 217 color:#4e4e4e;
218 218 font-weight:700;
219 219 text-decoration:none;
220 220 }
221 221
222 222 #header ul#logged-user li a:hover {
223 223 color:#376ea6;
224 224 text-decoration:underline;
225 225 }
226 226
227 227 #header ul#logged-user li.highlight a {
228 228 color:#fff;
229 229 }
230 230
231 231 #header ul#logged-user li.highlight a:hover {
232 232 color:#376ea6;
233 233 }
234 234
235 235 #header #header-inner {
236 236 height:40px;
237 237 clear:both;
238 238 position:relative;
239 239 background:#003367 url("../images/header_inner.png") repeat-x;
240 240 border-bottom:2px solid #fff;
241 241 margin:0;
242 242 padding:0;
243 243 }
244 244
245 245 #header #header-inner #home a {
246 246 height:40px;
247 247 width:46px;
248 248 display:block;
249 249 background:url("../images/button_home.png");
250 250 background-position:0 0;
251 251 margin:0;
252 252 padding:0;
253 253 }
254 254
255 255 #header #header-inner #home a:hover {
256 256 background-position:0 -40px;
257 257 }
258 258
259 259 #header #header-inner #logo h1 {
260 260 color:#FFF;
261 261 font-size:18px;
262 262 margin:10px 0 0 13px;
263 263 padding:0;
264 264 }
265 265
266 266 #header #header-inner #logo a {
267 267 color:#fff;
268 268 text-decoration:none;
269 269 }
270 270
271 271 #header #header-inner #logo a:hover {
272 272 color:#bfe3ff;
273 273 }
274 274
275 275 #header #header-inner #quick,#header #header-inner #quick ul {
276 276 position:relative;
277 277 float:right;
278 278 list-style-type:none;
279 279 list-style-position:outside;
280 280 margin:10px 5px 0 0;
281 281 padding:0;
282 282 }
283 283
284 284 #header #header-inner #quick li {
285 285 position:relative;
286 286 float:left;
287 287 margin:0 5px 0 0;
288 288 padding:0;
289 289 }
290 290
291 291 #header #header-inner #quick li a {
292 292 top:0;
293 293 left:0;
294 294 height:1%;
295 295 display:block;
296 296 clear:both;
297 297 overflow:hidden;
298 298 color:#FFF;
299 299 font-weight:700;
300 300 text-decoration:none;
301 301 background:#369 url("../../images/quick_l.png") no-repeat top left;
302 302 padding:0;
303 303 }
304 304
305 305 #header #header-inner #quick li span.short {
306 306 padding:9px 6px 8px 6px;
307 307 }
308 308
309 309 #header #header-inner #quick li span {
310 310 top:0;
311 311 right:0;
312 312 height:1%;
313 313 display:block;
314 314 float:left;
315 315 background:url("../../images/quick_r.png") no-repeat top right;
316 316 border-left:1px solid #3f6f9f;
317 317 margin:0;
318 318 padding:10px 12px 8px 10px;
319 319 }
320 320
321 321 #header #header-inner #quick li span.normal {
322 322 border:none;
323 323 padding:10px 12px 8px;
324 324 }
325 325
326 326 #header #header-inner #quick li span.icon {
327 327 top:0;
328 328 left:0;
329 329 border-left:none;
330 330 background:url("../../images/quick_l.png") no-repeat top left;
331 331 border-right:1px solid #2e5c89;
332 332 padding:8px 8px 4px;
333 333 }
334 334
335 335 #header #header-inner #quick li span.icon_short {
336 336 top:0;
337 337 left:0;
338 338 border-left:none;
339 339 background:url("../../images/quick_l.png") no-repeat top left;
340 340 border-right:1px solid #2e5c89;
341 341 padding:9px 4px 4px;
342 342 }
343 343
344 344 #header #header-inner #quick li a:hover {
345 345 background:#4e4e4e url("../../images/quick_l_selected.png") no-repeat top left;
346 346 }
347 347
348 348 #header #header-inner #quick li a:hover span {
349 349 border-left:1px solid #545454;
350 350 background:url("../../images/quick_r_selected.png") no-repeat top right;
351 351 }
352 352
353 353 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short {
354 354 border-left:none;
355 355 border-right:1px solid #464646;
356 356 background:url("../../images/quick_l_selected.png") no-repeat top left;
357 357 }
358 358
359 359
360 360 #header #header-inner #quick ul {
361 361 top:29px;
362 362 right:0;
363 363 min-width:200px;
364 364 display:none;
365 365 position:absolute;
366 366 background:#FFF;
367 367 border:1px solid #666;
368 368 border-top:1px solid #003367;
369 369 z-index:100;
370 370 margin:0;
371 371 padding:0;
372 372 }
373 373
374 374 #header #header-inner #quick ul.repo_switcher {
375 375 max-height:275px;
376 376 overflow-x:hidden;
377 377 overflow-y:auto;
378 378 }
379 379
380 380 #header #header-inner #quick .repo_switcher_type{
381 381 position:absolute;
382 382 left:0;
383 383 top:9px;
384 384
385 385 }
386 386 #header #header-inner #quick li ul li {
387 387 border-bottom:1px solid #ddd;
388 388 }
389 389
390 390 #header #header-inner #quick li ul li a {
391 391 width:182px;
392 392 height:auto;
393 393 display:block;
394 394 float:left;
395 395 background:#FFF;
396 396 color:#003367;
397 397 font-weight:400;
398 398 margin:0;
399 399 padding:7px 9px;
400 400 }
401 401
402 402 #header #header-inner #quick li ul li a:hover {
403 403 color:#000;
404 404 background:#FFF;
405 405 }
406 406
407 407 #header #header-inner #quick ul ul {
408 408 top:auto;
409 409 }
410 410
411 411 #header #header-inner #quick li ul ul {
412 412 right:200px;
413 413 max-height:275px;
414 414 overflow:auto;
415 415 overflow-x:hidden;
416 416 white-space:normal;
417 417 }
418 418
419 419 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
420 420 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
421 421 width:167px;
422 422 margin:0;
423 423 padding:12px 9px 7px 24px;
424 424 }
425 425
426 426 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
427 427 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
428 428 min-width:167px;
429 429 margin:0;
430 430 padding:12px 9px 7px 24px;
431 431 }
432 432
433 433 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
434 434 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
435 435 min-width:167px;
436 436 margin:0;
437 437 padding:12px 9px 7px 24px;
438 438 }
439 439
440 440 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover {
441 441 background:url("../images/icons/hgicon.png") no-repeat scroll 4px 9px #FFF;
442 442 min-width:167px;
443 443 margin:0 0 0 14px;
444 444 padding:12px 9px 7px 24px;
445 445 }
446 446
447 447 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover {
448 448 background:url("../images/icons/giticon.png") no-repeat scroll 4px 9px #FFF;
449 449 min-width:167px;
450 450 margin:0 0 0 14px;
451 451 padding:12px 9px 7px 24px;
452 452 }
453 453
454 454 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
455 455 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
456 456 width:167px;
457 457 margin:0;
458 458 padding:12px 9px 7px 24px;
459 459 }
460 460
461 461 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
462 462 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
463 463 width:167px;
464 464 margin:0;
465 465 padding:12px 9px 7px 24px;
466 466 }
467 467
468 468 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover {
469 469 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
470 470 width:167px;
471 471 margin:0;
472 472 padding:12px 9px 7px 24px;
473 473 }
474 474
475 475 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
476 476 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
477 477 width:167px;
478 478 margin:0;
479 479 padding:12px 9px 7px 24px;
480 480 }
481 481
482 #header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover {
483 background:#FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
484 width:167px;
485 margin:0;
486 padding:12px 9px 7px 24px;
487 }
488
482 489 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
483 490 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
484 491 width:167px;
485 492 margin:0;
486 493 padding:12px 9px 7px 24px;
487 494 }
488 495
489 496 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
490 497 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
491 498 width:167px;
492 499 margin:0;
493 500 padding:12px 9px 7px 24px;
494 501 }
495 502
496 503 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
497 504 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
498 505 width:167px;
499 506 margin:0;
500 507 padding:12px 9px 7px 24px;
501 508 }
502 509
503 510 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
504 511 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
505 512 width:167px;
506 513 margin:0;
507 514 padding:12px 9px 7px 24px;
508 515 }
509 516
510 517 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
511 518 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
512 519 width:167px;
513 520 margin:0;
514 521 padding:12px 9px 7px 24px;
515 522 }
516 523
517 524 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
518 525 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
519 526 width:167px;
520 527 margin:0;
521 528 padding:12px 9px 7px 24px;
522 529 }
523 530
524 531 #content #left {
525 532 left:0;
526 533 width:280px;
527 534 position:absolute;
528 535 }
529 536
530 537 #content #right {
531 538 margin:0 60px 10px 290px;
532 539 }
533 540
534 541 #content div.box {
535 542 clear:both;
536 543 overflow:hidden;
537 544 background:#fff;
538 545 margin:0 0 10px;
539 546 padding:0 0 10px;
540 547 }
541 548
542 549 #content div.box-left {
543 550 width:49%;
544 551 clear:none;
545 552 float:left;
546 553 margin:0 0 10px;
547 554 }
548 555
549 556 #content div.box-right {
550 557 width:49%;
551 558 clear:none;
552 559 float:right;
553 560 margin:0 0 10px;
554 561 }
555 562
556 563 #content div.box div.title {
557 564 clear:both;
558 565 overflow:hidden;
559 566 background:#369 url("../images/header_inner.png") repeat-x;
560 567 margin:0 0 20px;
561 568 padding:0;
562 569 }
563 570
564 571 #content div.box div.title h5 {
565 572 float:left;
566 573 border:none;
567 574 color:#fff;
568 575 text-transform:uppercase;
569 576 margin:0;
570 577 padding:11px 0 11px 10px;
571 578 }
572 579
573 580 #content div.box div.title ul.links li {
574 581 list-style:none;
575 582 float:left;
576 583 margin:0;
577 584 padding:0;
578 585 }
579 586
580 587 #content div.box div.title ul.links li a {
581 588 height:1%;
582 589 display:block;
583 590 float:left;
584 591 border-left:1px solid #316293;
585 592 color:#fff;
586 593 font-size:11px;
587 594 font-weight:700;
588 595 text-decoration:none;
589 596 margin:0;
590 597 padding:13px 16px 12px;
591 598 }
592 599
593 600 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
594 601 clear:both;
595 602 overflow:hidden;
596 603 border-bottom:1px solid #DDD;
597 604 margin:10px 20px;
598 605 padding:0 0 15px;
599 606 }
600 607
601 608 #content div.box p {
602 609 color:#5f5f5f;
603 610 font-size:12px;
604 611 line-height:150%;
605 612 margin:0 24px 10px;
606 613 padding:0;
607 614 }
608 615
609 616 #content div.box blockquote {
610 617 border-left:4px solid #DDD;
611 618 color:#5f5f5f;
612 619 font-size:11px;
613 620 line-height:150%;
614 621 margin:0 34px;
615 622 padding:0 0 0 14px;
616 623 }
617 624
618 625 #content div.box blockquote p {
619 626 margin:10px 0;
620 627 padding:0;
621 628 }
622 629
623 630 #content div.box dl {
624 631 margin:10px 24px;
625 632 }
626 633
627 634 #content div.box dt {
628 635 font-size:12px;
629 636 margin:0;
630 637 }
631 638
632 639 #content div.box dd {
633 640 font-size:12px;
634 641 margin:0;
635 642 padding:8px 0 8px 15px;
636 643 }
637 644
638 645 #content div.box li {
639 646 font-size:12px;
640 647 padding:4px 0;
641 648 }
642 649
643 650 #content div.box ul.disc,#content div.box ul.circle {
644 651 margin:10px 24px 10px 38px;
645 652 }
646 653
647 654 #content div.box ul.square {
648 655 margin:10px 24px 10px 40px;
649 656 }
650 657
651 658 #content div.box img.left {
652 659 border:none;
653 660 float:left;
654 661 margin:10px 10px 10px 0;
655 662 }
656 663
657 664 #content div.box img.right {
658 665 border:none;
659 666 float:right;
660 667 margin:10px 0 10px 10px;
661 668 }
662 669
663 670 #content div.box div.messages {
664 671 clear:both;
665 672 overflow:hidden;
666 673 margin:0 20px;
667 674 padding:0;
668 675 }
669 676
670 677 #content div.box div.message {
671 678 clear:both;
672 679 overflow:hidden;
673 680 margin:0;
674 681 padding:10px 0;
675 682 }
676 683
677 684 #content div.box div.message a {
678 685 font-weight:400 !important;
679 686 }
680 687
681 688 #content div.box div.message div.image {
682 689 float:left;
683 690 margin:9px 0 0 5px;
684 691 padding:6px;
685 692 }
686 693
687 694 #content div.box div.message div.image img {
688 695 vertical-align:middle;
689 696 margin:0;
690 697 }
691 698
692 699 #content div.box div.message div.text {
693 700 float:left;
694 701 margin:0;
695 702 padding:9px 6px;
696 703 }
697 704
698 705 #content div.box div.message div.dismiss a {
699 706 height:16px;
700 707 width:16px;
701 708 display:block;
702 709 background:url("../images/icons/cross.png") no-repeat;
703 710 margin:15px 14px 0 0;
704 711 padding:0;
705 712 }
706 713
707 714 #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 {
708 715 border:none;
709 716 margin:0;
710 717 padding:0;
711 718 }
712 719
713 720 #content div.box div.message div.text span {
714 721 height:1%;
715 722 display:block;
716 723 margin:0;
717 724 padding:5px 0 0;
718 725 }
719 726
720 727 #content div.box div.message-error {
721 728 height:1%;
722 729 clear:both;
723 730 overflow:hidden;
724 731 background:#FBE3E4;
725 732 border:1px solid #FBC2C4;
726 733 color:#860006;
727 734 }
728 735
729 736 #content div.box div.message-error h6 {
730 737 color:#860006;
731 738 }
732 739
733 740 #content div.box div.message-warning {
734 741 height:1%;
735 742 clear:both;
736 743 overflow:hidden;
737 744 background:#FFF6BF;
738 745 border:1px solid #FFD324;
739 746 color:#5f5200;
740 747 }
741 748
742 749 #content div.box div.message-warning h6 {
743 750 color:#5f5200;
744 751 }
745 752
746 753 #content div.box div.message-notice {
747 754 height:1%;
748 755 clear:both;
749 756 overflow:hidden;
750 757 background:#8FBDE0;
751 758 border:1px solid #6BACDE;
752 759 color:#003863;
753 760 }
754 761
755 762 #content div.box div.message-notice h6 {
756 763 color:#003863;
757 764 }
758 765
759 766 #content div.box div.message-success {
760 767 height:1%;
761 768 clear:both;
762 769 overflow:hidden;
763 770 background:#E6EFC2;
764 771 border:1px solid #C6D880;
765 772 color:#4e6100;
766 773 }
767 774
768 775 #content div.box div.message-success h6 {
769 776 color:#4e6100;
770 777 }
771 778
772 779 #content div.box div.form div.fields div.field {
773 780 height:1%;
774 781 border-bottom:1px solid #DDD;
775 782 clear:both;
776 783 margin:0;
777 784 padding:10px 0;
778 785 }
779 786
780 787 #content div.box div.form div.fields div.field-first {
781 788 padding:0 0 10px;
782 789 }
783 790
784 791 #content div.box div.form div.fields div.field-noborder {
785 792 border-bottom:0 !important;
786 793 }
787 794
788 795 #content div.box div.form div.fields div.field span.error-message {
789 796 height:1%;
790 797 display:inline-block;
791 798 color:red;
792 799 margin:8px 0 0 4px;
793 800 padding:0;
794 801 }
795 802
796 803 #content div.box div.form div.fields div.field span.success {
797 804 height:1%;
798 805 display:block;
799 806 color:#316309;
800 807 margin:8px 0 0;
801 808 padding:0;
802 809 }
803 810
804 811 #content div.box div.form div.fields div.field div.label {
805 812 left:80px;
806 813 width:auto;
807 814 position:absolute;
808 815 margin:0;
809 816 padding:8px 0 0 5px;
810 817 }
811 818
812 819 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
813 820 clear:both;
814 821 overflow:hidden;
815 822 left:0;
816 823 width:auto;
817 824 position:relative;
818 825 margin:0;
819 826 padding:0 0 8px;
820 827 }
821 828
822 829 #content div.box div.form div.fields div.field div.label-select {
823 830 padding:5px 0 0 5px;
824 831 }
825 832
826 833 #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 {
827 834 padding:0 0 8px;
828 835 }
829 836
830 837 #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 {
831 838 padding:0 0 8px !important;
832 839 }
833 840
834 841 #content div.box div.form div.fields div.field div.label label {
835 842 color:#393939;
836 843 font-weight:700;
837 844 }
838 845
839 846 #content div.box div.form div.fields div.field div.input {
840 847 margin:0 0 0 200px;
841 848 }
842 849 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
843 850 margin:0 0 0 0px;
844 851 }
845 852
846 853 #content div.box div.form div.fields div.field div.input input {
847 854 background:#FFF;
848 855 border-top:1px solid #b3b3b3;
849 856 border-left:1px solid #b3b3b3;
850 857 border-right:1px solid #eaeaea;
851 858 border-bottom:1px solid #eaeaea;
852 859 color:#000;
853 860 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
854 861 font-size:11px;
855 862 margin:0;
856 863 padding:7px 7px 6px;
857 864 }
858 865
859 866
860 867
861 868 #content div.box div.form div.fields div.field div.input input.small {
862 869 width:30%;
863 870 }
864 871
865 872 #content div.box div.form div.fields div.field div.input input.medium {
866 873 width:55%;
867 874 }
868 875
869 876 #content div.box div.form div.fields div.field div.input input.large {
870 877 width:85%;
871 878 }
872 879
873 880 #content div.box div.form div.fields div.field div.input input.date {
874 881 width:177px;
875 882 }
876 883
877 884 #content div.box div.form div.fields div.field div.input input.button {
878 885 background:#D4D0C8;
879 886 border-top:1px solid #FFF;
880 887 border-left:1px solid #FFF;
881 888 border-right:1px solid #404040;
882 889 border-bottom:1px solid #404040;
883 890 color:#000;
884 891 margin:0;
885 892 padding:4px 8px;
886 893 }
887 894
888 895 #content div.box div.form div.fields div.field div.input a.ui-input-file {
889 896 width:28px;
890 897 height:28px;
891 898 display:inline;
892 899 position:absolute;
893 900 overflow:hidden;
894 901 cursor:pointer;
895 902 background:#e5e3e3 url("../images/button_browse.png") no-repeat;
896 903 border:none;
897 904 text-decoration:none;
898 905 margin:0 0 0 6px;
899 906 padding:0;
900 907 }
901 908
902 909 #content div.box div.form div.fields div.field div.textarea {
903 910 border-top:1px solid #b3b3b3;
904 911 border-left:1px solid #b3b3b3;
905 912 border-right:1px solid #eaeaea;
906 913 border-bottom:1px solid #eaeaea;
907 914 margin:0 0 0 200px;
908 915 padding:10px;
909 916 }
910 917
911 918 #content div.box div.form div.fields div.field div.textarea-editor {
912 919 border:1px solid #ddd;
913 920 padding:0;
914 921 }
915 922
916 923 #content div.box div.form div.fields div.field div.textarea textarea {
917 924 width:100%;
918 925 height:220px;
919 926 overflow:hidden;
920 927 background:#FFF;
921 928 color:#000;
922 929 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
923 930 font-size:11px;
924 931 outline:none;
925 932 border-width:0;
926 933 margin:0;
927 934 padding:0;
928 935 }
929 936
930 937 #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 {
931 938 width:100%;
932 939 height:100px;
933 940 }
934 941
935 942 #content div.box div.form div.fields div.field div.textarea table {
936 943 width:100%;
937 944 border:none;
938 945 margin:0;
939 946 padding:0;
940 947 }
941 948
942 949 #content div.box div.form div.fields div.field div.textarea table td {
943 950 background:#DDD;
944 951 border:none;
945 952 padding:0;
946 953 }
947 954
948 955 #content div.box div.form div.fields div.field div.textarea table td table {
949 956 width:auto;
950 957 border:none;
951 958 margin:0;
952 959 padding:0;
953 960 }
954 961
955 962 #content div.box div.form div.fields div.field div.textarea table td table td {
956 963 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
957 964 font-size:11px;
958 965 padding:5px 5px 5px 0;
959 966 }
960 967
961 968 #content div.box div.form div.fields div.field div.textarea table td table td a.mceButtonActive {
962 969 background:#b1b1b1;
963 970 }
964 971
965 972 #content div.box div.form div.fields div.field div.select a.ui-selectmenu {
966 973 color:#565656;
967 974 text-decoration:none;
968 975 }
969 976
970 977 #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 {
971 978 background:#f6f6f6;
972 979 border-color:#666;
973 980 }
974 981
975 982 div.form div.fields div.field div.button {
976 983 margin:0;
977 984 padding:0 0 0 8px;
978 985 }
979 986
980 987 div.form div.fields div.field div.highlight .ui-state-default {
981 988 background:#4e85bb url("../images/button_highlight.png") repeat-x;
982 989 border-top:1px solid #5c91a4;
983 990 border-left:1px solid #2a6f89;
984 991 border-right:1px solid #2b7089;
985 992 border-bottom:1px solid #1a6480;
986 993 color:#FFF;
987 994 margin:0;
988 995 padding:6px 12px;
989 996 }
990 997
991 998 div.form div.fields div.field div.highlight .ui-state-hover {
992 999 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
993 1000 border-top:1px solid #78acbf;
994 1001 border-left:1px solid #34819e;
995 1002 border-right:1px solid #35829f;
996 1003 border-bottom:1px solid #257897;
997 1004 color:#FFF;
998 1005 margin:0;
999 1006 padding:6px 12px;
1000 1007 }
1001 1008
1002 1009 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-default {
1003 1010 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
1004 1011 border-top:1px solid #5c91a4;
1005 1012 border-left:1px solid #2a6f89;
1006 1013 border-right:1px solid #2b7089;
1007 1014 border-bottom:1px solid #1a6480;
1008 1015 color:#fff;
1009 1016 margin:0;
1010 1017 padding:6px 12px;
1011 1018 }
1012 1019
1013 1020 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-hover {
1014 1021 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
1015 1022 border-top:1px solid #78acbf;
1016 1023 border-left:1px solid #34819e;
1017 1024 border-right:1px solid #35829f;
1018 1025 border-bottom:1px solid #257897;
1019 1026 color:#fff;
1020 1027 margin:0;
1021 1028 padding:6px 12px;
1022 1029 }
1023 1030
1024 1031 #content div.box table {
1025 1032 width:100%;
1026 1033 border-collapse:collapse;
1027 1034 margin:0;
1028 1035 padding:0;
1029 1036 }
1030 1037
1031 1038 #content div.box table th {
1032 1039 background:#eee;
1033 1040 border-bottom:1px solid #ddd;
1034 1041 padding:5px 0px 5px 5px;
1035 1042 }
1036 1043
1037 1044 #content div.box table th.left {
1038 1045 text-align:left;
1039 1046 }
1040 1047
1041 1048 #content div.box table th.right {
1042 1049 text-align:right;
1043 1050 }
1044 1051
1045 1052 #content div.box table th.center {
1046 1053 text-align:center;
1047 1054 }
1048 1055
1049 1056 #content div.box table th.selected {
1050 1057 vertical-align:middle;
1051 1058 padding:0;
1052 1059 }
1053 1060
1054 1061 #content div.box table td {
1055 1062 background:#fff;
1056 1063 border-bottom:1px solid #cdcdcd;
1057 1064 vertical-align:middle;
1058 1065 padding:5px;
1059 1066 }
1060 1067
1061 1068 #content div.box table tr.selected td {
1062 1069 background:#FFC;
1063 1070 }
1064 1071
1065 1072 #content div.box table td.selected {
1066 1073 width:3%;
1067 1074 text-align:center;
1068 1075 vertical-align:middle;
1069 1076 padding:0;
1070 1077 }
1071 1078
1072 1079 #content div.box table td.action {
1073 1080 width:45%;
1074 1081 text-align:left;
1075 1082 }
1076 1083
1077 1084 #content div.box table td.date {
1078 1085 width:33%;
1079 1086 text-align:center;
1080 1087 }
1081 1088
1082 1089 #content div.box div.action {
1083 1090 float:right;
1084 1091 background:#FFF;
1085 1092 text-align:right;
1086 1093 margin:10px 0 0;
1087 1094 padding:0;
1088 1095 }
1089 1096
1090 1097 #content div.box div.action select {
1091 1098 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1092 1099 font-size:11px;
1093 1100 margin:0;
1094 1101 }
1095 1102
1096 1103 #content div.box div.action .ui-selectmenu {
1097 1104 margin:0;
1098 1105 padding:0;
1099 1106 }
1100 1107
1101 1108 #content div.box div.pagination {
1102 1109 height:1%;
1103 1110 clear:both;
1104 1111 overflow:hidden;
1105 1112 margin:10px 0 0;
1106 1113 padding:0;
1107 1114 }
1108 1115
1109 1116 #content div.box div.pagination ul.pager {
1110 1117 float:right;
1111 1118 text-align:right;
1112 1119 margin:0;
1113 1120 padding:0;
1114 1121 }
1115 1122
1116 1123 #content div.box div.pagination ul.pager li {
1117 1124 height:1%;
1118 1125 float:left;
1119 1126 list-style:none;
1120 1127 background:#ebebeb url("../images/pager.png") repeat-x;
1121 1128 border-top:1px solid #dedede;
1122 1129 border-left:1px solid #cfcfcf;
1123 1130 border-right:1px solid #c4c4c4;
1124 1131 border-bottom:1px solid #c4c4c4;
1125 1132 color:#4A4A4A;
1126 1133 font-weight:700;
1127 1134 margin:0 0 0 4px;
1128 1135 padding:0;
1129 1136 }
1130 1137
1131 1138 #content div.box div.pagination ul.pager li.separator {
1132 1139 padding:6px;
1133 1140 }
1134 1141
1135 1142 #content div.box div.pagination ul.pager li.current {
1136 1143 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1137 1144 border-top:1px solid #ccc;
1138 1145 border-left:1px solid #bebebe;
1139 1146 border-right:1px solid #b1b1b1;
1140 1147 border-bottom:1px solid #afafaf;
1141 1148 color:#515151;
1142 1149 padding:6px;
1143 1150 }
1144 1151
1145 1152 #content div.box div.pagination ul.pager li a {
1146 1153 height:1%;
1147 1154 display:block;
1148 1155 float:left;
1149 1156 color:#515151;
1150 1157 text-decoration:none;
1151 1158 margin:0;
1152 1159 padding:6px;
1153 1160 }
1154 1161
1155 1162 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1156 1163 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1157 1164 border-top:1px solid #ccc;
1158 1165 border-left:1px solid #bebebe;
1159 1166 border-right:1px solid #b1b1b1;
1160 1167 border-bottom:1px solid #afafaf;
1161 1168 margin:-1px;
1162 1169 }
1163 1170
1164 1171 #content div.box div.pagination-wh {
1165 1172 height:1%;
1166 1173 clear:both;
1167 1174 overflow:hidden;
1168 1175 text-align:right;
1169 1176 margin:10px 0 0;
1170 1177 padding:0;
1171 1178 }
1172 1179
1173 1180 #content div.box div.pagination-right {
1174 1181 float:right;
1175 1182 }
1176 1183
1177 1184 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1178 1185 height:1%;
1179 1186 float:left;
1180 1187 background:#ebebeb url("../images/pager.png") repeat-x;
1181 1188 border-top:1px solid #dedede;
1182 1189 border-left:1px solid #cfcfcf;
1183 1190 border-right:1px solid #c4c4c4;
1184 1191 border-bottom:1px solid #c4c4c4;
1185 1192 color:#4A4A4A;
1186 1193 font-weight:700;
1187 1194 margin:0 0 0 4px;
1188 1195 padding:6px;
1189 1196 }
1190 1197
1191 1198 #content div.box div.pagination-wh span.pager_curpage {
1192 1199 height:1%;
1193 1200 float:left;
1194 1201 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1195 1202 border-top:1px solid #ccc;
1196 1203 border-left:1px solid #bebebe;
1197 1204 border-right:1px solid #b1b1b1;
1198 1205 border-bottom:1px solid #afafaf;
1199 1206 color:#515151;
1200 1207 font-weight:700;
1201 1208 margin:0 0 0 4px;
1202 1209 padding:6px;
1203 1210 }
1204 1211
1205 1212 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1206 1213 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1207 1214 border-top:1px solid #ccc;
1208 1215 border-left:1px solid #bebebe;
1209 1216 border-right:1px solid #b1b1b1;
1210 1217 border-bottom:1px solid #afafaf;
1211 1218 text-decoration:none;
1212 1219 }
1213 1220
1214 1221 #content div.box div.traffic div.legend {
1215 1222 clear:both;
1216 1223 overflow:hidden;
1217 1224 border-bottom:1px solid #ddd;
1218 1225 margin:0 0 10px;
1219 1226 padding:0 0 10px;
1220 1227 }
1221 1228
1222 1229 #content div.box div.traffic div.legend h6 {
1223 1230 float:left;
1224 1231 border:none;
1225 1232 margin:0;
1226 1233 padding:0;
1227 1234 }
1228 1235
1229 1236 #content div.box div.traffic div.legend li {
1230 1237 list-style:none;
1231 1238 float:left;
1232 1239 font-size:11px;
1233 1240 margin:0;
1234 1241 padding:0 8px 0 4px;
1235 1242 }
1236 1243
1237 1244 #content div.box div.traffic div.legend li.visits {
1238 1245 border-left:12px solid #edc240;
1239 1246 }
1240 1247
1241 1248 #content div.box div.traffic div.legend li.pageviews {
1242 1249 border-left:12px solid #afd8f8;
1243 1250 }
1244 1251
1245 1252 #content div.box div.traffic table {
1246 1253 width:auto;
1247 1254 }
1248 1255
1249 1256 #content div.box div.traffic table td {
1250 1257 background:transparent;
1251 1258 border:none;
1252 1259 padding:2px 3px 3px;
1253 1260 }
1254 1261
1255 1262 #content div.box div.traffic table td.legendLabel {
1256 1263 padding:0 3px 2px;
1257 1264 }
1258 1265
1259 1266 #footer {
1260 1267 clear:both;
1261 1268 overflow:hidden;
1262 1269 text-align:right;
1263 1270 margin:0;
1264 1271 padding:0 30px 4px;
1265 1272 margin:-10px 0 0;
1266 1273 }
1267 1274
1268 1275 #footer div#footer-inner {
1269 1276 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1270 1277 border-top:2px solid #FFFFFF;
1271 1278 }
1272 1279
1273 1280 #footer div#footer-inner p {
1274 1281 padding:15px 25px 15px 0;
1275 1282 color:#FFF;
1276 1283 font-weight:700;
1277 1284 }
1278 1285 #footer div#footer-inner .footer-link {
1279 1286 float:left;
1280 1287 padding-left:10px;
1281 1288 }
1282 1289 #footer div#footer-inner .footer-link a {
1283 1290 color:#FFF;
1284 1291 }
1285 1292
1286 1293 #login div.title {
1287 1294 width:420px;
1288 1295 clear:both;
1289 1296 overflow:hidden;
1290 1297 position:relative;
1291 1298 background:#003367 url("../../images/header_inner.png") repeat-x;
1292 1299 margin:0 auto;
1293 1300 padding:0;
1294 1301 }
1295 1302
1296 1303 #login div.inner {
1297 1304 width:380px;
1298 1305 background:#FFF url("../images/login.png") no-repeat top left;
1299 1306 border-top:none;
1300 1307 border-bottom:none;
1301 1308 margin:0 auto;
1302 1309 padding:20px;
1303 1310 }
1304 1311
1305 1312 #login div.form div.fields div.field div.label {
1306 1313 width:173px;
1307 1314 float:left;
1308 1315 text-align:right;
1309 1316 margin:2px 10px 0 0;
1310 1317 padding:5px 0 0 5px;
1311 1318 }
1312 1319
1313 1320 #login div.form div.fields div.field div.input input {
1314 1321 width:176px;
1315 1322 background:#FFF;
1316 1323 border-top:1px solid #b3b3b3;
1317 1324 border-left:1px solid #b3b3b3;
1318 1325 border-right:1px solid #eaeaea;
1319 1326 border-bottom:1px solid #eaeaea;
1320 1327 color:#000;
1321 1328 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1322 1329 font-size:11px;
1323 1330 margin:0;
1324 1331 padding:7px 7px 6px;
1325 1332 }
1326 1333
1327 1334 #login div.form div.fields div.buttons {
1328 1335 clear:both;
1329 1336 overflow:hidden;
1330 1337 border-top:1px solid #DDD;
1331 1338 text-align:right;
1332 1339 margin:0;
1333 1340 padding:10px 0 0;
1334 1341 }
1335 1342
1336 1343 #login div.form div.links {
1337 1344 clear:both;
1338 1345 overflow:hidden;
1339 1346 margin:10px 0 0;
1340 1347 padding:0 0 2px;
1341 1348 }
1342 1349
1343 1350 #register div.title {
1344 1351 clear:both;
1345 1352 overflow:hidden;
1346 1353 position:relative;
1347 1354 background:#003367 url("../images/header_inner.png") repeat-x;
1348 1355 margin:0 auto;
1349 1356 padding:0;
1350 1357 }
1351 1358
1352 1359 #register div.inner {
1353 1360 background:#FFF;
1354 1361 border-top:none;
1355 1362 border-bottom:none;
1356 1363 margin:0 auto;
1357 1364 padding:20px;
1358 1365 }
1359 1366
1360 1367 #register div.form div.fields div.field div.label {
1361 1368 width:135px;
1362 1369 float:left;
1363 1370 text-align:right;
1364 1371 margin:2px 10px 0 0;
1365 1372 padding:5px 0 0 5px;
1366 1373 }
1367 1374
1368 1375 #register div.form div.fields div.field div.input input {
1369 1376 width:300px;
1370 1377 background:#FFF;
1371 1378 border-top:1px solid #b3b3b3;
1372 1379 border-left:1px solid #b3b3b3;
1373 1380 border-right:1px solid #eaeaea;
1374 1381 border-bottom:1px solid #eaeaea;
1375 1382 color:#000;
1376 1383 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1377 1384 font-size:11px;
1378 1385 margin:0;
1379 1386 padding:7px 7px 6px;
1380 1387 }
1381 1388
1382 1389 #register div.form div.fields div.buttons {
1383 1390 clear:both;
1384 1391 overflow:hidden;
1385 1392 border-top:1px solid #DDD;
1386 1393 text-align:left;
1387 1394 margin:0;
1388 1395 padding:10px 0 0 114px;
1389 1396 }
1390 1397
1391 1398 #register div.form div.fields div.buttons div.highlight input.ui-state-default {
1392 1399 background:url("../images/button_highlight.png") repeat-x scroll 0 0 #4E85BB;
1393 1400 color:#FFF;
1394 1401 border-color:#5C91A4 #2B7089 #1A6480 #2A6F89;
1395 1402 border-style:solid;
1396 1403 border-width:1px;
1397 1404 }
1398 1405
1399 1406 #register div.form div.activation_msg {
1400 1407 padding-top:4px;
1401 1408 padding-bottom:4px;
1402 1409 }
1403 1410
1404 1411 .trending_language_tbl,.trending_language_tbl td {
1405 1412 border:0 !important;
1406 1413 margin:0 !important;
1407 1414 padding:0 !important;
1408 1415 }
1409 1416
1410 1417 .trending_language {
1411 1418 background-color:#003367;
1412 1419 color:#FFF;
1413 1420 display:block;
1414 1421 min-width:20px;
1415 1422 text-decoration:none;
1416 1423 height:12px;
1417 1424 margin-bottom:4px;
1418 1425 margin-left:5px;
1419 1426 white-space:pre;
1420 1427 padding:3px;
1421 1428 }
1422 1429
1423 1430 h3.files_location {
1424 1431 font-size:1.8em;
1425 1432 font-weight:700;
1426 1433 border-bottom:none !important;
1427 1434 margin:10px 0 !important;
1428 1435 }
1429 1436
1430 1437 #files_data dl dt {
1431 1438 float:left;
1432 1439 width:115px;
1433 1440 margin:0 !important;
1434 1441 padding:5px;
1435 1442 }
1436 1443
1437 1444 #files_data dl dd {
1438 1445 margin:0 !important;
1439 1446 padding:5px !important;
1440 1447 }
1441 1448
1442 1449 #changeset_content {
1443 1450 border:1px solid #CCC;
1444 1451 padding:5px;
1445 1452 }
1446 1453
1447 1454 #changeset_content .container {
1448 1455 min-height:120px;
1449 1456 font-size:1.2em;
1450 1457 overflow:hidden;
1451 1458 }
1452 1459
1453 1460 #changeset_content .container .right {
1454 1461 float:right;
1455 1462 width:25%;
1456 1463 text-align:right;
1457 1464 }
1458 1465
1459 1466 #changeset_content .container .left .message {
1460 1467 font-style:italic;
1461 1468 color:#556CB5;
1462 1469 white-space:pre-wrap;
1463 1470 }
1464 1471
1465 1472 .cs_files .cs_added {
1466 1473 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1467 1474 height:16px;
1468 1475 padding-left:20px;
1469 1476 margin-top:7px;
1470 1477 text-align:left;
1471 1478 }
1472 1479
1473 1480 .cs_files .cs_changed {
1474 1481 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1475 1482 height:16px;
1476 1483 padding-left:20px;
1477 1484 margin-top:7px;
1478 1485 text-align:left;
1479 1486 }
1480 1487
1481 1488 .cs_files .cs_removed {
1482 1489 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1483 1490 height:16px;
1484 1491 padding-left:20px;
1485 1492 margin-top:7px;
1486 1493 text-align:left;
1487 1494 }
1488 1495
1489 1496 #graph {
1490 1497 overflow:hidden;
1491 1498 }
1492 1499
1493 1500 #graph_nodes {
1494 1501 width:160px;
1495 1502 float:left;
1496 1503 margin-left:-50px;
1497 1504 margin-top:5px;
1498 1505 }
1499 1506
1500 1507 #graph_content {
1501 1508 width:800px;
1502 1509 float:left;
1503 1510 }
1504 1511
1505 1512 #graph_content .container_header {
1506 1513 border:1px solid #CCC;
1507 1514 padding:10px;
1508 1515 }
1509 1516
1510 1517 #graph_content .container {
1511 1518 border-bottom:1px solid #CCC;
1512 1519 border-left:1px solid #CCC;
1513 1520 border-right:1px solid #CCC;
1514 1521 min-height:80px;
1515 1522 overflow:hidden;
1516 1523 font-size:1.2em;
1517 1524 }
1518 1525
1519 1526 #graph_content .container .right {
1520 1527 float:right;
1521 1528 width:28%;
1522 1529 text-align:right;
1523 1530 padding-bottom:5px;
1524 1531 }
1525 1532
1526 1533 #graph_content .container .left .date {
1527 1534 font-weight:700;
1528 1535 padding-bottom:5px;
1529 1536 }
1530 1537
1531 1538 #graph_content .container .left .message {
1532 1539 font-size:100%;
1533 1540 padding-top:3px;
1534 1541 white-space:pre-wrap;
1535 1542 }
1536 1543
1537 1544 .right div {
1538 1545 clear:both;
1539 1546 }
1540 1547
1541 1548 .right .changes .added,.changed,.removed {
1542 1549 border:1px solid #DDD;
1543 1550 display:block;
1544 1551 float:right;
1545 1552 text-align:center;
1546 1553 min-width:15px;
1547 1554 }
1548 1555
1549 1556 .right .changes .added {
1550 1557 background:#BFB;
1551 1558 }
1552 1559
1553 1560 .right .changes .changed {
1554 1561 background:#FD8;
1555 1562 }
1556 1563
1557 1564 .right .changes .removed {
1558 1565 background:#F88;
1559 1566 }
1560 1567
1561 1568 .right .merge {
1562 1569 vertical-align:top;
1563 1570 font-size:0.75em;
1564 1571 font-weight:700;
1565 1572 }
1566 1573
1567 1574 .right .parent {
1568 1575 font-size:90%;
1569 1576 font-family:monospace;
1570 1577 }
1571 1578
1572 1579 .right .logtags .branchtag {
1573 1580 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1574 1581 display:block;
1575 1582 font-size:0.8em;
1576 1583 padding:11px 16px 0 0;
1577 1584 }
1578 1585
1579 1586 .right .logtags .tagtag {
1580 1587 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1581 1588 display:block;
1582 1589 font-size:0.8em;
1583 1590 padding:11px 16px 0 0;
1584 1591 }
1585 1592
1586 1593 div.browserblock {
1587 1594 overflow:hidden;
1588 1595 border:1px solid #ccc;
1589 1596 background:#f8f8f8;
1590 1597 font-size:100%;
1591 1598 line-height:125%;
1592 1599 padding:0;
1593 1600 }
1594 1601
1595 1602 div.browserblock .browser-header {
1596 1603 border-bottom:1px solid #CCC;
1597 1604 background:#FFF;
1598 1605 color:blue;
1599 1606 padding:10px 0;
1600 1607 }
1601 1608
1602 1609 div.browserblock .browser-header span {
1603 1610 margin-left:25px;
1604 1611 font-weight:700;
1605 1612 }
1606 1613
1607 1614 div.browserblock .browser-body {
1608 1615 background:#EEE;
1609 1616 }
1610 1617
1611 1618 table.code-browser {
1612 1619 border-collapse:collapse;
1613 1620 width:100%;
1614 1621 }
1615 1622
1616 1623 table.code-browser tr {
1617 1624 margin:3px;
1618 1625 }
1619 1626
1620 1627 table.code-browser thead th {
1621 1628 background-color:#EEE;
1622 1629 height:20px;
1623 1630 font-size:1.1em;
1624 1631 font-weight:700;
1625 1632 text-align:left;
1626 1633 padding-left:10px;
1627 1634 }
1628 1635
1629 1636 table.code-browser tbody td {
1630 1637 padding-left:10px;
1631 1638 height:20px;
1632 1639 }
1633 1640
1634 1641 table.code-browser .browser-file {
1635 1642 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1636 1643 height:16px;
1637 1644 padding-left:20px;
1638 1645 text-align:left;
1639 1646 }
1640 1647
1641 1648 table.code-browser .browser-dir {
1642 1649 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1643 1650 height:16px;
1644 1651 padding-left:20px;
1645 1652 text-align:left;
1646 1653 }
1647 1654
1648 1655 .box .search {
1649 1656 clear:both;
1650 1657 overflow:hidden;
1651 1658 margin:0;
1652 1659 padding:0 20px 10px;
1653 1660 }
1654 1661
1655 1662 .box .search div.search_path {
1656 1663 background:none repeat scroll 0 0 #EEE;
1657 1664 border:1px solid #CCC;
1658 1665 color:blue;
1659 1666 margin-bottom:10px;
1660 1667 padding:10px 0;
1661 1668 }
1662 1669
1663 1670 .box .search div.search_path div.link {
1664 1671 font-weight:700;
1665 1672 margin-left:25px;
1666 1673 }
1667 1674
1668 1675 .box .search div.search_path div.link a {
1669 1676 color:#003367;
1670 1677 cursor:pointer;
1671 1678 text-decoration:none;
1672 1679 }
1673 1680
1674 1681 #path_unlock {
1675 1682 color:red;
1676 1683 font-size:1.2em;
1677 1684 padding-left:4px;
1678 1685 }
1679 1686
1680 1687 .info_box * {
1681 1688 background:url("../../images/pager.png") repeat-x scroll 0 0 #EBEBEB;
1682 1689 color:#4A4A4A;
1683 1690 font-weight:700;
1684 1691 height:1%;
1685 1692 display:inline;
1686 1693 border-color:#DEDEDE #C4C4C4 #C4C4C4 #CFCFCF;
1687 1694 border-style:solid;
1688 1695 border-width:1px;
1689 1696 padding:4px 6px;
1690 1697 }
1691 1698
1692 1699 .info_box span {
1693 1700 margin-left:3px;
1694 1701 margin-right:3px;
1695 1702 }
1696 1703
1697 1704 .info_box input#at_rev {
1698 1705 text-align:center;
1699 1706 padding:5px 3px 3px 2px;
1700 1707 }
1701 1708
1702 1709 .info_box input#view {
1703 1710 text-align:center;
1704 1711 padding:4px 3px 2px 2px;
1705 1712 }
1706 1713
1707 1714 .yui-overlay,.yui-panel-container {
1708 1715 visibility:hidden;
1709 1716 position:absolute;
1710 1717 z-index:2;
1711 1718 }
1712 1719
1713 1720 .yui-tt {
1714 1721 visibility:hidden;
1715 1722 position:absolute;
1716 1723 color:#666;
1717 1724 background-color:#FFF;
1718 1725 font-family:arial, helvetica, verdana, sans-serif;
1719 1726 border:2px solid #003367;
1720 1727 font:100% sans-serif;
1721 1728 width:auto;
1722 1729 opacity:1px;
1723 1730 padding:8px;
1724 1731 white-space: pre;
1725 1732 }
1726 1733
1727 1734 .ac {
1728 1735 vertical-align:top;
1729 1736 }
1730 1737
1731 1738 .ac .yui-ac {
1732 1739 position:relative;
1733 1740 font-family:arial;
1734 1741 font-size:100%;
1735 1742 }
1736 1743
1737 1744 .ac .perm_ac {
1738 1745 width:15em;
1739 1746 }
1740 1747
1741 1748 .ac .yui-ac-input {
1742 1749 width:100%;
1743 1750 }
1744 1751
1745 1752 .ac .yui-ac-container {
1746 1753 position:absolute;
1747 1754 top:1.6em;
1748 1755 width:100%;
1749 1756 }
1750 1757
1751 1758 .ac .yui-ac-content {
1752 1759 position:absolute;
1753 1760 width:100%;
1754 1761 border:1px solid gray;
1755 1762 background:#fff;
1756 1763 overflow:hidden;
1757 1764 z-index:9050;
1758 1765 }
1759 1766
1760 1767 .ac .yui-ac-shadow {
1761 1768 position:absolute;
1762 1769 width:100%;
1763 1770 background:#000;
1764 1771 -moz-opacity:0.1px;
1765 1772 opacity:.10;
1766 1773 filter:alpha(opacity = 10);
1767 1774 z-index:9049;
1768 1775 margin:.3em;
1769 1776 }
1770 1777
1771 1778 .ac .yui-ac-content ul {
1772 1779 width:100%;
1773 1780 margin:0;
1774 1781 padding:0;
1775 1782 }
1776 1783
1777 1784 .ac .yui-ac-content li {
1778 1785 cursor:default;
1779 1786 white-space:nowrap;
1780 1787 margin:0;
1781 1788 padding:2px 5px;
1782 1789 }
1783 1790
1784 1791 .ac .yui-ac-content li.yui-ac-prehighlight {
1785 1792 background:#B3D4FF;
1786 1793 }
1787 1794
1788 1795 .ac .yui-ac-content li.yui-ac-highlight {
1789 1796 background:#556CB5;
1790 1797 color:#FFF;
1791 1798 }
1792 1799
1793 1800 .follow{
1794 1801 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
1795 1802 height: 16px;
1796 1803 width: 20px;
1797 1804 cursor: pointer;
1798 1805 display: block;
1799 1806 float: right;
1800 1807 margin-top: 2px;
1801 1808 }
1802 1809
1803 1810 .following{
1804 1811 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
1805 1812 height: 16px;
1806 1813 width: 20px;
1807 1814 cursor: pointer;
1808 1815 display: block;
1809 1816 float: right;
1810 1817 margin-top: 2px;
1811 1818 }
1812 1819
1813 1820 .currently_following{
1814 1821
1815 1822 padding-left: 10px;
1816 1823 padding-bottom:5px;
1817 1824
1818 1825 }
1819 1826
1820 1827
1821 1828
1822 1829 .add_icon {
1823 1830 background:url("../images/icons/add.png") no-repeat scroll 3px;
1824 1831 height:16px;
1825 1832 padding-left:20px;
1826 1833 padding-top:1px;
1827 1834 text-align:left;
1828 1835 }
1829 1836
1830 1837 .edit_icon {
1831 1838 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
1832 1839 height:16px;
1833 1840 padding-left:20px;
1834 1841 padding-top:1px;
1835 1842 text-align:left;
1836 1843 }
1837 1844
1838 1845 .delete_icon {
1839 1846 background:url("../images/icons/delete.png") no-repeat scroll 3px;
1840 1847 height:16px;
1841 1848 padding-left:20px;
1842 1849 padding-top:1px;
1843 1850 text-align:left;
1844 1851 }
1845 1852
1846 1853 .refresh_icon {
1847 1854 background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
1848 1855 height:16px;
1849 1856 padding-left:20px;
1850 1857 padding-top:1px;
1851 1858 text-align:left;
1852 1859 }
1853 1860
1854 1861 .rss_icon {
1855 1862 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
1856 1863 height:16px;
1857 1864 padding-left:20px;
1858 1865 padding-top:1px;
1859 1866 text-align:left;
1860 1867 }
1861 1868
1862 1869 .atom_icon {
1863 1870 background:url("../images/icons/atom.png") no-repeat scroll 3px;
1864 1871 height:16px;
1865 1872 padding-left:20px;
1866 1873 padding-top:1px;
1867 1874 text-align:left;
1868 1875 }
1869 1876
1870 1877 .archive_icon {
1871 1878 background:url("../images/icons/compress.png") no-repeat scroll 3px;
1872 1879 height:16px;
1873 1880 padding-left:20px;
1874 1881 text-align:left;
1875 1882 padding-top:1px;
1876 1883 }
1877 1884
1878 1885 .action_button {
1879 1886 border:0;
1880 1887 display:block;
1881 1888 }
1882 1889
1883 1890 .action_button:hover {
1884 1891 border:0;
1885 1892 text-decoration:underline;
1886 1893 cursor:pointer;
1887 1894 }
1888 1895
1889 1896 #switch_repos {
1890 1897 position:absolute;
1891 1898 height:25px;
1892 1899 z-index:1;
1893 1900 }
1894 1901
1895 1902 #switch_repos select {
1896 1903 min-width:150px;
1897 1904 max-height:250px;
1898 1905 z-index:1;
1899 1906 }
1900 1907
1901 1908 .breadcrumbs {
1902 1909 border:medium none;
1903 1910 color:#FFF;
1904 1911 float:left;
1905 1912 text-transform:uppercase;
1906 1913 font-weight:700;
1907 1914 font-size:14px;
1908 1915 margin:0;
1909 1916 padding:11px 0 11px 10px;
1910 1917 }
1911 1918
1912 1919 .breadcrumbs a {
1913 1920 color:#FFF;
1914 1921 }
1915 1922
1916 1923 .flash_msg ul {
1917 1924 margin:0;
1918 1925 padding:0 0 10px;
1919 1926 }
1920 1927
1921 1928 .error_msg {
1922 1929 background-color:#FFCFCF;
1923 1930 background-image:url("../../images/icons/error_msg.png");
1924 1931 border:1px solid #FF9595;
1925 1932 color:#C30;
1926 1933 }
1927 1934
1928 1935 .warning_msg {
1929 1936 background-color:#FFFBCC;
1930 1937 background-image:url("../../images/icons/warning_msg.png");
1931 1938 border:1px solid #FFF35E;
1932 1939 color:#C69E00;
1933 1940 }
1934 1941
1935 1942 .success_msg {
1936 1943 background-color:#D5FFCF;
1937 1944 background-image:url("../../images/icons/success_msg.png");
1938 1945 border:1px solid #97FF88;
1939 1946 color:#090;
1940 1947 }
1941 1948
1942 1949 .notice_msg {
1943 1950 background-color:#DCE3FF;
1944 1951 background-image:url("../../images/icons/notice_msg.png");
1945 1952 border:1px solid #93A8FF;
1946 1953 color:#556CB5;
1947 1954 }
1948 1955
1949 1956 .success_msg,.error_msg,.notice_msg,.warning_msg {
1950 1957 background-position:10px center;
1951 1958 background-repeat:no-repeat;
1952 1959 font-size:12px;
1953 1960 font-weight:700;
1954 1961 min-height:14px;
1955 1962 line-height:14px;
1956 1963 margin-bottom:0;
1957 1964 margin-top:0;
1958 1965 display:block;
1959 1966 overflow:auto;
1960 1967 padding:6px 10px 6px 40px;
1961 1968 }
1962 1969
1963 1970 #msg_close {
1964 1971 background:transparent url("../../icons/cross_grey_small.png") no-repeat scroll 0 0;
1965 1972 cursor:pointer;
1966 1973 height:16px;
1967 1974 position:absolute;
1968 1975 right:5px;
1969 1976 top:5px;
1970 1977 width:16px;
1971 1978 }
1972 1979
1973 1980 div#legend_container table,div#legend_choices table {
1974 1981 width:auto !important;
1975 1982 }
1976 1983
1977 1984 table#permissions_manage {
1978 1985 width:0 !important;
1979 1986 }
1980 1987
1981 1988 table#permissions_manage span.private_repo_msg {
1982 1989 font-size:0.8em;
1983 1990 opacity:0.6px;
1984 1991 }
1985 1992
1986 1993 table#permissions_manage td.private_repo_msg {
1987 1994 font-size:0.8em;
1988 1995 }
1989 1996
1990 1997 table#permissions_manage tr#add_perm_input td {
1991 1998 vertical-align:middle;
1992 1999 }
1993 2000
1994 2001 div.gravatar {
1995 2002 background-color:#FFF;
1996 2003 border:1px solid #D0D0D0;
1997 2004 float:left;
1998 2005 margin-right:0.7em;
1999 2006 padding:2px 2px 0;
2000 2007 }
2001 2008
2002 2009 #header,#content,#footer {
2003 2010 min-width:1024px;
2004 2011 }
2005 2012
2006 2013 #content {
2007 2014 min-height:100%;
2008 2015 clear:both;
2009 2016 overflow:hidden;
2010 2017 padding:14px 30px;
2011 2018 }
2012 2019
2013 2020 #content div.box div.title div.search {
2014 2021 background:url("../../images/title_link.png") no-repeat top left;
2015 2022 border-left:1px solid #316293;
2016 2023 }
2017 2024
2018 2025 #content div.box div.title div.search div.input input {
2019 2026 border:1px solid #316293;
2020 2027 }
2021 2028
2022 2029 #content div.box div.title div.search div.button input.ui-state-default {
2023 2030 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
2024 2031 border:1px solid #316293;
2025 2032 border-left:none;
2026 2033 color:#FFF;
2027 2034 }
2028 2035
2029 2036 #content div.box div.title div.search div.button input.ui-state-hover {
2030 2037 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
2031 2038 border:1px solid #316293;
2032 2039 border-left:none;
2033 2040 color:#FFF;
2034 2041 }
2035 2042
2036 2043 #content div.box div.form div.fields div.field div.highlight .ui-state-default {
2037 2044 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
2038 2045 border-top:1px solid #5c91a4;
2039 2046 border-left:1px solid #2a6f89;
2040 2047 border-right:1px solid #2b7089;
2041 2048 border-bottom:1px solid #1a6480;
2042 2049 color:#fff;
2043 2050 }
2044 2051
2045 2052 #content div.box div.form div.fields div.field div.highlight .ui-state-hover {
2046 2053 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
2047 2054 border-top:1px solid #78acbf;
2048 2055 border-left:1px solid #34819e;
2049 2056 border-right:1px solid #35829f;
2050 2057 border-bottom:1px solid #257897;
2051 2058 color:#fff;
2052 2059 }
2053 2060
2054 2061 ins,div.options a:hover {
2055 2062 text-decoration:none;
2056 2063 }
2057 2064
2058 2065 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 {
2059 2066 border:none;
2060 2067 }
2061 2068
2062 2069 img.icon,.right .merge img {
2063 2070 vertical-align:bottom;
2064 2071 }
2065 2072
2066 2073 #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 {
2067 2074 float:right;
2068 2075 margin:0;
2069 2076 padding:0;
2070 2077 }
2071 2078
2072 2079 #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 {
2073 2080 float:left;
2074 2081 }
2075 2082
2076 2083 #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 {
2077 2084 display:none;
2078 2085 }
2079 2086
2080 2087 #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 {
2081 2088 display:block;
2082 2089 }
2083 2090
2084 2091 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2085 2092 color:#bfe3ff;
2086 2093 }
2087 2094
2088 2095 #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 {
2089 2096 margin:10px 24px 10px 44px;
2090 2097 }
2091 2098
2092 2099 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2093 2100 clear:both;
2094 2101 overflow:hidden;
2095 2102 margin:0;
2096 2103 padding:0 20px 10px;
2097 2104 }
2098 2105
2099 2106 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2100 2107 clear:both;
2101 2108 overflow:hidden;
2102 2109 margin:0;
2103 2110 padding:0;
2104 2111 }
2105 2112
2106 2113 #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 {
2107 2114 height:1%;
2108 2115 display:block;
2109 2116 color:#363636;
2110 2117 margin:0;
2111 2118 padding:2px 0 0;
2112 2119 }
2113 2120
2114 2121 #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 {
2115 2122 background:#FBE3E4;
2116 2123 border-top:1px solid #e1b2b3;
2117 2124 border-left:1px solid #e1b2b3;
2118 2125 border-right:1px solid #FBC2C4;
2119 2126 border-bottom:1px solid #FBC2C4;
2120 2127 }
2121 2128
2122 2129 #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 {
2123 2130 background:#E6EFC2;
2124 2131 border-top:1px solid #cebb98;
2125 2132 border-left:1px solid #cebb98;
2126 2133 border-right:1px solid #c6d880;
2127 2134 border-bottom:1px solid #c6d880;
2128 2135 }
2129 2136
2130 2137 #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 {
2131 2138 margin:0;
2132 2139 }
2133 2140
2134 2141 #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{
2135 2142 margin:0 0 0 0px !important;
2136 2143 padding:0;
2137 2144 }
2138 2145
2139 2146 #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 {
2140 2147 margin:0 0 0 200px;
2141 2148 padding:0;
2142 2149 }
2143 2150
2144 2151
2145 2152 #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 {
2146 2153 color:#000;
2147 2154 text-decoration:none;
2148 2155 }
2149 2156
2150 2157 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2151 2158 border:1px solid #666;
2152 2159 }
2153 2160
2154 2161 #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 {
2155 2162 clear:both;
2156 2163 overflow:hidden;
2157 2164 margin:0;
2158 2165 padding:8px 0 2px;
2159 2166 }
2160 2167
2161 2168 #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 {
2162 2169 float:left;
2163 2170 margin:0;
2164 2171 }
2165 2172
2166 2173 #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 {
2167 2174 height:1%;
2168 2175 display:block;
2169 2176 float:left;
2170 2177 margin:2px 0 0 4px;
2171 2178 }
2172 2179
2173 2180 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 {
2174 2181 color:#000;
2175 2182 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2176 2183 font-size:11px;
2177 2184 font-weight:700;
2178 2185 margin:0;
2179 2186 }
2180 2187
2181 2188 div.form div.fields div.field div.button .ui-state-default,#content div.box div.form div.fields div.buttons input.ui-state-default {
2182 2189 background:#e5e3e3 url("../images/button.png") repeat-x;
2183 2190 border-top:1px solid #DDD;
2184 2191 border-left:1px solid #c6c6c6;
2185 2192 border-right:1px solid #DDD;
2186 2193 border-bottom:1px solid #c6c6c6;
2187 2194 color:#515151;
2188 2195 outline:none;
2189 2196 margin:0;
2190 2197 padding:6px 12px;
2191 2198 }
2192 2199
2193 2200 div.form div.fields div.field div.button .ui-state-hover,#content div.box div.form div.fields div.buttons input.ui-state-hover {
2194 2201 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2195 2202 border-top:1px solid #ccc;
2196 2203 border-left:1px solid #bebebe;
2197 2204 border-right:1px solid #b1b1b1;
2198 2205 border-bottom:1px solid #afafaf;
2199 2206 color:#515151;
2200 2207 outline:none;
2201 2208 margin:0;
2202 2209 padding:6px 12px;
2203 2210 }
2204 2211
2205 2212 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2206 2213 display:inline;
2207 2214 }
2208 2215
2209 2216 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2210 2217 margin:10px 0 0 200px;
2211 2218 padding:0;
2212 2219 }
2213 2220
2214 2221 #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 {
2215 2222 margin:10px 0 0;
2216 2223 }
2217 2224
2218 2225 #content div.box table td.user,#content div.box table td.address {
2219 2226 width:10%;
2220 2227 text-align:center;
2221 2228 }
2222 2229
2223 2230 #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 {
2224 2231 text-align:right;
2225 2232 margin:6px 0 0;
2226 2233 padding:0;
2227 2234 }
2228 2235
2229 2236 #content div.box div.action div.button input.ui-state-default,#login div.form div.fields div.buttons input.ui-state-default,#register div.form div.fields div.buttons input.ui-state-default {
2230 2237 background:#e5e3e3 url("../images/button.png") repeat-x;
2231 2238 border-top:1px solid #DDD;
2232 2239 border-left:1px solid #c6c6c6;
2233 2240 border-right:1px solid #DDD;
2234 2241 border-bottom:1px solid #c6c6c6;
2235 2242 color:#515151;
2236 2243 margin:0;
2237 2244 padding:6px 12px;
2238 2245 }
2239 2246
2240 2247 #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 {
2241 2248 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2242 2249 border-top:1px solid #ccc;
2243 2250 border-left:1px solid #bebebe;
2244 2251 border-right:1px solid #b1b1b1;
2245 2252 border-bottom:1px solid #afafaf;
2246 2253 color:#515151;
2247 2254 margin:0;
2248 2255 padding:6px 12px;
2249 2256 }
2250 2257
2251 2258 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2252 2259 text-align:left;
2253 2260 float:left;
2254 2261 margin:0;
2255 2262 padding:0;
2256 2263 }
2257 2264
2258 2265 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2259 2266 height:1%;
2260 2267 display:block;
2261 2268 float:left;
2262 2269 background:#ebebeb url("../images/pager.png") repeat-x;
2263 2270 border-top:1px solid #dedede;
2264 2271 border-left:1px solid #cfcfcf;
2265 2272 border-right:1px solid #c4c4c4;
2266 2273 border-bottom:1px solid #c4c4c4;
2267 2274 color:#4A4A4A;
2268 2275 font-weight:700;
2269 2276 margin:0;
2270 2277 padding:6px 8px;
2271 2278 }
2272 2279
2273 2280 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2274 2281 color:#B4B4B4;
2275 2282 padding:6px;
2276 2283 }
2277 2284
2278 2285 #login,#register {
2279 2286 width:520px;
2280 2287 margin:10% auto 0;
2281 2288 padding:0;
2282 2289 }
2283 2290
2284 2291 #login div.color,#register div.color {
2285 2292 clear:both;
2286 2293 overflow:hidden;
2287 2294 background:#FFF;
2288 2295 margin:10px auto 0;
2289 2296 padding:3px 3px 3px 0;
2290 2297 }
2291 2298
2292 2299 #login div.color a,#register div.color a {
2293 2300 width:20px;
2294 2301 height:20px;
2295 2302 display:block;
2296 2303 float:left;
2297 2304 margin:0 0 0 3px;
2298 2305 padding:0;
2299 2306 }
2300 2307
2301 2308 #login div.title h5,#register div.title h5 {
2302 2309 color:#fff;
2303 2310 margin:10px;
2304 2311 padding:0;
2305 2312 }
2306 2313
2307 2314 #login div.form div.fields div.field,#register div.form div.fields div.field {
2308 2315 clear:both;
2309 2316 overflow:hidden;
2310 2317 margin:0;
2311 2318 padding:0 0 10px;
2312 2319 }
2313 2320
2314 2321 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2315 2322 height:1%;
2316 2323 display:block;
2317 2324 color:red;
2318 2325 margin:8px 0 0;
2319 2326 padding:0;
2320 2327 max-width: 320px;
2321 2328 }
2322 2329
2323 2330 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2324 2331 color:#000;
2325 2332 font-weight:700;
2326 2333 }
2327 2334
2328 2335 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2329 2336 float:left;
2330 2337 margin:0;
2331 2338 padding:0;
2332 2339 }
2333 2340
2334 2341 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2335 2342 margin:0 0 0 184px;
2336 2343 padding:0;
2337 2344 }
2338 2345
2339 2346 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2340 2347 color:#565656;
2341 2348 font-weight:700;
2342 2349 }
2343 2350
2344 2351 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2345 2352 color:#000;
2346 2353 font-size:1em;
2347 2354 font-weight:700;
2348 2355 font-family:Verdana, Helvetica, Sans-Serif;
2349 2356 margin:0;
2350 2357 }
2351 2358
2352 2359 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2353 2360 width:600px;
2354 2361 }
2355 2362
2356 2363 #changeset_content .container .left,#graph_content .container .left {
2357 2364 float:left;
2358 2365 width:70%;
2359 2366 padding-left:5px;
2360 2367 }
2361 2368
2362 2369 #changeset_content .container .left .date,.ac .match {
2363 2370 font-weight:700;
2364 2371 padding-top: 5px;
2365 2372 padding-bottom:5px;
2366 2373 }
2367 2374
2368 2375 div#legend_container table td,div#legend_choices table td {
2369 2376 border:none !important;
2370 2377 height:20px !important;
2371 2378 padding:0 !important;
2372 2379 }
2373 2380
2374 2381 #q_filter{
2375 2382 border:0 none;
2376 2383 color:#AAAAAA;
2377 2384 margin-bottom:-4px;
2378 2385 margin-top:-4px;
2379 2386 padding-left:3px;
2380 2387 }
2381 2388
@@ -1,125 +1,84 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="/base/base.html"/>
3 3
4 4 <%def name="title()">
5 5 ${_('Permissions administration')} - ${c.rhodecode_name}
6 6 </%def>
7 7
8 8 <%def name="breadcrumbs_links()">
9 9 ${h.link_to(_('Admin'),h.url('admin_home'))}
10 10 &raquo;
11 11 ${_('Permissions')}
12 12 </%def>
13 13
14 14 <%def name="page_nav()">
15 15 ${self.menu('admin')}
16 16 </%def>
17 17
18 18 <%def name="main()">
19 19 <div class="box">
20 20 <!-- box / title -->
21 21 <div class="title">
22 22 ${self.breadcrumbs()}
23 23 </div>
24 24 <h3>${_('Default permissions')}</h3>
25 25 ${h.form(url('permission', id='default'),method='put')}
26 26 <div class="form">
27 27 <!-- fields -->
28 28 <div class="fields">
29 29 <div class="field">
30 30 <div class="label label-checkbox">
31 31 <label for="anonymous">${_('Anonymous access')}:</label>
32 32 </div>
33 33 <div class="checkboxes">
34 34 <div class="checkbox">
35 35 ${h.checkbox('anonymous',True)}
36 36 </div>
37 37 </div>
38 38 </div>
39 39 <div class="field">
40 40 <div class="label label-select">
41 41 <label for="default_perm">${_('Repository permission')}:</label>
42 42 </div>
43 43 <div class="select">
44 44 ${h.select('default_perm','',c.perms_choices)}
45 45
46 46 ${h.checkbox('overwrite_default','true')}
47 47 <label for="overwrite_default">
48 48 <span class="tooltip"
49 49 tooltip_title="${h.tooltip(_('All default permissions on each repository will be reset to choosen permission, note that all custom default permission on repositories will be lost'))}">
50 50 ${_('overwrite existing settings')}</span> </label>
51 51 </div>
52 52 </div>
53 53 <div class="field">
54 54 <div class="label">
55 55 <label for="default_register">${_('Registration')}:</label>
56 56 </div>
57 57 <div class="select">
58 58 ${h.select('default_register','',c.register_choices)}
59 59 </div>
60 60 </div>
61 61 <div class="field">
62 62 <div class="label">
63 63 <label for="default_create">${_('Repository creation')}:</label>
64 64 </div>
65 65 <div class="select">
66 66 ${h.select('default_create','',c.create_choices)}
67 67 </div>
68 68 </div>
69 69
70 70 <div class="buttons">
71 71 ${h.submit('set','set',class_="ui-button ui-widget ui-state-default ui-corner-all")}
72 72 </div>
73 73 </div>
74 74 </div>
75 75 ${h.end_form()}
76 ##LDAP
77 <h3>${_('LDAP settings')}</h3>
78 ${h.form(url('permissions_ldap',id_iser='default'),method='put')}
79 <div class="form">
80 <div class="fields">
81
82 <div class="field">
83 <div class="label label-checkbox"><label for="ldap_active">${_('Enable ldap')}</label></div>
84 <div class="checkboxes"><div class="checkbox">${h.checkbox('ldap_active',True,class_='small')}</div></div>
85 </div>
86 <div class="field">
87 <div class="label"><label for="ldap_host">${_('Host')}</label></div>
88 <div class="input">${h.text('ldap_host',class_='small')}</div>
89 </div>
90 <div class="field">
91 <div class="label"><label for="ldap_port">${_('Port')}</label></div>
92 <div class="input">${h.text('ldap_port',class_='small')}</div>
93 </div>
94 <div class="field">
95 <div class="label label-checkbox"><label for="ldap_ldaps">${_('Enable LDAPS')}</label></div>
96 <div class="checkboxes"><div class="checkbox">${h.checkbox('ldap_ldaps',True,class_='small')}</div></div>
97 </div>
98 <div class="field">
99 <div class="label"><label for="ldap_dn_user">${_('Account')}</label></div>
100 <div class="input">${h.text('ldap_dn_user',class_='small')}</div>
101 </div>
102 <div class="field">
103 <div class="label"><label for="ldap_dn_pass">${_('Password')}</label></div>
104 <div class="input">${h.password('ldap_dn_pass',class_='small')}</div>
105 </div>
106 <div class="field">
107 <div class="label"><label for="ldap_base_dn">${_('Base DN')}</label></div>
108 <div class="input">${h.text('ldap_base_dn',class_='small')}</div>
109 </div>
110
111 <div class="buttons">
112 ${h.submit('save','Save',class_="ui-button ui-widget ui-state-default ui-corner-all")}
113 </div>
114 </div>
115 </div>
116 ${h.end_form()}
117 76 </div>
118 77 </%def>
119 78
120 79
121 80
122 81
123 82
124 83
125 84
@@ -1,356 +1,354 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 3 <html xmlns="http://www.w3.org/1999/xhtml" id="mainhtml">
4 4 <head>
5 5 <title>${next.title()}</title>
6 6 <link rel="icon" href="/images/icons/database_gear.png" type="image/png" />
7 7 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8 8 <meta name="robots" content="index, nofollow"/>
9 9 <!-- stylesheets -->
10 10 ${self.css()}
11 11 <!-- scripts -->
12 12 ${self.js()}
13 13 </head>
14 14 <body>
15 15 <!-- header -->
16 16 <div id="header">
17 17 <!-- user -->
18 18 <ul id="logged-user">
19 19 <li class="first">
20 20 <div class="gravatar">
21 21 <img alt="gravatar" src="${h.gravatar_url(c.rhodecode_user.email,24)}" />
22 22 </div>
23 23 %if c.rhodecode_user.username == 'default':
24 24 <div class="account">
25 25 ${h.link_to('%s %s'%(c.rhodecode_user.name,c.rhodecode_user.lastname),h.url('#'))}<br/>
26 26 ${h.link_to(c.rhodecode_user.username,h.url('#'))}
27 27 </div>
28 28 </li>
29 29 <li class="last highlight">${h.link_to(u'Login',h.url('login_home'))}</li>
30 30 %else:
31 31
32 32 <div class="account">
33 33 ${h.link_to('%s %s'%(c.rhodecode_user.name,c.rhodecode_user.lastname),h.url('admin_settings_my_account'))}<br/>
34 34 ${h.link_to(c.rhodecode_user.username,h.url('admin_settings_my_account'))}
35 35 </div>
36 36 </li>
37 37 <li class="last highlight">${h.link_to(u'Logout',h.url('logout_home'))}</li>
38 38 %endif
39 39 </ul>
40 40 <!-- end user -->
41 41 <div id="header-inner" class="title top-left-rounded-corner top-right-rounded-corner">
42 42 <!-- logo -->
43 43 <div id="logo">
44 44 <h1><a href="${h.url('home')}">${c.rhodecode_name}</a></h1>
45 45 </div>
46 46 <!-- end logo -->
47 47 <!-- menu -->
48 48 ${self.page_nav()}
49 49 <!-- quick -->
50 50 </div>
51 51 </div>
52 52 <!-- end header -->
53 53
54 54 <!-- CONTENT -->
55 55 <div id="content">
56 56 <div class="flash_msg">
57 57 <% messages = h.flash.pop_messages() %>
58 58 % if messages:
59 59 <ul id="flash-messages">
60 60 % for message in messages:
61 61 <li class="${message.category}_msg">${message}</li>
62 62 % endfor
63 63 </ul>
64 64 % endif
65 65 </div>
66 66 <div id="main">
67 67 ${next.main()}
68 68 </div>
69 69 </div>
70 70 <!-- END CONTENT -->
71 71
72 72 <!-- footer -->
73 73 <div id="footer">
74 74 <div id="footer-inner" class="title bottom-left-rounded-corner bottom-right-rounded-corner">
75 75 <div>
76 76 <p class="footer-link">${h.link_to(_('Submit a bug'),h.url('bugtracker'))}</p>
77 77 <p class="footer-link">${h.link_to(_('GPL license'),h.url('gpl_license'))}</p>
78 78 <p>RhodeCode ${c.rhodecode_version} &copy; 2010 by Marcin Kuzminski</p>
79 79 </div>
80 80 </div>
81 81 <script type="text/javascript">${h.tooltip.activate()}</script>
82 82 </div>
83 83 <!-- end footer -->
84 84 </body>
85 85
86 86 </html>
87 87
88 88 ### MAKO DEFS ###
89 89 <%def name="page_nav()">
90 90 ${self.menu()}
91 91 </%def>
92 92
93 93 <%def name="menu(current=None)">
94 94 <%
95 95 def is_current(selected):
96 96 if selected == current:
97 97 return h.literal('class="current"')
98 98 %>
99 99 %if current not in ['home','admin']:
100 100 ##REGULAR MENU
101 101 <ul id="quick">
102 102 <!-- repo switcher -->
103 103 <li>
104 104 <a id="repo_switcher" title="${_('Switch repository')}" href="#">
105 105 <span class="icon">
106 106 <img src="/images/icons/database.png" alt="${_('Products')}" />
107 107 </span>
108 108 <span>&darr;</span>
109 109 </a>
110 110 <ul class="repo_switcher">
111 111 %for repo in c.cached_repo_list:
112 112
113 113 %if repo['repo'].dbrepo.private:
114 114 <li><img src="/images/icons/lock.png" alt="${_('Private repository')}" class="repo_switcher_type"/>${h.link_to(repo['repo'].name,h.url('summary_home',repo_name=repo['repo'].name),class_="%s" % repo['repo'].dbrepo.repo_type)}</li>
115 115 %else:
116 116 <li><img src="/images/icons/lock_open.png" alt="${_('Public repository')}" class="repo_switcher_type" />${h.link_to(repo['repo'].name,h.url('summary_home',repo_name=repo['repo'].name),class_="%s" % repo['repo'].dbrepo.repo_type)}</li>
117 117 %endif
118 118 %endfor
119 119 </ul>
120 120 </li>
121 121
122 122 <li ${is_current('summary')}>
123 123 <a title="${_('Summary')}" href="${h.url('summary_home',repo_name=c.repo_name)}">
124 124 <span class="icon">
125 125 <img src="/images/icons/clipboard_16.png" alt="${_('Summary')}" />
126 126 </span>
127 127 <span>${_('Summary')}</span>
128 128 </a>
129 129 </li>
130 130 ##<li ${is_current('shortlog')}>
131 131 ## <a title="${_('Shortlog')}" href="${h.url('shortlog_home',repo_name=c.repo_name)}">
132 132 ## <span class="icon">
133 133 ## <img src="/images/icons/application_view_list.png" alt="${_('Shortlog')}" />
134 134 ## </span>
135 135 ## <span>${_('Shortlog')}</span>
136 136 ## </a>
137 137 ##</li>
138 138 <li ${is_current('changelog')}>
139 139 <a title="${_('Changelog')}" href="${h.url('changelog_home',repo_name=c.repo_name)}">
140 140 <span class="icon">
141 141 <img src="/images/icons/time.png" alt="${_('Changelog')}" />
142 142 </span>
143 143 <span>${_('Changelog')}</span>
144 144 </a>
145 145 </li>
146 146
147 147 <li ${is_current('switch_to')}>
148 148 <a title="${_('Switch to')}" href="#">
149 149 <span class="icon">
150 150 <img src="/images/icons/arrow_switch.png" alt="${_('Switch to')}" />
151 151 </span>
152 152 <span>${_('Switch to')}</span>
153 153 </a>
154 154 <ul>
155 155 <li>
156 156 ${h.link_to('%s (%s)' % (_('branches'),len(c.repository_branches.values()),),h.url('branches_home',repo_name=c.repo_name),class_='branches childs')}
157 157 <ul>
158 158 %if c.repository_branches.values():
159 159 %for cnt,branch in enumerate(c.repository_branches.items()):
160 160 <li>${h.link_to('%s - %s' % (branch[0],h.short_id(branch[1])),h.url('files_home',repo_name=c.repo_name,revision=branch[1]))}</li>
161 161 %endfor
162 162 %else:
163 163 <li>${h.link_to(_('There are no branches yet'),'#')}</li>
164 164 %endif
165 165 </ul>
166 166 </li>
167 167 <li>
168 168 ${h.link_to('%s (%s)' % (_('tags'),len(c.repository_tags.values()),),h.url('tags_home',repo_name=c.repo_name),class_='tags childs')}
169 169 <ul>
170 170 %if c.repository_tags.values():
171 171 %for cnt,tag in enumerate(c.repository_tags.items()):
172 172 <li>${h.link_to('%s - %s' % (tag[0],h.short_id(tag[1])),h.url('files_home',repo_name=c.repo_name,revision=tag[1]))}</li>
173 173 %endfor
174 174 %else:
175 175 <li>${h.link_to(_('There are no tags yet'),'#')}</li>
176 176 %endif
177 177 </ul>
178 178 </li>
179 179 </ul>
180 180 </li>
181 181 <li ${is_current('files')}>
182 182 <a title="${_('Files')}" href="${h.url('files_home',repo_name=c.repo_name)}">
183 183 <span class="icon">
184 184 <img src="/images/icons/file.png" alt="${_('Files')}" />
185 185 </span>
186 186 <span>${_('Files')}</span>
187 187 </a>
188 188 </li>
189 189
190 190 <li ${is_current('options')}>
191 191 <a title="${_('Options')}" href="#">
192 192 <span class="icon">
193 193 <img src="/images/icons/table_gear.png" alt="${_('Admin')}" />
194 194 </span>
195 195 <span>${_('Options')}</span>
196 196 </a>
197 197 <ul>
198 198 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
199 199 <li>${h.link_to(_('settings'),h.url('repo_settings_home',repo_name=c.repo_name),class_='settings')}</li>
200 200 <li>${h.link_to(_('fork'),h.url('repo_fork_home',repo_name=c.repo_name),class_='fork')}</li>
201 201 %endif
202 202 <li>${h.link_to(_('search'),h.url('search_repo',search_repo=c.repo_name),class_='search')}</li>
203 203
204 204 %if h.HasPermissionAll('hg.admin')('access admin main page'):
205 205 <li>
206 206 ${h.link_to(_('admin'),h.url('admin_home'),class_='admin')}
207 <%def name="admin_menu()">
207 208 <ul>
208 209 <li>${h.link_to(_('journal'),h.url('admin_home'),class_='journal')}</li>
209 210 <li>${h.link_to(_('repositories'),h.url('repos'),class_='repos')}</li>
210 211 <li>${h.link_to(_('users'),h.url('users'),class_='users')}</li>
211 212 <li>${h.link_to(_('permissions'),h.url('edit_permission',id='default'),class_='permissions')}</li>
213 <li>${h.link_to(_('ldap'),h.url('ldap_home'),class_='ldap')}</li>
212 214 <li class="last">${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li>
213 215 </ul>
216 </%def>
217
218 ${admin_menu()}
214 219 </li>
215 220 %endif
216 221
217 222 </ul>
218 223 </li>
219 224
220 225 <li>
221 226 <a title="${_('Followers')}" href="#">
222 227 <span class="icon_short">
223 228 <img src="/images/icons/heart.png" alt="${_('Followers')}" />
224 229 </span>
225 230 <span class="short">${c.repository_followers}</span>
226 231 </a>
227 232 </li>
228 233 <li>
229 234 <a title="${_('Forks')}" href="#">
230 235 <span class="icon_short">
231 236 <img src="/images/icons/arrow_divide.png" alt="${_('Forks')}" />
232 237 </span>
233 238 <span class="short">${c.repository_forks}</span>
234 239 </a>
235 240 </li>
236 241
237 242
238 243
239 244 </ul>
240 245 %else:
241 246 ##ROOT MENU
242 247 <ul id="quick">
243 248 <li>
244 249 <a title="${_('Home')}" href="${h.url('home')}">
245 250 <span class="icon">
246 251 <img src="/images/icons/home_16.png" alt="${_('Home')}" />
247 252 </span>
248 253 <span>${_('Home')}</span>
249 254 </a>
250 255 </li>
251 256
252 257 <li>
253 258 <a title="${_('Journal')}" href="${h.url('journal')}">
254 259 <span class="icon">
255 260 <img src="/images/icons/book.png" alt="${_('Journal')}" />
256 261 </span>
257 262 <span>${_('Journal')}</span>
258 263 </a>
259 264 </li>
260 265
261 266 <li>
262 267 <a title="${_('Search')}" href="${h.url('search')}">
263 268 <span class="icon">
264 269 <img src="/images/icons/search_16.png" alt="${_('Search')}" />
265 270 </span>
266 271 <span>${_('Search')}</span>
267 272 </a>
268 273 </li>
269 274
270 275 %if h.HasPermissionAll('hg.admin')('access admin main page'):
271 276 <li ${is_current('admin')}>
272 277 <a title="${_('Admin')}" href="${h.url('admin_home')}">
273 278 <span class="icon">
274 279 <img src="/images/icons/cog_edit.png" alt="${_('Admin')}" />
275 280 </span>
276 281 <span>${_('Admin')}</span>
277 282 </a>
278 <ul>
279 <li>${h.link_to(_('journal'),h.url('admin_home'),class_='journal')}</li>
280 <li>${h.link_to(_('repositories'),h.url('repos'),class_='repos')}</li>
281 <li>${h.link_to(_('users'),h.url('users'),class_='users')}</li>
282 <li>${h.link_to(_('permissions'),h.url('edit_permission',id='default'),class_='permissions')}</li>
283 <li class="last">${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li>
284 </ul>
283 ${admin_menu()}
285 284 </li>
286 285 %endif
287
288 286 </ul>
289 287 %endif
290 288 </%def>
291 289
292 290
293 291 <%def name="css()">
294 292 <link rel="stylesheet" type="text/css" href="/css/style.css" media="screen" />
295 293 <link rel="stylesheet" type="text/css" href="/css/pygments.css" />
296 294 <link rel="stylesheet" type="text/css" href="/css/diff.css" />
297 295 </%def>
298 296
299 297 <%def name="js()">
300 298 ##<script type="text/javascript" src="/js/yui/utilities/utilities.js"></script>
301 299 ##<script type="text/javascript" src="/js/yui/container/container.js"></script>
302 300 ##<script type="text/javascript" src="/js/yui/datasource/datasource.js"></script>
303 301 ##<script type="text/javascript" src="/js/yui/autocomplete/autocomplete.js"></script>
304 302 ##<script type="text/javascript" src="/js/yui/selector/selector-min.js"></script>
305 303
306 304 <script type="text/javascript" src="/js/yui2a.js"></script>
307 305 <!--[if IE]><script language="javascript" type="text/javascript" src="/js/excanvas.min.js"></script><![endif]-->
308 306 <script type="text/javascript" src="/js/yui.flot.js"></script>
309 307
310 308 <script type="text/javascript">
311 309 var base_url ='/_admin/toggle_following';
312 310 var YUC = YAHOO.util.Connect;
313 311 var YUD = YAHOO.util.Dom;
314 312 var YUE = YAHOO.util.Event;
315 313
316 314 function onSuccess(){
317 315
318 316 var f = YUD.get('follow_toggle');
319 317 if(f.getAttribute('class')=='follow'){
320 318 f.setAttribute('class','following');
321 319 f.setAttribute('title',"${_('Stop following this repository')}");
322 320 }
323 321 else{
324 322 f.setAttribute('class','follow');
325 323 f.setAttribute('title',"${_('Start following this repository')}");
326 324 }
327 325 }
328 326
329 327 function toggleFollowingUser(fallows_user_id,token){
330 328 args = 'follows_user_id='+fallows_user_id;
331 329 args+= '&auth_token='+token;
332 330 YUC.asyncRequest('POST',base_url,{
333 331 success:function(o){
334 332 onSuccess();
335 333 }
336 334 },args); return false;
337 335 }
338 336
339 337 function toggleFollowingRepo(fallows_repo_id,token){
340 338 args = 'follows_repo_id='+fallows_repo_id;
341 339 args+= '&auth_token='+token;
342 340 YUC.asyncRequest('POST',base_url,{
343 341 success:function(o){
344 342 onSuccess();
345 343 }
346 344 },args); return false;
347 345 }
348 346 </script>
349 347
350 348 </%def>
351 349
352 350 <%def name="breadcrumbs()">
353 351 <div class="breadcrumbs">
354 352 ${self.breadcrumbs_links()}
355 353 </div>
356 354 </%def> No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now