repo-commit.html
HTML document, ASCII text
1{% extends "repo.html" %} 2 3{% set active_page = "log" %} 4 5{% block title %} 6{% trans message=data.message|split("\n\n")|first, username=username, repository=repository %}{{ message }} in {{ username }}/{{ repository }}{% endtrans %} 7{% endblock %} 8{% block content %} 9<x-vbox> 10<x-frame style="--width: 896px;" class="flexible-space"> 11<x-vbox> 12<article> 13<h1>{{ data.message | split("\n\n", 1) | first | inline_markdown }}</h1> 14{{ data.message | split("\n\n", 1) | last | markdown }} 15</article> 16 17<p> 18<a href="/{{ data.owner_name }}">{{ data.owner_name }}</a>,<br> 19{% trans receive_date=data.receive_date.strftime('%A, %e %B %Y, %H:%M:%S'), author_date=data.author_date.strftime("%A, %e %B %Y, %H:%M:%S"), 20receive_unix=data.receive_date.timestamp() | int, author_unix=data.author_date.timestamp() | int 21%} 22created on {{ author_date }} ({{ author_unix }}), 23received on {{ receive_date }} ({{ receive_unix }}) 24{% endtrans %} 25<br> 26{% trans %}Author identity:{% endtrans %} <code>{{ data.owner_identity | harvester_protection | safe }}</code> 27</p> 28 29<code>{{ data.sha }}</code> 30 31<x-vbox> 32{% for file in diff %} 33<article class="card"> 34<section class="card-main"> 35<h2>{{ file }}</h2> 36{% set vars = namespace(original_line=0, modified_line=0, hunk_started=false, actual_line=0, line_type=0) %} 37{% for line in diff[file] %} 38{% if line.startswith("@@") %} 39{% if vars.hunk_started %} 40</pre> <!-- close the previous pre block if this isn't the first hunk --> 41{% endif %} 42{% set vars.hunk_started = true %} 43{% set diff_location = line|parse_diff_location %} 44{% set vars.original_line = diff_location[0][0] %} 45{% set vars.modified_line = diff_location[1][0] %} 46<h3 class="diff-position">{{ line }}</h3> 47<pre class="code-view"> 48{% elif vars.hunk_started %} 49{% if line.startswith("+") %} 50<button class="line-number" data-file="{{ file }}" data-line="+{{ vars.modified_line }}">{{ vars.modified_line }} +</button> 51<ins>{{ line[1:] }}</ins> 52{% set vars.actual_line = vars.modified_line %} 53{% set vars.line_type = 1 %} 54{% set vars.modified_line = vars.modified_line + 1 %} 55{% elif line.startswith("-") %} 56<button class="line-number" data-file="{{ file }}" data-line="-{{ vars.original_line }}">{{ vars.original_line }} -</button> 57<del>{{ line[1:] }}</del> 58{% set vars.actual_line = vars.original_line %} 59{% set vars.line_type = 0 %} 60{% set vars.original_line = vars.original_line + 1 %} 61{% elif not line.startswith("\\") %} 62{% if line %} 63<button class="line-number" data-file="{{ file }}" data-line="+{{ vars.modified_line }}">{{ vars.modified_line }} </button> 64<x-codeline>{{ line[1:] }}</x-codeline> 65{% endif %} 66{% if not line.startswith("@@") %} 67{% set vars.actual_line = vars.modified_line %} 68{% set vars.line_type = 1 %} 69{% set vars.original_line = vars.original_line + 1 %} 70{% set vars.modified_line = vars.modified_line + 1 %} 71{% endif %} 72{% endif %} 73{% endif %} 74{% for comment in comment_query.filter_by(commit=data, file=file, line_number=vars.actual_line, line_type=vars.line_type, state=1).all() %} 75<div class="comment"> 76<article> 77{{ comment.text | safe }} {# this was generated by the markdown parser which escapes HTML #} 78</article> 79<small> 80{% trans %}by{% endtrans %} <a href="/{{ comment.owner_name }}">{{ comment.owner.username }}</a>, 81{{ comment.date | strftime('%A, %e %B %Y, %H:%M:%S') }} 82</small> 83<x-buttonbox> 84{% if comment.author == current_user or data.owner == current_user or permission_level >= 2 %} 85<form method="post" action="{{ repo_data.route }}/commit/{{ data.sha }}/resolve_comment/{{ comment.number }}"> 86<button type="submit"> 87{% trans %}Resolve{% endtrans %} 88</button> 89</form> 90<form method="post" action="{{ repo_data.route }}/commit/{{ data.sha }}/delete_comment/{{ comment.number }}"> 91<button type="submit" class="button-flat">{% trans %}Delete{% endtrans %}</button> 92</form> 93{% endif %} 94</x-buttonbox> 95</div> 96{% endfor %} 97{% if comment_query.filter_by(commit=data, file=file, line_number=vars.actual_line, line_type=vars.line_type, state=0).count() %} 98<details class="resolved-comments"> 99<summary>{% trans count=comment_query.filter_by(commit=data, file=file, line_number=vars.actual_line, line_type=vars.line_type, state=0).count() %}Resolved comments ({{ count }}){% endtrans %}</summary> 100{% for comment in comment_query.filter_by(commit=data, file=file, line_number=vars.actual_line, line_type=vars.line_type, state=0).all() %} 101<div class="comment"> 102{{ comment.text | safe }} {# this was generated by the markdown parser which escapes HML #} 103<x-buttonbox> 104{% if comment.author == current_user or data.owner == current_user or permission_level >= 2 %} 105<form method="post" action="{{ repo_data.route }}/commit/{{ data.sha }}/resolve_comment/{{ comment.number }}"> 106<button type="submit"> 107{% trans %}Unresolve{% endtrans %} 108</button> 109</form> 110<form method="post" action="{{ repo_data.route }}/commit/{{ data.sha }}/delete_comment/{{ comment.number }}"> 111<button type="submit" class="button-flat">{% trans %}Delete{% endtrans %}</button> 112</form> 113{% endif %} 114</x-buttonbox> 115</div> 116{% endfor %} 117</details> 118{% endif %} 119{% endfor %} 120{% if vars.hunk_started %} 121</pre> {# close the last hunk #} 122{% endif %} 123</section> 124</article> 125{% endfor %} 126</x-vbox> 127</x-vbox> 128</x-frame> 129</x-vbox> 130<dialog id="add-comment-dialog"> 131<article class="card"> 132<header class="card-top"> 133<div class="navbar navbar-mini"> 134<ul> 135<li><h4>{% trans %}Add comment{% endtrans %}</h4></li> 136</ul> 137<x-buttonbox class="dialog-tools"> 138<button class="button-flat button-neutral big-button" type="submit" form="info-form"><iconify-icon icon="mdi:close"></iconify-icon></button> 139</x-buttonbox> 140</div> 141</header> 142<section class="card-main" style="padding-top: var(--padding-card-top);"> 143<form method="post" action="{{ repo_data.route }}/commit/{{ data.sha }}/add_comment"> 144<input type="hidden" name="file" value=""> 145<input type="hidden" name="line" value=""> 146<textarea name="comment" required></textarea> 147<button type="submit">Post</button> 148</form> 149</section> 150</article> 151</dialog> 152{% endblock %} 153{% block scripts %} 154<script> 155document.querySelectorAll(".line-number").forEach(function (element) { 156element.addEventListener("click", function () { 157let file = element.getAttribute("data-file"); 158let line = element.getAttribute("data-line"); 159let dialog = document.getElementById("add-comment-dialog"); 160dialog.querySelector("input[name=file]").value = file; 161dialog.querySelector("input[name=line]").value = line; 162dialog.showModal(); 163}); 164}); 165document.querySelectorAll() 166</script> 167{% endblock %} 168