2020-01-21 06:35:58 +00:00
<!DOCTYPE html>
< html lang = "{{ LANGUAGE_CODE }}" >
< 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 %}
< meta name = "keywords" content = "{{ misc_config.meta_keywords }}" >
{% endif %}
{% if meta_description %}
< meta name = "description" content = "{{ meta_description }}" >
{% endif %}
< meta id = "viewport" name = "viewport" content = "width=device-width, initial-scale=1" >
<!-- Favicons -->
< link rel = "apple-touch-icon" sizes = "57x57" href = "/apple-touch-icon-57x57.png" >
< link rel = "apple-touch-icon" sizes = "60x60" href = "/apple-touch-icon-60x60.png" >
< link rel = "apple-touch-icon" sizes = "72x72" href = "/apple-touch-icon-72x72.png" >
< link rel = "apple-touch-icon" sizes = "76x76" href = "/apple-touch-icon-76x76.png" >
< link rel = "apple-touch-icon" sizes = "114x114" href = "/apple-touch-icon-114x114.png" >
< link rel = "apple-touch-icon" sizes = "120x120" href = "/apple-touch-icon-120x120.png" >
< link rel = "apple-touch-icon" sizes = "144x144" href = "/apple-touch-icon-144x144.png" >
< link rel = "apple-touch-icon" sizes = "152x152" href = "/apple-touch-icon-152x152.png" >
< link rel = "apple-touch-icon" sizes = "180x180" href = "/apple-touch-icon-180x180.png" >
< link rel = "icon" type = "image/png" href = "/favicon-32x32.png" sizes = "32x32" >
< link rel = "icon" type = "image/png" href = "/android-chrome-192x192.png" sizes = "192x192" >
< link rel = "icon" type = "image/png" href = "/favicon-96x96.png" sizes = "96x96" >
< link rel = "icon" type = "image/png" href = "/favicon-16x16.png" sizes = "16x16" >
< link rel = "manifest" href = "/manifest.json" >
< meta name = "msapplication-TileColor" content = "#FFBB33" >
< meta name = "msapplication-TileImage" content = "/mstile-144x144.png" >
{# Chrome 39 for Android colour #}
< meta name = "theme-color" content = "#FFBB33" >
{% if og_image %}
< meta property = "og:image" content = "{{ request.build_absolute_uri(og_image) }}" >
{% endif %}
{% block og_title %}{% endblock %}
< meta property = "og:site_name" content = "{{ SITE_LONG_NAME }}" >
< meta property = "og:url"
content="{{ DMOJ_SCHEME }}://{{ DMOJ_CANONICAL|default(site.domain) }}{{ request.get_full_path() }}">
{% if meta_description %}
< meta property = "og:description" content = "{{ meta_description }}" >
{% endif %}
<!-- [if lt IE 9]>
< script src = "https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js" > < / script >
< script > window . bad _browser = true < / script >
<![endif]-->
{% block meta %}{% endblock %}
{% if not INLINE_FONTAWESOME %}
< link rel = "stylesheet" href = "{{ FONTAWESOME_CSS }}" >
{% endif %}
{% compress css %}
< link rel = "stylesheet" href = "{{ static('style.css') }}" >
{% if PYGMENT_THEME %}
< link rel = "stylesheet" href = "{{ static(PYGMENT_THEME) }}" >
{% endif %}{% if INLINE_FONTAWESOME %}
< link rel = "stylesheet" href = "{{ static('libs/fontawesome/font-awesome.css') }}" > {% endif %}
< link rel = "stylesheet" type = "text/css" href = "{{ static('libs/featherlight/featherlight.min.css') }}" >
< link rel = "stylesheet" type = "text/css" href = "{{ static('libs/clipboard/tooltip.css') }}" >
< link rel = "stylesheet" type = "text/css" href = "{{ static('libs/select2/select2.css') }}" >
2021-07-23 03:54:48 +00:00
< link rel = "stylesheet" type = "text/css" href = "{{ static('icofont/icofont.min.css') }}" >
2022-10-25 04:59:04 +00:00
< link rel = "stylesheet" type = "text/css" href = "{{ static('markdown.css') }}" >
2020-01-21 06:35:58 +00:00
{% endcompress %}
< link rel = "canonical"
href="{{ DMOJ_SCHEME }}://{{ DMOJ_CANONICAL|default(site.domain) }}{{ request.get_full_path() }}">
{% if request.user.is_impersonate %}
< style >
#nav-container {
background: #893e89 !important;
}
< / style >
{% endif %}
{% block media %}{% endblock %}
{% if not INLINE_JQUERY %}
< script src = "{{ JQUERY_JS }}" > < / script >
{% endif %}
{% compress js %}
< script > { { inlinei18n ( LANGUAGE _CODE ) | safe } } < / script >
{% if INLINE_JQUERY %}
< script src = "{{ static('libs/jquery-3.4.1.min.js') }}" > < / script >
{% endif %}
< script src = "{{ static('libs/jquery-cookie.js') }}" > < / script >
< script src = "{{ static('libs/jquery-taphold.js') }}" > < / script >
< script src = "{{ static('libs/jquery.unveil.js') }}" > < / script >
< script src = "{{ static('libs/moment.js') }}" > < / script >
< script src = "{{ static('libs/select2/select2.js') }}" > < / script >
{% include "extra_js.html" %}
< script src = "{{ static('common.js') }}" > < / script >
< script >
moment.locale('{{ LANGUAGE_CODE }}');
$(function () {
$('img.unveil').unveil(200);
});
< / script >
{% endcompress %}
2022-09-01 23:42:13 +00:00
< script src = "https://unpkg.com/@popperjs/core@2" > < / script >
2020-01-21 06:35:58 +00:00
{% block js_media %}{% endblock %}
{% if request.in_contest %}
< script > $ ( f u n c t i o n ( ) {
2022-01-20 04:24:12 +00:00
if ($("#contest-time-remaining").length) {
count_down($("#contest-time-remaining"));
}
2020-01-21 06:35:58 +00:00
var selected = null,
x_pos = 0, y_pos = 0,
x_elem = 0, y_elem = 0;
$('#contest-info').mousedown(function () {
selected = $(this);
x_elem = x_pos - selected.offset().left;
y_elem = y_pos - (selected.offset().top - $(window).scrollTop());
return false;
});
if (localStorage.getItem("contest_timer_pos")) {
data = localStorage.getItem("contest_timer_pos").split(":");
$("#contest-info").css({
left: data[0],
top: data[1]
});
}
$("#contest-info").show();
2022-01-10 11:13:46 +00:00
$("#contest-info-toggle").on('click', function() {
$.post("{{url('contest_mode_ajax')}}", function() {
window.location.reload();
})
});
2020-01-21 06:35:58 +00:00
$(document).mousemove(function (e) {
x_pos = e.screenX;
y_pos = e.screenY;
x_pos = Math.max(Math.min(x_pos, window.innerWidth), 0);
y_pos = Math.max(Math.min(y_pos, window.innerHeight), 0);
if (selected !== null) {
left_px = (x_pos - x_elem) + 'px';
top_px = (y_pos - y_elem) + 'px';
localStorage.setItem("contest_timer_pos", left_px + ":" + top_px);
selected.css({
left: left_px,
top: top_px
});
}
});
$(document).mouseup(function () {
selected = null;
})
});
< / script >
{% endif %}
{% if request.user.is_authenticated %}
< script >
window.user = {
email: '{{ request.user.email|escapejs }}',
id: '{{ request.user.id|escapejs }}',
name: '{{ request.user.username|escapejs }}'
};
< / script >
{% else %}
< script > window . user = { } ; < / script >
{% endif %}
{% if misc_config.analytics %}
{{ misc_config.analytics|safe }}
{% endif %}
{# Don't run userscript since it may be malicious #}
{% if request.user.is_authenticated and request.profile.user_script and not request.user.is_impersonate %}
< script type = "text/javascript" > { { request . profile . user _script | safe } } < / script >
{% endif %}
2022-09-01 23:39:19 +00:00
< script >
$(function() {
const popperInstance = Popper.createPopper($('#nav-lang-icon'), $('#lang-dropdown'));
$('#nav-lang-icon').click(function(e) {
e.preventDefault();
$('#lang-dropdown').toggle();
popperInstance.update();
})
$('.lang-dropdown-item').click(function() {
$('select[name="language"]').val($(this).attr('value'));
$('#form-lang').submit();
})
});
< / script >
2020-01-21 06:35:58 +00:00
< noscript >
< style >
#content {
margin: 80px auto auto;
}
#navigation {
top: 27px;
}
< / style >
< / noscript >
< / 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" >
< div id = "nav-container" >
< a id = "navicon" href = "javascript:void(0)" > < i class = "fa fa-bars" > < / i > < / a >
< ul id = "nav-list" >
< li class = "home-nav-element" > < a href = "{{ url('home') }}" > {% include "site-logo-fragment.html" %}< / a > < / li >
< li class = "home-nav-element" > < span class = "nav-divider" > < / span > < / li >
< li class = "home-menu-item" > < a href = "{{ url('home') }}" class = "nav-home" > {{ _('Home') }}< / a > < / li >
{% for node in mptt_tree(nav_bar) recursive %}
< li >
< a href = "{{ node.path }}" class = "nav-{{ node.key }}{% if node.key in nav_tab %} active{% endif %}" >
{{ user_trans(node.label) }}
{% if not node.is_leaf_node %}
< div href = "javascript:void(0)" class = "nav-expand" > >< / div >
{% endif %}
< / a >
{% with children=node.get_children() %}
{% if children %}< ul > {{ loop(children) }}< / ul > {% endif %}
{% endwith %}
< / li >
{% endfor %}
< / ul >
2021-12-09 20:31:49 +00:00
< div style = "float: right; display: inline; font-size: larger;" >
2022-08-28 04:00:17 +00:00
< span class = "navbar-icons" >
2022-09-01 23:39:19 +00:00
{% if request.user.is_authenticated %}
2022-08-28 04:00:17 +00:00
< span title = "{{_('Chat')}}" >
< a id = "chat-icon" href = "{{ url('chat', '') }}" class = "icofont-wechat navbar-icon" aria-hidden = "true" >
2022-09-01 04:18:38 +00:00
{% set unread_chat = request.profile.count_unread_chat_boxes %}
{% if unread_chat %}
< sub class = "unread_boxes" > {{unread_chat}}< / sub >
{% endif %}
2022-08-28 04:00:17 +00:00
< / a >
< / span >
2021-12-09 20:31:49 +00:00
2022-08-28 04:00:17 +00:00
{% set unseen_cnt = request.profile.count_unseen_notifications %}
< span title = "{{_('Notification')}}" class = "{{ 'notification-open' if unseen_cnt > 0 }}" >
< a href = "{{ url('notification') }}" class = "icofont-alarm navbar-icon" id = "notification" aria-hidden = "true" >
{% if unseen_cnt > 0 %}
< sub class = "unread_boxes" > {{unseen_cnt}}< / sub >
{% endif %}
< / a >
< / span >
2022-09-01 23:39:19 +00:00
{% endif %}
< span title = "{{_('Language')}}" >
< a href = "#" class = "icofont-globe navbar-icon" id = "nav-lang-icon" aria-hidden = "true" >
< sub class = "sub-lang" > {{LANGUAGE_CODE}}< / sub >
< / a >
< div id = "lang-dropdown" role = "tooltip" >
{% for language in language_info_list(LANGUAGES) %}
< div value = "{{ language.code }}" class = "lang-dropdown-item" style = "{{'font-weight: bold' if language.code == LANGUAGE_CODE}}" >
{{ language.name_local }}
< / div >
{% endfor %}
< / div >
< / span >
2020-07-03 02:50:31 +00:00
< / span >
< span id = "user-links" >
{% if request.user.is_authenticated %}
< ul >
< li >
< a href = "{{ url('user_page') }}" >
< span >
< img src = "{{ gravatar(request.user, 32) }}" height = "24" width = "24" > {# -#}
< span >
{%- trans username=request.user.username -%}
Hello, < b > {{ username }}< / b > .
{%- endtrans %}
< / span >
< / span >
< / a >
< ul style = "width: 150px" >
{% if request.user.is_staff or request.user.is_superuser %}
< li > < a href = "{{ url('admin:index') }}" > {{ _('Admin') }}< / a > < / li >
{% endif %}
2022-05-03 02:44:14 +00:00
{% if request.user.is_superuser %}
< li > < a href = "{{ url('internal_problem') }}" > {{ _('Internal') }}< / a > < / li >
2022-09-23 00:23:41 +00:00
< li > < a href = "{{ url('site_stats') }}" > {{ _('Stats') }}< / a > < / li >
2022-05-03 02:44:14 +00:00
{% endif %}
2020-07-03 02:50:31 +00:00
< li > < a href = "{{ url('user_edit_profile') }}" > {{ _('Edit profile') }}< / a > < / li >
{% if request.user.is_impersonate %}
< li > < a href = "{{ url('impersonate-stop') }}" > Stop impersonating< / a > < / li >
{% else %}
< li >
< form action = "{{ url('auth_logout') }}" method = "POST" >
{% csrf_token %}
2021-12-09 20:31:49 +00:00
< button type = "submit" style = "color: red !important" > {{ _('Log out') }}< / button >
2020-07-03 02:50:31 +00:00
< / form >
< / li >
{% endif %}
< / ul >
< / li >
< / ul >
{% else %}
< span class = "anon" >
< a href = "{{ url('auth_login') }}?next={{ LOGIN_RETURN_PATH|urlencode }}" > < b > {{ _('Log in') }}< / b > < / a >
{{ _('or') }}
< a href = "{{ url('registration_register') }}" > < b > {{ _('Sign up') }}< / b > < / a >
< / span >
{% endif %}
< / span >
< / div >
2020-01-21 06:35:58 +00:00
< / div >
2020-07-03 02:50:31 +00:00
2020-01-21 06:35:58 +00:00
< div id = "nav-shadow" > < / div >
< / nav >
{% if request.in_contest %}
< div id = "contest-info" >
2022-01-10 11:13:46 +00:00
< div id = "contest-info-main" >
< a href = "{{ url('contest_view', request.participation.contest.key) }}" style = "vertical-align: middle; display: inline" >
{{ request.participation.contest.name }} -
{% if request.participation.spectate %}
{{ _('spectating') }}
{% elif request.participation.end_time %}
< div id = "contest-time-remaining" data-secs = "{{request.participation.end_time}}" >
{{ request.participation.time_remaining|timedelta("localized") }}
< / div >
{% else %}
{{ _('virtual') }}
{% endif %}
< / a >
< / div >
< div id = "contest-info-toggle" class = "{{'contest-info-toggle-mode-on' if request.contest_mode else 'contest-info-toggle-mode-off'}}" >
{% if request.contest_mode %}
< i class = "fa fa-toggle-on" style = "color: white" > < / i > {{_('Compete')}}
2020-01-21 06:35:58 +00:00
{% else %}
2022-01-10 11:13:46 +00:00
< i class = "fa fa-toggle-off" style = "color: white" > < / i > {{_('General')}}
2020-01-21 06:35:58 +00:00
{% endif %}
2022-01-10 11:13:46 +00:00
< / div >
2020-01-21 06:35:58 +00:00
< / div >
{% endif %}
< div id = "page-container" >
< noscript >
< div id = "noscript" > {{ _('This site works best with JavaScript enabled.') }}< / div >
< / noscript >
< br >
< main id = "content" >
{% block title_row %}
< h2 style = "color:#393630; display:inline" >
{% block content_title %}
{% if content_title %}{{ content_title }}{% else %}{{ title }}{% endif %}
{% endblock %}
< / h2 >
{% endblock %}
{% block header %}{% endblock %}
{% block title_ruler %}
< hr >
{% endblock %}
< div id = "content-body" > {% block body %}{% endblock %}< / div >
< / main >
{% if i18n_config.announcement %}
< div id = "announcement" > {{ i18n_config.announcement|safe }}< / div >
{% endif %}
{% block bodyend %}{% endblock %}
2021-07-24 06:36:34 +00:00
{% block footer %}
2020-01-21 06:35:58 +00:00
< footer >
< span id = "footer-content" >
< br >
2020-04-26 15:38:37 +00:00
< a style = "color: #808080" target = "_blank" href = "https://dmoj.ca" > proudly powered by < b > DMOJ< / b > < / a > < a target = "_blank" href = "https://github.com/LQDJudge/online-judge" > | developed by LQDJudge team< / a > |
2020-01-21 06:35:58 +00:00
{% if i18n_config.footer %}
{{ i18n_config.footer|safe }} |
{% endif %}
2022-09-01 23:39:19 +00:00
< form action = "{{ url('set_language') }}" method = "post" style = "display: inline" id = "form-lang" >
2020-01-21 06:35:58 +00:00
{% csrf_token %}
< input name = "next" type = "hidden" value = "{{ request.get_full_path() }}" >
< select name = "language" onchange = "form.submit()" style = "height: 1.5em" >
{% for language in language_info_list(LANGUAGES) %}
< option value = "{{ language.code }}" { % if language . code = = LANGUAGE_CODE % } selected { % endif % } >
{{ language.name_local }} ({{ language.code }})
< / option >
{% endfor %}
< / select >
< / form >
< / span >
< / footer >
2021-07-24 06:36:34 +00:00
{% endblock %}
2020-01-21 06:35:58 +00:00
< / div >
< / body >
< / html >