You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
7.5 KiB
HTML
220 lines
7.5 KiB
HTML
{% extends "layout/basic.html" %}
|
|
{% block content %}
|
|
<div class="row">
|
|
<div class="medium-9 columns">
|
|
<div class="section">
|
|
<form method="post">
|
|
<div class="section__header">
|
|
<h2 class="section__title">{{ _('Basic Info') }}</h2>
|
|
</div>
|
|
<div class="section__body">
|
|
<div class="row">
|
|
{{ form.form_select({
|
|
columns:3,
|
|
label:'Rule',
|
|
name:'rule',
|
|
options:rules,
|
|
value:tdoc['rule']|default(''),
|
|
row:false
|
|
}) }}
|
|
{{ form.form_text({
|
|
columns:9,
|
|
label:'Title',
|
|
name:'title',
|
|
placeholder:_('title'),
|
|
value:tdoc.title|default(''),
|
|
autofocus:true,
|
|
row:false
|
|
}) }}
|
|
</div>
|
|
<div class="row">
|
|
{{ form.form_text({
|
|
columns:3,
|
|
label:'Begin Date',
|
|
name:'beginAtDate',
|
|
placeholder:'YYYY-mm-dd',
|
|
value:beginAt.format('YYYY-M-D'),
|
|
date:true,
|
|
row:false
|
|
}) }}
|
|
{{ form.form_text({
|
|
columns:3,
|
|
label:'Begin Time',
|
|
name:'beginAtTime',
|
|
placeholder:'HH:MM',
|
|
value:beginAt.format('H:mm'),
|
|
time:true,
|
|
row:false
|
|
}) }}
|
|
{{ form.form_text({
|
|
columns:2,
|
|
label:'Duration (hours)',
|
|
name:'duration',
|
|
value:duration|default('3'),
|
|
row:false
|
|
}) }}
|
|
{{ form.form_text({
|
|
columns:4,
|
|
label:'End Time',
|
|
name:'endAt',
|
|
placeholder:'YYYY-mm-dd HH:MM',
|
|
value:beginAt.add(duration, 'hours').format('YYYY-M-D HH:mm'),
|
|
disabled:true,
|
|
row:false
|
|
}) }}
|
|
</div>
|
|
{{ form.form_text({
|
|
columns:12,
|
|
label:'Problems',
|
|
name:'pids',
|
|
value:pids,
|
|
placeholder:_("Seperated with ','"),
|
|
row:true
|
|
}) }}
|
|
{{ form.form_textarea({
|
|
columns:null,
|
|
label:'Description',
|
|
name:'content',
|
|
value:tdoc['content']|default(''),
|
|
markdown:true
|
|
}) }}
|
|
</div>
|
|
<div style="padding-top: 0" class="section__header">
|
|
<h2 class="section__title">{{ _('Permission Control') }}</h2>
|
|
</div>
|
|
<div class="section__body">
|
|
{{ form.form_text({
|
|
columns:12,
|
|
label:'Contest Maintainer',
|
|
name:'maintainer',
|
|
help_text:_('Allow to maintain this contest'),
|
|
value:tdoc.maintainer|default('')
|
|
}) }}
|
|
<div class="row">
|
|
{{ form.form_select({
|
|
columns:3,
|
|
label:'Permission Control',
|
|
name:'permission',
|
|
options:{
|
|
'public': _('Public'),
|
|
'invite': _('Require Invitation Code'),
|
|
'assign': _('Assign User or Group')
|
|
},
|
|
value: ("public" if not tdoc._code else "invite") if not tdoc.assign else "assign",
|
|
disabled:true,
|
|
row:false
|
|
}) }}
|
|
<div style="display: none" data-perm="assign">
|
|
{{ form.form_text({
|
|
columns:9,
|
|
label:'Assign',
|
|
name:'assign',
|
|
placeholder:_('Group / UID'),
|
|
value:tdoc.assign|default(''),
|
|
disabled:true,
|
|
row:false
|
|
}) }}
|
|
</div>
|
|
<div style="display: none" data-perm="invite">
|
|
{{ form.form_text({
|
|
columns:9,
|
|
label:'Invitation Code',
|
|
name:'code',
|
|
placeholder:_('(leave blank if none)'),
|
|
value:tdoc._code|default(''),
|
|
disabled:true,
|
|
row:false
|
|
}) }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div style="padding-top: 0" class="section__header">
|
|
<h2 class="section__title">{{ _('Contest Settings') }}</h2>
|
|
</div>
|
|
<div class="section__body">
|
|
<div class="row">
|
|
{{ form.form_checkbox({
|
|
columns:2,
|
|
label:'Rated',
|
|
name:'rated',
|
|
placeholder:_('Is rated'),
|
|
value:tdoc.rated|default(true),
|
|
row:false
|
|
}) }}
|
|
{{ form.form_checkbox({
|
|
columns:3,
|
|
label:'Auto hide-and show',
|
|
name:'autoHide',
|
|
placeholder:_('Auto hide problems during the contest'),
|
|
value:handler.user.hasPerm(perm.PERM_EDIT_PROBLEM) and (tdoc.autoHide|default(true)),
|
|
disabled:not handler.user.hasPerm(perm.PERM_EDIT_PROBLEM),
|
|
row:false
|
|
}) }}
|
|
{{ form.form_checkbox({
|
|
columns:3,
|
|
label:'Allow View Code',
|
|
name:'allowViewCode',
|
|
placeholder:_('Allow user view others code after contest'),
|
|
value:tdoc.allowViewCode|default(true),
|
|
row:false
|
|
}) }}
|
|
<div style="display: none" class="contest-rule-settings contest-rule--acm">
|
|
{{ form.form_text({
|
|
columns:4,
|
|
label:'Lock (minutes)',
|
|
name:'lock',
|
|
placeholder:_('(leave blank if none)'),
|
|
value:(((tdoc.endAt - tdoc.lockAt)/60000)|int) if tdoc.lockAt else '',
|
|
help_text:_('Lock scoreboard on last N minutes'),
|
|
disabled:true,
|
|
row:false
|
|
}) }}
|
|
</div>
|
|
<div style="display: none" class="contest-rule-settings contest-rule--oi">
|
|
{{ form.form_text({
|
|
columns:4,
|
|
label:'Flexable Duration',
|
|
name:'contestDuration',
|
|
placeholder:_('(leave blank if none)'),
|
|
value:tdoc.duration|default(''),
|
|
help_text:_('Limit user to finish contest within N hours'),
|
|
disabled:true,
|
|
row:false
|
|
}) }}
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="columns">
|
|
<input type="hidden" name="csrfToken" value="{{ handler.csrfToken }}">
|
|
{% if page_name == 'contest_edit' %}
|
|
<button name="operation" value="update" type="submit" class="rounded primary button">
|
|
{{ _('Update') }}
|
|
</button>
|
|
<button name="operation" value="update" type="submit" formaction="{{ url('contest_create') }}" class="rounded button">
|
|
{{ _('Clone') }}
|
|
</button>
|
|
{% if handler.user.own(tdoc) or handler.user.hasPerm(perm.PERM_EDIT_CONTEST) %}
|
|
<button name="operation" value="delete" type="submit" class="rounded button">
|
|
{{ _('Delete') }}
|
|
</button>
|
|
{% endif %}
|
|
{% else %}
|
|
<button name="operation" value="update" 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 %}
|