Contest rule: ACM/ICPC

This commit is contained in:
masnn committed 2020-04-15 18:48:17 +08:00
1 parent d1ec9064fc
commit e06283c0cc
43 files changed
+158 -891

No files matched your search

-8
View File
@@ -1,8 +0,0 @@
{% import "components/user.html" as user with context %}
{% macro render_time(tdoc_time) %}
{{ datetime_span(tdoc_time, false, '%Y-%m-%d %H:%M') }}
{% endmacro %}
{% macro render_extension(tdoc) %}
{{ ((tdoc['end_at'] - tdoc['penalty_since']).total_seconds() / 3600)|round(1) }}
{% endmacro %}
+3 -3
View File
@@ -9,19 +9,19 @@
<div class="section">
<div class="section__body typo">
{{ tdoc['content']|markdown|safe }}
{% if model.contest.is_ongoing(tdoc) %}
{% if model.contest.isOngoing(tdoc) %}
<blockquote class="warn">
<p>{{ _('We will check code similarity after this contest.') }}</p>
</blockquote>
{% endif %}
</div>
</div>
{% if model.contest.is_ongoing(tdoc) or model.contest.is_done(tdoc) %}
{% if model.contest.isOngoing(tdoc) or model.contest.isDone(tdoc) %}
<div class="section">
<div class="section__header">
<h1 class="section__title">{{ _('Problem') }}</h1>
</div>
{% if attended or model.contest.is_done(tdoc) %}
{% if attended or model.contest.isDone(tdoc) %}
<div class="section__body no-padding">
<table class="data-table">
<colgroup>
+2 -2
View File
@@ -49,9 +49,9 @@
<div class="row">
<div class="medium-9 columns">
{% for tdoc in tdocs %}
{% if model.contest.is_ongoing(tdoc) %}
{% if model.contest.isOngoing(tdoc) %}
{{ render_important_contest('live', 'Live...', tdoc) }}
{% elif model.contest.is_upcoming(tdoc) %}
{% elif model.contest.isUpcoming(tdoc) %}
{{ render_important_contest('ready', 'Ready (☆▽☆)', tdoc) }}
{% endif %}
{% endfor %}
+2 -2
View File
@@ -4,10 +4,10 @@
<div class="row"><div class="medium-12 columns">
<div class="section visible">
<div class="section__header">
<a class="button" target="_blank" href="/c/{{ tdoc._id }}/export?format=html">
<a class="button" target="_blank" href="/c/{{ tdoc._id }}/export/html">
<span class="icon icon-download"></span> {{ _('Export as HTML') }}
</a>
<a class="button" href="/c/{{ tdoc._id }}/export?format=csv">
<a class="button" href="/c/{{ tdoc._id }}/export/csv">
<span class="icon icon-download"></span> {{ _('Export as CSV') }}
</a>
</div>
@@ -35,7 +35,7 @@
</tr>
</thead>
<tbody>
{%- for row in rows[1:] -%}
{%- for row in rows -%}{% if loop.index0 %}
<tr>
{%- for column in row -%}
<td>
@@ -43,6 +43,6 @@
</td>
{%- endfor -%}
</tr>
{%- endfor -%}
{% endif %}{%- endfor -%}
</tbody>
</table>
+8 -8
View File
@@ -19,7 +19,7 @@
</a>
</li>
<li>
{{ user.render_inline(udict[ddoc['owner_uid']], dudict[ddoc['owner_uid']]) }}
{{ user.render_inline(udict[ddoc['owner']]) }}
@
{{ datetime_span(ddoc['_id'].generationTime) }}
</li>
@@ -82,9 +82,9 @@
</div>
</div>
<div class="medium-3 columns">
{% with udoc = udict[ddoc['owner_uid']], dudoc = dudict[ddoc['owner_uid']] %}
{% with udoc = udict[ddoc['owner']] %}
<div class="section side">
<div class="profile__bg user-profile-bg--{{ vj4.model.adaptor.setting.UserSetting(udoc, dudoc).get_setting('background_img') }}"></div>
<div class="profile__bg user-profile-bg--{{ vj4.model.adaptor.setting.UserSetting(udoc).get_setting('background_img') }}"></div>
<div class="section__body">
<div class="media sidebar-user-profile">
<div class="media__left">
@@ -92,7 +92,7 @@
</div>
<div class="media__body">
<p>
{{ user.render_inline(udoc, dudict[ddoc['owner_uid']], avatar=false, modbadge=false) }}
{{ user.render_inline(udoc, avatar=false, modbadge=false) }}
</p>
</div>
</div>
@@ -101,19 +101,19 @@
<div class="balancer sidebar-user-stat">
<div class="balancer__body">
<div class="numbox">
<div class="numbox__num medium">{{ dudict[ddoc['owner_uid']].nAccept or 0 }}</div>
<div class="numbox__num medium">{{ udict[ddoc['owner']].nAccept or 0 }}</div>
<div class="numbox__text">{{ _('Accepted') }}</div>
</div>
</div>
<div class="balancer__body">
<div class="numbox">
<div class="numbox__num medium">{{ dudict[ddoc['owner_uid']]['num_liked'] or 0 }}</div>
<div class="numbox__num medium">{{ udict[ddoc['owner']].nLike or 0 }}</div>
<div class="numbox__text">{{ _('Solutions Liked') }}</div>
</div>
</div>
<div class="balancer__body">
<div class="numbox">
<div class="numbox__num medium">{{ dudict[ddoc['owner_uid']]['num_problems'] or 0 }}</div>
<div class="numbox__num medium">{{ udict[ddoc['owner']].nProblems or 0 }}</div>
<div class="numbox__text">{{ _('Upload Problem') }}</div>
</div>
</div>
@@ -122,7 +122,7 @@
{% endwith %}
</div>
{% if vnode['doc_type'] == vj4.model.document.TYPE_PROBLEM %}
{% with pdoc=vnode, owner_udoc=udict[vnode['owner_uid']], owner_dudoc=dudict[vnode['owner_uid']] %}
{% with pdoc=vnode, owner_udoc=udict[vnode['owner']] %}
{% include "partials/problem_sidebar.html" %}
{% endwith %}
{% endif %}
+2 -2
View File
@@ -8,11 +8,11 @@
</div>
<div class="medium-3 columns">
{% if vnode['doc_type'] == vj4.model.document.TYPE_PROBLEM %}
{% with pdoc=vnode, owner_udoc=udict[vnode['owner_uid']], owner_dudoc=dudict[vnode['owner_uid']] if dudict %}
{% with pdoc=vnode, owner_udoc=udict[vnode['owner']] %}
{% include "partials/problem_sidebar.html" %}
{% endwith %}
{% elif vnode['doc_type'] == vj4.model.document.TYPE_CONTEST %}
{% with tdoc=vnode, owner_udoc=udict[vnode['owner_uid']], owner_dudoc=dudict[vnode['owner_uid']] if dudict %}
{% with tdoc=vnode, owner_udoc=udict[vnode['owner']] %}
{% include "partials/contest_sidebar.html" %}
{% endwith %}
{% elif vnode['doc_type'] == vj4.model.document.TYPE_DISCUSSION_NODE %}
-46
View File
@@ -57,52 +57,6 @@
</ol>
</div>
{% endif %}
{% if not htdocs %}
<!-- no homework -->
{% else %}
<div class="section page--homework_main">
<div class="section__header">
<h1 class="section__title">{{ _('Homework') }}</h1>
</div>
<ol class="section__list homework__list">
{% for tdoc in htdocs %}
<li class="section__list__item homework__item">
<div class="media">
<div class="media__left medium">
<div class="homework__date numbox">
<div class="numbox__num large">{{ datetime_span(tdoc['penalty_since'], false, '%d') }}</div>
<div class="numbox__text">{{ datetime_span(tdoc['penalty_since'], false, '%Y-%m') }}</div>
</div>
</div>
<div class="media__body medium">
<h1 class="homework__title"><a href="{{ reverse_url('homework_detail', tid=tdoc['doc_id']) }}" data-emoji-enabled>{{ tdoc['title'] }}</a></h1>
<ul class="supplementary list">
<li>
{{ _('Status') }}: <span class="homework-status--text {{ handler.get_status(tdoc) }}">{{ _(handler.status_text(tdoc)) }}</span>
</li>
<li>
{{ _('Open Since') }}: {{ datetime_span(tdoc['begin_at']) }}
</li>
<li>
{% if handler.is_homework_extended(tdoc) or handler.is_done(tdoc) %}
{{ _('Hard Deadline') }}: {{ datetime_span(tdoc['end_at']) }}
{% else %}
{{ _('Deadline') }}: {{ datetime_span(tdoc['penalty_since']) }}
{% endif %}
</li>
{% if htsdict[tdoc['doc_id']]['attend'] == 1 %}
<li class="homework__info-attended">
<span class="icon icon-check"></span> {{ _('Claimed') }}
</li>
{% endif %}
</ul>
</div>
</div>
</li>
{% endfor %}
</ol>
</div>
{% endif %}
{% if not trdocs %}
<!-- no training -->
{% else %}
+1 -1
View File
@@ -68,7 +68,7 @@
<tbody>
{% for role in roles %}
{% for rudoc in rudocs[role] %}
{% set is_disabled=(rudoc['uid'] == handler.domain['owner_uid']) %}
{% set is_disabled=(rudoc['uid'] == handler.domain['owner']) %}
<tr data-uid="{{ rudoc['uid'] }}">
<td class="col--checkbox">
<label class="compact checkbox">
+2 -2
View File
@@ -61,7 +61,7 @@
<span data-tooltip="{{ _('This is a built-in domain that every user is in.') }}">{{ ddoc['name'] }} ({{ ddoc['_id'] }})</span>
</td>
<td class="col--role">
{{ dudict.get(ddoc['_id'], {})['role']|default(vj4.model.builtin.ROLE_DEFAULT) }}
{{ udict.get(ddoc['_id'], {})['role']|default(model.builtin.ROLE_DEFAULT) }}
</td>
<td class="col--action">
<a class="typo-a" href="{{ reverse_url('domain_main', domain_id=ddoc['_id']) }}">{{ _('Visit') }}</a>
@@ -81,7 +81,7 @@
{{ ddoc['name'] }} ({{ ddoc['_id'] }})
</td>
<td class="col--role">
{{ dudict.get(ddoc['_id'], {})['role']|default(vj4.model.builtin.ROLE_DEFAULT) }}
{{ udict.get(ddoc['_id'], {})['role']|default(model.builtin.ROLE_DEFAULT) }}
</td>
<td class="col--action">
<a class="typo-a" href="{{ reverse_url('domain_main', domain_id=ddoc['_id']) }}">{{ _('Visit') }}</a>
-78
View File
@@ -1,78 +0,0 @@
{% extends "layout/basic.html" %}
{% import "components/record.html" as record with context %}
{% import "components/problem.html" as problem with context %}
{% block content %}
<div class="row">
<div class="medium-9 columns">
<div class="section">
<div class="section__header">
<h1 class="section__title">{{ _('Homework Introduction') }}</h1>
</div>
<div class="section__body typo">
{{ tdoc['content']|markdown }}
</div>
</div>
<div class="section">
<div class="section__header">
<h1 class="section__title">{{ _('Problem') }}</h1>
</div>
{% if handler.is_not_started(tdoc) %}
{{ nothing.render('This homework is not open and you cannot view problems.') }}
{% else %}
{% if attended or model.contest.is_done(tdoc) %}
<div class="section__body no-padding">
<table class="data-table">
<colgroup>
{% if handler.hasPerm(perm.PERM_LOGGEDIN) %}
<col class="col--status">
<col class="col--submit-at">
{% endif %}
<col class="col--problem">
</colgroup>
<thead>
<tr>
{% if handler.hasPerm(perm.PERM_LOGGEDIN) %}
<th class="col--status record-status--border">{{ _('Status') }}</th>
<th class="col--submit-at">{{ _('Last Submit At') }}</th>
{% endif %}
<th class="col--problem">{{ _('Problem') }}</th>
</tr>
</thead>
<tbody>
{% for pid in tdoc['pids'] %}
<tr>
{% if handler.hasPerm(perm.PERM_LOGGEDIN) %}
{% if psdict[pid] and psdict[pid]['rid'] %}
{% with rdoc=rdict[psdict[pid]['rid']] %}
{% if handler.can_show_record(tdoc) %}
{{ record.render_status_td(rdoc) }}
{% else %}
<td class="col--status record-status--border"><a href="/r/{{ rdoc._id }}">{{ _('Submitted') }}</a></td>
{% endif %}
<td class="col--submit-at">{{ datetime_span(rdoc['_id'].generationTime) }}</td>
{% endwith %}
{% else %}
<td class="col--status record-status--border">{{ _('No Submissions') }}</td>
<td class="col--submit-at">-</td>
{% endif %}
{% endif %}
<td class="col--problem col--problem-name">
#{{ loop.index }}:
{{ problem.render_problem_title(pdict[pid], tdoc=tdoc, show_invisible_flag=false, show_tags=false) }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
{{ nothing.render('Please claim the assignment to see the problems.') }}
{% endif %}{# attended or handler.is_done(tdoc) #}
{% endif %}{# handler.is_not_started(tdoc) #}
</div>
</div>
<div class="medium-3 columns">
{% include "partials/homework_sidebar.html" %}
</div>
</div>
{% endblock %}
-48
View File
@@ -1,48 +0,0 @@
{% extends "layout/basic.html" %}
{% block content %}
<div class="row">
<div class="medium-9 columns">
<div class="section">
<div class="section__body">
<form method="post">
{{ form.form_text(columns=8, label='Title', name='title', placeholder=_('title'), value=tdoc['title']|default(''), autofocus=True) }}
<div class="row">
{{ form.form_text(columns=4, label='Begin Date', name='begin_at_date', placeholder='YYYY-mm-dd', value=date_begin_text, date=True, row=False) }}
{{ form.form_text(columns=4, last_column=True, label='Begin Time', name='begin_at_time', placeholder='HH:MM', value=time_begin_text, time=True, row=False) }}
</div><div class="row">
{{ form.form_text(columns=4, label='End Date', name='penalty_since_date', placeholder='YYYY-mm-dd', value=date_penalty_text, date=True, row=False) }}
{{ form.form_text(columns=4, last_column=True, label='End Time', name='penalty_since_time', placeholder='HH:MM', value=time_penalty_text, time=True, row=False) }}
</div>
{{ form.form_text(columns=4, label='Extension (days)', name='extension_days', value=extension_days) }}
<div class="row"><div class="columns">
<label>
{{ _('Extension Score Penalty') }}
<textarea name="penalty_rules" class="monospace textbox">{% if tdoc %}{{ penalty_rules }}{% else %}{% include 'partials/homework_default_penalty_rules.yaml' %}{% endif %}</textarea>
</label>
</div></div>
{{ form.form_text(columns=None, label='Problems', name='pids', value=pids) }}
{{ form.form_textarea(columns=None, label='Content', name='content', value=tdoc['content']|default(''), markdown=True) }}
<div class="row"><div class="columns">
<input type="hidden" name="csrfToken" value="{{ handler.csrfToken }}">
{% if page_name == 'homework_edit' %}
<button type="submit" class="rounded primary button">
{{ _('Update') }}
</button>
{% else %}
<button type="submit" class="rounded primary button">
{{ _('Create') }}
</button>
{% endif %}
<button type="button" class="rounded button" onclick="window.history.go(-1)">
{{ _('Cancel') }}
</button>
</div></div>
</form>
</div>
</div>
</div>
<div class="medium-3 columns">
{% include 'components/md_hint.html' %}
</div>
</div>
{% endblock %}
-68
View File
@@ -1,68 +0,0 @@
{% extends "layout/basic.html" %}
{% block content %}
<script>
var Context = {{ {
'docs': calendar_tdocs,
}|json|safe }};
</script>
<div class="row">
<div class="medium-12 columns">
<div class="section">
<div class="section__header">
<h1 class="section__title">{{ _('All Homeworks') }}</h1>
<div class="section__tools">
<span class="nojs-hide">
{{ _('View') }}:
<select class="inline compact select" name="homework_display">
<option value="calendar">{{ _('Calendar View') }}</option>
<option value="list">{{ _('List View') }}</option>
</select>
</span>
{% if handler.hasPerm(perm.PERM_CREATE_HOMEWORK) %}
<a class="compact button" href="{{ reverse_url('homework_create') }}">{{ _('Create Homework') }}</a>
{% endif %}
</div>
</div>
<div class="section__body no-padding">
{% if not tdocs %}
{{ nothing.render('There is no homework so far ╰(*°▽°*)╯') }}
{% else %}
<ol class="section__list homework__list hasjs--hide">
{% for tdoc in tdocs %}
<li class="section__list__item homework__item">
<div class="media">
<div class="media__left medium">
<div class="homework__date numbox">
<div class="numbox__num large">{{ datetime_span(tdoc['penalty_since'], false, '%d') }}</div>
<div class="numbox__text">{{ datetime_span(tdoc['penalty_since'], false, '%Y-%m') }}</div>
</div>
</div>
<div class="media__body medium">
<h1 class="homework__title"><a href="{{ reverse_url('homework_detail', tid=tdoc['doc_id']) }}" data-emoji-enabled>{{ tdoc['title'] }}</a></h1>
<ul class="supplementary list">
<li>
{{ _('Status') }}: <span class="homework-status--text {{ handler.get_status(tdoc) }}">{{ _(handler.status_text(tdoc)) }}</span>
</li>
<li>
{{ _('Open Since') }}: {{ datetime_span(tdoc['begin_at']) }}
</li>
<li>
{% if handler.is_homework_extended(tdoc) or model.homework.is_done(tdoc) %}
{{ _('Hard Deadline') }}: {{ datetime_span(tdoc['end_at']) }}
{% else %}
{{ _('Deadline') }}: {{ datetime_span(tdoc['penalty_since']) }}
{% endif %}
</li>
</ul>
</div>
</div>
</li>
{% endfor %}
</ol>
<div name="calendar_entry"></div>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock %}
+2 -2
View File
@@ -22,7 +22,7 @@
<span class="icon icon-award"></span> {{ _('View Contest') }}
</a></li>
{% endif %}
{% if not attended and not model.contest.is_done(tdoc) %}
{% if not attended and not model.contest.isDone(tdoc) %}
<li class="menu__item">
{% if handler.hasPerm(perm.PERM_ATTEND_CONTEST) and handler.hasPerm(perm.PERM_LOGGEDIN) %}
<form action="/c/{{ tdoc._id }}" method="POST">
@@ -73,7 +73,7 @@
</div>
<div class="section__body typo">
<dl class="large horizontal">
<dt>{{ _('Status') }}</dt><dd>{{ _(model.contest.status_text(tdoc)) }}</dd>
<dt>{{ _('Status') }}</dt><dd>{{ _(model.contest.statusText(tdoc)) }}</dd>
<dt>{{ _('Rule') }}</dt><dd>{{ model.contest.RULES[tdoc.rule].TEXT }}</dd>
<dt>{{ _('Problem') }}</dt><dd>{{ tdoc.pids.length }}</dd>
<dt>{{ _('Start at') }}</dt><dd>{{ contest.render_time(tdoc.beginAt) }}</dd>
+1 -1
View File
@@ -30,7 +30,7 @@
</a>
</li>
<li>
{{ user.render_inline(udict[ddoc['owner_uid']], dudoc=dudoc if dudoc else dudict[ddoc['owner_uid']], badge=false) }}
{{ user.render_inline(udict[ddoc['owner']], badge=false) }}
@
{{ datetime_span(ddoc['update_at'] or ddoc['_id'].generationTime) }}
</li>
@@ -1,6 +0,0 @@
# Format:
# hours: coefficient
1: 0.9
3: 0.8
12: 0.75
9999: 0.5
-85
View File
@@ -1,85 +0,0 @@
{% import "components/user.html" as user with context %}
{% import "components/homework.html" as homework with context %}
<div class="section side">
{% if page_name != 'homework_detail' %}
<a class="contest-sidebar__bg" href="{{ reverse_url('homework_detail', tid=tdoc['doc_id']) }}">
<div class="section__body">
<h1>{{ tdoc['title'] }}</h1>
<div class="contest-sidebar__status">
{% if attended %}
<span class="icon icon-check"></span> {{ _('Claimed') }}
{% else %}
<span class="icon icon-schedule"></span> {{ _('Not Claimed') }}
{% endif %}
</div>
</div>
</a>
{% endif %}
<div>
<ol class="menu">
{% if page_name != 'homework_detail' %}
<li class="menu__item"><a class="menu__link" href="{{ reverse_url('homework_detail', tid=tdoc['doc_id']) }}">
<span class="icon icon-homework"></span> {{ _('View Homework') }}
</a></li>
{% endif %}
{% if not attended and not model.contest.is_done(tdoc) %}
<li class="menu__item">
{% if handler.hasPerm(perm.PERM_ATTEND_HOMEWORK) and handler.hasPerm(perm.PERM_LOGGEDIN) %}
<form action="{{ reverse_url('homework_detail', tid=tdoc['doc_id']) }}" method="POST">
<input type="hidden" name="operation" value="attend">
<input type="hidden" name="csrfToken" value="{{ handler.csrfToken }}">
<button class="menu__link" type="submit">
<span class="icon icon-add"></span> {{ _('Claim Homework') }}
</button>
</form>
{% elif not handler.hasPerm(perm.PERM_LOGGEDIN) %}
<a class="menu__link" href="javascript:showSignInDialog()">
<span class="icon icon-add"></span> {{ _('Login to Claim Homework') }}
</a>
{% else %}
<a class="menu__link disabled" href="javascript:;">
<span class="icon icon-add"></span> {{ _('No Permission to Claim Homework') }}
</a>
{% endif %}
</li>
{% endif %}
{% if handler.canShowScoreboard(tdoc, False) %}
<li class="menu__item"><a class="menu__link" href="{{ reverse_url('homework_scoreboard', tid=tdoc['doc_id']) }}">
<span class="icon icon-statistics"></span> {{ _('Scoreboard') }}
</a></li>
{% elif handler.canViewHiddenScoreboard(tdoc) %}
<li class="menu__item"><a class="menu__link" href="{{ reverse_url('homework_scoreboard', tid=tdoc['doc_id']) }}">
<span class="icon icon-statistics"></span> {{ _('Scoreboard (Hidden)') }}
</a></li>
{% endif %}
{% if handler.own(tdoc, perm.PERM_EDIT_HOMEWORK_SELF) or handler.hasPerm(perm.PERM_EDIT_HOMEWORK) %}
<li class="menu__item"><a class="menu__link" href="{{ reverse_url('homework_edit', tid=tdoc['doc_id']) }}">
<span class="icon icon-edit"></span> {{ _('Edit Homework') }}
</a></li>
{% endif %}
{% if handler.hasPerm(perm.PERM_READ_RECORD_CODE) %}
<li class="menu__item"><a class="menu__link" href="{{ reverse_url('homework_code', tid=tdoc['doc_id']) }}">
<span class="icon icon-download"></span> {{ _('Export All Code') }}
</a></li>
{% endif %}
{% if attended %}
<li class="menu__item"><a class="menu__link" href="/r?uid_or_name={{ handler.user['_id'] }}&tid={{ tdoc['doc_id'] }}">
<span class="icon icon-flag"></span> {{ _('My Recent Submissions') }}
</a></li>
{% endif %}
<li class="menu__item"><a class="menu__link" href="/wiki/help#homework">
<span class="icon icon-help"></span> {{ _('Help') }}
</a></li>
<li class="menu__seperator"></li>
</ol>
</div>
<div class="section__body typo">
<dl class="large horizontal">
<dt>{{ _('Status') }}</dt><dd><span class="homework-status--text {{ handler.get_status(tdoc) }}">{{ _(handler.status_text(tdoc)) }}</span></dd>
<dt>{{ _('Problem') }}</dt><dd>{{ tdoc['pids']|length }}</dd>
<dt>{{ _('Open Since') }}</dt><dd>{{ homework.render_time(tdoc['begin_at']) }}</dd>
<dt>{{ _('Deadline') }}</dt><dd>{{ homework.render_time(tdoc['penalty_since']) }}</dd>
<dt>{{ _('Can be Extended For') }}</dt><dd>{{ homework.render_extension(tdoc) }} {{ _('hour(s)') }}</dd>
</dl>
</div>
</div>
-3
View File
@@ -23,9 +23,6 @@
{% if handler.hasPerm(perm.PERM_VIEW_CONTEST) %}
{{ nav_item('/c', 'contest_main', 'contest') }}
{% endif %}
{% if handler.hasPerm(perm.PERM_VIEW_HOMEWORK) %}
{{ nav_item('/h', 'homework_main', 'homework') }}
{% endif %}
{% if handler.hasPerm(perm.PERM_EDIT_DESCRIPTION) or handler.hasPerm(perm.PERM_EDIT_PERM) %}
{{ nav_item('/d', 'domain_manage', 'domain_manage') }}
{% endif %}
+3 -11
View File
@@ -1,15 +1,7 @@
{% if tdoc %}
{% if tdoc['doc_type'] == vj4.model.document.TYPE_CONTEST %}
{% include "partials/problem_sidebar_contest.html" %}
{% set owner_udoc=udoc %}
{% set owner_dudoc=dudoc %}
{% include "partials/contest_sidebar.html" %}
{% else %}
{% include "partials/problem_sidebar_homework.html" %}
{% set owner_udoc=udoc %}
{% set owner_dudoc=dudoc %}
{% include "partials/homework_sidebar.html" %}
{% endif %}
{% include "partials/problem_sidebar_contest.html" %}
{% set owner_udoc = udoc %}
{% include "partials/contest_sidebar.html" %}
{% else %}
{% include "partials/problem_sidebar_normal.html" %}
{% endif %}
@@ -7,7 +7,7 @@
{% endif %}
<div>
<ol class="menu">
{% if model.contest.is_ongoing(tdoc) %}
{% if model.contest.isOngoing(tdoc) %}
{% if page_name == 'contest_detail_problem' %}
<li class="menu__item scratchpad--hide"><a class="menu__link highlight" name="problem-sidebar__open-scratchpad" href="javascript:;" data-global-hotkey="alt+e">
<span class="icon icon-enlarge"></span> {{ _('Open Scratchpad') }} (Alt+E)
@@ -23,7 +23,7 @@
<li class="menu__item scratchpad--hide"><a class="menu__link{% if page_name == 'contest_detail_problem_submit' %} active{% endif %}" href="/c/{{ tdoc._id }}/p/{{ pdoc._id }}/submit">
<span class="icon icon-send"></span> {{ _('Submit') }}
</a></li>
{% elif model.contest.is_done(tdoc) %}
{% elif model.contest.isDone(tdoc) %}
<li class="menu__item scratchpad--hide"><a class="menu__link" href="/p/{{ pdoc.pid }}">
<span class="icon icon-send"></span> {{ _('Open in Problem Set') }}
</a></li>
@@ -1,42 +0,0 @@
{% import "components/user.html" as user with context %}
<div class="section side section--problem-sidebar">
{% if page_name != 'problem_detail' and page_name != 'homework_detail_problem' %}
<div class="section__header">
<h1 class="section__title">{{ pdoc['title'] }}</h1>
</div>
{% endif %}
<div>
<ol class="menu">
{% if handler.is_ongoing(tdoc) or handler.is_homework_extended(tdoc) %}
{% if page_name == 'homework_detail_problem' %}
<li class="menu__item scratchpad--hide"><a class="menu__link highlight" name="problem-sidebar__open-scratchpad" href="javascript:;" data-global-hotkey="alt+e">
<span class="icon icon-enlarge"></span> {{ _('Open Scratchpad') }} (Alt+E)
</a></li>
<li class="menu__item non-scratchpad--hide"><a class="menu__link" name="problem-sidebar__quit-scratchpad" href="javascript:;" data-global-hotkey="alt+q">
<span class="icon icon-enlarge"></span> {{ _('Quit Scratchpad') }} (Alt+Q)
</a></li>
{% else %}
<li class="menu__item"><a class="menu__link" href="{{ reverse_url('homework_detail_problem', tid=tdoc['doc_id'], pid=pdoc['_id']) }}">
<span class="icon icon-flag"></span> {{ _('View Problem') }}
</a></li>
{% endif %}
<li class="menu__item scratchpad--hide"><a class="menu__link{% if page_name == 'homework_detail_problem_submit' %} active{% endif %}" href="{{ reverse_url('homework_detail_problem_submit', tid=tdoc['doc_id'], pid=pdoc['_id']) }}">
<span class="icon icon-send"></span> {{ _('Submit') }}
</a></li>
{% elif model.contest.is_done(tdoc) %}
<li class="menu__item scratchpad--hide"><a class="menu__link" href="/p/{{ pdoc.pid }}">
<span class="icon icon-send"></span> {{ _('Open in Problem Set') }}
</a></li>
{% endif %}
{% if handler.own(pdoc, perm.PERM_EDIT_PROBLEM_SELF) or handler.hasPerm(perm.PERM_EDIT_PROBLEM) %}
<li class="menu__seperator"></li>
<li class="menu__item"><a class="menu__link{% if page_name == 'problem_edit' %} active{% endif %}" href="/p/{{ pdoc.pid }}/edit">
<span class="icon icon-edit"></span> {{ _('Edit') }}
</a></li>
<li class="menu__item"><a class="menu__link{% if page_name == 'problem_settings' %} active{% endif %}" href="/p/{{ pdoc.pid }}/settings">
<span class="icon icon-wrench"></span> {{ _('Settings') }}
</a></li>
{% endif %}
</ol>
</div>
</div>
@@ -152,9 +152,9 @@
<dt>{{ _('Be Copied') }}</dt>
<dd>{{ pdoc['num_be_copied'] }}</dd>
{% endif %}
{% if pdoc['owner_uid'] != 0 %}
{% if pdoc['owner'] != 0 %}
<dt>{{ _('Uploaded By') }}</dt>
<dd>{{ user.render_inline(owner_udoc, owner_dudoc, badge=false) }}</dd>
<dd>{{ user.render_inline(owner_udoc, badge=false) }}</dd>
{% endif %}
</dl>
</div>
@@ -177,12 +177,6 @@
<p><a href="/c/{{ tdoc._id }}">{{ tdoc['title'] }}</a></p>
{% endfor %}
{% endif %}
{% if htdocs %}
<p>{{ _('In following homework') }}: </p>
{% for tdoc in htdocs %}
<p><a href="{{ reverse_url('homework_detail', tid=tdoc['doc_id']) }}">{{ tdoc['title'] }}</a></p>
{% endfor %}
{% endif %}
</div>
</div>
{% endif %}
+2 -3
View File
@@ -30,11 +30,11 @@
{% endif %}
{% if tdoc %}
{% if tdoc['doc_type'] == vj4.model.document.TYPE_CONTEST %}
{% if model.contest.is_done(tdoc) %}
{% if model.contest.isDone(tdoc) %}
<blockquote class="note">
<p>{{ _('You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.') }}</p>
</blockquote>
{% endif %}{# handler.is_done(tdoc) #}
{% endif %}{# handler.isDone(tdoc) #}
{% endif %}{# tdoc['doc_type'] == vj4.model.document.TYPE_CONTEST #}
{% endif %}{# tdoc #}
{{ pdoc['content']|markdown|safe }}
@@ -44,7 +44,6 @@
</div>
<div class="medium-3 columns">
{% set owner_udoc = udoc %}
{% set owner_dudoc = dudoc %}
{% include "partials/problem_sidebar.html" %}
</div>
</div>
+1 -1
View File
@@ -54,7 +54,7 @@
</div>
<div class="medium-3 columns">
{% if page_name == 'problem_edit' %}
{% set owner_udoc=udoc %}{% set owner_dudoc=dudoc %}
{% set owner_udoc = udoc %}
{% include "partials/problem_sidebar.html" %}
{% else %}
{% include 'components/md_hint.html' %}
+1 -1
View File
@@ -69,7 +69,7 @@
</div>
</div>
<div class="medium-3 columns">
{% set owner_udoc=udoc %}{% set owner_dudoc=dudoc %}
{% set owner_udoc = udoc %}
{% include "partials/problem_sidebar.html" %}
</div>
</div>
+1 -1
View File
@@ -12,7 +12,7 @@
</div>
</div>
<div class="medium-3 columns">
{% set owner_udoc=udoc %}{% set owner_dudoc=dudoc %}
{% set owner_udoc = udoc %}
{% include "partials/problem_sidebar.html" %}
{% endwith %}
</div>
+1 -1
View File
@@ -60,7 +60,7 @@
</div>
</div>
<div class="medium-3 columns">
{% set owner_udoc=udoc %}{% set owner_dudoc=dudoc %}
{% set owner_udoc = udoc %}
{% include "partials/problem_sidebar.html" %}
</div>
</div>
+2 -9
View File
@@ -56,7 +56,7 @@
<div class="section__body typo">
<dl class="large horizontal">
<dt>{{ _('Submit By') }}</dt>
<dd>{{ user.render_inline(udoc, dudoc, modbadge=false) }}</dd>
<dd>{{ user.render_inline(udoc, modbadge=false) }}</dd>
{% if pdoc %}
<dt>{{ _('Problem') }}</dt>
<dd>
@@ -64,18 +64,11 @@
</dd>
{% endif %}
{% if tdoc %}
{% if tdoc['doc_type'] == vj4.model.document.TYPE_CONTEST %}
<dt>{{ _('Contest') }}</dt>
<dd>
<a href="/c/{{ tdoc._id }}">{{ tdoc['title'] }}</a>
</dd>
{% else %}{# tdoc['doc_type'] == vj4.model.document.TYPE_CONTEST #}
<dt>{{ _('Homework') }}</dt>
<dd>
<a href="{{ reverse_url('homework_detail', tid=tdoc['doc_id']) }}">{{ tdoc['title'] }}</a>
</dd>
{% endif %}{# tdoc['doc_type'] == vj4.model.document.TYPE_CONTEST #}
{% endif %}{# tdoc #}
{% endif %}
{% if pdoc and (user._id == pdoc.owner or handler.hasPerm(perm.PERM_READ_PROBLEM_DATA)) %}
<dt>{{ _('Problem Data') }}</dt>
<dd><a href="/p/{{ pdoc.pid }}/data"><span class="icon icon-download"></span> {{ _('Download') }}</a></dd>
+5 -5
View File
@@ -21,15 +21,15 @@
</div>
{% endif %}
{% for node in tdoc['dag'] %}
<div class="training__section {% if nsdict[node['_id']]['is_done'] %}done{% elif nsdict[node['_id']]['is_progress'] %}progress{% elif nsdict[node['_id']]['is_open'] %}open{% else %}invalid{% endif %} {% if nsdict[node['_id']]['is_progress'] or nsdict[node['_id']]['is_open'] %}expanded{% else %}collapsed{% endif %}">
<div class="training__section {% if nsdict[node['_id']]['isDone'] %}done{% elif nsdict[node['_id']]['is_progress'] %}progress{% elif nsdict[node['_id']]['is_open'] %}open{% else %}invalid{% endif %} {% if nsdict[node['_id']]['is_progress'] or nsdict[node['_id']]['is_open'] %}expanded{% else %}collapsed{% endif %}">
<div class="section__header clearfix">
<div class="float-left">
<h1 class="section__title">{{ _('Section') }} {{ node['_id'] }}. {{ node['title'] }}</h1>
</div>
<div class="float-right">
<h1 class="section__title training-section-status--text {% if nsdict[node['_id']]['is_done'] %}done{% elif nsdict[node['_id']]['is_progress'] %}progress{% elif nsdict[node['_id']]['is_open'] %}open{% else %}invalid{% endif %}">
<span class="icon training-section-status--icon {% if nsdict[node['_id']]['is_done'] %}done{% elif nsdict[node['_id']]['is_progress'] %}progress{% elif nsdict[node['_id']]['is_open'] %}open{% else %}invalid{% endif %}"></span>
{% if nsdict[node['_id']]['is_done'] %}
<h1 class="section__title training-section-status--text {% if nsdict[node['_id']]['isDone'] %}done{% elif nsdict[node['_id']]['is_progress'] %}progress{% elif nsdict[node['_id']]['is_open'] %}open{% else %}invalid{% endif %}">
<span class="icon training-section-status--icon {% if nsdict[node['_id']]['isDone'] %}done{% elif nsdict[node['_id']]['is_progress'] %}progress{% elif nsdict[node['_id']]['is_open'] %}open{% else %}invalid{% endif %}"></span>
{% if nsdict[node['_id']]['isDone'] %}
{{ _('Completed') }}
{% elif nsdict[node['_id']]['is_progress'] %}
{{ _('In Progress') }}
@@ -196,7 +196,7 @@
{% endif %}
<dt>{{ _('Enrollees') }}</dt><dd>{{ tdoc['enroll']|default(0) }}</dd>
<dt>{{ _('Created By') }}</dt>
<dd>{{ user.render_inline(owner_udoc, owner_dudoc, badge=false) }}</dd>
<dd>{{ user.render_inline(owner_udoc, badge=false) }}</dd>
</dl>
</div>
</div>