##// END OF EJS Templates
style: use different indicator for nicer UI.
marcink -
r2839:7c07dd88 default
parent child Browse files
Show More
@@ -1,676 +1,676 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-216x60.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: %s') % c.rhodecode_instanceid}
55 ${_('RhodeCode instance id: %s') % 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(c.rhodecode_db_repo)}
183 ${h.breadcrumb_repo_link(c.rhodecode_db_repo)}
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 <a href="${h.route_path('repo_summary',repo_name=repo_instance.fork.repo_name)}">${repo_instance.fork.repo_name}</a>
191 <a href="${h.route_path('repo_summary',repo_name=repo_instance.fork.repo_name)}">${repo_instance.fork.repo_name}</a>
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 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
234 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
235 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
235 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
236 <li class="${is_active('showpullrequest')}">
236 <li class="${is_active('showpullrequest')}">
237 <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)}">
237 <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)}">
238 %if c.repository_pull_requests:
238 %if c.repository_pull_requests:
239 <span class="pr_notifications">${c.repository_pull_requests}</span>
239 <span class="pr_notifications">${c.repository_pull_requests}</span>
240 %endif
240 %endif
241 <div class="menulabel">${_('Pull Requests')}</div>
241 <div class="menulabel">${_('Pull Requests')}</div>
242 </a>
242 </a>
243 </li>
243 </li>
244 %endif
244 %endif
245 <li class="${is_active('options')}">
245 <li class="${is_active('options')}">
246 <a class="menulink dropdown">
246 <a class="menulink dropdown">
247 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
247 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
248 </a>
248 </a>
249 <ul class="submenu">
249 <ul class="submenu">
250 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
250 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
251 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Settings')}</a></li>
251 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Settings')}</a></li>
252 %endif
252 %endif
253 %if c.rhodecode_db_repo.fork:
253 %if c.rhodecode_db_repo.fork:
254 <li>
254 <li>
255 <a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
255 <a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
256 href="${h.route_path('repo_compare',
256 href="${h.route_path('repo_compare',
257 repo_name=c.rhodecode_db_repo.fork.repo_name,
257 repo_name=c.rhodecode_db_repo.fork.repo_name,
258 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
258 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
259 source_ref=c.rhodecode_db_repo.landing_rev[1],
259 source_ref=c.rhodecode_db_repo.landing_rev[1],
260 target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
260 target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
261 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
261 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
262 _query=dict(merge=1))}"
262 _query=dict(merge=1))}"
263 >
263 >
264 ${_('Compare fork')}
264 ${_('Compare fork')}
265 </a>
265 </a>
266 </li>
266 </li>
267 %endif
267 %endif
268
268
269 <li><a href="${h.route_path('search_repo',repo_name=c.repo_name)}">${_('Search')}</a></li>
269 <li><a href="${h.route_path('search_repo',repo_name=c.repo_name)}">${_('Search')}</a></li>
270
270
271 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
271 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
272 %if c.rhodecode_db_repo.locked[0]:
272 %if c.rhodecode_db_repo.locked[0]:
273 <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
273 <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
274 %else:
274 %else:
275 <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
275 <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
276 %endif
276 %endif
277 %endif
277 %endif
278 %if c.rhodecode_user.username != h.DEFAULT_USER:
278 %if c.rhodecode_user.username != h.DEFAULT_USER:
279 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
279 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
280 <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li>
280 <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li>
281 <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
281 <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
282 %endif
282 %endif
283 %endif
283 %endif
284 </ul>
284 </ul>
285 </li>
285 </li>
286 </ul>
286 </ul>
287 </div>
287 </div>
288 <div class="clear"></div>
288 <div class="clear"></div>
289 </div>
289 </div>
290 <!--- END CONTEXT BAR -->
290 <!--- END CONTEXT BAR -->
291
291
292 </%def>
292 </%def>
293
293
294 <%def name="usermenu(active=False)">
294 <%def name="usermenu(active=False)">
295 ## USER MENU
295 ## USER MENU
296 <li id="quick_login_li" class="${'active' if active else ''}">
296 <li id="quick_login_li" class="${'active' if active else ''}">
297 <a id="quick_login_link" class="menulink childs">
297 <a id="quick_login_link" class="menulink childs">
298 ${gravatar(c.rhodecode_user.email, 20)}
298 ${gravatar(c.rhodecode_user.email, 20)}
299 <span class="user">
299 <span class="user">
300 %if c.rhodecode_user.username != h.DEFAULT_USER:
300 %if c.rhodecode_user.username != h.DEFAULT_USER:
301 <span class="menu_link_user">${c.rhodecode_user.username}</span><div class="show_more"></div>
301 <span class="menu_link_user">${c.rhodecode_user.username}</span><div class="show_more"></div>
302 %else:
302 %else:
303 <span>${_('Sign in')}</span>
303 <span>${_('Sign in')}</span>
304 %endif
304 %endif
305 </span>
305 </span>
306 </a>
306 </a>
307
307
308 <div class="user-menu submenu">
308 <div class="user-menu submenu">
309 <div id="quick_login">
309 <div id="quick_login">
310 %if c.rhodecode_user.username == h.DEFAULT_USER:
310 %if c.rhodecode_user.username == h.DEFAULT_USER:
311 <h4>${_('Sign in to your account')}</h4>
311 <h4>${_('Sign in to your account')}</h4>
312 ${h.form(h.route_path('login', _query={'came_from': h.current_route_path(request)}), needs_csrf_token=False)}
312 ${h.form(h.route_path('login', _query={'came_from': h.current_route_path(request)}), needs_csrf_token=False)}
313 <div class="form form-vertical">
313 <div class="form form-vertical">
314 <div class="fields">
314 <div class="fields">
315 <div class="field">
315 <div class="field">
316 <div class="label">
316 <div class="label">
317 <label for="username">${_('Username')}:</label>
317 <label for="username">${_('Username')}:</label>
318 </div>
318 </div>
319 <div class="input">
319 <div class="input">
320 ${h.text('username',class_='focus',tabindex=1)}
320 ${h.text('username',class_='focus',tabindex=1)}
321 </div>
321 </div>
322
322
323 </div>
323 </div>
324 <div class="field">
324 <div class="field">
325 <div class="label">
325 <div class="label">
326 <label for="password">${_('Password')}:</label>
326 <label for="password">${_('Password')}:</label>
327 %if h.HasPermissionAny('hg.password_reset.enabled')():
327 %if h.HasPermissionAny('hg.password_reset.enabled')():
328 <span class="forgot_password">${h.link_to(_('(Forgot password?)'),h.route_path('reset_password'), class_='pwd_reset')}</span>
328 <span class="forgot_password">${h.link_to(_('(Forgot password?)'),h.route_path('reset_password'), class_='pwd_reset')}</span>
329 %endif
329 %endif
330 </div>
330 </div>
331 <div class="input">
331 <div class="input">
332 ${h.password('password',class_='focus',tabindex=2)}
332 ${h.password('password',class_='focus',tabindex=2)}
333 </div>
333 </div>
334 </div>
334 </div>
335 <div class="buttons">
335 <div class="buttons">
336 <div class="register">
336 <div class="register">
337 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
337 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
338 ${h.link_to(_("Don't have an account?"),h.route_path('register'))} <br/>
338 ${h.link_to(_("Don't have an account?"),h.route_path('register'))} <br/>
339 %endif
339 %endif
340 ${h.link_to(_("Using external auth? Sign In here."),h.route_path('login'))}
340 ${h.link_to(_("Using external auth? Sign In here."),h.route_path('login'))}
341 </div>
341 </div>
342 <div class="submit">
342 <div class="submit">
343 ${h.submit('sign_in',_('Sign In'),class_="btn btn-small",tabindex=3)}
343 ${h.submit('sign_in',_('Sign In'),class_="btn btn-small",tabindex=3)}
344 </div>
344 </div>
345 </div>
345 </div>
346 </div>
346 </div>
347 </div>
347 </div>
348 ${h.end_form()}
348 ${h.end_form()}
349 %else:
349 %else:
350 <div class="">
350 <div class="">
351 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
351 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
352 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
352 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
353 <div class="email">${c.rhodecode_user.email}</div>
353 <div class="email">${c.rhodecode_user.email}</div>
354 </div>
354 </div>
355 <div class="">
355 <div class="">
356 <ol class="links">
356 <ol class="links">
357 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
357 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
358 % if c.rhodecode_user.personal_repo_group:
358 % if c.rhodecode_user.personal_repo_group:
359 <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>
359 <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>
360 % endif
360 % endif
361 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
361 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
362
362
363 <li class="logout">
363 <li class="logout">
364 ${h.secure_form(h.route_path('logout'), request=request)}
364 ${h.secure_form(h.route_path('logout'), request=request)}
365 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
365 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
366 ${h.end_form()}
366 ${h.end_form()}
367 </li>
367 </li>
368 </ol>
368 </ol>
369 </div>
369 </div>
370 %endif
370 %endif
371 </div>
371 </div>
372 </div>
372 </div>
373 %if c.rhodecode_user.username != h.DEFAULT_USER:
373 %if c.rhodecode_user.username != h.DEFAULT_USER:
374 <div class="pill_container">
374 <div class="pill_container">
375 <a class="menu_link_notifications ${'empty' if c.unread_notifications == 0 else ''}" href="${h.route_path('notifications_show_all')}">${c.unread_notifications}</a>
375 <a class="menu_link_notifications ${'empty' if c.unread_notifications == 0 else ''}" href="${h.route_path('notifications_show_all')}">${c.unread_notifications}</a>
376 </div>
376 </div>
377 % endif
377 % endif
378 </li>
378 </li>
379 </%def>
379 </%def>
380
380
381 <%def name="menu_items(active=None)">
381 <%def name="menu_items(active=None)">
382 <%
382 <%
383 def is_active(selected):
383 def is_active(selected):
384 if selected == active:
384 if selected == active:
385 return "active"
385 return "active"
386 return ""
386 return ""
387 %>
387 %>
388 <ul id="quick" class="main_nav navigation horizontal-list">
388 <ul id="quick" class="main_nav navigation horizontal-list">
389
389
390 ## Main filter
390 ## Main filter
391 <li>
391 <li>
392 <div class="menulabel main_filter_box">
392 <div class="menulabel main_filter_box">
393 <div class="main_filter_input_box">
393 <div class="main_filter_input_box">
394 <input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value=""/>
394 <input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value=""/>
395 </div>
395 </div>
396 <div class="main_filter_help_box">
396 <div class="main_filter_help_box">
397 <a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a>
397 <a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a>
398 </div>
398 </div>
399 </div>
399 </div>
400
400
401 <div id="main_filter_help" style="display: none">
401 <div id="main_filter_help" style="display: none">
402 Use '/' key to quickly access this field.
402 Use '/' key to quickly access this field.
403 Enter name of repository, or repository group for quick search.
403 Enter name of repository, or repository group for quick search.
404
404
405 Prefix query to allow special search:
405 Prefix query to allow special search:
406
406
407 user:admin, to search for usernames
407 user:admin, to search for usernames
408
408
409 user_group:devops, to search for user groups
409 user_group:devops, to search for user groups
410
410
411 commit:efced4, to search for commits
411 commit:efced4, to search for commits
412
412
413 </div>
413 </div>
414 </li>
414 </li>
415
415
416 ## ROOT MENU
416 ## ROOT MENU
417 %if c.rhodecode_user.username != h.DEFAULT_USER:
417 %if c.rhodecode_user.username != h.DEFAULT_USER:
418 <li class="${is_active('journal')}">
418 <li class="${is_active('journal')}">
419 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
419 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
420 <div class="menulabel">${_('Journal')}</div>
420 <div class="menulabel">${_('Journal')}</div>
421 </a>
421 </a>
422 </li>
422 </li>
423 %else:
423 %else:
424 <li class="${is_active('journal')}">
424 <li class="${is_active('journal')}">
425 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
425 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
426 <div class="menulabel">${_('Public journal')}</div>
426 <div class="menulabel">${_('Public journal')}</div>
427 </a>
427 </a>
428 </li>
428 </li>
429 %endif
429 %endif
430 <li class="${is_active('gists')}">
430 <li class="${is_active('gists')}">
431 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
431 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
432 <div class="menulabel">${_('Gists')}</div>
432 <div class="menulabel">${_('Gists')}</div>
433 </a>
433 </a>
434 </li>
434 </li>
435 <li class="${is_active('search')}">
435 <li class="${is_active('search')}">
436 <a class="menulink" title="${_('Search in repositories you have access to')}" href="${h.route_path('search')}">
436 <a class="menulink" title="${_('Search in repositories you have access to')}" href="${h.route_path('search')}">
437 <div class="menulabel">${_('Search')}</div>
437 <div class="menulabel">${_('Search')}</div>
438 </a>
438 </a>
439 </li>
439 </li>
440 % if h.HasPermissionAll('hg.admin')('access admin main page'):
440 % if h.HasPermissionAll('hg.admin')('access admin main page'):
441 <li class="${is_active('admin')}">
441 <li class="${is_active('admin')}">
442 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
442 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
443 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
443 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
444 </a>
444 </a>
445 ${admin_menu()}
445 ${admin_menu()}
446 </li>
446 </li>
447 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
447 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
448 <li class="${is_active('admin')}">
448 <li class="${is_active('admin')}">
449 <a class="menulink childs" title="${_('Delegated Admin settings')}">
449 <a class="menulink childs" title="${_('Delegated Admin settings')}">
450 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
450 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
451 </a>
451 </a>
452 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
452 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
453 c.rhodecode_user.repository_groups_admin,
453 c.rhodecode_user.repository_groups_admin,
454 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
454 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
455 </li>
455 </li>
456 % endif
456 % endif
457 ## render extra user menu
457 ## render extra user menu
458 ${usermenu(active=(active=='my_account'))}
458 ${usermenu(active=(active=='my_account'))}
459
459
460 % if c.debug_style:
460 % if c.debug_style:
461 <li class="${is_active('debug_style')}">
461 <li>
462 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
462 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
463 <div class="menulabel">${_('Style')}</div>
463 <div class="menulabel">${_('[Style]')}</div>
464 </a>
464 </a>
465 </li>
465 </li>
466 % endif
466 % endif
467 </ul>
467 </ul>
468
468
469 <script type="text/javascript">
469 <script type="text/javascript">
470 var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True";
470 var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True";
471
471
472 var formatRepoResult = function(result, container, query, escapeMarkup) {
472 var formatRepoResult = function(result, container, query, escapeMarkup) {
473 return function(data, escapeMarkup) {
473 return function(data, escapeMarkup) {
474 if (!data.repo_id){
474 if (!data.repo_id){
475 return data.text; // optgroup text Repositories
475 return data.text; // optgroup text Repositories
476 }
476 }
477
477
478 var tmpl = '';
478 var tmpl = '';
479 var repoType = data['repo_type'];
479 var repoType = data['repo_type'];
480 var repoName = data['text'];
480 var repoName = data['text'];
481
481
482 if(data && data.type == 'repo'){
482 if(data && data.type == 'repo'){
483 if(repoType === 'hg'){
483 if(repoType === 'hg'){
484 tmpl += '<i class="icon-hg"></i> ';
484 tmpl += '<i class="icon-hg"></i> ';
485 }
485 }
486 else if(repoType === 'git'){
486 else if(repoType === 'git'){
487 tmpl += '<i class="icon-git"></i> ';
487 tmpl += '<i class="icon-git"></i> ';
488 }
488 }
489 else if(repoType === 'svn'){
489 else if(repoType === 'svn'){
490 tmpl += '<i class="icon-svn"></i> ';
490 tmpl += '<i class="icon-svn"></i> ';
491 }
491 }
492 if(data['private']){
492 if(data['private']){
493 tmpl += '<i class="icon-lock" ></i> ';
493 tmpl += '<i class="icon-lock" ></i> ';
494 }
494 }
495 else if(visualShowPublicIcon){
495 else if(visualShowPublicIcon){
496 tmpl += '<i class="icon-unlock-alt"></i> ';
496 tmpl += '<i class="icon-unlock-alt"></i> ';
497 }
497 }
498 }
498 }
499 tmpl += escapeMarkup(repoName);
499 tmpl += escapeMarkup(repoName);
500 return tmpl;
500 return tmpl;
501
501
502 }(result, escapeMarkup);
502 }(result, escapeMarkup);
503 };
503 };
504
504
505
505
506 var autocompleteMainFilterFormatResult = function (data, value, org_formatter) {
506 var autocompleteMainFilterFormatResult = function (data, value, org_formatter) {
507
507
508 if (value.split(':').length === 2) {
508 if (value.split(':').length === 2) {
509 value = value.split(':')[1]
509 value = value.split(':')[1]
510 }
510 }
511
511
512 var searchType = data['type'];
512 var searchType = data['type'];
513 var valueDisplay = data['value_display'];
513 var valueDisplay = data['value_display'];
514
514
515 var escapeRegExChars = function (value) {
515 var escapeRegExChars = function (value) {
516 return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
516 return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
517 };
517 };
518 var pattern = '(' + escapeRegExChars(value) + ')';
518 var pattern = '(' + escapeRegExChars(value) + ')';
519
519
520 // highlight match
520 // highlight match
521 valueDisplay = Select2.util.escapeMarkup(valueDisplay);
521 valueDisplay = Select2.util.escapeMarkup(valueDisplay);
522 valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
522 valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
523
523
524 var icon = '';
524 var icon = '';
525
525
526 if (searchType === 'hint') {
526 if (searchType === 'hint') {
527 icon += '<i class="icon-folder-close"></i> ';
527 icon += '<i class="icon-folder-close"></i> ';
528 }
528 }
529 else if (searchType === 'search') {
529 else if (searchType === 'search') {
530 icon += '<i class="icon-more"></i> ';
530 icon += '<i class="icon-more"></i> ';
531 }
531 }
532 else if (searchType === 'repo') {
532 else if (searchType === 'repo') {
533 if (data['repo_type'] === 'hg') {
533 if (data['repo_type'] === 'hg') {
534 icon += '<i class="icon-hg"></i> ';
534 icon += '<i class="icon-hg"></i> ';
535 }
535 }
536 else if (data['repo_type'] === 'git') {
536 else if (data['repo_type'] === 'git') {
537 icon += '<i class="icon-git"></i> ';
537 icon += '<i class="icon-git"></i> ';
538 }
538 }
539 else if (data['repo_type'] === 'svn') {
539 else if (data['repo_type'] === 'svn') {
540 icon += '<i class="icon-svn"></i> ';
540 icon += '<i class="icon-svn"></i> ';
541 }
541 }
542 if (data['private']) {
542 if (data['private']) {
543 icon += '<i class="icon-lock" ></i> ';
543 icon += '<i class="icon-lock" ></i> ';
544 }
544 }
545 else if (visualShowPublicIcon) {
545 else if (visualShowPublicIcon) {
546 icon += '<i class="icon-unlock-alt"></i> ';
546 icon += '<i class="icon-unlock-alt"></i> ';
547 }
547 }
548 }
548 }
549 else if (searchType === 'repo_group') {
549 else if (searchType === 'repo_group') {
550 icon += '<i class="icon-folder-close"></i> ';
550 icon += '<i class="icon-folder-close"></i> ';
551 }
551 }
552 else if (searchType === 'user_group') {
552 else if (searchType === 'user_group') {
553 icon += '<i class="icon-group"></i> ';
553 icon += '<i class="icon-group"></i> ';
554 }
554 }
555 else if (searchType === 'user') {
555 else if (searchType === 'user') {
556 icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']);
556 icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']);
557 }
557 }
558 else if (searchType === 'commit') {
558 else if (searchType === 'commit') {
559 icon += '<i class="icon-tag"></i>';
559 icon += '<i class="icon-tag"></i>';
560 }
560 }
561
561
562 var tmpl = '<div class="ac-container-wrap">{0}{1}</div>';
562 var tmpl = '<div class="ac-container-wrap">{0}{1}</div>';
563 return tmpl.format(icon, valueDisplay);
563 return tmpl.format(icon, valueDisplay);
564 };
564 };
565
565
566 var handleSelect = function(element, suggestion) {
566 var handleSelect = function(element, suggestion) {
567 if (suggestion.type === "hint") {
567 if (suggestion.type === "hint") {
568 // we skip action
568 // we skip action
569 $('#main_filter').focus();
569 $('#main_filter').focus();
570 } else {
570 } else {
571 window.location = suggestion['url'];
571 window.location = suggestion['url'];
572 }
572 }
573 };
573 };
574 var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) {
574 var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) {
575 if (queryLowerCase.split(':').length === 2) {
575 if (queryLowerCase.split(':').length === 2) {
576 queryLowerCase = queryLowerCase.split(':')[1]
576 queryLowerCase = queryLowerCase.split(':')[1]
577 }
577 }
578 return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1;
578 return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1;
579 };
579 };
580
580
581 $('#main_filter').autocomplete({
581 $('#main_filter').autocomplete({
582 serviceUrl: pyroutes.url('goto_switcher_data'),
582 serviceUrl: pyroutes.url('goto_switcher_data'),
583 params: {"repo_group_id": templateContext.repo_group_id},
583 params: {"repo_group_id": templateContext.repo_group_id},
584 minChars:2,
584 minChars:2,
585 maxHeight:400,
585 maxHeight:400,
586 deferRequestBy: 300, //miliseconds
586 deferRequestBy: 300, //miliseconds
587 tabDisabled: true,
587 tabDisabled: true,
588 autoSelectFirst: true,
588 autoSelectFirst: true,
589 formatResult: autocompleteMainFilterFormatResult,
589 formatResult: autocompleteMainFilterFormatResult,
590 lookupFilter: autocompleteMainFilterResult,
590 lookupFilter: autocompleteMainFilterResult,
591 onSelect: function(element, suggestion){
591 onSelect: function(element, suggestion){
592 handleSelect(element, suggestion);
592 handleSelect(element, suggestion);
593 return false;
593 return false;
594 }
594 }
595 });
595 });
596
596
597 showMainFilterBox = function () {
597 showMainFilterBox = function () {
598 $('#main_filter_help').toggle();
598 $('#main_filter_help').toggle();
599 }
599 }
600
600
601 </script>
601 </script>
602 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
602 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
603 </%def>
603 </%def>
604
604
605 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
605 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
606 <div class="modal-dialog">
606 <div class="modal-dialog">
607 <div class="modal-content">
607 <div class="modal-content">
608 <div class="modal-header">
608 <div class="modal-header">
609 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
609 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
610 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
610 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
611 </div>
611 </div>
612 <div class="modal-body">
612 <div class="modal-body">
613 <div class="block-left">
613 <div class="block-left">
614 <table class="keyboard-mappings">
614 <table class="keyboard-mappings">
615 <tbody>
615 <tbody>
616 <tr>
616 <tr>
617 <th></th>
617 <th></th>
618 <th>${_('Site-wide shortcuts')}</th>
618 <th>${_('Site-wide shortcuts')}</th>
619 </tr>
619 </tr>
620 <%
620 <%
621 elems = [
621 elems = [
622 ('/', 'Use quick search box'),
622 ('/', 'Use quick search box'),
623 ('g h', 'Goto home page'),
623 ('g h', 'Goto home page'),
624 ('g g', 'Goto my private gists page'),
624 ('g g', 'Goto my private gists page'),
625 ('g G', 'Goto my public gists page'),
625 ('g G', 'Goto my public gists page'),
626 ('n r', 'New repository page'),
626 ('n r', 'New repository page'),
627 ('n g', 'New gist page'),
627 ('n g', 'New gist page'),
628 ]
628 ]
629 %>
629 %>
630 %for key, desc in elems:
630 %for key, desc in elems:
631 <tr>
631 <tr>
632 <td class="keys">
632 <td class="keys">
633 <span class="key tag">${key}</span>
633 <span class="key tag">${key}</span>
634 </td>
634 </td>
635 <td>${desc}</td>
635 <td>${desc}</td>
636 </tr>
636 </tr>
637 %endfor
637 %endfor
638 </tbody>
638 </tbody>
639 </table>
639 </table>
640 </div>
640 </div>
641 <div class="block-left">
641 <div class="block-left">
642 <table class="keyboard-mappings">
642 <table class="keyboard-mappings">
643 <tbody>
643 <tbody>
644 <tr>
644 <tr>
645 <th></th>
645 <th></th>
646 <th>${_('Repositories')}</th>
646 <th>${_('Repositories')}</th>
647 </tr>
647 </tr>
648 <%
648 <%
649 elems = [
649 elems = [
650 ('g s', 'Goto summary page'),
650 ('g s', 'Goto summary page'),
651 ('g c', 'Goto changelog page'),
651 ('g c', 'Goto changelog page'),
652 ('g f', 'Goto files page'),
652 ('g f', 'Goto files page'),
653 ('g F', 'Goto files page with file search activated'),
653 ('g F', 'Goto files page with file search activated'),
654 ('g p', 'Goto pull requests page'),
654 ('g p', 'Goto pull requests page'),
655 ('g o', 'Goto repository settings'),
655 ('g o', 'Goto repository settings'),
656 ('g O', 'Goto repository permissions settings'),
656 ('g O', 'Goto repository permissions settings'),
657 ]
657 ]
658 %>
658 %>
659 %for key, desc in elems:
659 %for key, desc in elems:
660 <tr>
660 <tr>
661 <td class="keys">
661 <td class="keys">
662 <span class="key tag">${key}</span>
662 <span class="key tag">${key}</span>
663 </td>
663 </td>
664 <td>${desc}</td>
664 <td>${desc}</td>
665 </tr>
665 </tr>
666 %endfor
666 %endfor
667 </tbody>
667 </tbody>
668 </table>
668 </table>
669 </div>
669 </div>
670 </div>
670 </div>
671 <div class="modal-footer">
671 <div class="modal-footer">
672 </div>
672 </div>
673 </div><!-- /.modal-content -->
673 </div><!-- /.modal-content -->
674 </div><!-- /.modal-dialog -->
674 </div><!-- /.modal-dialog -->
675 </div><!-- /.modal -->
675 </div><!-- /.modal -->
676
676
General Comments 0
You need to be logged in to leave comments. Login now