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
|
pymdown-extensions
|
||||||
mdx-breakless-lists
|
mdx-breakless-lists
|
||||||
beautifulsoup4
|
beautifulsoup4
|
||||||
|
pre-commit
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
{% if request.organization %}
|
{% if request.organization %}
|
||||||
{% cache 3600 'organization_html' request.organization.id MATH_ENGINE %}
|
{% cache 3600 'organization_html' request.organization.id MATH_ENGINE %}
|
||||||
{{ request.organization.about|markdown|reference|str|safe }}
|
{{ request.organization.about|markdown|reference|str|safe }}
|
||||||
{% endcache %}
|
{% endcache %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<h4>
|
<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ề:
|
<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>
|
<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>
|
<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>
|
</ul>
|
||||||
</h4>
|
</h4>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% 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:
|
Đâ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>
|
</p>
|
||||||
|
|
||||||
{{
|
{{
|
||||||
"""
|
"""
|
||||||
def check(process_output, judge_output, **kwargs):
|
def check(process_output, judge_output, **kwargs):
|
||||||
# return True/False
|
# return True/False
|
||||||
"""|highlight('py')}}
|
"""|highlight('py')}}
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Trong đó, <code>**kwargs</code> có thể chứa các biến sau:
|
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>
|
<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>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>
|
</p>
|
||||||
{{
|
{{
|
||||||
"""
|
"""
|
||||||
from dmoj.result import CheckerResult
|
from dmoj.result import CheckerResult
|
||||||
|
|
||||||
|
|
||||||
def wa(feedback):
|
def wa(feedback):
|
||||||
return CheckerResult(False, 0, 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
|
# process the input
|
||||||
input_arr = judge_input.split()
|
input_arr = judge_input.split()
|
||||||
assert(len(input_arr) == 1)
|
assert(len(input_arr) == 1)
|
||||||
|
@ -76,7 +76,7 @@ def check(process_output, judge_output, judge_input, **kwargs):
|
||||||
if (n == a + b):
|
if (n == a + b):
|
||||||
return True
|
return True
|
||||||
return wa('a + b != n')
|
return wa('a + b != n')
|
||||||
"""| highlight('py')}}
|
"""| highlight('py')}}
|
||||||
</article>
|
</article>
|
||||||
<article id="cpp">
|
<article id="cpp">
|
||||||
<h2>2. Custom validator (CPP)</h2>
|
<h2>2. Custom validator (CPP)</h2>
|
||||||
|
@ -104,12 +104,12 @@ main.exe [input_file] [output_file] [ans_file]</pre>
|
||||||
<h2>Ví dụ: </h2>
|
<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>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>
|
<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>
|
#include <bits/stdc++.h>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
ifstream inp(argv[1]);
|
ifstream inp(argv[1]);
|
||||||
ifstream out(argv[2]);
|
ifstream out(argv[2]);
|
||||||
ifstream ans(argv[3]);
|
ifstream ans(argv[3]);
|
||||||
|
@ -135,8 +135,8 @@ int main(int argc, char** argv) {
|
||||||
cout << \"a + b = \" << a + b << \" != \" << n << endl;
|
cout << \"a + b = \" << a + b << \" != \" << n << endl;
|
||||||
return 1; // WA
|
return 1; // WA
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
""" | highlight('cpp')}}
|
""" | highlight('cpp')}}
|
||||||
</article>
|
</article>
|
||||||
<article id="interactive">
|
<article id="interactive">
|
||||||
<h2>3. Interactive (CPP)</h2>
|
<h2>3. Interactive (CPP)</h2>
|
||||||
|
@ -163,22 +163,22 @@ main.exe [input_file] [answer_file]</pre>
|
||||||
|
|
||||||
<h2>Ví dụ: </h2>
|
<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>
|
<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>
|
#include <bits/stdc++.h>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
void quit(string reason) {
|
void quit(string reason) {
|
||||||
cerr << reason << endl;
|
cerr << reason << endl;
|
||||||
exit(1);
|
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 (!(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);
|
if (guess < 1 || guess > 2e9) exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
ifstream inp(argv[1]);
|
ifstream inp(argv[1]);
|
||||||
int N, guesses = 0;
|
int N, guesses = 0;
|
||||||
long long guess;
|
long long guess;
|
||||||
|
@ -202,7 +202,7 @@ int main(int argc, char *argv[]) {
|
||||||
cerr << \"Used too many guesses\" << endl;
|
cerr << \"Used too many guesses\" << endl;
|
||||||
return 1; // WA
|
return 1; // WA
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
""" | highlight('cpp')}}
|
""" | highlight('cpp')}}
|
||||||
</article>
|
</article>
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -1,8 +1,8 @@
|
||||||
{% set logged_in = request.user.is_authenticated %}
|
{% set logged_in = request.user.is_authenticated %}
|
||||||
{% set profile = request.profile if logged_in else None %}
|
{% set profile = request.profile if logged_in else None %}
|
||||||
{% if logged_in %}
|
{% if logged_in %}
|
||||||
{% if include_hr %}<hr>{% endif %}
|
{% if include_hr %}<hr>{% endif %}
|
||||||
<div class="page-vote actionbar">
|
<div class="page-vote actionbar">
|
||||||
<span class="actionbar-block" style="justify-content: flex-start;">
|
<span class="actionbar-block" style="justify-content: flex-start;">
|
||||||
<span id="like-button-{{pagevote.id}}"
|
<span id="like-button-{{pagevote.id}}"
|
||||||
class="like-button actionbar-button {% if pagevote.vote_score(request.profile) == 1 %}voted{% endif %}"
|
class="like-button actionbar-button {% if pagevote.vote_score(request.profile) == 1 %}voted{% endif %}"
|
||||||
|
@ -47,5 +47,5 @@
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
|
@ -1,6 +1,6 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="{{ LANGUAGE_CODE }}">
|
<html lang="{{ LANGUAGE_CODE }}">
|
||||||
<head>
|
<head>
|
||||||
<title>{% block title %}{{ title }} - {{ SITE_LONG_NAME }}{% endblock %}</title>
|
<title>{% block title %}{{ title }} - {{ SITE_LONG_NAME }}{% endblock %}</title>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
{% if misc_config.meta_keywords %}
|
{% if misc_config.meta_keywords %}
|
||||||
|
@ -192,14 +192,14 @@
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</noscript>
|
</noscript>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<svg width="0" height="0" style="display: block">
|
<svg width="0" height="0" style="display: block">
|
||||||
<defs>
|
<defs>
|
||||||
<clipPath id="rating-clip"><circle cx="8" cy="8" r="7"/></clipPath>
|
<clipPath id="rating-clip"><circle cx="8" cy="8" r="7"/></clipPath>
|
||||||
</defs>
|
</defs>
|
||||||
</svg>
|
</svg>
|
||||||
<nav id="navigation" class="unselectable">
|
<nav id="navigation" class="unselectable">
|
||||||
<div id="nav-container">
|
<div id="nav-container">
|
||||||
<a id="navicon" href="javascript:void(0)"><i class="fa fa-bars"></i></a>
|
<a id="navicon" href="javascript:void(0)"><i class="fa fa-bars"></i></a>
|
||||||
<ul id="nav-list">
|
<ul id="nav-list">
|
||||||
|
@ -300,8 +300,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="nav-shadow"></div>
|
<div id="nav-shadow"></div>
|
||||||
</nav>
|
</nav>
|
||||||
{% if request.in_contest %}
|
{% if request.in_contest %}
|
||||||
<div id="contest-info">
|
<div id="contest-info">
|
||||||
<div id="contest-info-main">
|
<div id="contest-info-main">
|
||||||
<a href="{{ url('contest_view', request.participation.contest.key) }}" style="vertical-align: middle; display: inline">
|
<a href="{{ url('contest_view', request.participation.contest.key) }}" style="vertical-align: middle; display: inline">
|
||||||
|
@ -325,8 +325,8 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div id="page-container">
|
<div id="page-container">
|
||||||
<noscript>
|
<noscript>
|
||||||
<div id="noscript">{{ _('This site works best with JavaScript enabled.') }}</div>
|
<div id="noscript">{{ _('This site works best with JavaScript enabled.') }}</div>
|
||||||
</noscript>
|
</noscript>
|
||||||
|
@ -373,9 +373,9 @@
|
||||||
</span>
|
</span>
|
||||||
</footer>
|
</footer>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<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">
|
<link href="https://fonts.googleapis.com/css2?family=Fira+Code&family=Noto+Sans&display=swap" rel="stylesheet">
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -4,24 +4,24 @@
|
||||||
{% block title %} {{_('Chat Box')}} {% endblock %}
|
{% block title %} {{_('Chat Box')}} {% endblock %}
|
||||||
{% block js_media %}
|
{% block js_media %}
|
||||||
|
|
||||||
<script type="text/javascript" src="{{ static('mathjax3_config.js') }}"></script>
|
<script type="text/javascript" src="{{ static('mathjax3_config.js') }}"></script>
|
||||||
<script type="text/javascript" src="{{ static('event.js') }}"></script>
|
<script type="text/javascript" src="{{ static('event.js') }}"></script>
|
||||||
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
||||||
<script type="module" src="https://unpkg.com/emoji-picker-element@1"></script>
|
<script type="module" src="https://unpkg.com/emoji-picker-element@1"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
let message_template = `
|
let message_template = `
|
||||||
{% with message=message_template %}
|
{% with message=message_template %}
|
||||||
{% include "chat/message.html" %}
|
{% include "chat/message.html" %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
`;
|
`;
|
||||||
let META_HEADER = [
|
let META_HEADER = [
|
||||||
"{{_('Recent')}}",
|
"{{_('Recent')}}",
|
||||||
"{{_('Following')}}",
|
"{{_('Following')}}",
|
||||||
"{{_('Admin')}}",
|
"{{_('Admin')}}",
|
||||||
"{{_('Other')}}",
|
"{{_('Other')}}",
|
||||||
];
|
];
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
window.currentPage = 1;
|
window.currentPage = 1;
|
||||||
window.limit_time = 24;
|
window.limit_time = 24;
|
||||||
window.messages_per_page = 50;
|
window.messages_per_page = 50;
|
||||||
|
@ -564,7 +564,7 @@ let META_HEADER = [
|
||||||
}
|
}
|
||||||
register_setting();
|
register_setting();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% endblock js_media %}
|
{% endblock js_media %}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{% if object_list %}
|
{% if object_list %}
|
||||||
<div style="display: none" id="num_pages">{{num_pages}}</div>
|
<div style="display: none" id="num_pages">{{num_pages}}</div>
|
||||||
{% for message in object_list | reverse%}
|
{% for message in object_list | reverse%}
|
||||||
{% include "chat/message.html" %}
|
{% include "chat/message.html" %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<center id="empty_msg">{{_('You are connect now. Say something to start the conversation.')}}</center>
|
<center id="empty_msg">{{_('You are connect now. Say something to start the conversation.')}}</center>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{% if other_user %}
|
{% 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">
|
<img src="{{ gravatar(other_user.user, 135) }}" class="info-pic">
|
||||||
<svg style="position:absolute; height:100%; width: 110%">
|
<svg style="position:absolute; height:100%; width: 110%">
|
||||||
<circle class="info-circle"
|
<circle class="info-circle"
|
||||||
fill="{{'green' if other_online else 'red'}}"/>
|
fill="{{'green' if other_online else 'red'}}"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<span class="info-name username">
|
<span class="info-name username">
|
||||||
{% if other_user %}
|
{% if other_user %}
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if other_user %}
|
{% 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">
|
<button class="control-button small" style="height:100%;" id="setting-button">
|
||||||
<i class="fa fa-ellipsis-h"></i>
|
<i class="fa fa-ellipsis-h"></i>
|
||||||
</button>
|
</button>
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="active-span">{{online_count}} {{_('users are online')}}</span>
|
<span class="active-span">{{online_count}} {{_('users are online')}}</span>
|
||||||
{% endif %}
|
{% endif %}
|
|
@ -22,12 +22,12 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block js_media %}
|
{% block js_media %}
|
||||||
{{ form.media.js }}
|
{{ form.media.js }}
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
$('#problem-select').select2({width: '40em'});
|
$('#problem-select').select2({width: '40em'});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>{{ code }} - {{ id }}</title>
|
<title>{{ code }} - {{ id }}</title>
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
|
@ -18,15 +18,15 @@
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h2>SIGSEGV: {{ id }}</h2>
|
<h2>SIGSEGV: {{ id }}</h2>
|
||||||
<hr/>
|
<hr/>
|
||||||
<pre>{{ description }}
|
<pre>{{ description }}
|
||||||
site: fatal signal: Segmentation fault
|
site: fatal signal: Segmentation fault
|
||||||
site died (signal <b>{{ code }}</b>, exit -11)<br><br><a href="javascript:history.back()">Go back</a></pre>
|
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>
|
<pre>{{ traceback }}</pre>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
{% block body %}
|
{% 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">
|
<table class="table">
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ _('User') }}</th>
|
<th>{{ _('User') }}</th>
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block middle_content %}
|
{% block middle_content %}
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% if form.errors %}
|
{% if form.errors %}
|
||||||
<div class="alert alert-danger alert-dismissable">
|
<div class="alert alert-danger alert-dismissable">
|
||||||
|
@ -35,5 +35,5 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<button type="submit" style="display: inline;" name="action" value="Save" >{{ _('Save') }} </button>
|
<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>
|
<button type="submit" style="background-color: red; float: right;" name="action" value="Delete" > {{ _('Delete') }} </button>
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -545,19 +545,19 @@
|
||||||
{{ form.input_file.errors }}{{ form.input_file }}
|
{{ form.input_file.errors }}{{ form.input_file }}
|
||||||
</td>
|
</td>
|
||||||
<td{% if not (form.empty_permitted or form['type'].value() != 'C' or
|
<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 }}
|
{{ form.output_file.errors }}{{ form.output_file }}
|
||||||
</td>
|
</td>
|
||||||
<td>{{ form.points.errors }}{{ form.points }}</td>
|
<td>{{ form.points.errors }}{{ form.points }}</td>
|
||||||
<td>{{ form.is_pretest.errors }}{{ form.is_pretest }}</td>
|
<td>{{ form.is_pretest.errors }}{{ form.is_pretest }}</td>
|
||||||
{% if cases_formset.can_delete %}
|
{% if cases_formset.can_delete %}
|
||||||
<td>{{ form.DELETE }}</td>
|
<td>{{ form.DELETE }}</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<input type="submit" value="{{ _('Apply!') }}" class="button" id="submit-button">
|
<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>
|
<a id="add-case-row" href="#"><i class="fa fa-plus"></i> {{ _('Add new case') }}</a>
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -176,8 +176,8 @@
|
||||||
not (request.user.is_authenticated and request.in_contest_mode) %}
|
not (request.user.is_authenticated and request.in_contest_mode) %}
|
||||||
<hr>
|
<hr>
|
||||||
<div><a href="{{ url('problem_editorial', problem.code) }}">{{ _('Read editorial') }}</a></div>
|
<div><a href="{{ url('problem_editorial', problem.code) }}">{{ _('Read editorial') }}</a></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if can_edit_problem %}
|
{% if can_edit_problem %}
|
||||||
<hr>
|
<hr>
|
||||||
<div>
|
<div>
|
||||||
<a href="{{ url('problem_ticket_list', problem.code) }}">{{ _('Manage tickets') }}
|
<a href="{{ url('problem_ticket_list', problem.code) }}">{{ _('Manage tickets') }}
|
||||||
|
@ -188,30 +188,30 @@
|
||||||
{% if not problem.is_manually_managed %}
|
{% if not problem.is_manually_managed %}
|
||||||
<div><a href="{{ url('problem_data', problem.code) }}">{{ _('Edit test data') }}</a></div>
|
<div><a href="{{ url('problem_data', problem.code) }}">{{ _('Edit test data') }}</a></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif request.user.is_authenticated and has_tickets %}
|
{% elif request.user.is_authenticated and has_tickets %}
|
||||||
<hr>
|
<hr>
|
||||||
<div>
|
<div>
|
||||||
<a href="{{ url('problem_ticket_list', problem.code) }}">{{ _('My tickets') }}
|
<a href="{{ url('problem_ticket_list', problem.code) }}">{{ _('My tickets') }}
|
||||||
{% if num_open_tickets %}<span class="badge">{{ num_open_tickets }}</span>{% endif %}
|
{% if num_open_tickets %}<span class="badge">{{ num_open_tickets }}</span>{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if problem.is_subs_manageable_by(request.user) %}
|
{% if problem.is_subs_manageable_by(request.user) %}
|
||||||
<div>
|
<div>
|
||||||
<a href="{{ url('problem_manage_submissions', problem.code) }}">{{ _('Manage submissions') }}</a>
|
<a href="{{ url('problem_manage_submissions', problem.code) }}">{{ _('Manage submissions') }}</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if perms.judge.clone_problem %}
|
{% if perms.judge.clone_problem %}
|
||||||
<div>
|
<div>
|
||||||
<a href="{{ url('problem_clone', problem.code) }}">{{ _('Clone problem') }}</a>
|
<a href="{{ url('problem_clone', problem.code) }}">{{ _('Clone problem') }}</a>
|
||||||
</div>
|
</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>
|
<i class="fa fa-check fa-fw"></i><span class="pi-name">{{ _('Points:') }}</span>
|
||||||
<span class="pi-value">
|
<span class="pi-value">
|
||||||
{% if contest_problem %}
|
{% if contest_problem %}
|
||||||
|
@ -220,45 +220,45 @@
|
||||||
{{ problem.points|floatformat }}{% if problem.partial %} {{ _('(partial)') }}{% endif %}
|
{{ problem.points|floatformat }}{% if problem.partial %} {{ _('(partial)') }}{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="problem-info-entry">
|
<div class="problem-info-entry">
|
||||||
<i class="fa fa-clock-o fa-fw"></i><span class="pi-name">{{ _('Time limit:') }}</span>
|
<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>
|
<span class="pi-value">{{ problem.time_limit }}s</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="problem-lang-limits">
|
<div class="problem-lang-limits">
|
||||||
{% for name, limit in problem.language_time_limit %}
|
{% for name, limit in problem.language_time_limit %}
|
||||||
<div class="lang-limit">
|
<div class="lang-limit">
|
||||||
<span class="lang-name">{{ name }}</span>
|
<span class="lang-name">{{ name }}</span>
|
||||||
<span class="lang-tl">{{ limit }}s</span>
|
<span class="lang-tl">{{ limit }}s</span>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div class="problem-info-entry">
|
<div class="problem-info-entry">
|
||||||
<i class="fa fa-server fa-fw"></i><span class="pi-name">{{ _('Memory limit:') }}</span>
|
<i class="fa fa-server fa-fw"></i><span class="pi-name">{{ _('Memory limit:') }}</span>
|
||||||
<span class="pi-value">{{ problem.memory_limit|kbsimpleformat }}</span>
|
<span class="pi-value">{{ problem.memory_limit|kbsimpleformat }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="problem-lang-limits">
|
<div class="problem-lang-limits">
|
||||||
{% for name, limit in problem.language_memory_limit %}
|
{% for name, limit in problem.language_memory_limit %}
|
||||||
<div class="lang-limit">
|
<div class="lang-limit">
|
||||||
<span class="lang-name">{{ name }}</span>
|
<span class="lang-name">{{ name }}</span>
|
||||||
<span class="lang-ml">{{ limit|kbsimpleformat }}</span>
|
<span class="lang-ml">{{ limit|kbsimpleformat }}</span>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div class="problem-info-entry">
|
<div class="problem-info-entry">
|
||||||
<i class="fa fa-file-o fa-fw"></i><span class="pi-name">{{ _('Input:') }}</span>
|
<i class="fa fa-file-o fa-fw"></i><span class="pi-name">{{ _('Input:') }}</span>
|
||||||
<span class="pi-value">
|
<span class="pi-value">
|
||||||
{{ fileio_input or _('stdin') }}
|
{{ fileio_input or _('stdin') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="problem-info-entry">
|
<div class="problem-info-entry">
|
||||||
<i class="fa fa-file fa-fw"></i><span class="pi-name">{{ _('Output:') }}</span>
|
<i class="fa fa-file fa-fw"></i><span class="pi-name">{{ _('Output:') }}</span>
|
||||||
<span class="pi-value">{{ fileio_output or _('stdout') }}</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() %}
|
{% with authors=problem.authors.all() %}
|
||||||
{% if authors %}
|
{% if authors %}
|
||||||
<div class="problem-info-entry">
|
<div class="problem-info-entry">
|
||||||
|
@ -272,9 +272,9 @@
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endwith %}
|
{% 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">
|
<div id="problem-types">
|
||||||
{% with types=problem.types_list %}
|
{% with types=problem.types_list %}
|
||||||
<div class="toggle closed unselectable">
|
<div class="toggle closed unselectable">
|
||||||
|
@ -287,8 +287,8 @@
|
||||||
<div style="display:none" class="toggled">{{ problem.types_list|join(", ") }}</div>
|
<div style="display:none" class="toggled">{{ problem.types_list|join(", ") }}</div>
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if show_languages %}
|
{% if show_languages %}
|
||||||
<div id="allowed-langs">
|
<div id="allowed-langs">
|
||||||
<div class="toggle open unselectable">
|
<div class="toggle open unselectable">
|
||||||
<i class="fa fa-chevron-right fa-fw"></i>{{ _('Allowed languages') }}
|
<i class="fa fa-chevron-right fa-fw"></i>{{ _('Allowed languages') }}
|
||||||
|
@ -306,8 +306,8 @@
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if problem.is_editable_by(request.user) %}
|
{% if problem.is_editable_by(request.user) %}
|
||||||
<div id="available-judges">
|
<div id="available-judges">
|
||||||
<div class="toggle closed" id="judge-toggle">
|
<div class="toggle closed" id="judge-toggle">
|
||||||
<i class="fa fa-chevron-right fa-fw"></i><span
|
<i class="fa fa-chevron-right fa-fw"></i><span
|
||||||
|
@ -333,7 +333,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block description %}
|
{% block description %}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<link rel="stylesheet" href="{{ static('style.css') }}">
|
<link rel="stylesheet" href="{{ static('style.css') }}">
|
||||||
<link rel="stylesheet" href="{{ static('pygment-github.css') }}" type="text/css">
|
<link rel="stylesheet" href="{{ static('pygment-github.css') }}" type="text/css">
|
||||||
<link rel="stylesheet" href="{{ static('markdown.css') }}">
|
<link rel="stylesheet" href="{{ static('markdown.css') }}">
|
||||||
|
@ -57,12 +57,12 @@
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h2 style="color:#393630; display: inline-block;">{{ problem_name }}</h2>
|
<h2 style="color:#393630; display: inline-block;">{{ problem_name }}</h2>
|
||||||
<hr>
|
<hr>
|
||||||
<div align="center" style="position: relative;">
|
<div align="center" style="position: relative;">
|
||||||
<div class="problem-info-entry">
|
<div class="problem-info-entry">
|
||||||
<b>{{ _('Input:') }}</b> {{ fileio_input or _('stdin') }}
|
<b>{{ _('Input:') }}</b> {{ fileio_input or _('stdin') }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -87,21 +87,21 @@
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr style="clear: both;">
|
<hr style="clear: both;">
|
||||||
<div class="content-description printing">
|
<div class="content-description printing">
|
||||||
{{ description|markdown|reference|absolutify(url)|str|safe }}
|
{{ description|markdown|reference|absolutify(url)|str|safe }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript" src="{{ static('mathjax3_config.js') }}"></script>
|
<script type="text/javascript" src="{{ static('mathjax3_config.js') }}"></script>
|
||||||
<script type="text/javascript" src="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" 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">
|
||||||
MathJax.Hub.Register.StartupHook("End", function () {
|
MathJax.Hub.Register.StartupHook("End", function () {
|
||||||
if (typeof window.callPhantom === 'function')
|
if (typeof window.callPhantom === 'function')
|
||||||
window.callPhantom({'action': 'snapshot'});
|
window.callPhantom({'action': 'snapshot'});
|
||||||
document.body.classList.add('math-loaded');
|
document.body.classList.add('math-loaded');
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -15,9 +15,9 @@ Your reply must keep the following text intact for this to work:
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
{% if SITE_ADMIN_EMAIL %}
|
{% if SITE_ADMIN_EMAIL %}
|
||||||
See you soon!
|
See you soon!
|
||||||
<br>
|
<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>.
|
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 %}
|
{% else %}
|
||||||
See you soon!
|
See you soon!
|
||||||
{% endif %}
|
{% 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">
|
<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">
|
<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 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>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</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;">
|
<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>
|
<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.
|
To reset the password for your account "{{ user.get_username() }}", click the below button.
|
||||||
<p align="center">
|
<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>
|
<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>
|
</p>
|
||||||
{% if SITE_ADMIN_EMAIL %}
|
{% 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>
|
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 %}
|
{% else %}
|
||||||
See you soon!
|
See you soon!
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="{{ LANGUAGE_CODE }}">
|
<html lang="{{ LANGUAGE_CODE }}">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>Contest Resolver</title>
|
<title>Contest Resolver</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<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('libs/jquery-3.4.1.min.js') }}"></script>
|
||||||
<script src="{{ static('resolver.js') }}"></script>
|
<script src="{{ static('resolver.js') }}"></script>
|
||||||
<!-- <script src="{{ static('resolver-main.js') }}"></script> -->
|
<!-- <script src="{{ static('resolver-main.js') }}"></script> -->
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="app">
|
<body class="app">
|
||||||
<div class="hidden-board">
|
<div class="hidden-board">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -37,6 +37,6 @@
|
||||||
<div class="school-show"> Z </div>
|
<div class="school-show"> Z </div>
|
||||||
</div>
|
</div>
|
||||||
{% include "resolver/media-js.html" %}
|
{% include "resolver/media-js.html" %}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
|
@ -297,11 +297,11 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block middle_title %}
|
{% block middle_title %}
|
||||||
<div class="page-title">
|
<div class="page-title">
|
||||||
<div class="tabs" style="border: none;">
|
<div class="tabs" style="border: none;">
|
||||||
<h2>{{content_title}}</h2>
|
<h2>{{content_title}}</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block middle_content %}
|
{% block middle_content %}
|
||||||
|
@ -327,7 +327,7 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block right_sidebar %}
|
{% block right_sidebar %}
|
||||||
{% if results_json %}
|
{% if results_json %}
|
||||||
<div class="right-sidebar">
|
<div class="right-sidebar">
|
||||||
<div class="submission">
|
<div class="submission">
|
||||||
<div class="sidebox">
|
<div class="sidebox">
|
||||||
|
@ -373,7 +373,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block left_sidebar %}
|
{% block left_sidebar %}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
</h4>
|
</h4>
|
||||||
<hr>
|
<hr>
|
||||||
{% if best_subtasks and subtasks %}
|
{% if best_subtasks and subtasks %}
|
||||||
<table class="lightbox-submissions"><tbody>
|
<table class="lightbox-submissions"><tbody>
|
||||||
{% for subtask in subtasks %}
|
{% for subtask in subtasks %}
|
||||||
<tr>
|
<tr>
|
||||||
{% set cur_subtask = best_subtasks[subtask] %}
|
{% set cur_subtask = best_subtasks[subtask] %}
|
||||||
|
@ -36,12 +36,12 @@
|
||||||
{{ points }} / {{ total }}
|
{{ points }} / {{ total }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody></table>
|
</tbody></table>
|
||||||
<hr>
|
<hr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if submissions %}
|
{% if submissions %}
|
||||||
<table class="lightbox-submissions"><tbody>
|
<table class="lightbox-submissions"><tbody>
|
||||||
{% for submission in submissions %}
|
{% for submission in submissions %}
|
||||||
<tr>
|
<tr>
|
||||||
{% set can_view = submission_layout(submission, profile_id, request.user, editable_problem_ids, completed_problem_ids) %}
|
{% set can_view = submission_layout(submission, profile_id, request.user, editable_problem_ids, completed_problem_ids) %}
|
||||||
<td class="lightbox-submissions-time">
|
<td class="lightbox-submissions-time">
|
||||||
|
@ -68,6 +68,6 @@
|
||||||
</td>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody></table>
|
</tbody></table>
|
||||||
{% endif %}
|
{% endif %}
|
|
@ -1,6 +1,6 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Task Progress - {{ SITE_LONG_NAME }}</title>
|
<title>Task Progress - {{ SITE_LONG_NAME }}</title>
|
||||||
<link rel="stylesheet" href="{{ static('task_status.css') }}">
|
<link rel="stylesheet" href="{{ static('task_status.css') }}">
|
||||||
|
@ -72,9 +72,9 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="jumbotron" data-task-id="{{ task_id }}" data-task-status="{{ task_status }}"
|
<div class="jumbotron" data-task-id="{{ task_id }}" data-task-status="{{ task_status }}"
|
||||||
data-redirect="{{ redirect }}">
|
data-redirect="{{ redirect }}">
|
||||||
<img src="{{ static('icons/icon.svg') }}" class="icon" alt="DMOJ Icon">
|
<img src="{{ static('icons/icon.svg') }}" class="icon" alt="DMOJ Icon">
|
||||||
|
@ -95,6 +95,6 @@
|
||||||
<div class="progress-bar" role="progressbar">Failed!</div>
|
<div class="progress-bar" role="progressbar">Failed!</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="header rank">{{ rank_header or _("Rank") }}</th>
|
<th class="header rank">{{ rank_header or _("Rank") }}</th>
|
||||||
{% block after_rank_head %}{% endblock %}
|
{% block after_rank_head %}{% endblock %}
|
||||||
<th class="header username">{{ _('Username') }}{% block username_head_extra %}{% endblock %}</th>
|
<th class="header username">{{ _('Username') }}{% block username_head_extra %}{% endblock %}</th>
|
||||||
|
@ -11,11 +11,11 @@
|
||||||
{%- if sort_links %}{{ sort_order.performance_points }}</a>{% endif %}
|
{%- if sort_links %}{{ sort_order.performance_points }}</a>{% endif %}
|
||||||
</th>
|
</th>
|
||||||
{% block after_point_head %}{% endblock %}
|
{% block after_point_head %}{% endblock %}
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for rank, user in users %}
|
{% for rank, user in users %}
|
||||||
<tr id="user-{{ user.user.username }}" {% block row_extra scoped %}{% endblock %}>
|
<tr id="user-{{ user.user.username }}" {% block row_extra scoped %}{% endblock %}>
|
||||||
<td class="rank-td">{{ rank }}</td>
|
<td class="rank-td">{{ rank }}</td>
|
||||||
{% block after_rank scoped %}{% endblock %}
|
{% block after_rank scoped %}{% endblock %}
|
||||||
|
@ -28,5 +28,5 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block after_point scoped %}{% endblock %}
|
{% block after_point scoped %}{% endblock %}
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{% extends "user/user-base.html" %}
|
{% extends "user/user-base.html" %}
|
||||||
{% block js_media %}
|
{% block js_media %}
|
||||||
<script>
|
<script>
|
||||||
function getCookie(name) {
|
function getCookie(name) {
|
||||||
let cookieValue = null;
|
let cookieValue = null;
|
||||||
if (document.cookie && document.cookie !== '') {
|
if (document.cookie && document.cookie !== '') {
|
||||||
|
@ -91,12 +91,12 @@
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<center>
|
<center>
|
||||||
<label for="csv_file">{{_('User File')}}:</label>
|
<label for="csv_file">{{_('User File')}}:</label>
|
||||||
<input type="file" accept=".csv" id="csv_file">
|
<input type="file" accept=".csv" id="csv_file">
|
||||||
<a href="{{url('import_users_sample')}}">{{_('Sample')}}</a>
|
<a href="{{url('import_users_sample')}}">{{_('Sample')}}</a>
|
||||||
|
@ -104,8 +104,8 @@
|
||||||
<button id="load_button" style="margin-left: 1em">{{_('Load')}}</button>
|
<button id="load_button" style="margin-left: 1em">{{_('Load')}}</button>
|
||||||
<button id="confirm_button" style="margin-left: 1em" class="disabled">{{_('Import')}}</button>
|
<button id="confirm_button" style="margin-left: 1em" class="disabled">{{_('Import')}}</button>
|
||||||
</div>
|
</div>
|
||||||
</center>
|
</center>
|
||||||
<br>
|
<br>
|
||||||
<table id="table_csv" class="table"></table>
|
<table id="table_csv" class="table"></table>
|
||||||
<p style="margin-left: 2em" id="log"></p>
|
<p style="margin-left: 2em" id="log"></p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block user_footer %}
|
{% block user_footer %}
|
||||||
<span style="margin-left: 0.5em">{% if user.rating %}{{ rating_number(user) }}{% endif %}</span>
|
<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>
|
<div class="gray" style="font-weight: 600; margin-top: 0.2em">{{ user.user.first_name if user.user.first_name else ''}}</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block after_point_head %}
|
{% block after_point_head %}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% if widget.is_initial %}
|
{% 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 %}
|
{% endif %}
|
||||||
<center id={{widget.fine_uploader_id}} class="fine-uploader"></center>
|
<center id={{widget.fine_uploader_id}} class="fine-uploader"></center>
|
||||||
|
|
Loading…
Reference in a new issue