<%def name="render_line(line_num, tokens, annotation=None, bgcolor=None, show_annotation=None)"> <% from rhodecode.lib.codeblocks import render_tokenstream # avoid module lookup for performance html_escape = h.html_escape %> <tr class="cb-line cb-line-fresh ${'cb-annotate' if show_annotation else ''}" %if annotation: data-revision="${annotation.revision}" %endif > % if annotation: % if show_annotation: <td class="cb-annotate-info tooltip" title="Author: ${annotation.author | entity}<br>Date: ${annotation.date}<br>Message: ${annotation.message | entity}" > ${h.gravatar_with_user(annotation.author, 16) | n} <div class="cb-annotate-message truncate-wrap">${h.chop_at_smart(annotation.message, '\n', suffix_if_chopped='...')}</div> </td> <td class="cb-annotate-message-spacer"> <a class="tooltip" href="#show-previous-annotation" onclick="return annotationController.previousAnnotation('${annotation.raw_id}', '${c.f_path}')" title="${_('view annotation from before this change')}"> <i class="icon-left"></i> </a> </td> <td class="cb-annotate-revision" data-revision="${annotation.revision}" onclick="$('[data-revision=${annotation.revision}]').toggleClass('cb-line-fresh')" style="background: ${bgcolor}"> <a class="cb-annotate" href="${h.url('changeset_home',repo_name=c.repo_name,revision=annotation.raw_id)}"> r${annotation.revision} </a> </td> % else: <td></td> <td class="cb-annotate-message-spacer"></td> <td class="cb-annotate-revision" data-revision="${annotation.revision}" onclick="$('[data-revision=${annotation.revision}]').toggleClass('cb-line-fresh')" style="background: ${bgcolor}"> </td> % endif % else: <td colspan="3"></td> % endif <td class="cb-lineno" id="L${line_num}"> <a data-line-no="${line_num}" href="#L${line_num}"></a> </td> <td class="cb-content cb-content-fresh" %if bgcolor: style="background: ${bgcolor}" %endif > ## newline at end is necessary for highlight to work when line is empty ## and for copy pasting code to work as expected <span class="cb-code">${render_tokenstream(tokens)|n}${'\n'}</span> </td> </tr> </%def> <%def name="render_annotation_lines(annotation, lines, color_hasher)"> % for line_num, tokens in lines: ${render_line(line_num, tokens, bgcolor=color_hasher(annotation and annotation.raw_id or ''), annotation=annotation, show_annotation=loop.first )} % endfor <script> var AnnotationController = function() { var self = this; this.previousAnnotation = function(commitId, fPath) { var params = { 'repo_name': templateContext.repo_name, 'revision': commitId, 'f_path': fPath }; window.location = pyroutes.url('files_annotate_previous', params); return false; }; }; var annotationController = new AnnotationController(); </script> </%def>