##// END OF EJS Templates
ui/menu: re-order the navigation for future changes.
marcink -
r3540:25b19f78 default
parent child Browse files
Show More
@@ -1,815 +1,818 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: {}').format(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(repo_instance)}
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 ${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 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="navigation horizontal-list">
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 <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 236 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
237 237 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
238 238 <li class="${is_active('showpullrequest')}">
239 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 240 %if c.repository_pull_requests:
241 241 <span class="pr_notifications">${c.repository_pull_requests}</span>
242 242 %endif
243 243 <div class="menulabel">${_('Pull Requests')}</div>
244 244 </a>
245 245 </li>
246 246 %endif
247 247
248 248 <li class="${is_active('options')}">
249 249 <a class="menulink dropdown">
250 250 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
251 251 </a>
252 252 <ul class="submenu">
253 253 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
254 254 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Repository Settings')}</a></li>
255 255 %endif
256 256 %if c.rhodecode_db_repo.fork:
257 257 <li>
258 258 <a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
259 259 href="${h.route_path('repo_compare',
260 260 repo_name=c.rhodecode_db_repo.fork.repo_name,
261 261 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
262 262 source_ref=c.rhodecode_db_repo.landing_rev[1],
263 263 target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
264 264 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
265 265 _query=dict(merge=1))}"
266 266 >
267 267 ${_('Compare fork')}
268 268 </a>
269 269 </li>
270 270 %endif
271 271
272 272 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
273 273 %if c.rhodecode_db_repo.locked[0]:
274 274 <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
275 275 %else:
276 276 <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
277 277 %endif
278 278 %endif
279 279 %if c.rhodecode_user.username != h.DEFAULT_USER:
280 280 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
281 281 <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li>
282 282 <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
283 283 %endif
284 284 %endif
285 285 </ul>
286 286 </li>
287 287 </ul>
288 288 </div>
289 289 <div class="clear"></div>
290 290 </div>
291 291 % if c.rhodecode_db_repo.archived:
292 292 <div class="alert alert-warning text-center">
293 293 <strong>${_('This repository has been archived. It is now read-only.')}</strong>
294 294 </div>
295 295 % endif
296 296 <!--- END CONTEXT BAR -->
297 297
298 298 </%def>
299 299
300 300 <%def name="repo_group_page_title(repo_group_instance)">
301 301 <div class="title-content">
302 302 <div class="title-main">
303 303 ## Repository Group icon
304 304 <i class="icon-folder-close"></i>
305 305
306 306 ## repo name with group name
307 307 ${h.breadcrumb_repo_group_link(repo_group_instance)}
308 308 </div>
309 309
310 310 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
311 311 <div class="repo-group-desc">
312 312 ${dt.repo_group_desc(repo_group_instance.description_safe, repo_group_instance.personal, c.visual.stylify_metatags)}
313 313 </div>
314 314
315 315 </div>
316 316 </%def>
317 317
318 318 <%def name="repo_group_menu(active=None)">
319 319 <%
320 320 def is_active(selected):
321 321 if selected == active:
322 322 return "active"
323 323
324 324 is_admin = h.HasPermissionAny('hg.admin')('can create repos index page')
325 325
326 326 gr_name = c.repo_group.group_name if c.repo_group else None
327 327 # create repositories with write permission on group is set to true
328 328 create_on_write = h.HasPermissionAny('hg.create.write_on_repogroup.true')()
329 329 group_admin = h.HasRepoGroupPermissionAny('group.admin')(gr_name, 'group admin index page')
330 330 group_write = h.HasRepoGroupPermissionAny('group.write')(gr_name, 'can write into group index page')
331 331
332 332 %>
333 333
334 334 <!--- CONTEXT BAR -->
335 335 <div id="context-bar">
336 336 <div class="wrapper">
337 337 <ul id="context-pages" class="navigation horizontal-list">
338 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 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 341 <li class="${is_active('options')}">
342 342 <a class="menulink dropdown">
343 343 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
344 344 </a>
345 345 <ul class="submenu">
346 346 %if is_admin or group_admin:
347 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 348 %endif
349 349 %if is_admin or group_admin or (group_write and create_on_write):
350 350 <li><a href="${h.route_path('repo_new',_query=dict(parent_group=c.repo_group.group_id))}">${_('Add Repository')}</a></li>
351 351 %endif
352 352 %if is_admin or group_admin:
353 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 354 %endif
355 355 </ul>
356 356 </li>
357 357 </ul>
358 358 </div>
359 359 <div class="clear"></div>
360 360 </div>
361 361
362 362 <!--- END CONTEXT BAR -->
363 363
364 364 </%def>
365 365
366 366
367 367 <%def name="usermenu(active=False)">
368 368 ## USER MENU
369 369 <li id="quick_login_li" class="${'active' if active else ''}">
370 370 % if c.rhodecode_user.username == h.DEFAULT_USER:
371 371 <a id="quick_login_link" class="menulink childs" href="${h.route_path('login', _query={'came_from': h.current_route_path(request)})}">
372 372 ${gravatar(c.rhodecode_user.email, 20)}
373 373 <span class="user">
374 374 <span>${_('Sign in')}</span>
375 375 </span>
376 376 </a>
377 377 % else:
378 378 ## logged in user
379 379 <a id="quick_login_link" class="menulink childs">
380 380 ${gravatar(c.rhodecode_user.email, 20)}
381 381 <span class="user">
382 382 <span class="menu_link_user">${c.rhodecode_user.username}</span>
383 383 <div class="show_more"></div>
384 384 </span>
385 385 </a>
386 386 ## subnav with menu for logged in user
387 387 <div class="user-menu submenu">
388 388 <div id="quick_login">
389 389 %if c.rhodecode_user.username != h.DEFAULT_USER:
390 390 <div class="">
391 391 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
392 392 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
393 393 <div class="email">${c.rhodecode_user.email}</div>
394 394 </div>
395 395 <div class="">
396 396 <ol class="links">
397 397 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
398 398 % if c.rhodecode_user.personal_repo_group:
399 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 400 % endif
401 401 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
402 402 ## bookmark-items
403 403 <li class="bookmark-items">
404 404 ${_('Bookmarks')}
405 405 <div class="pull-right">
406 406 <a href="${h.route_path('my_account_bookmarks')}">${_('Manage')}</a>
407 407 </div>
408 408 </li>
409 409 % if not c.bookmark_items:
410 410 <li>
411 411 <a href="${h.route_path('my_account_bookmarks')}">${_('No Bookmarks yet.')}</a>
412 412 </li>
413 413 % endif
414 414 % for item in c.bookmark_items:
415 415 <li>
416 416 % if item.repository:
417 417 <div>
418 418 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
419 419 <code>${item.position}</code>
420 420 % if item.repository.repo_type == 'hg':
421 421 <i class="icon-hg" title="${_('Repository')}" style="font-size: 16px"></i>
422 422 % elif item.repository.repo_type == 'git':
423 423 <i class="icon-git" title="${_('Repository')}" style="font-size: 16px"></i>
424 424 % elif item.repository.repo_type == 'svn':
425 425 <i class="icon-svn" title="${_('Repository')}" style="font-size: 16px"></i>
426 426 % endif
427 427 ${(item.title or h.shorter(item.repository.repo_name, 30))}
428 428 </a>
429 429 </div>
430 430 % elif item.repository_group:
431 431 <div>
432 432 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
433 433 <code>${item.position}</code>
434 434 <i class="icon-folder-close" title="${_('Repository group')}" style="font-size: 16px"></i>
435 435 ${(item.title or h.shorter(item.repository_group.group_name, 30))}
436 436 </a>
437 437 </div>
438 438 % else:
439 439 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
440 440 <code>${item.position}</code>
441 441 ${item.title}
442 442 </a>
443 443 % endif
444 444 </li>
445 445 % endfor
446 446
447 447 <li class="logout">
448 448 ${h.secure_form(h.route_path('logout'), request=request)}
449 449 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
450 450 ${h.end_form()}
451 451 </li>
452 452 </ol>
453 453 </div>
454 454 %endif
455 455 </div>
456 456 </div>
457 457 ## unread counter
458 458 <div class="pill_container">
459 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 460 </div>
461 461 % endif
462 462 </li>
463 463 </%def>
464 464
465 465 <%def name="menu_items(active=None)">
466 466 <%
467 467 def is_active(selected):
468 468 if selected == active:
469 469 return "active"
470 470 return ""
471 471 %>
472 472
473 473 <ul id="quick" class="main_nav navigation horizontal-list">
474 474 ## notice box for important system messages
475 475 <li style="display: none">
476 476 <a class="notice-box" href="#openNotice" onclick="showNoticeBox(); return false">
477 477 <div class="menulabel-notice" >
478 478 0
479 479 </div>
480 480 </a>
481 481 </li>
482 482
483 483 ## Main filter
484 484 <li>
485 485 <div class="menulabel main_filter_box">
486 486 <div class="main_filter_input_box">
487 487 <input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value=""/>
488 488 </div>
489 489 <div class="main_filter_help_box">
490 490 <a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a>
491 491 </div>
492 492 </div>
493 493
494 494 <div id="main_filter_help" style="display: none">
495 495 - Use '/' key to quickly access this field.
496 496
497 497 - Enter a name of repository, or repository group for quick search.
498 498
499 499 - Prefix query to allow special search:
500 500
501 501 user:admin, to search for usernames
502 502
503 503 user_group:devops, to search for user groups
504 504
505 505 commit:efced4, to search for commits
506 506 </div>
507 507 </li>
508 508
509 509 ## ROOT MENU
510 <li class="${is_active('home')}">
511 <a class="menulink" title="${_('Home')}" href="${h.route_path('home')}">
512 <div class="menulabel">${_('Home')}</div>
513 </a>
514 </li>
515
510 516 %if c.rhodecode_user.username != h.DEFAULT_USER:
511 517 <li class="${is_active('journal')}">
512 518 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
513 519 <div class="menulabel">${_('Journal')}</div>
514 520 </a>
515 521 </li>
516 522 %else:
517 523 <li class="${is_active('journal')}">
518 524 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
519 525 <div class="menulabel">${_('Public journal')}</div>
520 526 </a>
521 527 </li>
522 528 %endif
529
523 530 <li class="${is_active('gists')}">
524 531 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
525 532 <div class="menulabel">${_('Gists')}</div>
526 533 </a>
527 534 </li>
528 <li class="${is_active('search')}">
529 <a class="menulink" title="${_('Search in repositories you have access to')}" href="${h.route_path('search')}">
530 <div class="menulabel">${_('Search')}</div>
531 </a>
532 </li>
535
533 536 % if h.HasPermissionAll('hg.admin')('access admin main page'):
534 537 <li class="${is_active('admin')}">
535 538 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
536 539 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
537 540 </a>
538 541 ${admin_menu()}
539 542 </li>
540 543 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
541 544 <li class="${is_active('admin')}">
542 545 <a class="menulink childs" title="${_('Delegated Admin settings')}">
543 546 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
544 547 </a>
545 548 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
546 549 c.rhodecode_user.repository_groups_admin,
547 550 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
548 551 </li>
549 552 % endif
550 553 ## render extra user menu
551 554 ${usermenu(active=(active=='my_account'))}
552 555
553 556 % if c.debug_style:
554 557 <li>
555 558 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
556 559 <div class="menulabel">${_('[Style]')}</div>
557 560 </a>
558 561 </li>
559 562 % endif
560 563 </ul>
561 564
562 565 <script type="text/javascript">
563 566 var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True";
564 567
565 568 var formatRepoResult = function(result, container, query, escapeMarkup) {
566 569 return function(data, escapeMarkup) {
567 570 if (!data.repo_id){
568 571 return data.text; // optgroup text Repositories
569 572 }
570 573
571 574 var tmpl = '';
572 575 var repoType = data['repo_type'];
573 576 var repoName = data['text'];
574 577
575 578 if(data && data.type == 'repo'){
576 579 if(repoType === 'hg'){
577 580 tmpl += '<i class="icon-hg"></i> ';
578 581 }
579 582 else if(repoType === 'git'){
580 583 tmpl += '<i class="icon-git"></i> ';
581 584 }
582 585 else if(repoType === 'svn'){
583 586 tmpl += '<i class="icon-svn"></i> ';
584 587 }
585 588 if(data['private']){
586 589 tmpl += '<i class="icon-lock" ></i> ';
587 590 }
588 591 else if(visualShowPublicIcon){
589 592 tmpl += '<i class="icon-unlock-alt"></i> ';
590 593 }
591 594 }
592 595 tmpl += escapeMarkup(repoName);
593 596 return tmpl;
594 597
595 598 }(result, escapeMarkup);
596 599 };
597 600
598 601 var formatRepoGroupResult = function(result, container, query, escapeMarkup) {
599 602 return function(data, escapeMarkup) {
600 603 if (!data.repo_group_id){
601 604 return data.text; // optgroup text Repositories
602 605 }
603 606
604 607 var tmpl = '';
605 608 var repoGroupName = data['text'];
606 609
607 610 if(data){
608 611
609 612 tmpl += '<i class="icon-folder-close"></i> ';
610 613
611 614 }
612 615 tmpl += escapeMarkup(repoGroupName);
613 616 return tmpl;
614 617
615 618 }(result, escapeMarkup);
616 619 };
617 620
618 621
619 622 var autocompleteMainFilterFormatResult = function (data, value, org_formatter) {
620 623
621 624 if (value.split(':').length === 2) {
622 625 value = value.split(':')[1]
623 626 }
624 627
625 628 var searchType = data['type'];
626 629 var valueDisplay = data['value_display'];
627 630
628 631 var escapeRegExChars = function (value) {
629 632 return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
630 633 };
631 634 var pattern = '(' + escapeRegExChars(value) + ')';
632 635
633 636 var getRepoIcon = function(repo_type) {
634 637 if (repo_type === 'hg') {
635 638 return '<i class="icon-hg"></i> ';
636 639 }
637 640 else if (repo_type === 'git') {
638 641 return '<i class="icon-git"></i> ';
639 642 }
640 643 else if (repo_type === 'svn') {
641 644 return '<i class="icon-svn"></i> ';
642 645 }
643 646 return ''
644 647 };
645 648
646 649 // highlight match
647 650 valueDisplay = Select2.util.escapeMarkup(valueDisplay);
648 651 valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
649 652
650 653 var icon = '';
651 654
652 655 if (searchType === 'hint') {
653 656 icon += '<i class="icon-folder-close"></i> ';
654 657 }
655 658 // full text search
656 659 else if (searchType === 'search') {
657 660 icon += '<i class="icon-more"></i> ';
658 661 }
659 662 // repository
660 663 else if (searchType === 'repo') {
661 664
662 665 var repoIcon = getRepoIcon(data['repo_type']);
663 666 icon += repoIcon;
664 667
665 668 if (data['private']) {
666 669 icon += '<i class="icon-lock" ></i> ';
667 670 }
668 671 else if (visualShowPublicIcon) {
669 672 icon += '<i class="icon-unlock-alt"></i> ';
670 673 }
671 674 }
672 675 // repository groups
673 676 else if (searchType === 'repo_group') {
674 677 icon += '<i class="icon-folder-close"></i> ';
675 678 }
676 679 // user group
677 680 else if (searchType === 'user_group') {
678 681 icon += '<i class="icon-group"></i> ';
679 682 }
680 683 else if (searchType === 'user') {
681 684 icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']);
682 685 }
683 686 // commit
684 687 else if (searchType === 'commit') {
685 688 var repo_data = data['repo_data'];
686 689 var repoIcon = getRepoIcon(repo_data['repository_type']);
687 690 if (repoIcon) {
688 691 icon += repoIcon;
689 692 } else {
690 693 icon += '<i class="icon-tag"></i>';
691 694 }
692 695 }
693 696
694 697 var tmpl = '<div class="ac-container-wrap">{0}{1}</div>';
695 698 return tmpl.format(icon, valueDisplay);
696 699 };
697 700
698 701 var handleSelect = function(element, suggestion) {
699 702 if (suggestion.type === "hint") {
700 703 // we skip action
701 704 $('#main_filter').focus();
702 705 } else {
703 706 window.location = suggestion['url'];
704 707 }
705 708 };
706 709 var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) {
707 710 if (queryLowerCase.split(':').length === 2) {
708 711 queryLowerCase = queryLowerCase.split(':')[1]
709 712 }
710 713 return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1;
711 714 };
712 715
713 716 $('#main_filter').autocomplete({
714 717 serviceUrl: pyroutes.url('goto_switcher_data'),
715 718 params: {"search_context": templateContext.search_context},
716 719 minChars:2,
717 720 maxHeight:400,
718 721 deferRequestBy: 300, //miliseconds
719 722 tabDisabled: true,
720 723 autoSelectFirst: true,
721 724 formatResult: autocompleteMainFilterFormatResult,
722 725 lookupFilter: autocompleteMainFilterResult,
723 726 onSelect: function (element, suggestion) {
724 727 handleSelect(element, suggestion);
725 728 return false;
726 729 },
727 730 onSearchError: function (element, query, jqXHR, textStatus, errorThrown) {
728 731 if (jqXHR !== 'abort') {
729 732 alert("Error during search.\nError code: {0}".format(textStatus));
730 733 window.location = '';
731 734 }
732 735 }
733 736 });
734 737
735 738 showMainFilterBox = function () {
736 739 $('#main_filter_help').toggle();
737 740 };
738 741
739 742 </script>
740 743 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
741 744 </%def>
742 745
743 746 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
744 747 <div class="modal-dialog">
745 748 <div class="modal-content">
746 749 <div class="modal-header">
747 750 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
748 751 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
749 752 </div>
750 753 <div class="modal-body">
751 754 <div class="block-left">
752 755 <table class="keyboard-mappings">
753 756 <tbody>
754 757 <tr>
755 758 <th></th>
756 759 <th>${_('Site-wide shortcuts')}</th>
757 760 </tr>
758 761 <%
759 762 elems = [
760 763 ('/', 'Use quick search box'),
761 764 ('g h', 'Goto home page'),
762 765 ('g g', 'Goto my private gists page'),
763 766 ('g G', 'Goto my public gists page'),
764 767 ('g 0-9', 'Goto bookmarked items from 0-9'),
765 768 ('n r', 'New repository page'),
766 769 ('n g', 'New gist page'),
767 770 ]
768 771 %>
769 772 %for key, desc in elems:
770 773 <tr>
771 774 <td class="keys">
772 775 <span class="key tag">${key}</span>
773 776 </td>
774 777 <td>${desc}</td>
775 778 </tr>
776 779 %endfor
777 780 </tbody>
778 781 </table>
779 782 </div>
780 783 <div class="block-left">
781 784 <table class="keyboard-mappings">
782 785 <tbody>
783 786 <tr>
784 787 <th></th>
785 788 <th>${_('Repositories')}</th>
786 789 </tr>
787 790 <%
788 791 elems = [
789 792 ('g s', 'Goto summary page'),
790 793 ('g c', 'Goto changelog page'),
791 794 ('g f', 'Goto files page'),
792 795 ('g F', 'Goto files page with file search activated'),
793 796 ('g p', 'Goto pull requests page'),
794 797 ('g o', 'Goto repository settings'),
795 798 ('g O', 'Goto repository permissions settings'),
796 799 ]
797 800 %>
798 801 %for key, desc in elems:
799 802 <tr>
800 803 <td class="keys">
801 804 <span class="key tag">${key}</span>
802 805 </td>
803 806 <td>${desc}</td>
804 807 </tr>
805 808 %endfor
806 809 </tbody>
807 810 </table>
808 811 </div>
809 812 </div>
810 813 <div class="modal-footer">
811 814 </div>
812 815 </div><!-- /.modal-content -->
813 816 </div><!-- /.modal-dialog -->
814 817 </div><!-- /.modal -->
815 818
General Comments 0
You need to be logged in to leave comments. Login now