<%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 tooltip = h.tooltip %> <tr class="cb-line cb-line-fresh ${'cb-annotate' if show_annotation else ''}" %if annotation: data-revision="${annotation.idx}" %endif > % if annotation: % if show_annotation: <td class="cb-annotate-info"> ${h.gravatar_with_user(request, annotation.author, 16, tooltip=True) | n} <div class="tooltip cb-annotate-message truncate-wrap" title="SHA: ${h.show_id(annotation)}<br/>Date: ${annotation.date}<br/>${annotation.message | entity}">${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}', ${line_num})" title="${tooltip(_('view annotation from before this change'))}"> <i class="icon-left"></i> </a> </td> <td class="cb-annotate-revision" data-revision="${annotation.idx}" onclick="$('[data-revision=${annotation.idx}]').toggleClass('cb-line-fresh')" style="background: ${bgcolor}"> <a class="cb-annotate" href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=annotation.raw_id)}"> r${annotation.idx} </a> </td> % else: <td></td> <td class="cb-annotate-message-spacer"></td> <td class="cb-annotate-revision" data-revision="${annotation.idx}" onclick="$('[data-revision=${annotation.idx}]').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, lineNo) { var params = { 'repo_name': templateContext.repo_name, 'commit_id': commitId, 'f_path': fPath, 'line_anchor': lineNo }; window.location = pyroutes.url('repo_files:annotated_previous', params); return false; }; }; var annotationController = new AnnotationController(); </script> </%def>