##// 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 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="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 ## 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 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 361 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
362 362
363 363 <li class="logout">
364 364 ${h.secure_form(h.route_path('logout'), request=request)}
365 365 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
366 366 ${h.end_form()}
367 367 </li>
368 368 </ol>
369 369 </div>
370 370 %endif
371 371 </div>
372 372 </div>
373 373 %if c.rhodecode_user.username != h.DEFAULT_USER:
374 374 <div class="pill_container">
375 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 376 </div>
377 377 % endif
378 378 </li>
379 379 </%def>
380 380
381 381 <%def name="menu_items(active=None)">
382 382 <%
383 383 def is_active(selected):
384 384 if selected == active:
385 385 return "active"
386 386 return ""
387 387 %>
388 388 <ul id="quick" class="main_nav navigation horizontal-list">
389 389
390 390 ## Main filter
391 391 <li>
392 392 <div class="menulabel main_filter_box">
393 393 <div class="main_filter_input_box">
394 394 <input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value=""/>
395 395 </div>
396 396 <div class="main_filter_help_box">
397 397 <a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a>
398 398 </div>
399 399 </div>
400 400
401 401 <div id="main_filter_help" style="display: none">
402 402 Use '/' key to quickly access this field.
403 403 Enter name of repository, or repository group for quick search.
404 404
405 405 Prefix query to allow special search:
406 406
407 407 user:admin, to search for usernames
408 408
409 409 user_group:devops, to search for user groups
410 410
411 411 commit:efced4, to search for commits
412 412
413 413 </div>
414 414 </li>
415 415
416 416 ## ROOT MENU
417 417 %if c.rhodecode_user.username != h.DEFAULT_USER:
418 418 <li class="${is_active('journal')}">
419 419 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
420 420 <div class="menulabel">${_('Journal')}</div>
421 421 </a>
422 422 </li>
423 423 %else:
424 424 <li class="${is_active('journal')}">
425 425 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
426 426 <div class="menulabel">${_('Public journal')}</div>
427 427 </a>
428 428 </li>
429 429 %endif
430 430 <li class="${is_active('gists')}">
431 431 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
432 432 <div class="menulabel">${_('Gists')}</div>
433 433 </a>
434 434 </li>
435 435 <li class="${is_active('search')}">
436 436 <a class="menulink" title="${_('Search in repositories you have access to')}" href="${h.route_path('search')}">
437 437 <div class="menulabel">${_('Search')}</div>
438 438 </a>
439 439 </li>
440 440 % if h.HasPermissionAll('hg.admin')('access admin main page'):
441 441 <li class="${is_active('admin')}">
442 442 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
443 443 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
444 444 </a>
445 445 ${admin_menu()}
446 446 </li>
447 447 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
448 448 <li class="${is_active('admin')}">
449 449 <a class="menulink childs" title="${_('Delegated Admin settings')}">
450 450 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
451 451 </a>
452 452 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
453 453 c.rhodecode_user.repository_groups_admin,
454 454 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
455 455 </li>
456 456 % endif
457 457 ## render extra user menu
458 458 ${usermenu(active=(active=='my_account'))}
459 459
460 460 % if c.debug_style:
461 <li class="${is_active('debug_style')}">
461 <li>
462 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 464 </a>
465 465 </li>
466 466 % endif
467 467 </ul>
468 468
469 469 <script type="text/javascript">
470 470 var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True";
471 471
472 472 var formatRepoResult = function(result, container, query, escapeMarkup) {
473 473 return function(data, escapeMarkup) {
474 474 if (!data.repo_id){
475 475 return data.text; // optgroup text Repositories
476 476 }
477 477
478 478 var tmpl = '';
479 479 var repoType = data['repo_type'];
480 480 var repoName = data['text'];
481 481
482 482 if(data && data.type == 'repo'){
483 483 if(repoType === 'hg'){
484 484 tmpl += '<i class="icon-hg"></i> ';
485 485 }
486 486 else if(repoType === 'git'){
487 487 tmpl += '<i class="icon-git"></i> ';
488 488 }
489 489 else if(repoType === 'svn'){
490 490 tmpl += '<i class="icon-svn"></i> ';
491 491 }
492 492 if(data['private']){
493 493 tmpl += '<i class="icon-lock" ></i> ';
494 494 }
495 495 else if(visualShowPublicIcon){
496 496 tmpl += '<i class="icon-unlock-alt"></i> ';
497 497 }
498 498 }
499 499 tmpl += escapeMarkup(repoName);
500 500 return tmpl;
501 501
502 502 }(result, escapeMarkup);
503 503 };
504 504
505 505
506 506 var autocompleteMainFilterFormatResult = function (data, value, org_formatter) {
507 507
508 508 if (value.split(':').length === 2) {
509 509 value = value.split(':')[1]
510 510 }
511 511
512 512 var searchType = data['type'];
513 513 var valueDisplay = data['value_display'];
514 514
515 515 var escapeRegExChars = function (value) {
516 516 return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
517 517 };
518 518 var pattern = '(' + escapeRegExChars(value) + ')';
519 519
520 520 // highlight match
521 521 valueDisplay = Select2.util.escapeMarkup(valueDisplay);
522 522 valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
523 523
524 524 var icon = '';
525 525
526 526 if (searchType === 'hint') {
527 527 icon += '<i class="icon-folder-close"></i> ';
528 528 }
529 529 else if (searchType === 'search') {
530 530 icon += '<i class="icon-more"></i> ';
531 531 }
532 532 else if (searchType === 'repo') {
533 533 if (data['repo_type'] === 'hg') {
534 534 icon += '<i class="icon-hg"></i> ';
535 535 }
536 536 else if (data['repo_type'] === 'git') {
537 537 icon += '<i class="icon-git"></i> ';
538 538 }
539 539 else if (data['repo_type'] === 'svn') {
540 540 icon += '<i class="icon-svn"></i> ';
541 541 }
542 542 if (data['private']) {
543 543 icon += '<i class="icon-lock" ></i> ';
544 544 }
545 545 else if (visualShowPublicIcon) {
546 546 icon += '<i class="icon-unlock-alt"></i> ';
547 547 }
548 548 }
549 549 else if (searchType === 'repo_group') {
550 550 icon += '<i class="icon-folder-close"></i> ';
551 551 }
552 552 else if (searchType === 'user_group') {
553 553 icon += '<i class="icon-group"></i> ';
554 554 }
555 555 else if (searchType === 'user') {
556 556 icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']);
557 557 }
558 558 else if (searchType === 'commit') {
559 559 icon += '<i class="icon-tag"></i>';
560 560 }
561 561
562 562 var tmpl = '<div class="ac-container-wrap">{0}{1}</div>';
563 563 return tmpl.format(icon, valueDisplay);
564 564 };
565 565
566 566 var handleSelect = function(element, suggestion) {
567 567 if (suggestion.type === "hint") {
568 568 // we skip action
569 569 $('#main_filter').focus();
570 570 } else {
571 571 window.location = suggestion['url'];
572 572 }
573 573 };
574 574 var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) {
575 575 if (queryLowerCase.split(':').length === 2) {
576 576 queryLowerCase = queryLowerCase.split(':')[1]
577 577 }
578 578 return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1;
579 579 };
580 580
581 581 $('#main_filter').autocomplete({
582 582 serviceUrl: pyroutes.url('goto_switcher_data'),
583 583 params: {"repo_group_id": templateContext.repo_group_id},
584 584 minChars:2,
585 585 maxHeight:400,
586 586 deferRequestBy: 300, //miliseconds
587 587 tabDisabled: true,
588 588 autoSelectFirst: true,
589 589 formatResult: autocompleteMainFilterFormatResult,
590 590 lookupFilter: autocompleteMainFilterResult,
591 591 onSelect: function(element, suggestion){
592 592 handleSelect(element, suggestion);
593 593 return false;
594 594 }
595 595 });
596 596
597 597 showMainFilterBox = function () {
598 598 $('#main_filter_help').toggle();
599 599 }
600 600
601 601 </script>
602 602 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
603 603 </%def>
604 604
605 605 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
606 606 <div class="modal-dialog">
607 607 <div class="modal-content">
608 608 <div class="modal-header">
609 609 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
610 610 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
611 611 </div>
612 612 <div class="modal-body">
613 613 <div class="block-left">
614 614 <table class="keyboard-mappings">
615 615 <tbody>
616 616 <tr>
617 617 <th></th>
618 618 <th>${_('Site-wide shortcuts')}</th>
619 619 </tr>
620 620 <%
621 621 elems = [
622 622 ('/', 'Use quick search box'),
623 623 ('g h', 'Goto home page'),
624 624 ('g g', 'Goto my private gists page'),
625 625 ('g G', 'Goto my public gists page'),
626 626 ('n r', 'New repository page'),
627 627 ('n g', 'New gist page'),
628 628 ]
629 629 %>
630 630 %for key, desc in elems:
631 631 <tr>
632 632 <td class="keys">
633 633 <span class="key tag">${key}</span>
634 634 </td>
635 635 <td>${desc}</td>
636 636 </tr>
637 637 %endfor
638 638 </tbody>
639 639 </table>
640 640 </div>
641 641 <div class="block-left">
642 642 <table class="keyboard-mappings">
643 643 <tbody>
644 644 <tr>
645 645 <th></th>
646 646 <th>${_('Repositories')}</th>
647 647 </tr>
648 648 <%
649 649 elems = [
650 650 ('g s', 'Goto summary page'),
651 651 ('g c', 'Goto changelog page'),
652 652 ('g f', 'Goto files page'),
653 653 ('g F', 'Goto files page with file search activated'),
654 654 ('g p', 'Goto pull requests page'),
655 655 ('g o', 'Goto repository settings'),
656 656 ('g O', 'Goto repository permissions settings'),
657 657 ]
658 658 %>
659 659 %for key, desc in elems:
660 660 <tr>
661 661 <td class="keys">
662 662 <span class="key tag">${key}</span>
663 663 </td>
664 664 <td>${desc}</td>
665 665 </tr>
666 666 %endfor
667 667 </tbody>
668 668 </table>
669 669 </div>
670 670 </div>
671 671 <div class="modal-footer">
672 672 </div>
673 673 </div><!-- /.modal-content -->
674 674 </div><!-- /.modal-dialog -->
675 675 </div><!-- /.modal -->
676 676
General Comments 0
You need to be logged in to leave comments. Login now