##// END OF EJS Templates
ui: reduce logo size
marcink -
r3541:6584b281 default
parent child Browse files
Show More
1 NO CONTENT: file renamed from rhodecode/public/images/rhodecode-logo-white-216x60.png to rhodecode/public/images/rhodecode-logo-white-60x60.png, binary diff hidden
NO CONTENT: file renamed from rhodecode/public/images/rhodecode-logo-white-216x60.png to rhodecode/public/images/rhodecode-logo-white-60x60.png, binary diff hidden
@@ -1,818 +1,818 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="root.mako"/>
2 <%inherit file="root.mako"/>
3
3
4 <%include file="/ejs_templates/templates.html"/>
4 <%include file="/ejs_templates/templates.html"/>
5
5
6 <div class="outerwrapper">
6 <div class="outerwrapper">
7 <!-- HEADER -->
7 <!-- HEADER -->
8 <div class="header">
8 <div class="header">
9 <div id="header-inner" class="wrapper">
9 <div id="header-inner" class="wrapper">
10 <div id="logo">
10 <div id="logo">
11 <div class="logo-wrapper">
11 <div class="logo-wrapper">
12 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
12 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-60x60.png')}" alt="RhodeCode"/></a>
13 </div>
13 </div>
14 %if c.rhodecode_name:
14 %if c.rhodecode_name:
15 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
15 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
16 %endif
16 %endif
17 </div>
17 </div>
18 <!-- MENU BAR NAV -->
18 <!-- MENU BAR NAV -->
19 ${self.menu_bar_nav()}
19 ${self.menu_bar_nav()}
20 <!-- END MENU BAR NAV -->
20 <!-- END MENU BAR NAV -->
21 </div>
21 </div>
22 </div>
22 </div>
23 ${self.menu_bar_subnav()}
23 ${self.menu_bar_subnav()}
24 <!-- END HEADER -->
24 <!-- END HEADER -->
25
25
26 <!-- CONTENT -->
26 <!-- CONTENT -->
27 <div id="content" class="wrapper">
27 <div id="content" class="wrapper">
28
28
29 <rhodecode-toast id="notifications"></rhodecode-toast>
29 <rhodecode-toast id="notifications"></rhodecode-toast>
30
30
31 <div class="main">
31 <div class="main">
32 ${next.main()}
32 ${next.main()}
33 </div>
33 </div>
34 </div>
34 </div>
35 <!-- END CONTENT -->
35 <!-- END CONTENT -->
36
36
37 </div>
37 </div>
38 <!-- FOOTER -->
38 <!-- FOOTER -->
39 <div id="footer">
39 <div id="footer">
40 <div id="footer-inner" class="title wrapper">
40 <div id="footer-inner" class="title wrapper">
41 <div>
41 <div>
42 <p class="footer-link-right">
42 <p class="footer-link-right">
43 % if c.visual.show_version:
43 % if c.visual.show_version:
44 RhodeCode Enterprise ${c.rhodecode_version} ${c.rhodecode_edition}
44 RhodeCode Enterprise ${c.rhodecode_version} ${c.rhodecode_edition}
45 % endif
45 % endif
46 &copy; 2010-${h.datetime.today().year}, <a href="${h.route_url('rhodecode_official')}" target="_blank">RhodeCode GmbH</a>. All rights reserved.
46 &copy; 2010-${h.datetime.today().year}, <a href="${h.route_url('rhodecode_official')}" target="_blank">RhodeCode GmbH</a>. All rights reserved.
47 % if c.visual.rhodecode_support_url:
47 % if c.visual.rhodecode_support_url:
48 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
48 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
49 % endif
49 % endif
50 </p>
50 </p>
51 <% sid = 'block' if request.GET.get('showrcid') else 'none' %>
51 <% sid = 'block' if request.GET.get('showrcid') else 'none' %>
52 <p class="server-instance" style="display:${sid}">
52 <p class="server-instance" style="display:${sid}">
53 ## display hidden instance ID if specially defined
53 ## display hidden instance ID if specially defined
54 % if c.rhodecode_instanceid:
54 % if c.rhodecode_instanceid:
55 ${_('RhodeCode instance id: {}').format(c.rhodecode_instanceid)}
55 ${_('RhodeCode instance id: {}').format(c.rhodecode_instanceid)}
56 % endif
56 % endif
57 </p>
57 </p>
58 </div>
58 </div>
59 </div>
59 </div>
60 </div>
60 </div>
61
61
62 <!-- END FOOTER -->
62 <!-- END FOOTER -->
63
63
64 ### MAKO DEFS ###
64 ### MAKO DEFS ###
65
65
66 <%def name="menu_bar_subnav()">
66 <%def name="menu_bar_subnav()">
67 </%def>
67 </%def>
68
68
69 <%def name="breadcrumbs(class_='breadcrumbs')">
69 <%def name="breadcrumbs(class_='breadcrumbs')">
70 <div class="${class_}">
70 <div class="${class_}">
71 ${self.breadcrumbs_links()}
71 ${self.breadcrumbs_links()}
72 </div>
72 </div>
73 </%def>
73 </%def>
74
74
75 <%def name="admin_menu()">
75 <%def name="admin_menu()">
76 <ul class="admin_menu submenu">
76 <ul class="admin_menu submenu">
77 <li><a href="${h.route_path('admin_audit_logs')}">${_('Admin audit logs')}</a></li>
77 <li><a href="${h.route_path('admin_audit_logs')}">${_('Admin audit logs')}</a></li>
78 <li><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
78 <li><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
79 <li><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
79 <li><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
80 <li><a href="${h.route_path('users')}">${_('Users')}</a></li>
80 <li><a href="${h.route_path('users')}">${_('Users')}</a></li>
81 <li><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
81 <li><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
82 <li><a href="${h.route_path('admin_permissions_application')}">${_('Permissions')}</a></li>
82 <li><a href="${h.route_path('admin_permissions_application')}">${_('Permissions')}</a></li>
83 <li><a href="${h.route_path('auth_home', traverse='')}">${_('Authentication')}</a></li>
83 <li><a href="${h.route_path('auth_home', traverse='')}">${_('Authentication')}</a></li>
84 <li><a href="${h.route_path('global_integrations_home')}">${_('Integrations')}</a></li>
84 <li><a href="${h.route_path('global_integrations_home')}">${_('Integrations')}</a></li>
85 <li><a href="${h.route_path('admin_defaults_repositories')}">${_('Defaults')}</a></li>
85 <li><a href="${h.route_path('admin_defaults_repositories')}">${_('Defaults')}</a></li>
86 <li class="last"><a href="${h.route_path('admin_settings')}">${_('Settings')}</a></li>
86 <li class="last"><a href="${h.route_path('admin_settings')}">${_('Settings')}</a></li>
87 </ul>
87 </ul>
88 </%def>
88 </%def>
89
89
90
90
91 <%def name="dt_info_panel(elements)">
91 <%def name="dt_info_panel(elements)">
92 <dl class="dl-horizontal">
92 <dl class="dl-horizontal">
93 %for dt, dd, title, show_items in elements:
93 %for dt, dd, title, show_items in elements:
94 <dt>${dt}:</dt>
94 <dt>${dt}:</dt>
95 <dd title="${h.tooltip(title)}">
95 <dd title="${h.tooltip(title)}">
96 %if callable(dd):
96 %if callable(dd):
97 ## allow lazy evaluation of elements
97 ## allow lazy evaluation of elements
98 ${dd()}
98 ${dd()}
99 %else:
99 %else:
100 ${dd}
100 ${dd}
101 %endif
101 %endif
102 %if show_items:
102 %if show_items:
103 <span class="btn-collapse" data-toggle="item-${h.md5_safe(dt)[:6]}-details">${_('Show More')} </span>
103 <span class="btn-collapse" data-toggle="item-${h.md5_safe(dt)[:6]}-details">${_('Show More')} </span>
104 %endif
104 %endif
105 </dd>
105 </dd>
106
106
107 %if show_items:
107 %if show_items:
108 <div class="collapsable-content" data-toggle="item-${h.md5_safe(dt)[:6]}-details" style="display: none">
108 <div class="collapsable-content" data-toggle="item-${h.md5_safe(dt)[:6]}-details" style="display: none">
109 %for item in show_items:
109 %for item in show_items:
110 <dt></dt>
110 <dt></dt>
111 <dd>${item}</dd>
111 <dd>${item}</dd>
112 %endfor
112 %endfor
113 </div>
113 </div>
114 %endif
114 %endif
115
115
116 %endfor
116 %endfor
117 </dl>
117 </dl>
118 </%def>
118 </%def>
119
119
120
120
121 <%def name="gravatar(email, size=16)">
121 <%def name="gravatar(email, size=16)">
122 <%
122 <%
123 if (size > 16):
123 if (size > 16):
124 gravatar_class = 'gravatar gravatar-large'
124 gravatar_class = 'gravatar gravatar-large'
125 else:
125 else:
126 gravatar_class = 'gravatar'
126 gravatar_class = 'gravatar'
127 %>
127 %>
128 <%doc>
128 <%doc>
129 TODO: johbo: For now we serve double size images to make it smooth
129 TODO: johbo: For now we serve double size images to make it smooth
130 for retina. This is how it worked until now. Should be replaced
130 for retina. This is how it worked until now. Should be replaced
131 with a better solution at some point.
131 with a better solution at some point.
132 </%doc>
132 </%doc>
133 <img class="${gravatar_class}" src="${h.gravatar_url(email, size * 2)}" height="${size}" width="${size}">
133 <img class="${gravatar_class}" src="${h.gravatar_url(email, size * 2)}" height="${size}" width="${size}">
134 </%def>
134 </%def>
135
135
136
136
137 <%def name="gravatar_with_user(contact, size=16, show_disabled=False)">
137 <%def name="gravatar_with_user(contact, size=16, show_disabled=False)">
138 <% email = h.email_or_none(contact) %>
138 <% email = h.email_or_none(contact) %>
139 <div class="rc-user tooltip" title="${h.tooltip(h.author_string(email))}">
139 <div class="rc-user tooltip" title="${h.tooltip(h.author_string(email))}">
140 ${self.gravatar(email, size)}
140 ${self.gravatar(email, size)}
141 <span class="${'user user-disabled' if show_disabled else 'user'}"> ${h.link_to_user(contact)}</span>
141 <span class="${'user user-disabled' if show_disabled else 'user'}"> ${h.link_to_user(contact)}</span>
142 </div>
142 </div>
143 </%def>
143 </%def>
144
144
145
145
146 ## admin menu used for people that have some admin resources
146 ## admin menu used for people that have some admin resources
147 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
147 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
148 <ul class="submenu">
148 <ul class="submenu">
149 %if repositories:
149 %if repositories:
150 <li class="local-admin-repos"><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
150 <li class="local-admin-repos"><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
151 %endif
151 %endif
152 %if repository_groups:
152 %if repository_groups:
153 <li class="local-admin-repo-groups"><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
153 <li class="local-admin-repo-groups"><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
154 %endif
154 %endif
155 %if user_groups:
155 %if user_groups:
156 <li class="local-admin-user-groups"><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
156 <li class="local-admin-user-groups"><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
157 %endif
157 %endif
158 </ul>
158 </ul>
159 </%def>
159 </%def>
160
160
161 <%def name="repo_page_title(repo_instance)">
161 <%def name="repo_page_title(repo_instance)">
162 <div class="title-content">
162 <div class="title-content">
163 <div class="title-main">
163 <div class="title-main">
164 ## SVN/HG/GIT icons
164 ## SVN/HG/GIT icons
165 %if h.is_hg(repo_instance):
165 %if h.is_hg(repo_instance):
166 <i class="icon-hg"></i>
166 <i class="icon-hg"></i>
167 %endif
167 %endif
168 %if h.is_git(repo_instance):
168 %if h.is_git(repo_instance):
169 <i class="icon-git"></i>
169 <i class="icon-git"></i>
170 %endif
170 %endif
171 %if h.is_svn(repo_instance):
171 %if h.is_svn(repo_instance):
172 <i class="icon-svn"></i>
172 <i class="icon-svn"></i>
173 %endif
173 %endif
174
174
175 ## public/private
175 ## public/private
176 %if repo_instance.private:
176 %if repo_instance.private:
177 <i class="icon-repo-private"></i>
177 <i class="icon-repo-private"></i>
178 %else:
178 %else:
179 <i class="icon-repo-public"></i>
179 <i class="icon-repo-public"></i>
180 %endif
180 %endif
181
181
182 ## repo name with group name
182 ## repo name with group name
183 ${h.breadcrumb_repo_link(repo_instance)}
183 ${h.breadcrumb_repo_link(repo_instance)}
184
184
185 </div>
185 </div>
186
186
187 ## FORKED
187 ## FORKED
188 %if repo_instance.fork:
188 %if repo_instance.fork:
189 <p>
189 <p>
190 <i class="icon-code-fork"></i> ${_('Fork of')}
190 <i class="icon-code-fork"></i> ${_('Fork of')}
191 ${h.link_to_if(c.has_origin_repo_read_perm,repo_instance.fork.repo_name, h.route_path('repo_summary', repo_name=repo_instance.fork.repo_name))}
191 ${h.link_to_if(c.has_origin_repo_read_perm,repo_instance.fork.repo_name, h.route_path('repo_summary', repo_name=repo_instance.fork.repo_name))}
192 </p>
192 </p>
193 %endif
193 %endif
194
194
195 ## IMPORTED FROM REMOTE
195 ## IMPORTED FROM REMOTE
196 %if repo_instance.clone_uri:
196 %if repo_instance.clone_uri:
197 <p>
197 <p>
198 <i class="icon-code-fork"></i> ${_('Clone from')}
198 <i class="icon-code-fork"></i> ${_('Clone from')}
199 <a href="${h.safe_str(h.hide_credentials(repo_instance.clone_uri))}">${h.hide_credentials(repo_instance.clone_uri)}</a>
199 <a href="${h.safe_str(h.hide_credentials(repo_instance.clone_uri))}">${h.hide_credentials(repo_instance.clone_uri)}</a>
200 </p>
200 </p>
201 %endif
201 %endif
202
202
203 ## LOCKING STATUS
203 ## LOCKING STATUS
204 %if repo_instance.locked[0]:
204 %if repo_instance.locked[0]:
205 <p class="locking_locked">
205 <p class="locking_locked">
206 <i class="icon-repo-lock"></i>
206 <i class="icon-repo-lock"></i>
207 ${_('Repository locked by %(user)s') % {'user': h.person_by_id(repo_instance.locked[0])}}
207 ${_('Repository locked by %(user)s') % {'user': h.person_by_id(repo_instance.locked[0])}}
208 </p>
208 </p>
209 %elif repo_instance.enable_locking:
209 %elif repo_instance.enable_locking:
210 <p class="locking_unlocked">
210 <p class="locking_unlocked">
211 <i class="icon-repo-unlock"></i>
211 <i class="icon-repo-unlock"></i>
212 ${_('Repository not locked. Pull repository to lock it.')}
212 ${_('Repository not locked. Pull repository to lock it.')}
213 </p>
213 </p>
214 %endif
214 %endif
215
215
216 </div>
216 </div>
217 </%def>
217 </%def>
218
218
219 <%def name="repo_menu(active=None)">
219 <%def name="repo_menu(active=None)">
220 <%
220 <%
221 def is_active(selected):
221 def is_active(selected):
222 if selected == active:
222 if selected == active:
223 return "active"
223 return "active"
224 %>
224 %>
225
225
226 <!--- CONTEXT BAR -->
226 <!--- CONTEXT BAR -->
227 <div id="context-bar">
227 <div id="context-bar">
228 <div class="wrapper">
228 <div class="wrapper">
229 <ul id="context-pages" class="navigation horizontal-list">
229 <ul id="context-pages" class="navigation horizontal-list">
230 <li class="${is_active('summary')}"><a class="menulink" href="${h.route_path('repo_summary', repo_name=c.repo_name)}"><div class="menulabel">${_('Summary')}</div></a></li>
230 <li class="${is_active('summary')}"><a class="menulink" href="${h.route_path('repo_summary', repo_name=c.repo_name)}"><div class="menulabel">${_('Summary')}</div></a></li>
231 <li class="${is_active('changelog')}"><a class="menulink" href="${h.route_path('repo_changelog', repo_name=c.repo_name)}"><div class="menulabel">${_('Changelog')}</div></a></li>
231 <li class="${is_active('changelog')}"><a class="menulink" href="${h.route_path('repo_changelog', repo_name=c.repo_name)}"><div class="menulabel">${_('Changelog')}</div></a></li>
232 <li class="${is_active('files')}"><a class="menulink" href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.rhodecode_db_repo.landing_rev[1], f_path='')}"><div class="menulabel">${_('Files')}</div></a></li>
232 <li class="${is_active('files')}"><a class="menulink" href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.rhodecode_db_repo.landing_rev[1], f_path='')}"><div class="menulabel">${_('Files')}</div></a></li>
233 <li class="${is_active('compare')}"><a class="menulink" href="${h.route_path('repo_compare_select',repo_name=c.repo_name)}"><div class="menulabel">${_('Compare')}</div></a></li>
233 <li class="${is_active('compare')}"><a class="menulink" href="${h.route_path('repo_compare_select',repo_name=c.repo_name)}"><div class="menulabel">${_('Compare')}</div></a></li>
234 <li class="${is_active('search')}"><a class="menulink" href="${h.route_path('search_repo',repo_name=c.repo_name)}"><div class="menulabel">${_('Search')}</div></a></li>
234 <li class="${is_active('search')}"><a class="menulink" href="${h.route_path('search_repo',repo_name=c.repo_name)}"><div class="menulabel">${_('Search')}</div></a></li>
235
235
236 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
236 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
237 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
237 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
238 <li class="${is_active('showpullrequest')}">
238 <li class="${is_active('showpullrequest')}">
239 <a class="menulink" href="${h.route_path('pullrequest_show_all', repo_name=c.repo_name)}" title="${h.tooltip(_('Show Pull Requests for %s') % c.repo_name)}">
239 <a class="menulink" href="${h.route_path('pullrequest_show_all', repo_name=c.repo_name)}" title="${h.tooltip(_('Show Pull Requests for %s') % c.repo_name)}">
240 %if c.repository_pull_requests:
240 %if c.repository_pull_requests:
241 <span class="pr_notifications">${c.repository_pull_requests}</span>
241 <span class="pr_notifications">${c.repository_pull_requests}</span>
242 %endif
242 %endif
243 <div class="menulabel">${_('Pull Requests')}</div>
243 <div class="menulabel">${_('Pull Requests')}</div>
244 </a>
244 </a>
245 </li>
245 </li>
246 %endif
246 %endif
247
247
248 <li class="${is_active('options')}">
248 <li class="${is_active('options')}">
249 <a class="menulink dropdown">
249 <a class="menulink dropdown">
250 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
250 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
251 </a>
251 </a>
252 <ul class="submenu">
252 <ul class="submenu">
253 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
253 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
254 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Repository Settings')}</a></li>
254 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Repository Settings')}</a></li>
255 %endif
255 %endif
256 %if c.rhodecode_db_repo.fork:
256 %if c.rhodecode_db_repo.fork:
257 <li>
257 <li>
258 <a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
258 <a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
259 href="${h.route_path('repo_compare',
259 href="${h.route_path('repo_compare',
260 repo_name=c.rhodecode_db_repo.fork.repo_name,
260 repo_name=c.rhodecode_db_repo.fork.repo_name,
261 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
261 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
262 source_ref=c.rhodecode_db_repo.landing_rev[1],
262 source_ref=c.rhodecode_db_repo.landing_rev[1],
263 target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
263 target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
264 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
264 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
265 _query=dict(merge=1))}"
265 _query=dict(merge=1))}"
266 >
266 >
267 ${_('Compare fork')}
267 ${_('Compare fork')}
268 </a>
268 </a>
269 </li>
269 </li>
270 %endif
270 %endif
271
271
272 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
272 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
273 %if c.rhodecode_db_repo.locked[0]:
273 %if c.rhodecode_db_repo.locked[0]:
274 <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
274 <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
275 %else:
275 %else:
276 <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
276 <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
277 %endif
277 %endif
278 %endif
278 %endif
279 %if c.rhodecode_user.username != h.DEFAULT_USER:
279 %if c.rhodecode_user.username != h.DEFAULT_USER:
280 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
280 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
281 <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li>
281 <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li>
282 <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
282 <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
283 %endif
283 %endif
284 %endif
284 %endif
285 </ul>
285 </ul>
286 </li>
286 </li>
287 </ul>
287 </ul>
288 </div>
288 </div>
289 <div class="clear"></div>
289 <div class="clear"></div>
290 </div>
290 </div>
291 % if c.rhodecode_db_repo.archived:
291 % if c.rhodecode_db_repo.archived:
292 <div class="alert alert-warning text-center">
292 <div class="alert alert-warning text-center">
293 <strong>${_('This repository has been archived. It is now read-only.')}</strong>
293 <strong>${_('This repository has been archived. It is now read-only.')}</strong>
294 </div>
294 </div>
295 % endif
295 % endif
296 <!--- END CONTEXT BAR -->
296 <!--- END CONTEXT BAR -->
297
297
298 </%def>
298 </%def>
299
299
300 <%def name="repo_group_page_title(repo_group_instance)">
300 <%def name="repo_group_page_title(repo_group_instance)">
301 <div class="title-content">
301 <div class="title-content">
302 <div class="title-main">
302 <div class="title-main">
303 ## Repository Group icon
303 ## Repository Group icon
304 <i class="icon-folder-close"></i>
304 <i class="icon-folder-close"></i>
305
305
306 ## repo name with group name
306 ## repo name with group name
307 ${h.breadcrumb_repo_group_link(repo_group_instance)}
307 ${h.breadcrumb_repo_group_link(repo_group_instance)}
308 </div>
308 </div>
309
309
310 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
310 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
311 <div class="repo-group-desc">
311 <div class="repo-group-desc">
312 ${dt.repo_group_desc(repo_group_instance.description_safe, repo_group_instance.personal, c.visual.stylify_metatags)}
312 ${dt.repo_group_desc(repo_group_instance.description_safe, repo_group_instance.personal, c.visual.stylify_metatags)}
313 </div>
313 </div>
314
314
315 </div>
315 </div>
316 </%def>
316 </%def>
317
317
318 <%def name="repo_group_menu(active=None)">
318 <%def name="repo_group_menu(active=None)">
319 <%
319 <%
320 def is_active(selected):
320 def is_active(selected):
321 if selected == active:
321 if selected == active:
322 return "active"
322 return "active"
323
323
324 is_admin = h.HasPermissionAny('hg.admin')('can create repos index page')
324 is_admin = h.HasPermissionAny('hg.admin')('can create repos index page')
325
325
326 gr_name = c.repo_group.group_name if c.repo_group else None
326 gr_name = c.repo_group.group_name if c.repo_group else None
327 # create repositories with write permission on group is set to true
327 # create repositories with write permission on group is set to true
328 create_on_write = h.HasPermissionAny('hg.create.write_on_repogroup.true')()
328 create_on_write = h.HasPermissionAny('hg.create.write_on_repogroup.true')()
329 group_admin = h.HasRepoGroupPermissionAny('group.admin')(gr_name, 'group admin index page')
329 group_admin = h.HasRepoGroupPermissionAny('group.admin')(gr_name, 'group admin index page')
330 group_write = h.HasRepoGroupPermissionAny('group.write')(gr_name, 'can write into group index page')
330 group_write = h.HasRepoGroupPermissionAny('group.write')(gr_name, 'can write into group index page')
331
331
332 %>
332 %>
333
333
334 <!--- CONTEXT BAR -->
334 <!--- CONTEXT BAR -->
335 <div id="context-bar">
335 <div id="context-bar">
336 <div class="wrapper">
336 <div class="wrapper">
337 <ul id="context-pages" class="navigation horizontal-list">
337 <ul id="context-pages" class="navigation horizontal-list">
338 <li class="${is_active('home')}"><a class="menulink" href="${h.route_path('repo_group_home', repo_group_name=c.repo_group.group_name)}"><div class="menulabel">${_('Group Home')}</div></a></li>
338 <li class="${is_active('home')}"><a class="menulink" href="${h.route_path('repo_group_home', repo_group_name=c.repo_group.group_name)}"><div class="menulabel">${_('Group Home')}</div></a></li>
339 <li class="${is_active('search')}"><a class="menulink" href="${h.route_path('search_repo_group', repo_group_name=c.repo_group.group_name)}"><div class="menulabel">${_('Search')}</div></a></li>
339 <li class="${is_active('search')}"><a class="menulink" href="${h.route_path('search_repo_group', repo_group_name=c.repo_group.group_name)}"><div class="menulabel">${_('Search')}</div></a></li>
340
340
341 <li class="${is_active('options')}">
341 <li class="${is_active('options')}">
342 <a class="menulink dropdown">
342 <a class="menulink dropdown">
343 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
343 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
344 </a>
344 </a>
345 <ul class="submenu">
345 <ul class="submenu">
346 %if is_admin or group_admin:
346 %if is_admin or group_admin:
347 <li><a href="${h.route_path('edit_repo_group',repo_group_name=c.repo_group.group_name)}" title="${_('You have admin right to this group, and can edit it')}">${_('Group Settings')}</a></li>
347 <li><a href="${h.route_path('edit_repo_group',repo_group_name=c.repo_group.group_name)}" title="${_('You have admin right to this group, and can edit it')}">${_('Group Settings')}</a></li>
348 %endif
348 %endif
349 %if is_admin or group_admin or (group_write and create_on_write):
349 %if is_admin or group_admin or (group_write and create_on_write):
350 <li><a href="${h.route_path('repo_new',_query=dict(parent_group=c.repo_group.group_id))}">${_('Add Repository')}</a></li>
350 <li><a href="${h.route_path('repo_new',_query=dict(parent_group=c.repo_group.group_id))}">${_('Add Repository')}</a></li>
351 %endif
351 %endif
352 %if is_admin or group_admin:
352 %if is_admin or group_admin:
353 <li><a href="${h.route_path('repo_group_new',_query=dict(parent_group=c.repo_group.group_id))}">${_(u'Add Parent Group')}</a></li>
353 <li><a href="${h.route_path('repo_group_new',_query=dict(parent_group=c.repo_group.group_id))}">${_(u'Add Parent Group')}</a></li>
354 %endif
354 %endif
355 </ul>
355 </ul>
356 </li>
356 </li>
357 </ul>
357 </ul>
358 </div>
358 </div>
359 <div class="clear"></div>
359 <div class="clear"></div>
360 </div>
360 </div>
361
361
362 <!--- END CONTEXT BAR -->
362 <!--- END CONTEXT BAR -->
363
363
364 </%def>
364 </%def>
365
365
366
366
367 <%def name="usermenu(active=False)">
367 <%def name="usermenu(active=False)">
368 ## USER MENU
368 ## USER MENU
369 <li id="quick_login_li" class="${'active' if active else ''}">
369 <li id="quick_login_li" class="${'active' if active else ''}">
370 % if c.rhodecode_user.username == h.DEFAULT_USER:
370 % if c.rhodecode_user.username == h.DEFAULT_USER:
371 <a id="quick_login_link" class="menulink childs" href="${h.route_path('login', _query={'came_from': h.current_route_path(request)})}">
371 <a id="quick_login_link" class="menulink childs" href="${h.route_path('login', _query={'came_from': h.current_route_path(request)})}">
372 ${gravatar(c.rhodecode_user.email, 20)}
372 ${gravatar(c.rhodecode_user.email, 20)}
373 <span class="user">
373 <span class="user">
374 <span>${_('Sign in')}</span>
374 <span>${_('Sign in')}</span>
375 </span>
375 </span>
376 </a>
376 </a>
377 % else:
377 % else:
378 ## logged in user
378 ## logged in user
379 <a id="quick_login_link" class="menulink childs">
379 <a id="quick_login_link" class="menulink childs">
380 ${gravatar(c.rhodecode_user.email, 20)}
380 ${gravatar(c.rhodecode_user.email, 20)}
381 <span class="user">
381 <span class="user">
382 <span class="menu_link_user">${c.rhodecode_user.username}</span>
382 <span class="menu_link_user">${c.rhodecode_user.username}</span>
383 <div class="show_more"></div>
383 <div class="show_more"></div>
384 </span>
384 </span>
385 </a>
385 </a>
386 ## subnav with menu for logged in user
386 ## subnav with menu for logged in user
387 <div class="user-menu submenu">
387 <div class="user-menu submenu">
388 <div id="quick_login">
388 <div id="quick_login">
389 %if c.rhodecode_user.username != h.DEFAULT_USER:
389 %if c.rhodecode_user.username != h.DEFAULT_USER:
390 <div class="">
390 <div class="">
391 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
391 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
392 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
392 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
393 <div class="email">${c.rhodecode_user.email}</div>
393 <div class="email">${c.rhodecode_user.email}</div>
394 </div>
394 </div>
395 <div class="">
395 <div class="">
396 <ol class="links">
396 <ol class="links">
397 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
397 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
398 % if c.rhodecode_user.personal_repo_group:
398 % if c.rhodecode_user.personal_repo_group:
399 <li>${h.link_to(_(u'My personal group'), h.route_path('repo_group_home', repo_group_name=c.rhodecode_user.personal_repo_group.group_name))}</li>
399 <li>${h.link_to(_(u'My personal group'), h.route_path('repo_group_home', repo_group_name=c.rhodecode_user.personal_repo_group.group_name))}</li>
400 % endif
400 % endif
401 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
401 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
402 ## bookmark-items
402 ## bookmark-items
403 <li class="bookmark-items">
403 <li class="bookmark-items">
404 ${_('Bookmarks')}
404 ${_('Bookmarks')}
405 <div class="pull-right">
405 <div class="pull-right">
406 <a href="${h.route_path('my_account_bookmarks')}">${_('Manage')}</a>
406 <a href="${h.route_path('my_account_bookmarks')}">${_('Manage')}</a>
407 </div>
407 </div>
408 </li>
408 </li>
409 % if not c.bookmark_items:
409 % if not c.bookmark_items:
410 <li>
410 <li>
411 <a href="${h.route_path('my_account_bookmarks')}">${_('No Bookmarks yet.')}</a>
411 <a href="${h.route_path('my_account_bookmarks')}">${_('No Bookmarks yet.')}</a>
412 </li>
412 </li>
413 % endif
413 % endif
414 % for item in c.bookmark_items:
414 % for item in c.bookmark_items:
415 <li>
415 <li>
416 % if item.repository:
416 % if item.repository:
417 <div>
417 <div>
418 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
418 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
419 <code>${item.position}</code>
419 <code>${item.position}</code>
420 % if item.repository.repo_type == 'hg':
420 % if item.repository.repo_type == 'hg':
421 <i class="icon-hg" title="${_('Repository')}" style="font-size: 16px"></i>
421 <i class="icon-hg" title="${_('Repository')}" style="font-size: 16px"></i>
422 % elif item.repository.repo_type == 'git':
422 % elif item.repository.repo_type == 'git':
423 <i class="icon-git" title="${_('Repository')}" style="font-size: 16px"></i>
423 <i class="icon-git" title="${_('Repository')}" style="font-size: 16px"></i>
424 % elif item.repository.repo_type == 'svn':
424 % elif item.repository.repo_type == 'svn':
425 <i class="icon-svn" title="${_('Repository')}" style="font-size: 16px"></i>
425 <i class="icon-svn" title="${_('Repository')}" style="font-size: 16px"></i>
426 % endif
426 % endif
427 ${(item.title or h.shorter(item.repository.repo_name, 30))}
427 ${(item.title or h.shorter(item.repository.repo_name, 30))}
428 </a>
428 </a>
429 </div>
429 </div>
430 % elif item.repository_group:
430 % elif item.repository_group:
431 <div>
431 <div>
432 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
432 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
433 <code>${item.position}</code>
433 <code>${item.position}</code>
434 <i class="icon-folder-close" title="${_('Repository group')}" style="font-size: 16px"></i>
434 <i class="icon-folder-close" title="${_('Repository group')}" style="font-size: 16px"></i>
435 ${(item.title or h.shorter(item.repository_group.group_name, 30))}
435 ${(item.title or h.shorter(item.repository_group.group_name, 30))}
436 </a>
436 </a>
437 </div>
437 </div>
438 % else:
438 % else:
439 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
439 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
440 <code>${item.position}</code>
440 <code>${item.position}</code>
441 ${item.title}
441 ${item.title}
442 </a>
442 </a>
443 % endif
443 % endif
444 </li>
444 </li>
445 % endfor
445 % endfor
446
446
447 <li class="logout">
447 <li class="logout">
448 ${h.secure_form(h.route_path('logout'), request=request)}
448 ${h.secure_form(h.route_path('logout'), request=request)}
449 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
449 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
450 ${h.end_form()}
450 ${h.end_form()}
451 </li>
451 </li>
452 </ol>
452 </ol>
453 </div>
453 </div>
454 %endif
454 %endif
455 </div>
455 </div>
456 </div>
456 </div>
457 ## unread counter
457 ## unread counter
458 <div class="pill_container">
458 <div class="pill_container">
459 <a class="menu_link_notifications ${'empty' if c.unread_notifications == 0 else ''}" href="${h.route_path('notifications_show_all')}">${c.unread_notifications}</a>
459 <a class="menu_link_notifications ${'empty' if c.unread_notifications == 0 else ''}" href="${h.route_path('notifications_show_all')}">${c.unread_notifications}</a>
460 </div>
460 </div>
461 % endif
461 % endif
462 </li>
462 </li>
463 </%def>
463 </%def>
464
464
465 <%def name="menu_items(active=None)">
465 <%def name="menu_items(active=None)">
466 <%
466 <%
467 def is_active(selected):
467 def is_active(selected):
468 if selected == active:
468 if selected == active:
469 return "active"
469 return "active"
470 return ""
470 return ""
471 %>
471 %>
472
472
473 <ul id="quick" class="main_nav navigation horizontal-list">
473 <ul id="quick" class="main_nav navigation horizontal-list">
474 ## notice box for important system messages
474 ## notice box for important system messages
475 <li style="display: none">
475 <li style="display: none">
476 <a class="notice-box" href="#openNotice" onclick="showNoticeBox(); return false">
476 <a class="notice-box" href="#openNotice" onclick="showNoticeBox(); return false">
477 <div class="menulabel-notice" >
477 <div class="menulabel-notice" >
478 0
478 0
479 </div>
479 </div>
480 </a>
480 </a>
481 </li>
481 </li>
482
482
483 ## Main filter
483 ## Main filter
484 <li>
484 <li>
485 <div class="menulabel main_filter_box">
485 <div class="menulabel main_filter_box">
486 <div class="main_filter_input_box">
486 <div class="main_filter_input_box">
487 <input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value=""/>
487 <input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value=""/>
488 </div>
488 </div>
489 <div class="main_filter_help_box">
489 <div class="main_filter_help_box">
490 <a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a>
490 <a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a>
491 </div>
491 </div>
492 </div>
492 </div>
493
493
494 <div id="main_filter_help" style="display: none">
494 <div id="main_filter_help" style="display: none">
495 - Use '/' key to quickly access this field.
495 - Use '/' key to quickly access this field.
496
496
497 - Enter a name of repository, or repository group for quick search.
497 - Enter a name of repository, or repository group for quick search.
498
498
499 - Prefix query to allow special search:
499 - Prefix query to allow special search:
500
500
501 user:admin, to search for usernames
501 user:admin, to search for usernames
502
502
503 user_group:devops, to search for user groups
503 user_group:devops, to search for user groups
504
504
505 commit:efced4, to search for commits
505 commit:efced4, to search for commits
506 </div>
506 </div>
507 </li>
507 </li>
508
508
509 ## ROOT MENU
509 ## ROOT MENU
510 <li class="${is_active('home')}">
510 <li class="${is_active('home')}">
511 <a class="menulink" title="${_('Home')}" href="${h.route_path('home')}">
511 <a class="menulink" title="${_('Home')}" href="${h.route_path('home')}">
512 <div class="menulabel">${_('Home')}</div>
512 <div class="menulabel">${_('Home')}</div>
513 </a>
513 </a>
514 </li>
514 </li>
515
515
516 %if c.rhodecode_user.username != h.DEFAULT_USER:
516 %if c.rhodecode_user.username != h.DEFAULT_USER:
517 <li class="${is_active('journal')}">
517 <li class="${is_active('journal')}">
518 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
518 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
519 <div class="menulabel">${_('Journal')}</div>
519 <div class="menulabel">${_('Journal')}</div>
520 </a>
520 </a>
521 </li>
521 </li>
522 %else:
522 %else:
523 <li class="${is_active('journal')}">
523 <li class="${is_active('journal')}">
524 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
524 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
525 <div class="menulabel">${_('Public journal')}</div>
525 <div class="menulabel">${_('Public journal')}</div>
526 </a>
526 </a>
527 </li>
527 </li>
528 %endif
528 %endif
529
529
530 <li class="${is_active('gists')}">
530 <li class="${is_active('gists')}">
531 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
531 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
532 <div class="menulabel">${_('Gists')}</div>
532 <div class="menulabel">${_('Gists')}</div>
533 </a>
533 </a>
534 </li>
534 </li>
535
535
536 % if h.HasPermissionAll('hg.admin')('access admin main page'):
536 % if h.HasPermissionAll('hg.admin')('access admin main page'):
537 <li class="${is_active('admin')}">
537 <li class="${is_active('admin')}">
538 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
538 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
539 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
539 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
540 </a>
540 </a>
541 ${admin_menu()}
541 ${admin_menu()}
542 </li>
542 </li>
543 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
543 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
544 <li class="${is_active('admin')}">
544 <li class="${is_active('admin')}">
545 <a class="menulink childs" title="${_('Delegated Admin settings')}">
545 <a class="menulink childs" title="${_('Delegated Admin settings')}">
546 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
546 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
547 </a>
547 </a>
548 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
548 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
549 c.rhodecode_user.repository_groups_admin,
549 c.rhodecode_user.repository_groups_admin,
550 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
550 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
551 </li>
551 </li>
552 % endif
552 % endif
553 ## render extra user menu
553 ## render extra user menu
554 ${usermenu(active=(active=='my_account'))}
554 ${usermenu(active=(active=='my_account'))}
555
555
556 % if c.debug_style:
556 % if c.debug_style:
557 <li>
557 <li>
558 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
558 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
559 <div class="menulabel">${_('[Style]')}</div>
559 <div class="menulabel">${_('[Style]')}</div>
560 </a>
560 </a>
561 </li>
561 </li>
562 % endif
562 % endif
563 </ul>
563 </ul>
564
564
565 <script type="text/javascript">
565 <script type="text/javascript">
566 var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True";
566 var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True";
567
567
568 var formatRepoResult = function(result, container, query, escapeMarkup) {
568 var formatRepoResult = function(result, container, query, escapeMarkup) {
569 return function(data, escapeMarkup) {
569 return function(data, escapeMarkup) {
570 if (!data.repo_id){
570 if (!data.repo_id){
571 return data.text; // optgroup text Repositories
571 return data.text; // optgroup text Repositories
572 }
572 }
573
573
574 var tmpl = '';
574 var tmpl = '';
575 var repoType = data['repo_type'];
575 var repoType = data['repo_type'];
576 var repoName = data['text'];
576 var repoName = data['text'];
577
577
578 if(data && data.type == 'repo'){
578 if(data && data.type == 'repo'){
579 if(repoType === 'hg'){
579 if(repoType === 'hg'){
580 tmpl += '<i class="icon-hg"></i> ';
580 tmpl += '<i class="icon-hg"></i> ';
581 }
581 }
582 else if(repoType === 'git'){
582 else if(repoType === 'git'){
583 tmpl += '<i class="icon-git"></i> ';
583 tmpl += '<i class="icon-git"></i> ';
584 }
584 }
585 else if(repoType === 'svn'){
585 else if(repoType === 'svn'){
586 tmpl += '<i class="icon-svn"></i> ';
586 tmpl += '<i class="icon-svn"></i> ';
587 }
587 }
588 if(data['private']){
588 if(data['private']){
589 tmpl += '<i class="icon-lock" ></i> ';
589 tmpl += '<i class="icon-lock" ></i> ';
590 }
590 }
591 else if(visualShowPublicIcon){
591 else if(visualShowPublicIcon){
592 tmpl += '<i class="icon-unlock-alt"></i> ';
592 tmpl += '<i class="icon-unlock-alt"></i> ';
593 }
593 }
594 }
594 }
595 tmpl += escapeMarkup(repoName);
595 tmpl += escapeMarkup(repoName);
596 return tmpl;
596 return tmpl;
597
597
598 }(result, escapeMarkup);
598 }(result, escapeMarkup);
599 };
599 };
600
600
601 var formatRepoGroupResult = function(result, container, query, escapeMarkup) {
601 var formatRepoGroupResult = function(result, container, query, escapeMarkup) {
602 return function(data, escapeMarkup) {
602 return function(data, escapeMarkup) {
603 if (!data.repo_group_id){
603 if (!data.repo_group_id){
604 return data.text; // optgroup text Repositories
604 return data.text; // optgroup text Repositories
605 }
605 }
606
606
607 var tmpl = '';
607 var tmpl = '';
608 var repoGroupName = data['text'];
608 var repoGroupName = data['text'];
609
609
610 if(data){
610 if(data){
611
611
612 tmpl += '<i class="icon-folder-close"></i> ';
612 tmpl += '<i class="icon-folder-close"></i> ';
613
613
614 }
614 }
615 tmpl += escapeMarkup(repoGroupName);
615 tmpl += escapeMarkup(repoGroupName);
616 return tmpl;
616 return tmpl;
617
617
618 }(result, escapeMarkup);
618 }(result, escapeMarkup);
619 };
619 };
620
620
621
621
622 var autocompleteMainFilterFormatResult = function (data, value, org_formatter) {
622 var autocompleteMainFilterFormatResult = function (data, value, org_formatter) {
623
623
624 if (value.split(':').length === 2) {
624 if (value.split(':').length === 2) {
625 value = value.split(':')[1]
625 value = value.split(':')[1]
626 }
626 }
627
627
628 var searchType = data['type'];
628 var searchType = data['type'];
629 var valueDisplay = data['value_display'];
629 var valueDisplay = data['value_display'];
630
630
631 var escapeRegExChars = function (value) {
631 var escapeRegExChars = function (value) {
632 return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
632 return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
633 };
633 };
634 var pattern = '(' + escapeRegExChars(value) + ')';
634 var pattern = '(' + escapeRegExChars(value) + ')';
635
635
636 var getRepoIcon = function(repo_type) {
636 var getRepoIcon = function(repo_type) {
637 if (repo_type === 'hg') {
637 if (repo_type === 'hg') {
638 return '<i class="icon-hg"></i> ';
638 return '<i class="icon-hg"></i> ';
639 }
639 }
640 else if (repo_type === 'git') {
640 else if (repo_type === 'git') {
641 return '<i class="icon-git"></i> ';
641 return '<i class="icon-git"></i> ';
642 }
642 }
643 else if (repo_type === 'svn') {
643 else if (repo_type === 'svn') {
644 return '<i class="icon-svn"></i> ';
644 return '<i class="icon-svn"></i> ';
645 }
645 }
646 return ''
646 return ''
647 };
647 };
648
648
649 // highlight match
649 // highlight match
650 valueDisplay = Select2.util.escapeMarkup(valueDisplay);
650 valueDisplay = Select2.util.escapeMarkup(valueDisplay);
651 valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
651 valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
652
652
653 var icon = '';
653 var icon = '';
654
654
655 if (searchType === 'hint') {
655 if (searchType === 'hint') {
656 icon += '<i class="icon-folder-close"></i> ';
656 icon += '<i class="icon-folder-close"></i> ';
657 }
657 }
658 // full text search
658 // full text search
659 else if (searchType === 'search') {
659 else if (searchType === 'search') {
660 icon += '<i class="icon-more"></i> ';
660 icon += '<i class="icon-more"></i> ';
661 }
661 }
662 // repository
662 // repository
663 else if (searchType === 'repo') {
663 else if (searchType === 'repo') {
664
664
665 var repoIcon = getRepoIcon(data['repo_type']);
665 var repoIcon = getRepoIcon(data['repo_type']);
666 icon += repoIcon;
666 icon += repoIcon;
667
667
668 if (data['private']) {
668 if (data['private']) {
669 icon += '<i class="icon-lock" ></i> ';
669 icon += '<i class="icon-lock" ></i> ';
670 }
670 }
671 else if (visualShowPublicIcon) {
671 else if (visualShowPublicIcon) {
672 icon += '<i class="icon-unlock-alt"></i> ';
672 icon += '<i class="icon-unlock-alt"></i> ';
673 }
673 }
674 }
674 }
675 // repository groups
675 // repository groups
676 else if (searchType === 'repo_group') {
676 else if (searchType === 'repo_group') {
677 icon += '<i class="icon-folder-close"></i> ';
677 icon += '<i class="icon-folder-close"></i> ';
678 }
678 }
679 // user group
679 // user group
680 else if (searchType === 'user_group') {
680 else if (searchType === 'user_group') {
681 icon += '<i class="icon-group"></i> ';
681 icon += '<i class="icon-group"></i> ';
682 }
682 }
683 else if (searchType === 'user') {
683 else if (searchType === 'user') {
684 icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']);
684 icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']);
685 }
685 }
686 // commit
686 // commit
687 else if (searchType === 'commit') {
687 else if (searchType === 'commit') {
688 var repo_data = data['repo_data'];
688 var repo_data = data['repo_data'];
689 var repoIcon = getRepoIcon(repo_data['repository_type']);
689 var repoIcon = getRepoIcon(repo_data['repository_type']);
690 if (repoIcon) {
690 if (repoIcon) {
691 icon += repoIcon;
691 icon += repoIcon;
692 } else {
692 } else {
693 icon += '<i class="icon-tag"></i>';
693 icon += '<i class="icon-tag"></i>';
694 }
694 }
695 }
695 }
696
696
697 var tmpl = '<div class="ac-container-wrap">{0}{1}</div>';
697 var tmpl = '<div class="ac-container-wrap">{0}{1}</div>';
698 return tmpl.format(icon, valueDisplay);
698 return tmpl.format(icon, valueDisplay);
699 };
699 };
700
700
701 var handleSelect = function(element, suggestion) {
701 var handleSelect = function(element, suggestion) {
702 if (suggestion.type === "hint") {
702 if (suggestion.type === "hint") {
703 // we skip action
703 // we skip action
704 $('#main_filter').focus();
704 $('#main_filter').focus();
705 } else {
705 } else {
706 window.location = suggestion['url'];
706 window.location = suggestion['url'];
707 }
707 }
708 };
708 };
709 var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) {
709 var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) {
710 if (queryLowerCase.split(':').length === 2) {
710 if (queryLowerCase.split(':').length === 2) {
711 queryLowerCase = queryLowerCase.split(':')[1]
711 queryLowerCase = queryLowerCase.split(':')[1]
712 }
712 }
713 return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1;
713 return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1;
714 };
714 };
715
715
716 $('#main_filter').autocomplete({
716 $('#main_filter').autocomplete({
717 serviceUrl: pyroutes.url('goto_switcher_data'),
717 serviceUrl: pyroutes.url('goto_switcher_data'),
718 params: {"search_context": templateContext.search_context},
718 params: {"search_context": templateContext.search_context},
719 minChars:2,
719 minChars:2,
720 maxHeight:400,
720 maxHeight:400,
721 deferRequestBy: 300, //miliseconds
721 deferRequestBy: 300, //miliseconds
722 tabDisabled: true,
722 tabDisabled: true,
723 autoSelectFirst: true,
723 autoSelectFirst: true,
724 formatResult: autocompleteMainFilterFormatResult,
724 formatResult: autocompleteMainFilterFormatResult,
725 lookupFilter: autocompleteMainFilterResult,
725 lookupFilter: autocompleteMainFilterResult,
726 onSelect: function (element, suggestion) {
726 onSelect: function (element, suggestion) {
727 handleSelect(element, suggestion);
727 handleSelect(element, suggestion);
728 return false;
728 return false;
729 },
729 },
730 onSearchError: function (element, query, jqXHR, textStatus, errorThrown) {
730 onSearchError: function (element, query, jqXHR, textStatus, errorThrown) {
731 if (jqXHR !== 'abort') {
731 if (jqXHR !== 'abort') {
732 alert("Error during search.\nError code: {0}".format(textStatus));
732 alert("Error during search.\nError code: {0}".format(textStatus));
733 window.location = '';
733 window.location = '';
734 }
734 }
735 }
735 }
736 });
736 });
737
737
738 showMainFilterBox = function () {
738 showMainFilterBox = function () {
739 $('#main_filter_help').toggle();
739 $('#main_filter_help').toggle();
740 };
740 };
741
741
742 </script>
742 </script>
743 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
743 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
744 </%def>
744 </%def>
745
745
746 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
746 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
747 <div class="modal-dialog">
747 <div class="modal-dialog">
748 <div class="modal-content">
748 <div class="modal-content">
749 <div class="modal-header">
749 <div class="modal-header">
750 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
750 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
751 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
751 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
752 </div>
752 </div>
753 <div class="modal-body">
753 <div class="modal-body">
754 <div class="block-left">
754 <div class="block-left">
755 <table class="keyboard-mappings">
755 <table class="keyboard-mappings">
756 <tbody>
756 <tbody>
757 <tr>
757 <tr>
758 <th></th>
758 <th></th>
759 <th>${_('Site-wide shortcuts')}</th>
759 <th>${_('Site-wide shortcuts')}</th>
760 </tr>
760 </tr>
761 <%
761 <%
762 elems = [
762 elems = [
763 ('/', 'Use quick search box'),
763 ('/', 'Use quick search box'),
764 ('g h', 'Goto home page'),
764 ('g h', 'Goto home page'),
765 ('g g', 'Goto my private gists page'),
765 ('g g', 'Goto my private gists page'),
766 ('g G', 'Goto my public gists page'),
766 ('g G', 'Goto my public gists page'),
767 ('g 0-9', 'Goto bookmarked items from 0-9'),
767 ('g 0-9', 'Goto bookmarked items from 0-9'),
768 ('n r', 'New repository page'),
768 ('n r', 'New repository page'),
769 ('n g', 'New gist page'),
769 ('n g', 'New gist page'),
770 ]
770 ]
771 %>
771 %>
772 %for key, desc in elems:
772 %for key, desc in elems:
773 <tr>
773 <tr>
774 <td class="keys">
774 <td class="keys">
775 <span class="key tag">${key}</span>
775 <span class="key tag">${key}</span>
776 </td>
776 </td>
777 <td>${desc}</td>
777 <td>${desc}</td>
778 </tr>
778 </tr>
779 %endfor
779 %endfor
780 </tbody>
780 </tbody>
781 </table>
781 </table>
782 </div>
782 </div>
783 <div class="block-left">
783 <div class="block-left">
784 <table class="keyboard-mappings">
784 <table class="keyboard-mappings">
785 <tbody>
785 <tbody>
786 <tr>
786 <tr>
787 <th></th>
787 <th></th>
788 <th>${_('Repositories')}</th>
788 <th>${_('Repositories')}</th>
789 </tr>
789 </tr>
790 <%
790 <%
791 elems = [
791 elems = [
792 ('g s', 'Goto summary page'),
792 ('g s', 'Goto summary page'),
793 ('g c', 'Goto changelog page'),
793 ('g c', 'Goto changelog page'),
794 ('g f', 'Goto files page'),
794 ('g f', 'Goto files page'),
795 ('g F', 'Goto files page with file search activated'),
795 ('g F', 'Goto files page with file search activated'),
796 ('g p', 'Goto pull requests page'),
796 ('g p', 'Goto pull requests page'),
797 ('g o', 'Goto repository settings'),
797 ('g o', 'Goto repository settings'),
798 ('g O', 'Goto repository permissions settings'),
798 ('g O', 'Goto repository permissions settings'),
799 ]
799 ]
800 %>
800 %>
801 %for key, desc in elems:
801 %for key, desc in elems:
802 <tr>
802 <tr>
803 <td class="keys">
803 <td class="keys">
804 <span class="key tag">${key}</span>
804 <span class="key tag">${key}</span>
805 </td>
805 </td>
806 <td>${desc}</td>
806 <td>${desc}</td>
807 </tr>
807 </tr>
808 %endfor
808 %endfor
809 </tbody>
809 </tbody>
810 </table>
810 </table>
811 </div>
811 </div>
812 </div>
812 </div>
813 <div class="modal-footer">
813 <div class="modal-footer">
814 </div>
814 </div>
815 </div><!-- /.modal-content -->
815 </div><!-- /.modal-content -->
816 </div><!-- /.modal-dialog -->
816 </div><!-- /.modal-dialog -->
817 </div><!-- /.modal -->
817 </div><!-- /.modal -->
818
818
@@ -1,104 +1,104 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="base/root.mako"/>
2 <%inherit file="base/root.mako"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Sign In')}
5 ${_('Sign In')}
6 %if c.rhodecode_name:
6 %if c.rhodecode_name:
7 &middot; ${h.branding(c.rhodecode_name)}
7 &middot; ${h.branding(c.rhodecode_name)}
8 %endif
8 %endif
9 </%def>
9 </%def>
10
10
11 <style>body{background-color:#eeeeee;}</style>
11 <style>body{background-color:#eeeeee;}</style>
12 <div class="loginbox">
12 <div class="loginbox">
13 <div class="header">
13 <div class="header">
14 <div id="header-inner" class="title">
14 <div id="header-inner" class="title">
15 <div id="logo">
15 <div id="logo">
16 <div class="logo-wrapper">
16 <div class="logo-wrapper">
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-60x60.png')}" alt="RhodeCode"/></a>
18 </div>
18 </div>
19 %if c.rhodecode_name:
19 %if c.rhodecode_name:
20 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
20 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
21 %endif
21 %endif
22 </div>
22 </div>
23 </div>
23 </div>
24 </div>
24 </div>
25
25
26 <div class="loginwrapper">
26 <div class="loginwrapper">
27 <rhodecode-toast id="notifications"></rhodecode-toast>
27 <rhodecode-toast id="notifications"></rhodecode-toast>
28
28
29 <div class="left-column">
29 <div class="left-column">
30 <img class="sign-in-image" src="${h.asset('images/sign-in.png')}" alt="RhodeCode"/>
30 <img class="sign-in-image" src="${h.asset('images/sign-in.png')}" alt="RhodeCode"/>
31 </div>
31 </div>
32
32
33 <%block name="above_login_button" />
33 <%block name="above_login_button" />
34 <div id="login" class="right-column">
34 <div id="login" class="right-column">
35 <!-- login -->
35 <!-- login -->
36 <div class="sign-in-title">
36 <div class="sign-in-title">
37 <h1>${_('Sign In using username/password')}</h1>
37 <h1>${_('Sign In using username/password')}</h1>
38 </div>
38 </div>
39 <div class="inner form">
39 <div class="inner form">
40 ${h.form(request.route_path('login', _query={'came_from': c.came_from}), needs_csrf_token=False)}
40 ${h.form(request.route_path('login', _query={'came_from': c.came_from}), needs_csrf_token=False)}
41
41
42 <label for="username">${_('Username')}:</label>
42 <label for="username">${_('Username')}:</label>
43 ${h.text('username', class_='focus', value=defaults.get('username'))}
43 ${h.text('username', class_='focus', value=defaults.get('username'))}
44 %if 'username' in errors:
44 %if 'username' in errors:
45 <span class="error-message">${errors.get('username')}</span>
45 <span class="error-message">${errors.get('username')}</span>
46 <br />
46 <br />
47 %endif
47 %endif
48
48
49 <label for="password">${_('Password')}:
49 <label for="password">${_('Password')}:
50 %if h.HasPermissionAny('hg.password_reset.enabled')():
50 %if h.HasPermissionAny('hg.password_reset.enabled')():
51 <div class="pull-right">${h.link_to(_('Forgot your password?'), h.route_path('reset_password'), class_='pwd_reset', tabindex="-1")}</div>
51 <div class="pull-right">${h.link_to(_('Forgot your password?'), h.route_path('reset_password'), class_='pwd_reset', tabindex="-1")}</div>
52 %endif
52 %endif
53
53
54 </label>
54 </label>
55 ${h.password('password', class_='focus')}
55 ${h.password('password', class_='focus')}
56 %if 'password' in errors:
56 %if 'password' in errors:
57 <span class="error-message">${errors.get('password')}</span>
57 <span class="error-message">${errors.get('password')}</span>
58 <br />
58 <br />
59 %endif
59 %endif
60
60
61 ${h.checkbox('remember', value=True, checked=defaults.get('remember'))}
61 ${h.checkbox('remember', value=True, checked=defaults.get('remember'))}
62 <% timeout = request.registry.settings.get('beaker.session.timeout', '0') %>
62 <% timeout = request.registry.settings.get('beaker.session.timeout', '0') %>
63 % if timeout == '0':
63 % if timeout == '0':
64 <% remember_label = _('Remember my indefinitely') %>
64 <% remember_label = _('Remember my indefinitely') %>
65 % else:
65 % else:
66 <% remember_label = _('Remember me for {}').format(h.age_from_seconds(timeout)) %>
66 <% remember_label = _('Remember me for {}').format(h.age_from_seconds(timeout)) %>
67 % endif
67 % endif
68 <label class="checkbox" for="remember">${remember_label}</label>
68 <label class="checkbox" for="remember">${remember_label}</label>
69
69
70 <p class="links">
70 <p class="links">
71 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
71 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
72 ${h.link_to(_("Create a new account."), request.route_path('register'), class_='new_account')}
72 ${h.link_to(_("Create a new account."), request.route_path('register'), class_='new_account')}
73 %endif
73 %endif
74 </p>
74 </p>
75
75
76 %if not h.HasPermissionAny('hg.password_reset.enabled')():
76 %if not h.HasPermissionAny('hg.password_reset.enabled')():
77 ## password reset hidden or disabled.
77 ## password reset hidden or disabled.
78 <p class="help-block">
78 <p class="help-block">
79 ${_('Password reset is disabled.')} <br/>
79 ${_('Password reset is disabled.')} <br/>
80 ${_('Please contact ')}
80 ${_('Please contact ')}
81 % if c.visual.rhodecode_support_url:
81 % if c.visual.rhodecode_support_url:
82 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
82 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
83 ${_('or')}
83 ${_('or')}
84 % endif
84 % endif
85 ${_('an administrator if you need help.')}
85 ${_('an administrator if you need help.')}
86 </p>
86 </p>
87 %endif
87 %endif
88
88
89 ${h.submit('sign_in', _('Sign In'), class_="btn sign-in", title=_('Sign in to {}').format(c.rhodecode_edition))}
89 ${h.submit('sign_in', _('Sign In'), class_="btn sign-in", title=_('Sign in to {}').format(c.rhodecode_edition))}
90
90
91 ${h.end_form()}
91 ${h.end_form()}
92 <script type="text/javascript">
92 <script type="text/javascript">
93 $(document).ready(function(){
93 $(document).ready(function(){
94 $('#username').focus();
94 $('#username').focus();
95 })
95 })
96 </script>
96 </script>
97
97
98 </div>
98 </div>
99 <!-- end login -->
99 <!-- end login -->
100
100
101 <%block name="below_login_button" />
101 <%block name="below_login_button" />
102 </div>
102 </div>
103 </div>
103 </div>
104 </div>
104 </div>
@@ -1,101 +1,101 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="base/root.mako"/>
2 <%inherit file="base/root.mako"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Reset Password')}
5 ${_('Reset Password')}
6 %if c.rhodecode_name:
6 %if c.rhodecode_name:
7 &middot; ${h.branding(c.rhodecode_name)}
7 &middot; ${h.branding(c.rhodecode_name)}
8 %endif
8 %endif
9 </%def>
9 </%def>
10 <style>body{background-color:#eeeeee;}</style>
10 <style>body{background-color:#eeeeee;}</style>
11
11
12 <div class="loginbox">
12 <div class="loginbox">
13 <div class="header">
13 <div class="header">
14 <div id="header-inner" class="title">
14 <div id="header-inner" class="title">
15 <div id="logo">
15 <div id="logo">
16 <div class="logo-wrapper">
16 <div class="logo-wrapper">
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-60x60.png')}" alt="RhodeCode"/></a>
18 </div>
18 </div>
19 %if c.rhodecode_name:
19 %if c.rhodecode_name:
20 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
20 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
21 %endif
21 %endif
22 </div>
22 </div>
23 </div>
23 </div>
24 </div>
24 </div>
25
25
26 <div class="loginwrapper">
26 <div class="loginwrapper">
27 <rhodecode-toast id="notifications"></rhodecode-toast>
27 <rhodecode-toast id="notifications"></rhodecode-toast>
28 <div class="left-column">
28 <div class="left-column">
29 <img class="sign-in-image" src="${h.asset('images/sign-in.png')}" alt="RhodeCode"/>
29 <img class="sign-in-image" src="${h.asset('images/sign-in.png')}" alt="RhodeCode"/>
30 </div>
30 </div>
31
31
32 %if h.HasPermissionAny('hg.password_reset.disabled')():
32 %if h.HasPermissionAny('hg.password_reset.disabled')():
33 <div class="right-column">
33 <div class="right-column">
34 <p>
34 <p>
35 ${_('Password reset is disabled. Please contact ')}
35 ${_('Password reset is disabled. Please contact ')}
36 % if c.visual.rhodecode_support_url:
36 % if c.visual.rhodecode_support_url:
37 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
37 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
38 ${_('or')}
38 ${_('or')}
39 % endif
39 % endif
40 ${_('an administrator if you need help.')}
40 ${_('an administrator if you need help.')}
41 </p>
41 </p>
42 </div>
42 </div>
43 %else:
43 %else:
44 <div id="register" class="right-column">
44 <div id="register" class="right-column">
45 <!-- login -->
45 <!-- login -->
46 <div class="sign-in-title">
46 <div class="sign-in-title">
47 <h1>${_('Reset your Password')}</h1>
47 <h1>${_('Reset your Password')}</h1>
48 <h4>${h.link_to(_("Go to the login page to sign in."), request.route_path('login'))}</h4>
48 <h4>${h.link_to(_("Go to the login page to sign in."), request.route_path('login'))}</h4>
49 </div>
49 </div>
50 <div class="inner form">
50 <div class="inner form">
51 ${h.form(request.route_path('reset_password'), needs_csrf_token=False)}
51 ${h.form(request.route_path('reset_password'), needs_csrf_token=False)}
52 <label for="email">${_('Email Address')}:</label>
52 <label for="email">${_('Email Address')}:</label>
53 ${h.text('email', defaults.get('email'))}
53 ${h.text('email', defaults.get('email'))}
54 %if 'email' in errors:
54 %if 'email' in errors:
55 <span class="error-message">${errors.get('email')}</span>
55 <span class="error-message">${errors.get('email')}</span>
56 <br />
56 <br />
57 %endif
57 %endif
58 <p class="help-block">${_('Password reset link will be sent to matching email address')}</p>
58 <p class="help-block">${_('Password reset link will be sent to matching email address')}</p>
59
59
60 %if captcha_active:
60 %if captcha_active:
61 <div class="login-captcha">
61 <div class="login-captcha">
62 <label for="email">${_('Captcha')}:</label>
62 <label for="email">${_('Captcha')}:</label>
63 ${h.hidden('recaptcha_field')}
63 ${h.hidden('recaptcha_field')}
64 <div id="recaptcha"></div>
64 <div id="recaptcha"></div>
65
65
66 %if 'recaptcha_field' in errors:
66 %if 'recaptcha_field' in errors:
67 <span class="error-message">${errors.get('recaptcha_field')}</span>
67 <span class="error-message">${errors.get('recaptcha_field')}</span>
68 <br />
68 <br />
69 %endif
69 %endif
70 </div>
70 </div>
71 %endif
71 %endif
72
72
73 ${h.submit('send', _('Send password reset email'), class_="btn sign-in")}
73 ${h.submit('send', _('Send password reset email'), class_="btn sign-in")}
74 <p class="help-block pull-right">
74 <p class="help-block pull-right">
75 RhodeCode ${c.rhodecode_edition}
75 RhodeCode ${c.rhodecode_edition}
76 </p>
76 </p>
77
77
78 ${h.end_form()}
78 ${h.end_form()}
79 </div>
79 </div>
80 </div>
80 </div>
81 %endif
81 %endif
82 </div>
82 </div>
83 </div>
83 </div>
84
84
85 <script type="text/javascript">
85 <script type="text/javascript">
86 $(document).ready(function(){
86 $(document).ready(function(){
87 $('#email').focus();
87 $('#email').focus();
88 });
88 });
89 </script>
89 </script>
90
90
91 % if captcha_active:
91 % if captcha_active:
92 <script type="text/javascript">
92 <script type="text/javascript">
93 var onloadCallback = function() {
93 var onloadCallback = function() {
94 grecaptcha.render('recaptcha', {
94 grecaptcha.render('recaptcha', {
95 'sitekey' : "${captcha_public_key}"
95 'sitekey' : "${captcha_public_key}"
96 });
96 });
97 };
97 };
98 </script>
98 </script>
99 <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
99 <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
100 % endif
100 % endif
101
101
@@ -1,146 +1,146 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="base/root.mako"/>
2 <%inherit file="base/root.mako"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Create an Account')}
5 ${_('Create an Account')}
6 %if c.rhodecode_name:
6 %if c.rhodecode_name:
7 &middot; ${h.branding(c.rhodecode_name)}
7 &middot; ${h.branding(c.rhodecode_name)}
8 %endif
8 %endif
9 </%def>
9 </%def>
10 <style>body{background-color:#eeeeee;}</style>
10 <style>body{background-color:#eeeeee;}</style>
11
11
12 <div class="loginbox">
12 <div class="loginbox">
13 <div class="header">
13 <div class="header">
14 <div id="header-inner" class="title">
14 <div id="header-inner" class="title">
15 <div id="logo">
15 <div id="logo">
16 <div class="logo-wrapper">
16 <div class="logo-wrapper">
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
17 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-60x60.png')}" alt="RhodeCode"/></a>
18 </div>
18 </div>
19 %if c.rhodecode_name:
19 %if c.rhodecode_name:
20 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
20 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
21 %endif
21 %endif
22 </div>
22 </div>
23 </div>
23 </div>
24 </div>
24 </div>
25
25
26 <div class="loginwrapper">
26 <div class="loginwrapper">
27 <rhodecode-toast id="notifications"></rhodecode-toast>
27 <rhodecode-toast id="notifications"></rhodecode-toast>
28 <div class="left-column">
28 <div class="left-column">
29 <img class="sign-in-image" src="${h.asset('images/sign-in.png')}" alt="RhodeCode"/>
29 <img class="sign-in-image" src="${h.asset('images/sign-in.png')}" alt="RhodeCode"/>
30 </div>
30 </div>
31 <%block name="above_register_button" />
31 <%block name="above_register_button" />
32 <div id="register" class="right-column">
32 <div id="register" class="right-column">
33 <!-- login -->
33 <!-- login -->
34 <div class="sign-in-title">
34 <div class="sign-in-title">
35 % if external_auth_provider:
35 % if external_auth_provider:
36 <h1>${_('Create an account linked with {}').format(external_auth_provider)}</h1>
36 <h1>${_('Create an account linked with {}').format(external_auth_provider)}</h1>
37 % else:
37 % else:
38 <h1>${_('Create an account')}</h1>
38 <h1>${_('Create an account')}</h1>
39 % endif
39 % endif
40
40
41 <h4>${h.link_to(_("Go to the login page to sign in with an existing account."), request.route_path('login'))}</h4>
41 <h4>${h.link_to(_("Go to the login page to sign in with an existing account."), request.route_path('login'))}</h4>
42 </div>
42 </div>
43 <div class="inner form">
43 <div class="inner form">
44 ${h.form(request.route_path('register'), needs_csrf_token=False)}
44 ${h.form(request.route_path('register'), needs_csrf_token=False)}
45
45
46 <label for="username">${_('Username')}:</label>
46 <label for="username">${_('Username')}:</label>
47 ${h.text('username', defaults.get('username'))}
47 ${h.text('username', defaults.get('username'))}
48 %if 'username' in errors:
48 %if 'username' in errors:
49 <span class="error-message">${errors.get('username')}</span>
49 <span class="error-message">${errors.get('username')}</span>
50 <br />
50 <br />
51 %endif
51 %endif
52
52
53 % if external_auth_provider:
53 % if external_auth_provider:
54 ## store internal marker about external identity
54 ## store internal marker about external identity
55 ${h.hidden('external_identity', external_auth_provider)}
55 ${h.hidden('external_identity', external_auth_provider)}
56 ## hide password prompts for social auth
56 ## hide password prompts for social auth
57 <div style="display: none">
57 <div style="display: none">
58 % endif
58 % endif
59
59
60 <label for="password">${_('Password')}:</label>
60 <label for="password">${_('Password')}:</label>
61 ${h.password('password', defaults.get('password'))}
61 ${h.password('password', defaults.get('password'))}
62 %if 'password' in errors:
62 %if 'password' in errors:
63 <span class="error-message">${errors.get('password')}</span>
63 <span class="error-message">${errors.get('password')}</span>
64 <br />
64 <br />
65 %endif
65 %endif
66
66
67 <label for="password_confirmation">${_('Re-enter password')}:</label>
67 <label for="password_confirmation">${_('Re-enter password')}:</label>
68 ${h.password('password_confirmation', defaults.get('password_confirmation'))}
68 ${h.password('password_confirmation', defaults.get('password_confirmation'))}
69 %if 'password_confirmation' in errors:
69 %if 'password_confirmation' in errors:
70 <span class="error-message">${errors.get('password_confirmation')}</span>
70 <span class="error-message">${errors.get('password_confirmation')}</span>
71 <br />
71 <br />
72 %endif
72 %endif
73
73
74 % if external_auth_provider:
74 % if external_auth_provider:
75 ## hide password prompts for social auth
75 ## hide password prompts for social auth
76 </div>
76 </div>
77 % endif
77 % endif
78
78
79 <label for="firstname">${_('First Name')}:</label>
79 <label for="firstname">${_('First Name')}:</label>
80 ${h.text('firstname', defaults.get('firstname'))}
80 ${h.text('firstname', defaults.get('firstname'))}
81 %if 'firstname' in errors:
81 %if 'firstname' in errors:
82 <span class="error-message">${errors.get('firstname')}</span>
82 <span class="error-message">${errors.get('firstname')}</span>
83 <br />
83 <br />
84 %endif
84 %endif
85
85
86 <label for="lastname">${_('Last Name')}:</label>
86 <label for="lastname">${_('Last Name')}:</label>
87 ${h.text('lastname', defaults.get('lastname'))}
87 ${h.text('lastname', defaults.get('lastname'))}
88 %if 'lastname' in errors:
88 %if 'lastname' in errors:
89 <span class="error-message">${errors.get('lastname')}</span>
89 <span class="error-message">${errors.get('lastname')}</span>
90 <br />
90 <br />
91 %endif
91 %endif
92
92
93 <label for="email">${_('Email')}:</label>
93 <label for="email">${_('Email')}:</label>
94 ${h.text('email', defaults.get('email'))}
94 ${h.text('email', defaults.get('email'))}
95 %if 'email' in errors:
95 %if 'email' in errors:
96 <span class="error-message">${errors.get('email')}</span>
96 <span class="error-message">${errors.get('email')}</span>
97 <br />
97 <br />
98 %endif
98 %endif
99
99
100 %if captcha_active:
100 %if captcha_active:
101 <div>
101 <div>
102 <label for="recaptcha">${_('Captcha')}:</label>
102 <label for="recaptcha">${_('Captcha')}:</label>
103 ${h.hidden('recaptcha_field')}
103 ${h.hidden('recaptcha_field')}
104 <div id="recaptcha"></div>
104 <div id="recaptcha"></div>
105 %if 'recaptcha_field' in errors:
105 %if 'recaptcha_field' in errors:
106 <span class="error-message">${errors.get('recaptcha_field')}</span>
106 <span class="error-message">${errors.get('recaptcha_field')}</span>
107 <br />
107 <br />
108 %endif
108 %endif
109 </div>
109 </div>
110 %endif
110 %endif
111
111
112 %if not auto_active:
112 %if not auto_active:
113 <p class="activation_msg">
113 <p class="activation_msg">
114 ${_('Account activation requires admin approval.')}
114 ${_('Account activation requires admin approval.')}
115 </p>
115 </p>
116 %endif
116 %endif
117 <p class="register_message">
117 <p class="register_message">
118 ${register_message|n}
118 ${register_message|n}
119 </p>
119 </p>
120
120
121 ${h.submit('sign_up',_('Create Account'), class_="btn sign-in", title=_('Create Account in {}').format(c.rhodecode_edition))}
121 ${h.submit('sign_up',_('Create Account'), class_="btn sign-in", title=_('Create Account in {}').format(c.rhodecode_edition))}
122 ${h.end_form()}
122 ${h.end_form()}
123 </div>
123 </div>
124 <%block name="below_register_button" />
124 <%block name="below_register_button" />
125 </div>
125 </div>
126 </div>
126 </div>
127 </div>
127 </div>
128
128
129
129
130 <script type="text/javascript">
130 <script type="text/javascript">
131 $(document).ready(function(){
131 $(document).ready(function(){
132 $('#username').focus();
132 $('#username').focus();
133 });
133 });
134 </script>
134 </script>
135
135
136 % if captcha_active:
136 % if captcha_active:
137 <script type="text/javascript">
137 <script type="text/javascript">
138 var onloadCallback = function() {
138 var onloadCallback = function() {
139 grecaptcha.render('recaptcha', {
139 grecaptcha.render('recaptcha', {
140 'sitekey' : "${captcha_public_key}"
140 'sitekey' : "${captcha_public_key}"
141 });
141 });
142 };
142 };
143 </script>
143 </script>
144 <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
144 <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
145 % endif
145 % endif
146
146
1 NO CONTENT: file was removed, binary diff hidden
NO CONTENT: file was removed, binary diff hidden
General Comments 0
You need to be logged in to leave comments. Login now