|
|
<%namespace name="base" file="/base/base.mako"/>
|
|
|
<%namespace name="search" file="/search/search.mako"/>
|
|
|
|
|
|
% if c.formatted_results:
|
|
|
|
|
|
<table class="rctable search-results">
|
|
|
<tr>
|
|
|
<th>${_('Repository')}</th>
|
|
|
<th>${_('Commit')}</th>
|
|
|
<th></th>
|
|
|
<th>
|
|
|
<a href="${search.field_sort('message')}">${_('Commit message')}</a>
|
|
|
</th>
|
|
|
<th>
|
|
|
<a href="${search.field_sort('date')}">${_('Commit date')}</a>
|
|
|
</th>
|
|
|
<th>
|
|
|
<a href="${search.field_sort('author_email')}">${_('Author')}</a>
|
|
|
</th>
|
|
|
</tr>
|
|
|
%for entry in c.formatted_results:
|
|
|
## search results are additionally filtered, and this check is just a safe gate
|
|
|
% if c.rhodecode_user.is_admin or h.HasRepoPermissionAny('repository.write','repository.read','repository.admin')(entry['repository'], 'search results commit check'):
|
|
|
<tr class="body">
|
|
|
<td class="td-componentname">
|
|
|
<% repo_type = entry.get('repo_type') or h.get_repo_type_by_name(entry.get('repository')) %>
|
|
|
${search.repo_icon(repo_type)}
|
|
|
${h.link_to(entry['repository'], h.route_path('repo_summary',repo_name=entry['repository']))}
|
|
|
</td>
|
|
|
<td class="td-hash">
|
|
|
${h.link_to(h._shorten_commit_id(entry['commit_id']),
|
|
|
h.route_path('repo_commit',repo_name=entry['repository'],commit_id=entry['commit_id']))}
|
|
|
</td>
|
|
|
<td class="td-message expand_commit search open" data-commit-id="${h.md5_safe(entry['repository'])+entry['commit_id']}" id="t-${h.md5_safe(entry['repository'])+entry['commit_id']}" title="${_('Expand commit message')}">
|
|
|
<div>
|
|
|
<i class="icon-expand-linked"></i>
|
|
|
</div>
|
|
|
</td>
|
|
|
<td data-commit-id="${h.md5_safe(entry['repository'])+entry['commit_id']}" id="c-${h.md5_safe(entry['repository'])+entry['commit_id']}" class="message td-description open">
|
|
|
%if entry.get('message_hl'):
|
|
|
${h.literal(entry['message_hl'])}
|
|
|
%else:
|
|
|
${h.urlify_commit_message(entry['message'], entry['repository'])}
|
|
|
%endif
|
|
|
</td>
|
|
|
<td class="td-time">
|
|
|
${h.age_component(h.time_to_utcdatetime(entry['date']))}
|
|
|
</td>
|
|
|
|
|
|
<td class="td-user author">
|
|
|
<%
|
|
|
## es6 stores this as object
|
|
|
author = entry['author']
|
|
|
if isinstance(author, dict):
|
|
|
author = author['email']
|
|
|
%>
|
|
|
${base.gravatar_with_user(author, tooltip=True)}
|
|
|
</td>
|
|
|
</tr>
|
|
|
% endif
|
|
|
%endfor
|
|
|
</table>
|
|
|
|
|
|
%if c.cur_query:
|
|
|
<div class="pagination-wh pagination-left">
|
|
|
${c.formatted_results.pager('$link_previous ~2~ $link_next')}
|
|
|
</div>
|
|
|
%endif
|
|
|
|
|
|
<script>
|
|
|
$('.expand_commit').on('click',function(e){
|
|
|
var target_expand = $(this);
|
|
|
var cid = target_expand.data('commit-id');
|
|
|
|
|
|
if (target_expand.hasClass('open')){
|
|
|
$('#c-'+cid).css({'height': '1.5em', 'white-space': 'nowrap', 'text-overflow': 'ellipsis', 'overflow':'hidden'});
|
|
|
$('#t-'+cid).css({'height': 'auto', 'line-height': '.9em', 'text-overflow': 'ellipsis', 'overflow':'hidden'});
|
|
|
target_expand.removeClass('open');
|
|
|
}
|
|
|
else {
|
|
|
$('#c-'+cid).css({'height': 'auto', 'white-space': 'normal', 'text-overflow': 'initial', 'overflow':'visible'});
|
|
|
$('#t-'+cid).css({'height': 'auto', 'max-height': 'none', 'text-overflow': 'initial', 'overflow':'visible'});
|
|
|
target_expand.addClass('open');
|
|
|
}
|
|
|
});
|
|
|
|
|
|
$(".message.td-description").mark(
|
|
|
"${c.searcher.query_to_mark(c.cur_query, 'message')}",
|
|
|
{
|
|
|
"className": 'match',
|
|
|
"accuracy": "complementary",
|
|
|
"ignorePunctuation": ":._(){}[]!'+=".split("")
|
|
|
}
|
|
|
);
|
|
|
|
|
|
</script>
|
|
|
|
|
|
% endif
|
|
|
|