Reformat html files
This commit is contained in:
parent
9a208ca108
commit
52f1e77fe1
205 changed files with 11096 additions and 11086 deletions
9
.pre-commit-config.yaml
Normal file
9
.pre-commit-config.yaml
Normal file
|
@ -0,0 +1,9 @@
|
|||
repos:
|
||||
- repo: https://github.com/rtts/djhtml
|
||||
rev: 'main' # replace with the latest tag on GitHub
|
||||
hooks:
|
||||
- id: djhtml
|
||||
entry: djhtml -i -t 2
|
||||
files: templates/.
|
||||
- id: djcss
|
||||
types: [scss]
|
|
@ -42,3 +42,4 @@ bleach
|
|||
pymdown-extensions
|
||||
mdx-breakless-lists
|
||||
beautifulsoup4
|
||||
pre-commit
|
|
@ -1,11 +1,11 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block body %}
|
||||
{% if request.organization %}
|
||||
{% if request.organization %}
|
||||
{% cache 3600 'organization_html' request.organization.id MATH_ENGINE %}
|
||||
{{ request.organization.about|markdown|reference|str|safe }}
|
||||
{% endcache %}
|
||||
{% else %}
|
||||
{% else %}
|
||||
<h4>
|
||||
<a target="_blank" href="">LQDOJ (Le Quy Don Online Judge)</a> là một trang web chấm bài tự động được phát triển dựa trên nền tảng mã nguồn mở <a target="_blank" href="https://dmoj.ca/">DMOJ</a>. Được xây dựng với mục đích ban đầu là tạo ra một môi trường học tập cho học sinh khối chuyên Tin <a target="_blank" href="http://thpt-lequydon-danang.edu.vn/">trường THPT chuyên Lê Quý Đôn (TP Đà Nẵng)</a>, hiện nay LQDOJ đã cho phép đăng ký tự do để trở thành một sân chơi rộng mở cho toàn bộ cộng đồng học sinh yêu Tin học. Trang web cung cấp lượng bài luyện tập đồ sộ từ các kỳ thi HSG Quốc Gia, ACM ICPC, Olympic Duyên Hải Bắc Bộ, etc. cho đến các contest định kỳ để xếp loại khả năng (rating) giúp các bạn có thêm động lực cạnh tranh và khí thế phấn đấu rèn luyện nâng cao trình độ lập trình. Các bạn có thể tham khảo mã nguồn của trang web tại <a target="_blank" href="https://github.com/LQDJudge/online-judge">Github repo chính thức</a>. Mọi ý kiến đóng góp và thắc mắc xin gửi về:
|
||||
<ul>
|
||||
|
@ -15,5 +15,5 @@
|
|||
<li><a target="_blank" href="https://www.facebook.com/doannguyenthanhluong">Đoàn Nguyễn Thành Lương</a> (handle: <span class="rating rate-master user"><a target="_blank" href="../user/CaiWinDao">CaiWinDao</a></span>), email: <a href="mailto:luong@lqdoj.edu.vn">luong@lqdoj.edu.vn</a></li>
|
||||
</ul>
|
||||
</h4>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -19,11 +19,11 @@
|
|||
Đây là checker mặc định của website, cho phép người dùng cập nhật được nhiều thông tin nhất (chi tiết xem ở bên dưới). Chúng ta cần hoàn thành hàm check dưới đây:
|
||||
</p>
|
||||
|
||||
{{
|
||||
"""
|
||||
def check(process_output, judge_output, **kwargs):
|
||||
{{
|
||||
"""
|
||||
def check(process_output, judge_output, **kwargs):
|
||||
# return True/False
|
||||
"""|highlight('py')}}
|
||||
"""|highlight('py')}}
|
||||
|
||||
<p>
|
||||
Trong đó, <code>**kwargs</code> có thể chứa các biến sau:
|
||||
|
@ -47,16 +47,16 @@ def check(process_output, judge_output, **kwargs):
|
|||
<h2>Ví dụ: </h2>
|
||||
<p>Dưới đây là ví dụ cho bài toán: Input gồm 1 số nguyên n. In ra 2 số nguyên a, b sao cho a + b = n.
|
||||
</p>
|
||||
{{
|
||||
"""
|
||||
from dmoj.result import CheckerResult
|
||||
{{
|
||||
"""
|
||||
from dmoj.result import CheckerResult
|
||||
|
||||
|
||||
def wa(feedback):
|
||||
def wa(feedback):
|
||||
return CheckerResult(False, 0, feedback)
|
||||
|
||||
|
||||
def check(process_output, judge_output, judge_input, **kwargs):
|
||||
def check(process_output, judge_output, judge_input, **kwargs):
|
||||
# process the input
|
||||
input_arr = judge_input.split()
|
||||
assert(len(input_arr) == 1)
|
||||
|
@ -76,7 +76,7 @@ def check(process_output, judge_output, judge_input, **kwargs):
|
|||
if (n == a + b):
|
||||
return True
|
||||
return wa('a + b != n')
|
||||
"""| highlight('py')}}
|
||||
"""| highlight('py')}}
|
||||
</article>
|
||||
<article id="cpp">
|
||||
<h2>2. Custom validator (CPP)</h2>
|
||||
|
@ -104,12 +104,12 @@ main.exe [input_file] [output_file] [ans_file]</pre>
|
|||
<h2>Ví dụ: </h2>
|
||||
<p>Chương trình sau dùng để chấm bài toán: Cho n là một số nguyên dương. In ra hai số tự nhiên a, b sao cho a + b = n. </p>
|
||||
<p>Nếu in ra a + b = n và a, b >= 0 thì được 100% số điểm, nếu a + b = n nhưng một trong 2 số a, b âm thì được 50% số điểm. </p>
|
||||
{{
|
||||
"""
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
{{
|
||||
"""
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
int main(int argc, char** argv) {
|
||||
ifstream inp(argv[1]);
|
||||
ifstream out(argv[2]);
|
||||
ifstream ans(argv[3]);
|
||||
|
@ -135,8 +135,8 @@ int main(int argc, char** argv) {
|
|||
cout << \"a + b = \" << a + b << \" != \" << n << endl;
|
||||
return 1; // WA
|
||||
}
|
||||
}
|
||||
""" | highlight('cpp')}}
|
||||
}
|
||||
""" | highlight('cpp')}}
|
||||
</article>
|
||||
<article id="interactive">
|
||||
<h2>3. Interactive (CPP)</h2>
|
||||
|
@ -163,22 +163,22 @@ main.exe [input_file] [answer_file]</pre>
|
|||
|
||||
<h2>Ví dụ: </h2>
|
||||
<p>Chương trình sau dùng để chấm bài toán guessgame: Người chơi phải tìm 1 số bí mật n (n chứa trong file input). Mỗi lần họ được hỏi một số x, và chương trình sẽ trả về "SMALLER", "BIGGER" hoặc "HOLA" dựa trên giá trị của n và x. Cần tìm ra n sau không quá 31 câu hỏi. </p>
|
||||
{{
|
||||
"""
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
{{
|
||||
"""
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
void quit(string reason) {
|
||||
void quit(string reason) {
|
||||
cerr << reason << endl;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void read(long long& guess) {
|
||||
void read(long long& guess) {
|
||||
if (!(cin >> guess)) exit(1); // Nếu không có dòng này, chương trình sẽ chờ vô hạn
|
||||
if (guess < 1 || guess > 2e9) exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int main(int argc, char *argv[]) {
|
||||
ifstream inp(argv[1]);
|
||||
int N, guesses = 0;
|
||||
long long guess;
|
||||
|
@ -202,7 +202,7 @@ int main(int argc, char *argv[]) {
|
|||
cerr << \"Used too many guesses\" << endl;
|
||||
return 1; // WA
|
||||
}
|
||||
}
|
||||
""" | highlight('cpp')}}
|
||||
}
|
||||
""" | highlight('cpp')}}
|
||||
</article>
|
||||
{% endblock %}
|
|
@ -1,8 +1,8 @@
|
|||
{% set logged_in = request.user.is_authenticated %}
|
||||
{% set profile = request.profile if logged_in else None %}
|
||||
{% if logged_in %}
|
||||
{% if include_hr %}<hr>{% endif %}
|
||||
<div class="page-vote actionbar">
|
||||
{% if include_hr %}<hr>{% endif %}
|
||||
<div class="page-vote actionbar">
|
||||
<span class="actionbar-block" style="justify-content: flex-start;">
|
||||
<span id="like-button-{{pagevote.id}}"
|
||||
class="like-button actionbar-button {% if pagevote.vote_score(request.profile) == 1 %}voted{% endif %}"
|
||||
|
@ -47,5 +47,5 @@
|
|||
</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ LANGUAGE_CODE }}">
|
||||
<head>
|
||||
<head>
|
||||
<title>{% block title %}{{ title }} - {{ SITE_LONG_NAME }}{% endblock %}</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
{% if misc_config.meta_keywords %}
|
||||
|
@ -192,14 +192,14 @@
|
|||
}
|
||||
</style>
|
||||
</noscript>
|
||||
</head>
|
||||
<body>
|
||||
<svg width="0" height="0" style="display: block">
|
||||
</head>
|
||||
<body>
|
||||
<svg width="0" height="0" style="display: block">
|
||||
<defs>
|
||||
<clipPath id="rating-clip"><circle cx="8" cy="8" r="7"/></clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<nav id="navigation" class="unselectable">
|
||||
</svg>
|
||||
<nav id="navigation" class="unselectable">
|
||||
<div id="nav-container">
|
||||
<a id="navicon" href="javascript:void(0)"><i class="fa fa-bars"></i></a>
|
||||
<ul id="nav-list">
|
||||
|
@ -300,8 +300,8 @@
|
|||
</div>
|
||||
</div>
|
||||
<div id="nav-shadow"></div>
|
||||
</nav>
|
||||
{% if request.in_contest %}
|
||||
</nav>
|
||||
{% if request.in_contest %}
|
||||
<div id="contest-info">
|
||||
<div id="contest-info-main">
|
||||
<a href="{{ url('contest_view', request.participation.contest.key) }}" style="vertical-align: middle; display: inline">
|
||||
|
@ -325,8 +325,8 @@
|
|||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div id="page-container">
|
||||
{% endif %}
|
||||
<div id="page-container">
|
||||
<noscript>
|
||||
<div id="noscript">{{ _('This site works best with JavaScript enabled.') }}</div>
|
||||
</noscript>
|
||||
|
@ -373,9 +373,9 @@
|
|||
</span>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Fira+Code&family=Noto+Sans&display=swap" rel="stylesheet">
|
||||
</body>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -4,24 +4,24 @@
|
|||
{% block title %} {{_('Chat Box')}} {% endblock %}
|
||||
{% block js_media %}
|
||||
|
||||
<script type="text/javascript" src="{{ static('mathjax3_config.js') }}"></script>
|
||||
<script type="text/javascript" src="{{ static('event.js') }}"></script>
|
||||
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
||||
<script type="module" src="https://unpkg.com/emoji-picker-element@1"></script>
|
||||
<script type="text/javascript">
|
||||
let message_template = `
|
||||
<script type="text/javascript" src="{{ static('mathjax3_config.js') }}"></script>
|
||||
<script type="text/javascript" src="{{ static('event.js') }}"></script>
|
||||
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
||||
<script type="module" src="https://unpkg.com/emoji-picker-element@1"></script>
|
||||
<script type="text/javascript">
|
||||
let message_template = `
|
||||
{% with message=message_template %}
|
||||
{% include "chat/message.html" %}
|
||||
{% endwith %}
|
||||
`;
|
||||
let META_HEADER = [
|
||||
`;
|
||||
let META_HEADER = [
|
||||
"{{_('Recent')}}",
|
||||
"{{_('Following')}}",
|
||||
"{{_('Admin')}}",
|
||||
"{{_('Other')}}",
|
||||
];
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
];
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
window.currentPage = 1;
|
||||
window.limit_time = 24;
|
||||
window.messages_per_page = 50;
|
||||
|
@ -564,7 +564,7 @@ let META_HEADER = [
|
|||
}
|
||||
register_setting();
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
|
||||
{% endblock js_media %}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{% if object_list %}
|
||||
<div style="display: none" id="num_pages">{{num_pages}}</div>
|
||||
{% for message in object_list | reverse%}
|
||||
<div style="display: none" id="num_pages">{{num_pages}}</div>
|
||||
{% for message in object_list | reverse%}
|
||||
{% include "chat/message.html" %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<center id="empty_msg">{{_('You are connect now. Say something to start the conversation.')}}</center>
|
||||
{% endif %}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{% if other_user %}
|
||||
<div class="status-container" style="height: 100%">
|
||||
<div class="status-container" style="height: 100%">
|
||||
<img src="{{ gravatar(other_user.user, 135) }}" class="info-pic">
|
||||
<svg style="position:absolute; height:100%; width: 110%">
|
||||
<circle class="info-circle"
|
||||
fill="{{'green' if other_online else 'red'}}"/>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<span class="info-name username">
|
||||
{% if other_user %}
|
||||
|
@ -20,7 +20,7 @@
|
|||
{% endif %}
|
||||
|
||||
{% if other_user %}
|
||||
<span style="margin-right: 0.3em" id="setting">
|
||||
<span style="margin-right: 0.3em" id="setting">
|
||||
<button class="control-button small" style="height:100%;" id="setting-button">
|
||||
<i class="fa fa-ellipsis-h"></i>
|
||||
</button>
|
||||
|
@ -35,7 +35,7 @@
|
|||
</a>
|
||||
</li>
|
||||
</div>
|
||||
</span>
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="active-span">{{online_count}} {{_('users are online')}}</span>
|
||||
<span class="active-span">{{online_count}} {{_('users are online')}}</span>
|
||||
{% endif %}
|
|
@ -22,12 +22,12 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block js_media %}
|
||||
{{ form.media.js }}
|
||||
<script>
|
||||
{{ form.media.js }}
|
||||
<script>
|
||||
$(function() {
|
||||
$('#problem-select').select2({width: '40em'});
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<html>
|
||||
<head>
|
||||
<head>
|
||||
<title>{{ code }} - {{ id }}</title>
|
||||
<style>
|
||||
body {
|
||||
|
@ -18,15 +18,15 @@
|
|||
white-space: pre-wrap;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h2>SIGSEGV: {{ id }}</h2>
|
||||
<hr/>
|
||||
<pre>{{ description }}
|
||||
</head>
|
||||
<body>
|
||||
<h2>SIGSEGV: {{ id }}</h2>
|
||||
<hr/>
|
||||
<pre>{{ description }}
|
||||
site: fatal signal: Segmentation fault
|
||||
site died (signal <b>{{ code }}</b>, exit -11)<br><br><a href="javascript:history.back()">Go back</a></pre>
|
||||
{% if request.user.is_superuser and traceback %}
|
||||
{% if request.user.is_superuser and traceback %}
|
||||
<pre>{{ traceback }}</pre>
|
||||
{% endif %}
|
||||
</body>
|
||||
{% endif %}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
{% block body %}
|
||||
|
||||
{% if not has_notifications %}
|
||||
{% if not has_notifications %}
|
||||
|
||||
<h2 style="text-align: center;">{{ _('You have no notifications') }}</h2>
|
||||
<h2 style="text-align: center;">{{ _('You have no notifications') }}</h2>
|
||||
|
||||
{% else %}
|
||||
{% else %}
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>{{ _('User') }}</th>
|
||||
|
@ -42,7 +42,7 @@
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block middle_content %}
|
||||
<form action="" method="post">
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
{% if form.errors %}
|
||||
<div class="alert alert-danger alert-dismissable">
|
||||
|
@ -35,5 +35,5 @@
|
|||
{% endfor %}
|
||||
<button type="submit" style="display: inline;" name="action" value="Save" >{{ _('Save') }} </button>
|
||||
<button type="submit" style="background-color: red; float: right;" name="action" value="Delete" > {{ _('Delete') }} </button>
|
||||
</form>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -545,19 +545,19 @@
|
|||
{{ form.input_file.errors }}{{ form.input_file }}
|
||||
</td>
|
||||
<td{% if not (form.empty_permitted or form['type'].value() != 'C' or
|
||||
form['output_file'].value() in valid_files) %} class="bad-file"{% endif %}>
|
||||
form['output_file'].value() in valid_files) %} class="bad-file"{% endif %}>
|
||||
{{ form.output_file.errors }}{{ form.output_file }}
|
||||
</td>
|
||||
<td>{{ form.points.errors }}{{ form.points }}</td>
|
||||
<td>{{ form.is_pretest.errors }}{{ form.is_pretest }}</td>
|
||||
{% if cases_formset.can_delete %}
|
||||
</td>
|
||||
<td>{{ form.points.errors }}{{ form.points }}</td>
|
||||
<td>{{ form.is_pretest.errors }}{{ form.is_pretest }}</td>
|
||||
{% if cases_formset.can_delete %}
|
||||
<td>{{ form.DELETE }}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<input type="submit" value="{{ _('Apply!') }}" class="button" id="submit-button">
|
||||
<a id="add-case-row" href="#"><i class="fa fa-plus"></i> {{ _('Add new case') }}</a>
|
||||
</form>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<input type="submit" value="{{ _('Apply!') }}" class="button" id="submit-button">
|
||||
<a id="add-case-row" href="#"><i class="fa fa-plus"></i> {{ _('Add new case') }}</a>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -176,8 +176,8 @@
|
|||
not (request.user.is_authenticated and request.in_contest_mode) %}
|
||||
<hr>
|
||||
<div><a href="{{ url('problem_editorial', problem.code) }}">{{ _('Read editorial') }}</a></div>
|
||||
{% endif %}
|
||||
{% if can_edit_problem %}
|
||||
{% endif %}
|
||||
{% if can_edit_problem %}
|
||||
<hr>
|
||||
<div>
|
||||
<a href="{{ url('problem_ticket_list', problem.code) }}">{{ _('Manage tickets') }}
|
||||
|
@ -188,30 +188,30 @@
|
|||
{% if not problem.is_manually_managed %}
|
||||
<div><a href="{{ url('problem_data', problem.code) }}">{{ _('Edit test data') }}</a></div>
|
||||
{% endif %}
|
||||
{% elif request.user.is_authenticated and has_tickets %}
|
||||
{% elif request.user.is_authenticated and has_tickets %}
|
||||
<hr>
|
||||
<div>
|
||||
<a href="{{ url('problem_ticket_list', problem.code) }}">{{ _('My tickets') }}
|
||||
{% if num_open_tickets %}<span class="badge">{{ num_open_tickets }}</span>{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if problem.is_subs_manageable_by(request.user) %}
|
||||
{% if problem.is_subs_manageable_by(request.user) %}
|
||||
<div>
|
||||
<a href="{{ url('problem_manage_submissions', problem.code) }}">{{ _('Manage submissions') }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if perms.judge.clone_problem %}
|
||||
{% if perms.judge.clone_problem %}
|
||||
<div>
|
||||
<a href="{{ url('problem_clone', problem.code) }}">{{ _('Clone problem') }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<hr style="padding-top: 0.3em">
|
||||
<hr style="padding-top: 0.3em">
|
||||
|
||||
<div class="problem-info-entry">
|
||||
<div class="problem-info-entry">
|
||||
<i class="fa fa-check fa-fw"></i><span class="pi-name">{{ _('Points:') }}</span>
|
||||
<span class="pi-value">
|
||||
{% if contest_problem %}
|
||||
|
@ -220,45 +220,45 @@
|
|||
{{ problem.points|floatformat }}{% if problem.partial %} {{ _('(partial)') }}{% endif %}
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
<i class="fa fa-clock-o fa-fw"></i><span class="pi-name">{{ _('Time limit:') }}</span>
|
||||
<span class="pi-value">{{ problem.time_limit }}s</span>
|
||||
</div>
|
||||
<div class="problem-lang-limits">
|
||||
</div>
|
||||
<div class="problem-lang-limits">
|
||||
{% for name, limit in problem.language_time_limit %}
|
||||
<div class="lang-limit">
|
||||
<span class="lang-name">{{ name }}</span>
|
||||
<span class="lang-tl">{{ limit }}s</span>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
<i class="fa fa-server fa-fw"></i><span class="pi-name">{{ _('Memory limit:') }}</span>
|
||||
<span class="pi-value">{{ problem.memory_limit|kbsimpleformat }}</span>
|
||||
</div>
|
||||
<div class="problem-lang-limits">
|
||||
</div>
|
||||
<div class="problem-lang-limits">
|
||||
{% for name, limit in problem.language_memory_limit %}
|
||||
<div class="lang-limit">
|
||||
<span class="lang-name">{{ name }}</span>
|
||||
<span class="lang-ml">{{ limit|kbsimpleformat }}</span>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
<i class="fa fa-file-o fa-fw"></i><span class="pi-name">{{ _('Input:') }}</span>
|
||||
<span class="pi-value">
|
||||
{{ fileio_input or _('stdin') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
<i class="fa fa-file fa-fw"></i><span class="pi-name">{{ _('Output:') }}</span>
|
||||
<span class="pi-value">{{ fileio_output or _('stdout') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr style="padding-top: 0.7em">
|
||||
<hr style="padding-top: 0.7em">
|
||||
|
||||
{% cache 86400 'problem_authors' problem.id LANGUAGE_CODE %}
|
||||
{% cache 86400 'problem_authors' problem.id LANGUAGE_CODE %}
|
||||
{% with authors=problem.authors.all() %}
|
||||
{% if authors %}
|
||||
<div class="problem-info-entry">
|
||||
|
@ -272,9 +272,9 @@
|
|||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% endcache %}
|
||||
{% endcache %}
|
||||
|
||||
{% if not contest_problem or not contest_problem.contest.hide_problem_tags %}
|
||||
{% if not contest_problem or not contest_problem.contest.hide_problem_tags %}
|
||||
<div id="problem-types">
|
||||
{% with types=problem.types_list %}
|
||||
<div class="toggle closed unselectable">
|
||||
|
@ -287,8 +287,8 @@
|
|||
<div style="display:none" class="toggled">{{ problem.types_list|join(", ") }}</div>
|
||||
{% endwith %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if show_languages %}
|
||||
{% endif %}
|
||||
{% if show_languages %}
|
||||
<div id="allowed-langs">
|
||||
<div class="toggle open unselectable">
|
||||
<i class="fa fa-chevron-right fa-fw"></i>{{ _('Allowed languages') }}
|
||||
|
@ -306,8 +306,8 @@
|
|||
{% endwith %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if problem.is_editable_by(request.user) %}
|
||||
{% endif %}
|
||||
{% if problem.is_editable_by(request.user) %}
|
||||
<div id="available-judges">
|
||||
<div class="toggle closed" id="judge-toggle">
|
||||
<i class="fa fa-chevron-right fa-fw"></i><span
|
||||
|
@ -333,7 +333,7 @@
|
|||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block description %}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<head>
|
||||
<link rel="stylesheet" href="{{ static('style.css') }}">
|
||||
<link rel="stylesheet" href="{{ static('pygment-github.css') }}" type="text/css">
|
||||
<link rel="stylesheet" href="{{ static('markdown.css') }}">
|
||||
|
@ -57,12 +57,12 @@
|
|||
text-align: left;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h2 style="color:#393630; display: inline-block;">{{ problem_name }}</h2>
|
||||
<hr>
|
||||
<div align="center" style="position: relative;">
|
||||
<body>
|
||||
<h2 style="color:#393630; display: inline-block;">{{ problem_name }}</h2>
|
||||
<hr>
|
||||
<div align="center" style="position: relative;">
|
||||
<div class="problem-info-entry">
|
||||
<b>{{ _('Input:') }}</b> {{ fileio_input or _('stdin') }}
|
||||
</div>
|
||||
|
@ -87,21 +87,21 @@
|
|||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<hr style="clear: both;">
|
||||
<div class="content-description printing">
|
||||
</div>
|
||||
<hr style="clear: both;">
|
||||
<div class="content-description printing">
|
||||
{{ description|markdown|reference|absolutify(url)|str|safe }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="{{ static('mathjax3_config.js') }}"></script>
|
||||
<script type="text/javascript" src="mathjax3_config.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS_HTML"></script>
|
||||
<script type="text/javascript">
|
||||
<script type="text/javascript" src="{{ static('mathjax3_config.js') }}"></script>
|
||||
<script type="text/javascript" src="mathjax3_config.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS_HTML"></script>
|
||||
<script type="text/javascript">
|
||||
MathJax.Hub.Register.StartupHook("End", function () {
|
||||
if (typeof window.callPhantom === 'function')
|
||||
window.callPhantom({'action': 'snapshot'});
|
||||
document.body.classList.add('math-loaded');
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -15,9 +15,9 @@ Your reply must keep the following text intact for this to work:
|
|||
</pre>
|
||||
|
||||
{% if SITE_ADMIN_EMAIL %}
|
||||
See you soon!
|
||||
<br>
|
||||
If you have problems activating your account, feel free to send us an email at <a href="mailto:{{ SITE_ADMIN_EMAIL }}">{{ SITE_ADMIN_EMAIL }}</a>.
|
||||
See you soon!
|
||||
<br>
|
||||
If you have problems activating your account, feel free to send us an email at <a href="mailto:{{ SITE_ADMIN_EMAIL }}">{{ SITE_ADMIN_EMAIL }}</a>.
|
||||
{% else %}
|
||||
See you soon!
|
||||
See you soon!
|
||||
{% endif %}
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
<span style="display:block;margin: 0 2px;padding: 1em;border: 3px solid #FFDE05;background-color: #000;border-radius: 6px;font-size: .95em;color: #444;margin-bottom:0.75em">
|
||||
<div style="display:table;margin-left:2em"><img src="https://avatars1.githubusercontent.com/u/6934864?v=3&s=101" style="display:inline;vertical-align: middle">
|
||||
<h1 style="font-size:4em;display:inline;vertical-align: middle"><a href="//{{ domain }}" style="text-decoration:none;color:gray"><span style="color: #FFDE05">LQD</span>OJ</a>
|
||||
<div style="display:table;margin-left:2em"><img src="https://avatars1.githubusercontent.com/u/6934864?v=3&s=101" style="display:inline;vertical-align: middle">
|
||||
<h1 style="font-size:4em;display:inline;vertical-align: middle"><a href="//{{ domain }}" style="text-decoration:none;color:gray"><span style="color: #FFDE05">LQD</span>OJ</a>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<div style="display:block;margin: 0 2px;padding: 1em;border: 3px solid #2980B9;background-color: #f8f8f8;border-radius: 6px;font-size: .95em;color: #444;">
|
||||
|
||||
<b>Forgot your password on the {{ site_name }}? Don't worry!</b><br><br>
|
||||
To reset the password for your account "{{ user.get_username() }}", click the below button.
|
||||
<p align="center">
|
||||
<a href="{{ protocol }}://{{ domain }}{{ url('password_reset_confirm', uidb64=uid, token=token) }}" style="cursor: pointer;display:block;text-align: center;padding: 4px 2px 5px;color: white;border: 1px solid #666;border-radius: 1px;background: #2980b9;background: linear-gradient(180deg, #00aee0, #2980b9);text-decoration: none;line-height:2em;font-size:1emm;width:12em;">Reset password</a>
|
||||
</p>
|
||||
{% if SITE_ADMIN_EMAIL %}
|
||||
See you soon! If you have problems resetting your email, feel free to shoot us an email at <a href="mailto:{{ SITE_ADMIN_EMAIL }}">{{ SITE_ADMIN_EMAIL }}</a>
|
||||
{% else %}
|
||||
See you soon!
|
||||
{% endif %}
|
||||
<b>Forgot your password on the {{ site_name }}? Don't worry!</b><br><br>
|
||||
To reset the password for your account "{{ user.get_username() }}", click the below button.
|
||||
<p align="center">
|
||||
<a href="{{ protocol }}://{{ domain }}{{ url('password_reset_confirm', uidb64=uid, token=token) }}" style="cursor: pointer;display:block;text-align: center;padding: 4px 2px 5px;color: white;border: 1px solid #666;border-radius: 1px;background: #2980b9;background: linear-gradient(180deg, #00aee0, #2980b9);text-decoration: none;line-height:2em;font-size:1emm;width:12em;">Reset password</a>
|
||||
</p>
|
||||
{% if SITE_ADMIN_EMAIL %}
|
||||
See you soon! If you have problems resetting your email, feel free to shoot us an email at <a href="mailto:{{ SITE_ADMIN_EMAIL }}">{{ SITE_ADMIN_EMAIL }}</a>
|
||||
{% else %}
|
||||
See you soon!
|
||||
{% endif %}
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ LANGUAGE_CODE }}">
|
||||
|
||||
<head>
|
||||
<head>
|
||||
<title>Contest Resolver</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
|
@ -14,9 +14,9 @@
|
|||
<script src="{{ static('libs/jquery-3.4.1.min.js') }}"></script>
|
||||
<script src="{{ static('resolver.js') }}"></script>
|
||||
<!-- <script src="{{ static('resolver-main.js') }}"></script> -->
|
||||
</head>
|
||||
</head>
|
||||
|
||||
<body class="app">
|
||||
<body class="app">
|
||||
<div class="hidden-board">
|
||||
</div>
|
||||
|
||||
|
@ -37,6 +37,6 @@
|
|||
<div class="school-show"> Z </div>
|
||||
</div>
|
||||
{% include "resolver/media-js.html" %}
|
||||
</body>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -297,11 +297,11 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block middle_title %}
|
||||
<div class="page-title">
|
||||
<div class="page-title">
|
||||
<div class="tabs" style="border: none;">
|
||||
<h2>{{content_title}}</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block middle_content %}
|
||||
|
@ -327,7 +327,7 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block right_sidebar %}
|
||||
{% if results_json %}
|
||||
{% if results_json %}
|
||||
<div class="right-sidebar">
|
||||
<div class="submission">
|
||||
<div class="sidebox">
|
||||
|
@ -373,7 +373,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block left_sidebar %}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
</h4>
|
||||
<hr>
|
||||
{% if best_subtasks and subtasks %}
|
||||
<table class="lightbox-submissions"><tbody>
|
||||
<table class="lightbox-submissions"><tbody>
|
||||
{% for subtask in subtasks %}
|
||||
<tr>
|
||||
{% set cur_subtask = best_subtasks[subtask] %}
|
||||
|
@ -36,12 +36,12 @@
|
|||
{{ points }} / {{ total }}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<hr>
|
||||
</tbody></table>
|
||||
<hr>
|
||||
{% endif %}
|
||||
{% if submissions %}
|
||||
<table class="lightbox-submissions"><tbody>
|
||||
{% for submission in submissions %}
|
||||
<table class="lightbox-submissions"><tbody>
|
||||
{% for submission in submissions %}
|
||||
<tr>
|
||||
{% set can_view = submission_layout(submission, profile_id, request.user, editable_problem_ids, completed_problem_ids) %}
|
||||
<td class="lightbox-submissions-time">
|
||||
|
@ -68,6 +68,6 @@
|
|||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody></table>
|
||||
{% endfor %}
|
||||
</tbody></table>
|
||||
{% endif %}
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Task Progress - {{ SITE_LONG_NAME }}</title>
|
||||
<link rel="stylesheet" href="{{ static('task_status.css') }}">
|
||||
|
@ -72,9 +72,9 @@
|
|||
}
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="jumbotron" data-task-id="{{ task_id }}" data-task-status="{{ task_status }}"
|
||||
data-redirect="{{ redirect }}">
|
||||
<img src="{{ static('icons/icon.svg') }}" class="icon" alt="DMOJ Icon">
|
||||
|
@ -95,6 +95,6 @@
|
|||
<div class="progress-bar" role="progressbar">Failed!</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<tr>
|
||||
<th class="header rank">{{ rank_header or _("Rank") }}</th>
|
||||
{% block after_rank_head %}{% endblock %}
|
||||
<th class="header username">{{ _('Username') }}{% block username_head_extra %}{% endblock %}</th>
|
||||
|
@ -11,11 +11,11 @@
|
|||
{%- if sort_links %}{{ sort_order.performance_points }}</a>{% endif %}
|
||||
</th>
|
||||
{% block after_point_head %}{% endblock %}
|
||||
</tr>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for rank, user in users %}
|
||||
{% for rank, user in users %}
|
||||
<tr id="user-{{ user.user.username }}" {% block row_extra scoped %}{% endblock %}>
|
||||
<td class="rank-td">{{ rank }}</td>
|
||||
{% block after_rank scoped %}{% endblock %}
|
||||
|
@ -28,5 +28,5 @@
|
|||
{% endblock %}
|
||||
{% block after_point scoped %}{% endblock %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "user/user-base.html" %}
|
||||
{% block js_media %}
|
||||
<script>
|
||||
<script>
|
||||
function getCookie(name) {
|
||||
let cookieValue = null;
|
||||
if (document.cookie && document.cookie !== '') {
|
||||
|
@ -91,12 +91,12 @@
|
|||
})
|
||||
})
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% csrf_token %}
|
||||
<center>
|
||||
{% csrf_token %}
|
||||
<center>
|
||||
<label for="csv_file">{{_('User File')}}:</label>
|
||||
<input type="file" accept=".csv" id="csv_file">
|
||||
<a href="{{url('import_users_sample')}}">{{_('Sample')}}</a>
|
||||
|
@ -104,8 +104,8 @@
|
|||
<button id="load_button" style="margin-left: 1em">{{_('Load')}}</button>
|
||||
<button id="confirm_button" style="margin-left: 1em" class="disabled">{{_('Import')}}</button>
|
||||
</div>
|
||||
</center>
|
||||
<br>
|
||||
<table id="table_csv" class="table"></table>
|
||||
<p style="margin-left: 2em" id="log"></p>
|
||||
</center>
|
||||
<br>
|
||||
<table id="table_csv" class="table"></table>
|
||||
<p style="margin-left: 2em" id="log"></p>
|
||||
{% endblock %}
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block user_footer %}
|
||||
<span style="margin-left: 0.5em">{% if user.rating %}{{ rating_number(user) }}{% endif %}</span>
|
||||
<div class="gray" style="font-weight: 600; margin-top: 0.2em">{{ user.user.first_name if user.user.first_name else ''}}</div>
|
||||
<span style="margin-left: 0.5em">{% if user.rating %}{{ rating_number(user) }}{% endif %}</span>
|
||||
<div class="gray" style="font-weight: 600; margin-top: 0.2em">{{ user.user.first_name if user.user.first_name else ''}}</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block after_point_head %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% if widget.is_initial %}
|
||||
{{ widget.initial_text }}: <a href="{{ widget.value.url }}">{{ widget.value }}</a>
|
||||
{{ widget.initial_text }}: <a href="{{ widget.value.url }}">{{ widget.value }}</a>
|
||||
{% endif %}
|
||||
<center id={{widget.fine_uploader_id}} class="fine-uploader"></center>
|
||||
|
|
Loading…
Reference in a new issue