<%inherit file="/base/base.mako"/> <%def name="title()"> %if c.repo_name: ${_('Search inside repository {repo_name}').format(repo_name=c.repo_name)} %elif c.repo_group_name: ${_('Search inside repository group {repo_group_name}').format(repo_group_name=c.repo_group_name)} %else: ${_('Search inside all accessible repositories')} %endif %if c.rhodecode_name: · ${h.branding(c.rhodecode_name)} %endif </%def> <%def name="breadcrumbs_links()"> %if c.repo_name: ${_('Search inside repository {repo_name}').format(repo_name=c.repo_name)} %elif c.repo_group_name: ${_('Search inside repository group {repo_group_name}').format(repo_group_name=c.repo_group_name)} %else: ${_('Search inside all accessible repositories')} %endif </%def> <%def name="menu_bar_nav()"> %if c.repo_name: ${self.menu_items(active='search')} %elif c.repo_group_name: ${self.menu_items(active='search')} %else: ${self.menu_items(active='search')} %endif </%def> <%def name="menu_bar_subnav()"> %if c.repo_name: <% active_entry = {'content':'files', 'path':'files', 'commit':'commits'}.get(c.search_type, 'summary')%> ${self.repo_menu(active=active_entry)} %elif c.repo_group_name: ${self.repo_group_menu(active='home')} %endif </%def> <%def name="repo_icon(db_repo)"> %if h.is_hg(db_repo): <i class="icon-hg"></i> %endif %if h.is_git(db_repo): <i class="icon-git"></i> %endif %if h.is_svn(db_repo): <i class="icon-svn"></i> %endif </%def> <%def name="repo_group_icon()"> <i class="icon-repo-group"></i> </%def> <%def name="field_sort(field_name)"> <% if c.sort.startswith('asc:'): return h.current_route_path(request, sort='desc:{}'.format(field_name)) elif c.sort.startswith('desc:'): return h.current_route_path(request, sort='asc:{}'.format(field_name)) return h.current_route_path(request, sort='asc:{}'.format(field_name)) %> </%def> <%def name="main()"> <div class="box"> %if c.repo_name: <!-- box / title --> ${h.form(h.route_path('search_repo',repo_name=c.repo_name),method='get')} %elif c.repo_group_name: <!-- box / title --> ${h.form(h.route_path('search_repo_group',repo_group_name=c.repo_group_name),method='get')} %else: <!-- box / title --> <div class="title"> ${self.breadcrumbs()} <ul class="links"> </ul> </div> <!-- end box / title --> ${h.form(h.route_path('search'), method='get')} %endif <div class="form search-form"> <div class="fields"> ${h.text('q', c.cur_query, placeholder="Enter query...")} ${h.select('type',c.search_type,[('content',_('Files')), ('path',_('File path')),('commit',_('Commits'))],id='id_search_type')} ${h.hidden('max_lines', '10')} <input type="submit" value="${_('Search')}" class="btn"/> <br/> <div class="search-tags"> <span class="tag tag8"> %if c.repo_name: <a href="${h.route_path('search', _query={'q': c.cur_query, 'type': request.GET.get('type', 'content')})}">${_('Global Search')}</a> %elif c.repo_group_name: <a href="${h.route_path('search', _query={'q': c.cur_query, 'type': request.GET.get('type', 'content')})}">${_('Global Search')}</a> % else: ${_('Global Search')} %endif </span> %if c.repo_name: » <span class="tag tag8"> ${repo_icon(c.rhodecode_db_repo)} ${c.repo_name} </span> %elif c.repo_group_name: » <span class="tag tag8"> ${repo_group_icon()} ${c.repo_group_name} </span> %endif % if c.sort_tag: <span class="tag tag8"> % if c.sort_tag_dir == 'asc': <i class="icon-angle-down"></i> % elif c.sort_tag_dir == 'desc': <i class="icon-angle-up"></i> % endif ${_('sort')}:${c.sort_tag} </span> % endif % for search_tag in c.search_tags: <br/><span class="tag disabled" style="margin-top: 3px">${search_tag}</span> % endfor </div> <div class="search-feedback-items"> % for error in c.errors: <span class="error-message"> % for k,v in error.asdict().items(): ${k} - ${v} % endfor </span> % endfor <div class="field"> <p class="filterexample" style="position: inherit" onclick="$('#search-help').toggle()">${_('Query Language examples')}</p> <pre id="search-help" style="display: none">\ % if c.searcher.name == 'whoosh': Example filter terms for `Whoosh` search: query lang: <a href="${c.searcher.query_lang_doc}">Whoosh Query Language</a> Whoosh has limited query capabilities. For advanced search use ElasticSearch 6 from RhodeCode EE edition. Generate wildcards using '*' character: "repo_name:vcs*" - search everything starting with 'vcs' "repo_name:*vcs*" - search for repository containing 'vcs' Optional AND / OR operators in queries "repo_name:vcs OR repo_name:test" "owner:test AND repo_name:test*" AND extension:py Move advanced search is available via ElasticSearch6 backend in EE edition. % elif c.searcher.name == 'elasticsearch' and c.searcher.es_version == '2': Example filter terms for `ElasticSearch-${c.searcher.es_version}`search: ElasticSearch-2 has limited query capabilities. For advanced search use ElasticSearch 6 from RhodeCode EE edition. search type: content (File Content) indexed fields: content # search for `fix` string in all files fix search type: commit (Commit message) indexed fields: message search type: path (File name) indexed fields: path % else: Example filter terms for `ElasticSearch-${c.searcher.es_version}`search: query lang: <a href="${c.searcher.query_lang_doc}">ES 6 Query Language</a> The reserved characters needed espace by `\`: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ / % for handler in c.searcher.get_handlers().values(): search type: ${handler.search_type_label} *indexed fields*: ${', '.join( [('\n ' if x[0]%4==0 else '')+x[1] for x in enumerate(handler.es_6_field_names)])} % for entry in handler.es_6_example_queries: ${entry.rstrip()} % endfor % endfor % endif </pre> </div> <div class="field">${c.runtime}</div> </div> </div> </div> ${h.end_form()} <div class="search"> % if c.search_type == 'content': <%include file='search_content.mako'/> % elif c.search_type == 'path': <%include file='search_path.mako'/> % elif c.search_type == 'commit': <%include file='search_commit.mako'/> % elif c.search_type == 'repository': <%include file='search_repository.mako'/> % endif </div> </div> <script> $(document).ready(function(){ $("#id_search_type").select2({ 'containerCssClass': "drop-menu", 'dropdownCssClass': "drop-menu-dropdown", 'dropdownAutoWidth': true, 'minimumResultsForSearch': -1 }); $('#q').autoGrowInput({maxWidth: 920}); setTimeout(function() { $('#q').keyup() }, 1); }) </script> </%def>