%# ID, title, corpusID, author, pubDate, textClass
<li data-corpus-id="<%= $match->{corpusID} %>" \
data-doc-id="<%= $match->{docID} %>" \
data-match-id="<%= $match->{ID} %>" \
id="<%= $match->{corpusID} %>-<%= $match->{docID} %>-<%= $match->{ID} %>"\
<% if (current_route eq 'match') { %> class="active"<% } =%>
>
%#
%# -- Match information (snippet, morph table, tree information etc.)
  <div>
    <div class="snippet"><%== $match->{snippet} %></div>
    <div class="tokenInfo"></div>
%#    <div class="treeInfo"></div>
  </div>
%#
%# -- Reference string
  <p>\
% if ($match->{title}) {
<strong><%= $match->{title} %></strong>\
% };
<%= $match->{author} ? ' by ' . $match->{author}  : '' %><% if ($match->{title} || $match->{author}) { %>;<% } =%>
 published on <%= date_format $match->{pubDate} %>\
 as <%= $match->{docID} %> (<%= $match->{corpusID} %>)\
</p>
%#
%# -- Action buttons
  <ul class="action right">
% if (current_route ne 'match') {
    <li class="close" title="Close"><a href="#"><i class="fa fa-toggle-up"></i></a></li>
%#  <li class="open" title="Open in new tab"><%= link_to 'match', { corpus_id => $match->{corpusID}, doc_id => $match->{docID}, match_id => $match->{ID} }, target => '_blank', begin %><i class="fa fa-external-link-square"></i><% end %></li>
    <li class="open" title="Open in new tab"><a href="#<%= $match->{corpusID} %>-<%= $match->{docID} %>-<%= $match->{ID} %>" target="_blank"><i class="fa fa-external-link-square"></i></a></li>
% };
    <li onclick="showTable(this)" title="Annotations"><i class="fa fa-info-circle"></i></li>
%#    <li onclick="showTree(this, 'xip', 'c')" title="Tree Visualizations"><i class="fa fa-sitemap"></i></li>
%#    <li title="Remember"><i class="fa fa-star-o"></i></li>
  </ul>
</li>
