##// END OF EJS Templates
my-account: show pull request page in quick nav menu on my account....
marcink -
r2658:13f7e22f default
parent child Browse files
Show More
@@ -1,611 +1,613 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="root.mako"/>
3 3
4 4 <%include file="/ejs_templates/templates.html"/>
5 5
6 6 <div class="outerwrapper">
7 7 <!-- HEADER -->
8 8 <div class="header">
9 9 <div id="header-inner" class="wrapper">
10 10 <div id="logo">
11 11 <div class="logo-wrapper">
12 12 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
13 13 </div>
14 14 %if c.rhodecode_name:
15 15 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
16 16 %endif
17 17 </div>
18 18 <!-- MENU BAR NAV -->
19 19 ${self.menu_bar_nav()}
20 20 <!-- END MENU BAR NAV -->
21 21 </div>
22 22 </div>
23 23 ${self.menu_bar_subnav()}
24 24 <!-- END HEADER -->
25 25
26 26 <!-- CONTENT -->
27 27 <div id="content" class="wrapper">
28 28
29 29 <rhodecode-toast id="notifications"></rhodecode-toast>
30 30
31 31 <div class="main">
32 32 ${next.main()}
33 33 </div>
34 34 </div>
35 35 <!-- END CONTENT -->
36 36
37 37 </div>
38 38 <!-- FOOTER -->
39 39 <div id="footer">
40 40 <div id="footer-inner" class="title wrapper">
41 41 <div>
42 42 <p class="footer-link-right">
43 43 % if c.visual.show_version:
44 44 RhodeCode Enterprise ${c.rhodecode_version} ${c.rhodecode_edition}
45 45 % endif
46 46 &copy; 2010-${h.datetime.today().year}, <a href="${h.route_url('rhodecode_official')}" target="_blank">RhodeCode GmbH</a>. All rights reserved.
47 47 % if c.visual.rhodecode_support_url:
48 48 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
49 49 % endif
50 50 </p>
51 51 <% sid = 'block' if request.GET.get('showrcid') else 'none' %>
52 52 <p class="server-instance" style="display:${sid}">
53 53 ## display hidden instance ID if specially defined
54 54 % if c.rhodecode_instanceid:
55 55 ${_('RhodeCode instance id: %s') % c.rhodecode_instanceid}
56 56 % endif
57 57 </p>
58 58 </div>
59 59 </div>
60 60 </div>
61 61
62 62 <!-- END FOOTER -->
63 63
64 64 ### MAKO DEFS ###
65 65
66 66 <%def name="menu_bar_subnav()">
67 67 </%def>
68 68
69 69 <%def name="breadcrumbs(class_='breadcrumbs')">
70 70 <div class="${class_}">
71 71 ${self.breadcrumbs_links()}
72 72 </div>
73 73 </%def>
74 74
75 75 <%def name="admin_menu()">
76 76 <ul class="admin_menu submenu">
77 77 <li><a href="${h.route_path('admin_audit_logs')}">${_('Admin audit logs')}</a></li>
78 78 <li><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
79 79 <li><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
80 80 <li><a href="${h.route_path('users')}">${_('Users')}</a></li>
81 81 <li><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
82 82 <li><a href="${h.route_path('admin_permissions_application')}">${_('Permissions')}</a></li>
83 83 <li><a href="${h.route_path('auth_home', traverse='')}">${_('Authentication')}</a></li>
84 84 <li><a href="${h.route_path('global_integrations_home')}">${_('Integrations')}</a></li>
85 85 <li><a href="${h.route_path('admin_defaults_repositories')}">${_('Defaults')}</a></li>
86 86 <li class="last"><a href="${h.route_path('admin_settings')}">${_('Settings')}</a></li>
87 87 </ul>
88 88 </%def>
89 89
90 90
91 91 <%def name="dt_info_panel(elements)">
92 92 <dl class="dl-horizontal">
93 93 %for dt, dd, title, show_items in elements:
94 94 <dt>${dt}:</dt>
95 95 <dd title="${h.tooltip(title)}">
96 96 %if callable(dd):
97 97 ## allow lazy evaluation of elements
98 98 ${dd()}
99 99 %else:
100 100 ${dd}
101 101 %endif
102 102 %if show_items:
103 103 <span class="btn-collapse" data-toggle="item-${h.md5_safe(dt)[:6]}-details">${_('Show More')} </span>
104 104 %endif
105 105 </dd>
106 106
107 107 %if show_items:
108 108 <div class="collapsable-content" data-toggle="item-${h.md5_safe(dt)[:6]}-details" style="display: none">
109 109 %for item in show_items:
110 110 <dt></dt>
111 111 <dd>${item}</dd>
112 112 %endfor
113 113 </div>
114 114 %endif
115 115
116 116 %endfor
117 117 </dl>
118 118 </%def>
119 119
120 120
121 121 <%def name="gravatar(email, size=16)">
122 122 <%
123 123 if (size > 16):
124 124 gravatar_class = 'gravatar gravatar-large'
125 125 else:
126 126 gravatar_class = 'gravatar'
127 127 %>
128 128 <%doc>
129 129 TODO: johbo: For now we serve double size images to make it smooth
130 130 for retina. This is how it worked until now. Should be replaced
131 131 with a better solution at some point.
132 132 </%doc>
133 133 <img class="${gravatar_class}" src="${h.gravatar_url(email, size * 2)}" height="${size}" width="${size}">
134 134 </%def>
135 135
136 136
137 137 <%def name="gravatar_with_user(contact, size=16, show_disabled=False)">
138 138 <% email = h.email_or_none(contact) %>
139 139 <div class="rc-user tooltip" title="${h.tooltip(h.author_string(email))}">
140 140 ${self.gravatar(email, size)}
141 141 <span class="${'user user-disabled' if show_disabled else 'user'}"> ${h.link_to_user(contact)}</span>
142 142 </div>
143 143 </%def>
144 144
145 145
146 146 ## admin menu used for people that have some admin resources
147 147 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
148 148 <ul class="submenu">
149 149 %if repositories:
150 150 <li class="local-admin-repos"><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
151 151 %endif
152 152 %if repository_groups:
153 153 <li class="local-admin-repo-groups"><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
154 154 %endif
155 155 %if user_groups:
156 156 <li class="local-admin-user-groups"><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
157 157 %endif
158 158 </ul>
159 159 </%def>
160 160
161 161 <%def name="repo_page_title(repo_instance)">
162 162 <div class="title-content">
163 163 <div class="title-main">
164 164 ## SVN/HG/GIT icons
165 165 %if h.is_hg(repo_instance):
166 166 <i class="icon-hg"></i>
167 167 %endif
168 168 %if h.is_git(repo_instance):
169 169 <i class="icon-git"></i>
170 170 %endif
171 171 %if h.is_svn(repo_instance):
172 172 <i class="icon-svn"></i>
173 173 %endif
174 174
175 175 ## public/private
176 176 %if repo_instance.private:
177 177 <i class="icon-repo-private"></i>
178 178 %else:
179 179 <i class="icon-repo-public"></i>
180 180 %endif
181 181
182 182 ## repo name with group name
183 183 ${h.breadcrumb_repo_link(c.rhodecode_db_repo)}
184 184
185 185 </div>
186 186
187 187 ## FORKED
188 188 %if repo_instance.fork:
189 189 <p>
190 190 <i class="icon-code-fork"></i> ${_('Fork of')}
191 191 <a href="${h.route_path('repo_summary',repo_name=repo_instance.fork.repo_name)}">${repo_instance.fork.repo_name}</a>
192 192 </p>
193 193 %endif
194 194
195 195 ## IMPORTED FROM REMOTE
196 196 %if repo_instance.clone_uri:
197 197 <p>
198 198 <i class="icon-code-fork"></i> ${_('Clone from')}
199 199 <a href="${h.safe_str(h.hide_credentials(repo_instance.clone_uri))}">${h.hide_credentials(repo_instance.clone_uri)}</a>
200 200 </p>
201 201 %endif
202 202
203 203 ## LOCKING STATUS
204 204 %if repo_instance.locked[0]:
205 205 <p class="locking_locked">
206 206 <i class="icon-repo-lock"></i>
207 207 ${_('Repository locked by %(user)s') % {'user': h.person_by_id(repo_instance.locked[0])}}
208 208 </p>
209 209 %elif repo_instance.enable_locking:
210 210 <p class="locking_unlocked">
211 211 <i class="icon-repo-unlock"></i>
212 212 ${_('Repository not locked. Pull repository to lock it.')}
213 213 </p>
214 214 %endif
215 215
216 216 </div>
217 217 </%def>
218 218
219 219 <%def name="repo_menu(active=None)">
220 220 <%
221 221 def is_active(selected):
222 222 if selected == active:
223 223 return "active"
224 224 %>
225 225
226 226 <!--- CONTEXT BAR -->
227 227 <div id="context-bar">
228 228 <div class="wrapper">
229 229 <ul id="context-pages" class="horizontal-list navigation">
230 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 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 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 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 234 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
235 235 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
236 236 <li class="${is_active('showpullrequest')}">
237 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 238 %if c.repository_pull_requests:
239 239 <span class="pr_notifications">${c.repository_pull_requests}</span>
240 240 %endif
241 241 <div class="menulabel">${_('Pull Requests')}</div>
242 242 </a>
243 243 </li>
244 244 %endif
245 245 <li class="${is_active('options')}">
246 246 <a class="menulink dropdown">
247 247 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
248 248 </a>
249 249 <ul class="submenu">
250 250 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
251 251 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Settings')}</a></li>
252 252 %endif
253 253 %if c.rhodecode_db_repo.fork:
254 254 <li>
255 255 <a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
256 256 href="${h.route_path('repo_compare',
257 257 repo_name=c.rhodecode_db_repo.fork.repo_name,
258 258 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
259 259 source_ref=c.rhodecode_db_repo.landing_rev[1],
260 260 target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
261 261 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
262 262 _query=dict(merge=1))}"
263 263 >
264 264 ${_('Compare fork')}
265 265 </a>
266 266 </li>
267 267 %endif
268 268
269 269 <li><a href="${h.route_path('search_repo',repo_name=c.repo_name)}">${_('Search')}</a></li>
270 270
271 271 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
272 272 %if c.rhodecode_db_repo.locked[0]:
273 273 <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
274 274 %else:
275 275 <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
276 276 %endif
277 277 %endif
278 278 %if c.rhodecode_user.username != h.DEFAULT_USER:
279 279 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
280 280 <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li>
281 281 <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
282 282 %endif
283 283 %endif
284 284 </ul>
285 285 </li>
286 286 </ul>
287 287 </div>
288 288 <div class="clear"></div>
289 289 </div>
290 290 <!--- END CONTEXT BAR -->
291 291
292 292 </%def>
293 293
294 294 <%def name="usermenu(active=False)">
295 295 ## USER MENU
296 296 <li id="quick_login_li" class="${'active' if active else ''}">
297 297 <a id="quick_login_link" class="menulink childs">
298 298 ${gravatar(c.rhodecode_user.email, 20)}
299 299 <span class="user">
300 300 %if c.rhodecode_user.username != h.DEFAULT_USER:
301 301 <span class="menu_link_user">${c.rhodecode_user.username}</span><div class="show_more"></div>
302 302 %else:
303 303 <span>${_('Sign in')}</span>
304 304 %endif
305 305 </span>
306 306 </a>
307 307
308 308 <div class="user-menu submenu">
309 309 <div id="quick_login">
310 310 %if c.rhodecode_user.username == h.DEFAULT_USER:
311 311 <h4>${_('Sign in to your account')}</h4>
312 312 ${h.form(h.route_path('login', _query={'came_from': h.current_route_path(request)}), needs_csrf_token=False)}
313 313 <div class="form form-vertical">
314 314 <div class="fields">
315 315 <div class="field">
316 316 <div class="label">
317 317 <label for="username">${_('Username')}:</label>
318 318 </div>
319 319 <div class="input">
320 320 ${h.text('username',class_='focus',tabindex=1)}
321 321 </div>
322 322
323 323 </div>
324 324 <div class="field">
325 325 <div class="label">
326 326 <label for="password">${_('Password')}:</label>
327 327 %if h.HasPermissionAny('hg.password_reset.enabled')():
328 328 <span class="forgot_password">${h.link_to(_('(Forgot password?)'),h.route_path('reset_password'), class_='pwd_reset')}</span>
329 329 %endif
330 330 </div>
331 331 <div class="input">
332 332 ${h.password('password',class_='focus',tabindex=2)}
333 333 </div>
334 334 </div>
335 335 <div class="buttons">
336 336 <div class="register">
337 337 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
338 338 ${h.link_to(_("Don't have an account?"),h.route_path('register'))} <br/>
339 339 %endif
340 340 ${h.link_to(_("Using external auth? Sign In here."),h.route_path('login'))}
341 341 </div>
342 342 <div class="submit">
343 343 ${h.submit('sign_in',_('Sign In'),class_="btn btn-small",tabindex=3)}
344 344 </div>
345 345 </div>
346 346 </div>
347 347 </div>
348 348 ${h.end_form()}
349 349 %else:
350 350 <div class="">
351 351 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
352 352 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
353 353 <div class="email">${c.rhodecode_user.email}</div>
354 354 </div>
355 355 <div class="">
356 356 <ol class="links">
357 357 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
358 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 360 % endif
361 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
362
361 363 <li class="logout">
362 364 ${h.secure_form(h.route_path('logout'), request=request)}
363 365 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
364 366 ${h.end_form()}
365 367 </li>
366 368 </ol>
367 369 </div>
368 370 %endif
369 371 </div>
370 372 </div>
371 373 %if c.rhodecode_user.username != h.DEFAULT_USER:
372 374 <div class="pill_container">
373 375 <a class="menu_link_notifications ${'empty' if c.unread_notifications == 0 else ''}" href="${h.route_path('notifications_show_all')}">${c.unread_notifications}</a>
374 376 </div>
375 377 % endif
376 378 </li>
377 379 </%def>
378 380
379 381 <%def name="menu_items(active=None)">
380 382 <%
381 383 def is_active(selected):
382 384 if selected == active:
383 385 return "active"
384 386 return ""
385 387 %>
386 388 <ul id="quick" class="main_nav navigation horizontal-list">
387 389 <!-- repo switcher -->
388 390 <li class="${is_active('repositories')} repo_switcher_li has_select2">
389 391 <input id="repo_switcher" name="repo_switcher" type="hidden">
390 392 </li>
391 393
392 394 ## ROOT MENU
393 395 %if c.rhodecode_user.username != h.DEFAULT_USER:
394 396 <li class="${is_active('journal')}">
395 397 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
396 398 <div class="menulabel">${_('Journal')}</div>
397 399 </a>
398 400 </li>
399 401 %else:
400 402 <li class="${is_active('journal')}">
401 403 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
402 404 <div class="menulabel">${_('Public journal')}</div>
403 405 </a>
404 406 </li>
405 407 %endif
406 408 <li class="${is_active('gists')}">
407 409 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
408 410 <div class="menulabel">${_('Gists')}</div>
409 411 </a>
410 412 </li>
411 413 <li class="${is_active('search')}">
412 414 <a class="menulink" title="${_('Search in repositories you have access to')}" href="${h.route_path('search')}">
413 415 <div class="menulabel">${_('Search')}</div>
414 416 </a>
415 417 </li>
416 418 % if h.HasPermissionAll('hg.admin')('access admin main page'):
417 419 <li class="${is_active('admin')}">
418 420 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
419 421 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
420 422 </a>
421 423 ${admin_menu()}
422 424 </li>
423 425 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
424 426 <li class="${is_active('admin')}">
425 427 <a class="menulink childs" title="${_('Delegated Admin settings')}">
426 428 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
427 429 </a>
428 430 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
429 431 c.rhodecode_user.repository_groups_admin,
430 432 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
431 433 </li>
432 434 % endif
433 435 % if c.debug_style:
434 436 <li class="${is_active('debug_style')}">
435 437 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
436 438 <div class="menulabel">${_('Style')}</div>
437 439 </a>
438 440 </li>
439 441 % endif
440 442 ## render extra user menu
441 443 ${usermenu(active=(active=='my_account'))}
442 444 </ul>
443 445
444 446 <script type="text/javascript">
445 447 var visual_show_public_icon = "${c.visual.show_public_icon}" == "True";
446 448
447 449 /*format the look of items in the list*/
448 450 var format = function(state, escapeMarkup){
449 451 if (!state.id){
450 452 return state.text; // optgroup
451 453 }
452 454 var obj_dict = state.obj;
453 455 var tmpl = '';
454 456
455 457 if(obj_dict && state.type == 'repo'){
456 458 if(obj_dict['repo_type'] === 'hg'){
457 459 tmpl += '<i class="icon-hg"></i> ';
458 460 }
459 461 else if(obj_dict['repo_type'] === 'git'){
460 462 tmpl += '<i class="icon-git"></i> ';
461 463 }
462 464 else if(obj_dict['repo_type'] === 'svn'){
463 465 tmpl += '<i class="icon-svn"></i> ';
464 466 }
465 467 if(obj_dict['private']){
466 468 tmpl += '<i class="icon-lock" ></i> ';
467 469 }
468 470 else if(visual_show_public_icon){
469 471 tmpl += '<i class="icon-unlock-alt"></i> ';
470 472 }
471 473 }
472 474 if(obj_dict && state.type == 'commit') {
473 475 tmpl += '<i class="icon-tag"></i>';
474 476 }
475 477 if(obj_dict && state.type == 'group'){
476 478 tmpl += '<i class="icon-folder-close"></i> ';
477 479 }
478 480 tmpl += escapeMarkup(state.text);
479 481 return tmpl;
480 482 };
481 483
482 484 var formatResult = function(result, container, query, escapeMarkup) {
483 485 return format(result, escapeMarkup);
484 486 };
485 487
486 488 var formatSelection = function(data, container, escapeMarkup) {
487 489 return format(data, escapeMarkup);
488 490 };
489 491
490 492 $("#repo_switcher").select2({
491 493 cachedDataSource: {},
492 494 minimumInputLength: 2,
493 495 placeholder: '<div class="menulabel">${_('Go to')} <div class="show_more"></div></div>',
494 496 dropdownAutoWidth: true,
495 497 formatResult: formatResult,
496 498 formatSelection: formatSelection,
497 499 containerCssClass: "repo-switcher",
498 500 dropdownCssClass: "repo-switcher-dropdown",
499 501 escapeMarkup: function(m){
500 502 // don't escape our custom placeholder
501 503 if(m.substr(0,23) == '<div class="menulabel">'){
502 504 return m;
503 505 }
504 506
505 507 return Select2.util.escapeMarkup(m);
506 508 },
507 509 query: $.debounce(250, function(query){
508 510 self = this;
509 511 var cacheKey = query.term;
510 512 var cachedData = self.cachedDataSource[cacheKey];
511 513
512 514 if (cachedData) {
513 515 query.callback({results: cachedData.results});
514 516 } else {
515 517 $.ajax({
516 518 url: pyroutes.url('goto_switcher_data'),
517 519 data: {'query': query.term},
518 520 dataType: 'json',
519 521 type: 'GET',
520 522 success: function(data) {
521 523 self.cachedDataSource[cacheKey] = data;
522 524 query.callback({results: data.results});
523 525 },
524 526 error: function(data, textStatus, errorThrown) {
525 527 alert("Error while fetching entries.\nError code {0} ({1}).".format(data.status, data.statusText));
526 528 }
527 529 })
528 530 }
529 531 })
530 532 });
531 533
532 534 $("#repo_switcher").on('select2-selecting', function(e){
533 535 e.preventDefault();
534 536 window.location = e.choice.url;
535 537 });
536 538
537 539 </script>
538 540 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
539 541 </%def>
540 542
541 543 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
542 544 <div class="modal-dialog">
543 545 <div class="modal-content">
544 546 <div class="modal-header">
545 547 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
546 548 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
547 549 </div>
548 550 <div class="modal-body">
549 551 <div class="block-left">
550 552 <table class="keyboard-mappings">
551 553 <tbody>
552 554 <tr>
553 555 <th></th>
554 556 <th>${_('Site-wide shortcuts')}</th>
555 557 </tr>
556 558 <%
557 559 elems = [
558 560 ('/', 'Open quick search box'),
559 561 ('g h', 'Goto home page'),
560 562 ('g g', 'Goto my private gists page'),
561 563 ('g G', 'Goto my public gists page'),
562 564 ('n r', 'New repository page'),
563 565 ('n g', 'New gist page'),
564 566 ]
565 567 %>
566 568 %for key, desc in elems:
567 569 <tr>
568 570 <td class="keys">
569 571 <span class="key tag">${key}</span>
570 572 </td>
571 573 <td>${desc}</td>
572 574 </tr>
573 575 %endfor
574 576 </tbody>
575 577 </table>
576 578 </div>
577 579 <div class="block-left">
578 580 <table class="keyboard-mappings">
579 581 <tbody>
580 582 <tr>
581 583 <th></th>
582 584 <th>${_('Repositories')}</th>
583 585 </tr>
584 586 <%
585 587 elems = [
586 588 ('g s', 'Goto summary page'),
587 589 ('g c', 'Goto changelog page'),
588 590 ('g f', 'Goto files page'),
589 591 ('g F', 'Goto files page with file search activated'),
590 592 ('g p', 'Goto pull requests page'),
591 593 ('g o', 'Goto repository settings'),
592 594 ('g O', 'Goto repository permissions settings'),
593 595 ]
594 596 %>
595 597 %for key, desc in elems:
596 598 <tr>
597 599 <td class="keys">
598 600 <span class="key tag">${key}</span>
599 601 </td>
600 602 <td>${desc}</td>
601 603 </tr>
602 604 %endfor
603 605 </tbody>
604 606 </table>
605 607 </div>
606 608 </div>
607 609 <div class="modal-footer">
608 610 </div>
609 611 </div><!-- /.modal-content -->
610 612 </div><!-- /.modal-dialog -->
611 613 </div><!-- /.modal -->
General Comments 0
You need to be logged in to leave comments. Login now