<%def name="highlight_text_file(terms, text, url, line_context=3, max_lines=10, mimetype=None, filepath=None)"> <% lines = text.split('\n') lines_of_interest = set() matching_lines = h.get_matching_line_offsets(lines, terms) shown_matching_lines = 0 for line_number in matching_lines: if len(lines_of_interest) < max_lines: lines_of_interest |= set(range( max(line_number - line_context, 0), min(line_number + line_context, len(lines) + 1))) shown_matching_lines += 1 %> ${h.code_highlight( text, h.get_lexer_safe( mimetype=mimetype, filepath=filepath, ), h.SearchContentCodeHtmlFormatter( linenos=True, cssclass="code-highlight", url=url, query_terms=terms, only_line_numbers=lines_of_interest ))|n} %if len(matching_lines) > shown_matching_lines: <a href="${url}"> ${len(matching_lines) - shown_matching_lines} ${_('more matches in this file')} </a> %endif </%def> <div class="search-results"> %for entry in c.formatted_results: ## search results are additionally filtered, and this check is just a safe gate % if h.HasRepoPermissionAny('repository.write','repository.read','repository.admin')(entry['repository'], 'search results content check'): <div id="codeblock" class="codeblock"> <div class="codeblock-header"> <h2> %if h.get_repo_type_by_name(entry.get('repository')) == 'hg': <i class="icon-hg"></i> %elif h.get_repo_type_by_name(entry.get('repository')) == 'git': <i class="icon-git"></i> %elif h.get_repo_type_by_name(entry.get('repository')) == 'svn': <i class="icon-svn"></i> %endif ${h.link_to(entry['repository'], h.route_path('repo_summary',repo_name=entry['repository']))} </h2> <div class="stats"> ${h.link_to(h.literal(entry['f_path']), h.route_path('repo_files',repo_name=entry['repository'],commit_id=entry.get('commit_id', 'tip'),f_path=entry['f_path']))} %if entry.get('lines'): | ${entry.get('lines', 0.)} ${_ungettext('line', 'lines', entry.get('lines', 0.))} %endif %if entry.get('size'): | ${h.format_byte_size_binary(entry['size'])} %endif %if entry.get('mimetype'): | ${entry.get('mimetype', "unknown mimetype")} %endif </div> <div class="buttons"> <a id="file_history_overview_full" href="${h.route_path('repo_changelog_file',repo_name=entry.get('repository',''),commit_id=entry.get('commit_id', 'tip'),f_path=entry.get('f_path',''))}"> ${_('Show Full History')} </a> | ${h.link_to(_('Annotation'), h.route_path('repo_files:annotated', repo_name=entry.get('repository',''),commit_id=entry.get('commit_id', 'tip'),f_path=entry.get('f_path','')))} | ${h.link_to(_('Raw'), h.route_path('repo_file_raw', repo_name=entry.get('repository',''),commit_id=entry.get('commit_id', 'tip'),f_path=entry.get('f_path','')))} | ${h.link_to(_('Download'), h.route_path('repo_file_download',repo_name=entry.get('repository',''),commit_id=entry.get('commit_id', 'tip'),f_path=entry.get('f_path','')))} </div> </div> <div class="code-body search-code-body"> ${highlight_text_file(c.cur_query, entry['content'], url=h.route_path('repo_files',repo_name=entry['repository'],commit_id=entry.get('commit_id', 'tip'),f_path=entry['f_path']), mimetype=entry.get('mimetype'), filepath=entry.get('path'))} </div> </div> % endif %endfor </div> %if c.cur_query and c.formatted_results: <div class="pagination-wh pagination-left" > ${c.formatted_results.pager('$link_previous ~2~ $link_next')} </div> %endif %if c.cur_query: <script type="text/javascript"> $(function(){ $(".code").mark( '${' '.join(h.normalize_text_for_matching(c.cur_query).split())}', {"className": 'match', }); }) </script> %endif