base.mako
696 lines
| 26.9 KiB
| application/x-mako
|
MakoHtmlLexer
r1282 | ## -*- coding: utf-8 -*- | |||
<%inherit file="root.mako"/> | ||||
r2484 | <%include file="/ejs_templates/templates.html"/> | |||
r1282 | <div class="outerwrapper"> | |||
<!-- HEADER --> | ||||
<div class="header"> | ||||
<div id="header-inner" class="wrapper"> | ||||
<div id="logo"> | ||||
<div class="logo-wrapper"> | ||||
r1774 | <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a> | |||
r1282 | </div> | |||
%if c.rhodecode_name: | ||||
<div class="branding">- ${h.branding(c.rhodecode_name)}</div> | ||||
%endif | ||||
</div> | ||||
<!-- MENU BAR NAV --> | ||||
${self.menu_bar_nav()} | ||||
<!-- END MENU BAR NAV --> | ||||
</div> | ||||
</div> | ||||
${self.menu_bar_subnav()} | ||||
<!-- END HEADER --> | ||||
<!-- CONTENT --> | ||||
<div id="content" class="wrapper"> | ||||
r1483 | ||||
<rhodecode-toast id="notifications"></rhodecode-toast> | ||||
r1282 | <div class="main"> | |||
${next.main()} | ||||
</div> | ||||
</div> | ||||
<!-- END CONTENT --> | ||||
</div> | ||||
<!-- FOOTER --> | ||||
<div id="footer"> | ||||
<div id="footer-inner" class="title wrapper"> | ||||
<div> | ||||
<p class="footer-link-right"> | ||||
% if c.visual.show_version: | ||||
RhodeCode Enterprise ${c.rhodecode_version} ${c.rhodecode_edition} | ||||
% endif | ||||
r1679 | © 2010-${h.datetime.today().year}, <a href="${h.route_url('rhodecode_official')}" target="_blank">RhodeCode GmbH</a>. All rights reserved. | |||
r1282 | % if c.visual.rhodecode_support_url: | |||
<a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a> | ||||
% endif | ||||
</p> | ||||
<% sid = 'block' if request.GET.get('showrcid') else 'none' %> | ||||
<p class="server-instance" style="display:${sid}"> | ||||
## display hidden instance ID if specially defined | ||||
% if c.rhodecode_instanceid: | ||||
${_('RhodeCode instance id: %s') % c.rhodecode_instanceid} | ||||
% endif | ||||
</p> | ||||
</div> | ||||
</div> | ||||
</div> | ||||
<!-- END FOOTER --> | ||||
### MAKO DEFS ### | ||||
<%def name="menu_bar_subnav()"> | ||||
</%def> | ||||
<%def name="breadcrumbs(class_='breadcrumbs')"> | ||||
<div class="${class_}"> | ||||
${self.breadcrumbs_links()} | ||||
</div> | ||||
</%def> | ||||
<%def name="admin_menu()"> | ||||
<ul class="admin_menu submenu"> | ||||
r1758 | <li><a href="${h.route_path('admin_audit_logs')}">${_('Admin audit logs')}</a></li> | |||
r2014 | <li><a href="${h.route_path('repos')}">${_('Repositories')}</a></li> | |||
r2175 | <li><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li> | |||
r1520 | <li><a href="${h.route_path('users')}">${_('Users')}</a></li> | |||
r2068 | <li><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li> | |||
r1941 | <li><a href="${h.route_path('admin_permissions_application')}">${_('Permissions')}</a></li> | |||
r1282 | <li><a href="${h.route_path('auth_home', traverse='')}">${_('Authentication')}</a></li> | |||
<li><a href="${h.route_path('global_integrations_home')}">${_('Integrations')}</a></li> | ||||
r2076 | <li><a href="${h.route_path('admin_defaults_repositories')}">${_('Defaults')}</a></li> | |||
r2333 | <li class="last"><a href="${h.route_path('admin_settings')}">${_('Settings')}</a></li> | |||
r1282 | </ul> | |||
</%def> | ||||
<%def name="dt_info_panel(elements)"> | ||||
<dl class="dl-horizontal"> | ||||
%for dt, dd, title, show_items in elements: | ||||
<dt>${dt}:</dt> | ||||
r1843 | <dd title="${h.tooltip(title)}"> | |||
r1282 | %if callable(dd): | |||
## allow lazy evaluation of elements | ||||
${dd()} | ||||
%else: | ||||
${dd} | ||||
%endif | ||||
%if show_items: | ||||
<span class="btn-collapse" data-toggle="item-${h.md5_safe(dt)[:6]}-details">${_('Show More')} </span> | ||||
%endif | ||||
</dd> | ||||
%if show_items: | ||||
<div class="collapsable-content" data-toggle="item-${h.md5_safe(dt)[:6]}-details" style="display: none"> | ||||
%for item in show_items: | ||||
<dt></dt> | ||||
<dd>${item}</dd> | ||||
%endfor | ||||
</div> | ||||
%endif | ||||
%endfor | ||||
</dl> | ||||
</%def> | ||||
<%def name="gravatar(email, size=16)"> | ||||
<% | ||||
if (size > 16): | ||||
gravatar_class = 'gravatar gravatar-large' | ||||
else: | ||||
gravatar_class = 'gravatar' | ||||
%> | ||||
<%doc> | ||||
TODO: johbo: For now we serve double size images to make it smooth | ||||
for retina. This is how it worked until now. Should be replaced | ||||
with a better solution at some point. | ||||
</%doc> | ||||
<img class="${gravatar_class}" src="${h.gravatar_url(email, size * 2)}" height="${size}" width="${size}"> | ||||
</%def> | ||||
<%def name="gravatar_with_user(contact, size=16, show_disabled=False)"> | ||||
<% email = h.email_or_none(contact) %> | ||||
r1843 | <div class="rc-user tooltip" title="${h.tooltip(h.author_string(email))}"> | |||
r1282 | ${self.gravatar(email, size)} | |||
<span class="${'user user-disabled' if show_disabled else 'user'}"> ${h.link_to_user(contact)}</span> | ||||
</div> | ||||
</%def> | ||||
## admin menu used for people that have some admin resources | ||||
<%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)"> | ||||
<ul class="submenu"> | ||||
%if repositories: | ||||
r2014 | <li class="local-admin-repos"><a href="${h.route_path('repos')}">${_('Repositories')}</a></li> | |||
r1282 | %endif | |||
%if repository_groups: | ||||
r2175 | <li class="local-admin-repo-groups"><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li> | |||
r1282 | %endif | |||
%if user_groups: | ||||
r2068 | <li class="local-admin-user-groups"><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li> | |||
r1282 | %endif | |||
</ul> | ||||
</%def> | ||||
<%def name="repo_page_title(repo_instance)"> | ||||
<div class="title-content"> | ||||
<div class="title-main"> | ||||
## SVN/HG/GIT icons | ||||
%if h.is_hg(repo_instance): | ||||
<i class="icon-hg"></i> | ||||
%endif | ||||
%if h.is_git(repo_instance): | ||||
<i class="icon-git"></i> | ||||
%endif | ||||
%if h.is_svn(repo_instance): | ||||
<i class="icon-svn"></i> | ||||
%endif | ||||
## public/private | ||||
%if repo_instance.private: | ||||
<i class="icon-repo-private"></i> | ||||
%else: | ||||
<i class="icon-repo-public"></i> | ||||
%endif | ||||
## repo name with group name | ||||
${h.breadcrumb_repo_link(c.rhodecode_db_repo)} | ||||
</div> | ||||
## FORKED | ||||
%if repo_instance.fork: | ||||
<p> | ||||
<i class="icon-code-fork"></i> ${_('Fork of')} | ||||
r1785 | <a href="${h.route_path('repo_summary',repo_name=repo_instance.fork.repo_name)}">${repo_instance.fork.repo_name}</a> | |||
r1282 | </p> | |||
%endif | ||||
## IMPORTED FROM REMOTE | ||||
%if repo_instance.clone_uri: | ||||
<p> | ||||
<i class="icon-code-fork"></i> ${_('Clone from')} | ||||
r2306 | <a href="${h.safe_str(h.hide_credentials(repo_instance.clone_uri))}">${h.hide_credentials(repo_instance.clone_uri)}</a> | |||
r1282 | </p> | |||
%endif | ||||
## LOCKING STATUS | ||||
%if repo_instance.locked[0]: | ||||
<p class="locking_locked"> | ||||
<i class="icon-repo-lock"></i> | ||||
${_('Repository locked by %(user)s') % {'user': h.person_by_id(repo_instance.locked[0])}} | ||||
</p> | ||||
%elif repo_instance.enable_locking: | ||||
<p class="locking_unlocked"> | ||||
<i class="icon-repo-unlock"></i> | ||||
${_('Repository not locked. Pull repository to lock it.')} | ||||
</p> | ||||
%endif | ||||
</div> | ||||
</%def> | ||||
<%def name="repo_menu(active=None)"> | ||||
<% | ||||
def is_active(selected): | ||||
if selected == active: | ||||
return "active" | ||||
%> | ||||
<!--- CONTEXT BAR --> | ||||
<div id="context-bar"> | ||||
<div class="wrapper"> | ||||
r2774 | <ul id="context-pages" class="navigation horizontal-list"> | |||
r1785 | <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> | |||
r1931 | <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> | |||
r1927 | <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> | |||
r1957 | <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> | |||
r1282 | ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()" | |||
%if c.rhodecode_db_repo.repo_type in ['git','hg']: | ||||
<li class="${is_active('showpullrequest')}"> | ||||
r1843 | <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)}"> | |||
r1282 | %if c.repository_pull_requests: | |||
<span class="pr_notifications">${c.repository_pull_requests}</span> | ||||
%endif | ||||
<div class="menulabel">${_('Pull Requests')}</div> | ||||
</a> | ||||
</li> | ||||
%endif | ||||
<li class="${is_active('options')}"> | ||||
r1783 | <a class="menulink dropdown"> | |||
<div class="menulabel">${_('Options')} <div class="show_more"></div></div> | ||||
</a> | ||||
r1282 | <ul class="submenu"> | |||
%if h.HasRepoPermissionAll('repository.admin')(c.repo_name): | ||||
r1716 | <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Settings')}</a></li> | |||
r1282 | %endif | |||
%if c.rhodecode_db_repo.fork: | ||||
r1957 | <li> | |||
<a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}" | ||||
href="${h.route_path('repo_compare', | ||||
repo_name=c.rhodecode_db_repo.fork.repo_name, | ||||
source_ref_type=c.rhodecode_db_repo.landing_rev[0], | ||||
source_ref=c.rhodecode_db_repo.landing_rev[1], | ||||
target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0], | ||||
target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1], | ||||
_query=dict(merge=1))}" | ||||
> | ||||
${_('Compare fork')} | ||||
</a> | ||||
</li> | ||||
r1282 | %endif | |||
r1685 | <li><a href="${h.route_path('search_repo',repo_name=c.repo_name)}">${_('Search')}</a></li> | |||
r1282 | ||||
%if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking: | ||||
%if c.rhodecode_db_repo.locked[0]: | ||||
r2014 | <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li> | |||
r1282 | %else: | |||
r2014 | <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li> | |||
r1282 | %endif | |||
%endif | ||||
%if c.rhodecode_user.username != h.DEFAULT_USER: | ||||
%if c.rhodecode_db_repo.repo_type in ['git','hg']: | ||||
r1988 | <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li> | |||
r1974 | <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li> | |||
r1282 | %endif | |||
%endif | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
</div> | ||||
<div class="clear"></div> | ||||
</div> | ||||
r3090 | % if c.rhodecode_db_repo.archived: | |||
<div class="alert alert-warning text-center"> | ||||
<strong>${_('This repository has been archived. It is now read-only.')}</strong> | ||||
</div> | ||||
% endif | ||||
r1282 | <!--- END CONTEXT BAR --> | |||
</%def> | ||||
r1318 | <%def name="usermenu(active=False)"> | |||
r1282 | ## USER MENU | |||
r1318 | <li id="quick_login_li" class="${'active' if active else ''}"> | |||
r1282 | <a id="quick_login_link" class="menulink childs"> | |||
${gravatar(c.rhodecode_user.email, 20)} | ||||
<span class="user"> | ||||
%if c.rhodecode_user.username != h.DEFAULT_USER: | ||||
<span class="menu_link_user">${c.rhodecode_user.username}</span><div class="show_more"></div> | ||||
%else: | ||||
<span>${_('Sign in')}</span> | ||||
%endif | ||||
</span> | ||||
</a> | ||||
<div class="user-menu submenu"> | ||||
<div id="quick_login"> | ||||
%if c.rhodecode_user.username == h.DEFAULT_USER: | ||||
<h4>${_('Sign in to your account')}</h4> | ||||
r2104 | ${h.form(h.route_path('login', _query={'came_from': h.current_route_path(request)}), needs_csrf_token=False)} | |||
r1282 | <div class="form form-vertical"> | |||
<div class="fields"> | ||||
<div class="field"> | ||||
<div class="label"> | ||||
<label for="username">${_('Username')}:</label> | ||||
</div> | ||||
<div class="input"> | ||||
${h.text('username',class_='focus',tabindex=1)} | ||||
</div> | ||||
</div> | ||||
<div class="field"> | ||||
<div class="label"> | ||||
<label for="password">${_('Password')}:</label> | ||||
%if h.HasPermissionAny('hg.password_reset.enabled')(): | ||||
<span class="forgot_password">${h.link_to(_('(Forgot password?)'),h.route_path('reset_password'), class_='pwd_reset')}</span> | ||||
%endif | ||||
</div> | ||||
<div class="input"> | ||||
${h.password('password',class_='focus',tabindex=2)} | ||||
</div> | ||||
</div> | ||||
<div class="buttons"> | ||||
<div class="register"> | ||||
%if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')(): | ||||
r1747 | ${h.link_to(_("Don't have an account?"),h.route_path('register'))} <br/> | |||
r1282 | %endif | |||
r1762 | ${h.link_to(_("Using external auth? Sign In here."),h.route_path('login'))} | |||
r1282 | </div> | |||
<div class="submit"> | ||||
${h.submit('sign_in',_('Sign In'),class_="btn btn-small",tabindex=3)} | ||||
</div> | ||||
</div> | ||||
</div> | ||||
</div> | ||||
${h.end_form()} | ||||
%else: | ||||
<div class=""> | ||||
<div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div> | ||||
<div class="full_name">${c.rhodecode_user.full_name_or_username}</div> | ||||
<div class="email">${c.rhodecode_user.email}</div> | ||||
</div> | ||||
<div class=""> | ||||
<ol class="links"> | ||||
r1540 | <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li> | |||
r1282 | % if c.rhodecode_user.personal_repo_group: | |||
r2658 | <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> | |||
r1282 | % endif | |||
r2658 | <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li> | |||
r1282 | <li class="logout"> | |||
r1918 | ${h.secure_form(h.route_path('logout'), request=request)} | |||
r1282 | ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")} | |||
${h.end_form()} | ||||
</li> | ||||
</ol> | ||||
</div> | ||||
%endif | ||||
</div> | ||||
</div> | ||||
%if c.rhodecode_user.username != h.DEFAULT_USER: | ||||
<div class="pill_container"> | ||||
r1920 | <a class="menu_link_notifications ${'empty' if c.unread_notifications == 0 else ''}" href="${h.route_path('notifications_show_all')}">${c.unread_notifications}</a> | |||
r1282 | </div> | |||
% endif | ||||
</li> | ||||
</%def> | ||||
<%def name="menu_items(active=None)"> | ||||
<% | ||||
def is_active(selected): | ||||
if selected == active: | ||||
return "active" | ||||
return "" | ||||
%> | ||||
r2774 | ||||
r2898 | <ul id="quick" class="main_nav navigation horizontal-list"> | |||
## notice box for important system messages | ||||
<li style="display: none"> | ||||
<a class="notice-box" href="#openNotice" onclick="showNoticeBox(); return false"> | ||||
<div class="menulabel-notice" > | ||||
0 | ||||
</div> | ||||
</a> | ||||
</li> | ||||
## Main filter | ||||
r2774 | <li> | |||
<div class="menulabel main_filter_box"> | ||||
<div class="main_filter_input_box"> | ||||
<input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value=""/> | ||||
</div> | ||||
<div class="main_filter_help_box"> | ||||
<a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a> | ||||
</div> | ||||
</div> | ||||
<div id="main_filter_help" style="display: none"> | ||||
Use '/' key to quickly access this field. | ||||
Enter name of repository, or repository group for quick search. | ||||
Prefix query to allow special search: | ||||
r2795 | user:admin, to search for usernames | |||
r2774 | ||||
r2795 | user_group:devops, to search for user groups | |||
commit:efced4, to search for commits | ||||
r2774 | ||||
</div> | ||||
</li> | ||||
r1282 | ||||
## ROOT MENU | ||||
%if c.rhodecode_user.username != h.DEFAULT_USER: | ||||
<li class="${is_active('journal')}"> | ||||
r1933 | <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}"> | |||
r1282 | <div class="menulabel">${_('Journal')}</div> | |||
</a> | ||||
</li> | ||||
%else: | ||||
<li class="${is_active('journal')}"> | ||||
r1933 | <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}"> | |||
r1282 | <div class="menulabel">${_('Public journal')}</div> | |||
</a> | ||||
</li> | ||||
%endif | ||||
<li class="${is_active('gists')}"> | ||||
r1891 | <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}"> | |||
r1282 | <div class="menulabel">${_('Gists')}</div> | |||
</a> | ||||
</li> | ||||
<li class="${is_active('search')}"> | ||||
r1685 | <a class="menulink" title="${_('Search in repositories you have access to')}" href="${h.route_path('search')}"> | |||
r1282 | <div class="menulabel">${_('Search')}</div> | |||
</a> | ||||
</li> | ||||
% if h.HasPermissionAll('hg.admin')('access admin main page'): | ||||
<li class="${is_active('admin')}"> | ||||
<a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;"> | ||||
<div class="menulabel">${_('Admin')} <div class="show_more"></div></div> | ||||
</a> | ||||
${admin_menu()} | ||||
</li> | ||||
% elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin: | ||||
<li class="${is_active('admin')}"> | ||||
<a class="menulink childs" title="${_('Delegated Admin settings')}"> | ||||
<div class="menulabel">${_('Admin')} <div class="show_more"></div></div> | ||||
</a> | ||||
${admin_menu_simple(c.rhodecode_user.repositories_admin, | ||||
c.rhodecode_user.repository_groups_admin, | ||||
c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())} | ||||
</li> | ||||
% endif | ||||
r2774 | ## render extra user menu | |||
${usermenu(active=(active=='my_account'))} | ||||
r1282 | % if c.debug_style: | |||
r2839 | <li> | |||
r1900 | <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}"> | |||
r2839 | <div class="menulabel">${_('[Style]')}</div> | |||
r1282 | </a> | |||
</li> | ||||
% endif | ||||
</ul> | ||||
<script type="text/javascript"> | ||||
r2774 | var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True"; | |||
r1282 | ||||
r2774 | var formatRepoResult = function(result, container, query, escapeMarkup) { | |||
return function(data, escapeMarkup) { | ||||
if (!data.repo_id){ | ||||
return data.text; // optgroup text Repositories | ||||
r1282 | } | |||
r2774 | ||||
var tmpl = ''; | ||||
var repoType = data['repo_type']; | ||||
var repoName = data['text']; | ||||
if(data && data.type == 'repo'){ | ||||
if(repoType === 'hg'){ | ||||
tmpl += '<i class="icon-hg"></i> '; | ||||
} | ||||
else if(repoType === 'git'){ | ||||
tmpl += '<i class="icon-git"></i> '; | ||||
} | ||||
else if(repoType === 'svn'){ | ||||
tmpl += '<i class="icon-svn"></i> '; | ||||
} | ||||
if(data['private']){ | ||||
tmpl += '<i class="icon-lock" ></i> '; | ||||
} | ||||
else if(visualShowPublicIcon){ | ||||
tmpl += '<i class="icon-unlock-alt"></i> '; | ||||
} | ||||
r1282 | } | |||
r2774 | tmpl += escapeMarkup(repoName); | |||
return tmpl; | ||||
r1282 | ||||
r2774 | }(result, escapeMarkup); | |||
r1282 | }; | |||
r2774 | ||||
var autocompleteMainFilterFormatResult = function (data, value, org_formatter) { | ||||
if (value.split(':').length === 2) { | ||||
value = value.split(':')[1] | ||||
} | ||||
var searchType = data['type']; | ||||
var valueDisplay = data['value_display']; | ||||
var escapeRegExChars = function (value) { | ||||
return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); | ||||
}; | ||||
var pattern = '(' + escapeRegExChars(value) + ')'; | ||||
// highlight match | ||||
valueDisplay = Select2.util.escapeMarkup(valueDisplay); | ||||
valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>'); | ||||
var icon = ''; | ||||
r1282 | ||||
r2804 | if (searchType === 'hint') { | |||
icon += '<i class="icon-folder-close"></i> '; | ||||
} | ||||
else if (searchType === 'search') { | ||||
r2774 | icon += '<i class="icon-more"></i> '; | |||
} | ||||
else if (searchType === 'repo') { | ||||
if (data['repo_type'] === 'hg') { | ||||
icon += '<i class="icon-hg"></i> '; | ||||
} | ||||
else if (data['repo_type'] === 'git') { | ||||
icon += '<i class="icon-git"></i> '; | ||||
} | ||||
else if (data['repo_type'] === 'svn') { | ||||
icon += '<i class="icon-svn"></i> '; | ||||
} | ||||
if (data['private']) { | ||||
icon += '<i class="icon-lock" ></i> '; | ||||
} | ||||
else if (visualShowPublicIcon) { | ||||
icon += '<i class="icon-unlock-alt"></i> '; | ||||
} | ||||
} | ||||
else if (searchType === 'repo_group') { | ||||
icon += '<i class="icon-folder-close"></i> '; | ||||
} | ||||
r2795 | else if (searchType === 'user_group') { | |||
icon += '<i class="icon-group"></i> '; | ||||
} | ||||
r2774 | else if (searchType === 'user') { | |||
icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']); | ||||
} | ||||
else if (searchType === 'commit') { | ||||
icon += '<i class="icon-tag"></i>'; | ||||
} | ||||
r1282 | ||||
r2774 | var tmpl = '<div class="ac-container-wrap">{0}{1}</div>'; | |||
return tmpl.format(icon, valueDisplay); | ||||
}; | ||||
var handleSelect = function(element, suggestion) { | ||||
r2804 | if (suggestion.type === "hint") { | |||
// we skip action | ||||
$('#main_filter').focus(); | ||||
} else { | ||||
window.location = suggestion['url']; | ||||
} | ||||
r2774 | }; | |||
var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) { | ||||
if (queryLowerCase.split(':').length === 2) { | ||||
queryLowerCase = queryLowerCase.split(':')[1] | ||||
} | ||||
return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1; | ||||
}; | ||||
$('#main_filter').autocomplete({ | ||||
serviceUrl: pyroutes.url('goto_switcher_data'), | ||||
r3320 | params: {"search_context": templateContext.search_context}, | |||
r2774 | minChars:2, | |||
maxHeight:400, | ||||
deferRequestBy: 300, //miliseconds | ||||
tabDisabled: true, | ||||
autoSelectFirst: true, | ||||
formatResult: autocompleteMainFilterFormatResult, | ||||
lookupFilter: autocompleteMainFilterResult, | ||||
r3320 | onSelect: function (element, suggestion) { | |||
r2774 | handleSelect(element, suggestion); | |||
return false; | ||||
r3320 | }, | |||
onSearchError: function (element, query, jqXHR, textStatus, errorThrown) { | ||||
if (jqXHR !== 'abort') { | ||||
alert("Error during search.\nError code: {0}".format(textStatus)); | ||||
window.location = ''; | ||||
} | ||||
r2774 | } | |||
r1282 | }); | |||
r2774 | showMainFilterBox = function () { | |||
$('#main_filter_help').toggle(); | ||||
} | ||||
r1282 | ||||
</script> | ||||
<script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script> | ||||
</%def> | ||||
<div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> | ||||
<div class="modal-dialog"> | ||||
<div class="modal-content"> | ||||
<div class="modal-header"> | ||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||||
<h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4> | ||||
</div> | ||||
<div class="modal-body"> | ||||
<div class="block-left"> | ||||
<table class="keyboard-mappings"> | ||||
<tbody> | ||||
<tr> | ||||
<th></th> | ||||
<th>${_('Site-wide shortcuts')}</th> | ||||
</tr> | ||||
<% | ||||
elems = [ | ||||
r2774 | ('/', 'Use quick search box'), | |||
r1282 | ('g h', 'Goto home page'), | |||
('g g', 'Goto my private gists page'), | ||||
('g G', 'Goto my public gists page'), | ||||
('n r', 'New repository page'), | ||||
('n g', 'New gist page'), | ||||
] | ||||
%> | ||||
%for key, desc in elems: | ||||
<tr> | ||||
<td class="keys"> | ||||
<span class="key tag">${key}</span> | ||||
</td> | ||||
<td>${desc}</td> | ||||
</tr> | ||||
%endfor | ||||
</tbody> | ||||
</table> | ||||
</div> | ||||
<div class="block-left"> | ||||
<table class="keyboard-mappings"> | ||||
<tbody> | ||||
<tr> | ||||
<th></th> | ||||
<th>${_('Repositories')}</th> | ||||
</tr> | ||||
<% | ||||
elems = [ | ||||
('g s', 'Goto summary page'), | ||||
('g c', 'Goto changelog page'), | ||||
('g f', 'Goto files page'), | ||||
('g F', 'Goto files page with file search activated'), | ||||
('g p', 'Goto pull requests page'), | ||||
('g o', 'Goto repository settings'), | ||||
('g O', 'Goto repository permissions settings'), | ||||
] | ||||
%> | ||||
%for key, desc in elems: | ||||
<tr> | ||||
<td class="keys"> | ||||
<span class="key tag">${key}</span> | ||||
</td> | ||||
<td>${desc}</td> | ||||
</tr> | ||||
%endfor | ||||
</tbody> | ||||
</table> | ||||
</div> | ||||
</div> | ||||
<div class="modal-footer"> | ||||
</div> | ||||
</div><!-- /.modal-content --> | ||||
</div><!-- /.modal-dialog --> | ||||
</div><!-- /.modal --> | ||||
r2774 | ||||