ui: 允许自定义首页布局

This commit is contained in:
undefined committed 2021-05-25 13:30:55 +08:00
1 parent dbf51849d5
commit cc08538bdb
12 files changed
+248 -188

No files matched your search

@@ -0,0 +1,40 @@
{% if tdocs.length %}
<div class="section page--contest_main">
<div class="section__header">
<h1 class="section__title">{{ _('Contest') }}</h1>
</div>
<ol class="section__list contest__list">
{%- for tdoc in tdocs -%}
<li class="section__list__item contest__item contest-type--{{ tdoc.rule }}">
<div class="media">
<div class="media__left medium">
<div class="contest__date numbox">
<div class="numbox__num large">{{ datetimeSpan(tdoc['beginAt'], false, '%d')|safe }}</div>
<div class="numbox__text">{{ datetimeSpan(tdoc['beginAt'], false, '%Y-%m')|safe }}</div>
</div>
</div>
<div class="media__body medium">
<h1 class="contest__title"><a href="{{ url('contest_detail', tid=tdoc.docId) }}" data-emoji-enabled>{{ tdoc.title }}</a></h1>
<ul class="supplementary list">
<li>
<a href="{{ url('contest_main', query={rule:tdoc.rule}) }}" class="contest-type-tag"><span class="icon icon-award"></span>{{ model.contest.RULES[tdoc.rule].TEXT }}</a>
</li>
<li>
<span class="icon icon-schedule--fill text-blue"></span> {{ contest.render_duration(tdoc) }} {{ _('hour(s)') }}
</li>
<li>
<span class="icon icon-user--multiple"></span> {{ tdoc['attend']|default(0) }}
</li>
{% if tsdict[tdoc.docId]['attend'] == 1 %}
<li class="contest__info-attended">
<span class="icon icon-check"></span> {{ _('Attended') }}
</li>
{% endif %}
</ul>
</div>
</div>
</li>
{%- endfor -%}
</ol>
</div>
{% endif %}
@@ -0,0 +1,42 @@
{% if htdocs.length %}
<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">{{ datetimeSpan(tdoc['penaltySince'], false, '%d')|safe }}</div>
<div class="numbox__text">{{ datetimeSpan(tdoc['penaltySince'], false, '%Y-%m')|safe }}</div>
</div>
</div>
<div class="media__body medium">
<h1 class="homework__title"><a href="{{ url('homework_detail', tid=tdoc.docId) }}" data-emoji-enabled>{{ tdoc['title'] }}</a></h1>
<ul class="supplementary list">
<li>
{{ _('Status') }}: <span class="homework-status--text {{ model.contest.getStatus(tdoc) }}">{{ _(model.contest.statusText(tdoc)) }}</span>
</li>
<li>{{ _('Open Since') }}: {{ datetimeSpan(tdoc['beginAt'])|safe }}</li>
<li>
{% if model.contest.isExtended(tdoc) or model.contest.isDone(tdoc) %}
{{ _('Hard Deadline') }}: {{ datetimeSpan(tdoc['endAt'])|safe }}
{% else %}
{{ _('Deadline') }}: {{ datetimeSpan(tdoc['penaltySince'])|safe }}
{% endif %}
</li>
{% if htsdict[tdoc['docId']]['attend'] == 1 %}
<li class="homework__info-attended">
<span class="icon icon-check"></span> {{ _('Claimed') }}
</li>
{% endif %}
</ul>
</div>
</div>
</li>
{%- endfor -%}
</ol>
</div>
{% endif %}
@@ -0,0 +1,38 @@
{% if uids.length %}
<div class="section">
<div class="section__header">
<h1 class="section__title">{{ _('Ranking') }}</h1>
</div>
<div class="section__body no-padding">
<div>
<table class="data-table">
<colgroup>
<col class="col--rank">
<col class="col--user">
<col class="col--rp">
<col class="col--bio">
</colgroup>
<thead>
<tr>
<th class="col--rank">{{ _('Rank') }}</th>
<th class="col--user">{{ _('Username') }}</th>
<th class="col--rp">{{ _('RP') }}</th>
<th class="col--bio">{{ _('Bio') }}</th>
</tr>
</thead>
<tbody>
{%- for uid in uids -%}
{% set udoc = udict[uid] %}
<tr>
<td class="col--rank">{{ loop.index }}</td>
<td class="col--user">{{ user.render_inline(udoc) }}</td>
<td class="col--rp">{{ udoc.rp|default(1500)|round(0) }}</td>
<td class="col--bio">{{ udoc.bio|default('')|truncate(64, true)|markdownInline|safe }}</td>
</tr>
{%- endfor -%}
</tbody>
</table>
</div>
</div>
</div>
{% endif %}
@@ -0,0 +1,45 @@
{% if trdocs.length %}
<div class="section page--training_main">
<div class="section__header">
<h1 class="section__title">{{ _('Training') }}</h1>
</div>
<ol class="section__list all primary training__list">
{%- for tdoc in tdocs -%}
<li class="section__list__item training__item">
<div class="media">
<div class="media__left middle">
<div class="training__participants numbox">
<div class="numbox__num large">{{ tdoc['enroll']|default(0) }}</div>
<div class="numbox__text">{{ _('Enrolled') }}</div>
</div>
</div>
<div class="media__body middle">
<h1 class="training__title"><a href="{{ url('training_detail', tid=tdoc.docId) }}" data-emoji-enabled>{{ tdoc.title }}</a></h1>
<div class="training__intro typo">
<p>{{ tdoc['content'] }}</p>
</div>
<ul class="supplementary list training__progress">
<li>
<span class="icon icon-flag text-blue"></span> {{ _('{0} sections').format(tdoc['dag']|length) }}, {{ _('{0} problems').format(model.training.getPids(tdoc.dag)|length) }}
</li>
<li>
{% if tsdict[tdoc.docId]['enroll'] %}
{% if not tsdict[tdoc.docId]['done'] %}
<span class="icon training-status--icon progress"></span>
<span class="training-status--text progress">{{ _('Completed') }} {{ (100 * tsdict[tdoc.docId]['donePids']|length / model.training.getPids(tdoc.dag)|length)|round|int }}%</span>
{% else %}
<span class="icon training-status--icon done"></span>
<span class="training-status--text done">{{ _('Completed') }} 100%</span>
{% endif %}
{% elif handler.user.hasPriv(PRIV.PRIV_USER_PROFILE) %}
<span class="icon training-status--icon outside"></span> <span class="training-status--text outside">{{ _('Not Enrolled') }}</span>
{% endif %}
</li>
</ul>
</div>
</div>
</li>
{%- endfor -%}
</ol>
</div>
{% endif %}