sprint/templates/solution.html
Egor Matveev 9c0123cbf2 initial
2021-07-11 10:28:12 +03:00

271 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% extends 'base.html' %}
{% block title %}{{ solution.task.name }}|решение{% endblock %}
{% block links %}
<link rel="stylesheet" href="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.4.0/build/styles/default.min.css">
<script src="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.4.0/build/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
{% endblock %}
{% load filters %}
{% block scripts %}
{% if can_edit %}
function findGetParameter(parameterName) {
var result = null,
tmp = [];
location.search
.substr(1)
.split("&")
.forEach(function (item) {
tmp = item.split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
});
return result;
}
function next() {
const solutions_request = findGetParameter('solutions');
const solutions = solutions_request.split(' ');
const current = findGetParameter('id');
const current_index = solutions.findIndex((element) => element == current);
if (current_index != solutions.length - 1) {
var next_element = document.getElementById('next');
next_element.setAttribute('href', '/admin/solution?id=' + solutions[current_index + 1] + '&solutions=' + solutions_request);
next_element.innerHTML = '->';
}
}
function previous() {
const solutions_request = findGetParameter('solutions');
const solutions = solutions_request.split(' ');
const current = findGetParameter('id');
const current_index = solutions.findIndex((element) => element == current);
if (current_index != 0) {
var next_element = document.getElementById('previous');
next_element.setAttribute('href', '/admin/solution?id=' + solutions[current_index - 1] + '&solutions=' + solutions_request);
next_element.innerHTML = '<-';
}
}
function fillContent() {
next();
previous();
}
{% if can_edit %}
function showHideTests() {
var text = document.getElementById('tests_text');
var button = document.getElementById('tests_button');
text.hidden = !text.hidden;
if (text.hidden) {
button.textContent = 'Показать тесты';
} else {
button.textContent = 'Скрыть тесты';
}
}
function showHideLog() {
var text = document.getElementById('log_text');
var button = document.getElementById('log_button');
text.hidden = !text.hidden;
if (text.hidden) {
button.textContent = 'Показать лог';
} else {
button.textContent = 'Скрыть лог';
}
}
function retest() {
let del = confirm("Подтвердите перетест");
if (del) {
const sols = findGetParameter('solutions');
const link = '/admin/retest?block_id={{ solution.task.block.id }}&solution_id={{ solution.id }}&next={% autoescape off %}{{ path }}?id={{ solution.id }}{% if current_page == 'admin' %}%26solutions={% endif %}{% endautoescape %}'{% if current_page == 'admin' %} + sols.replaceAll(' ', '%20'){% endif %};
window.location.href = link;
}
}
{% endif %}
{% endif %}
{% endblock %}
{% block onload %}{% if can_edit %}fillContent(){% endif %}{% endblock %}
{% block content %}
<div class="row">
<div class="col-6">
<h5>
<form method="POST">
<table class="table">
<tr>
<td>
Блок
</td>
<td>
<a href="{% if current_page == 'admin' %}/admin{% endif %}/block?id={{ solution.task.block.id }}">{{ solution.task.block.name }}</a>
{% if current_page == 'admin' %}
| <a style="margin-top: 15px;" href="/admin/solutions?block_id={{ solution.task.block.id }}">К посылкам</a> | <a style="margin-top: 15px;" href="/admin/rating?block_id={{ solution.task.block.id }}">К рейтингу</a>
{% endif %}
</td>
</tr>
<tr>
<td>
Таск
</td>
<td>
<a href="{% if current_page == 'admin' %}/admin{% endif %}/task?id={{ solution.task.id }}">{{ solution.task.name }}</a>
</td>
</tr>
<tr>
<td>
Студент
</td>
<td>
{{ solution.userinfo.surname }} {{ solution.userinfo.name }} {{ solution.userinfo.middle_name }}
</td>
</tr>
<tr>
<td>
id решения
</td>
<td>
<div style="text-align: center;"></div>
{% if can_edit %}
<a id="previous"></a>
{% endif %}
{{ solution.id }}
{% if can_edit %}
<a id="next"></a>
{% endif %}
</div>
</td>
</tr>
<tr>
<td>
Результат
</td>
<td>
{% if can_edit or solution.task.show_details %}
<!-- Button trigger modal -->
<button type="button" class="btn btn-link" data-toggle="modal" data-target="#resultModalLong{{ solution.id }}">
{{ solution.result }}
</button>
<!-- Modal -->
<div class="modal fade" id="resultModalLong{{ solution.id }}" tabindex="-1" role="dialog" aria-labelledby="resultModalLongTitle{{ solution.id }}" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="resultModalLongTitle{{ solution.id }}">Подробная информация о тестировании {{ solution.id }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="col-12">
{% autoescape off %}
{{ solution.details }}
{% endautoescape %}
{% if can_edit %}
<hr>
<pre id="tests_text" hidden>
<h4>Тесты</h4><br>
{{ solution.task.tests_text }}
</pre>
<hr>
<pre id="log_text" hidden>
<h4>Лог</h4><br>
{{ solution.log_text }}
</pre>
{% endif %}
</div>
</div>
</div>
</div>
<div class="modal-footer">
{% if can_edit %}
<button type="button" id="log_button" class="btn btn-warning" onclick="showHideLog()">Показать лог</button>
<button type="button" id="tests_button" class="btn btn-primary" onclick="showHideTests()">Показать тесты</button>
{% endif %}
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
{% else %}
{% if solution.task.show_result %}
{{ solution.result }}
{% else %}
Accepted
{% endif %}
{% endif %}
</td>
</tr>
<tr>
<td>
Оценка
</td>
<td>
{% if can_edit %}
{% csrf_token %}
<label>
<select name="mark">
{% autoescape off %}
{{ solution.mark_select }}
{% endautoescape %}
</select>
</label>
{% else %}
{% if solution.task.show_result %}
{{ solution.mark_property }}
{% else %}
{% if solution.mark == null %}
Checking
{% else %}
Checked
{% endif %}
{% endif %}
{% endif %}
</td>
</tr>
<tr>
<td>
Комментарий
</td>
<td>
{% if can_edit %}
<textarea rows="10" cols="50" style="resize: none;" name="comment">{{ solution.comment }}</textarea>
{% else %}
<pre>
{{ solution.comment_property }}
</pre>
{% endif %}
</td>
</tr>
</table>
{% if can_edit %}
<button type="submit" name="action" value="Зачесть" class="btn btn-dark"><i class="fa fa-check"></i> Зачесть</button>
<button type="submit" name="action" value="Незачесть" class="btn btn-dark"><i class="fa fa-times"></i> Не зачесть</button>
<button type="submit" name="action" value="Выставить макс. балл" class="btn btn-dark"><i class="fa fa-arrow-up"></i> Выставить макс. балл</button>
<button type="button" class="btn btn-dark" onclick="retest()"><i class="fa fa-undo"></i> Перетест</button>
{% endif %}
<button type="button" class="btn btn-dark"><i class="fa fa-question-circle"></i> Помощь</button>
</form>
</h5>
</div>
</div>
<h3>Files</h3>
{% for filename, text in solution.files.items %}
<h5>{{ filename }}</h5>
{% if filename|is_code %}
<pre>
<code class="c# border border-dark">
{{ text }}
</code>
</pre>
{% else %}
<div class="border border-dark bg-light" style="padding: 15px;">
<pre>
{{ text }}
</pre>
</div>
{% endif %}
<hr>
{% endfor %}
{% endblock %}