作业功能

This commit is contained in:
masnn committed 2020-06-02 11:33:40 +08:00
1 parent 216a4a91e4
commit bc50913e6e
60 files changed
+1161 -197

No files matched your search

+8
View File
@@ -0,0 +1,8 @@
{% import "components/user.html" as user with context %}
{% macro render_time(tdoc_time) %}
{{ datetimeSpan(tdoc_time, false, '%Y-%m-%d %H:%M')|safe }}
{% endmacro %}
{% macro render_extension(tdoc) %}
{{ ((tdoc['endAt'].getTime() - tdoc['penaltySince'].getTime())/ 1000 / 3600/ 24)|round(1) }}
{% endmacro %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "contest_detail" %}
{% extends "layout/basic.html" %}
{% import "components/contest.html" as contest with context %}
{% import "components/record.html" as record with context %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "contest_main" %}
{% extends "layout/basic.html" %}
{% import "components/contest.html" as contest with context %}
{% macro render_important_contest(view, title, tdoc) %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "contest_scoreboard" %}
{% extends "layout/basic.html" %}
{% block content %}
<div class="row"><div class="medium-12 columns">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "discussion_create" %}
{% extends "layout/basic.html" %}
{% block content %}
<div class="row">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "discussion_detail" %}
{% extends "layout/basic.html" %}
{% import "components/comments_discussion.html" as comments with context %}
{% block content %}
-1
View File
@@ -1,5 +1,4 @@
{% set no_path_section = true %}
{% set page_name = "error" %}
{% extends "layout/basic.html" %}
{% block content %}
<div class="error__container clearfix">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "home_messages" %}
{% extends "layout/home_base.html" %}
{% block home_content %}
<div style="display: none" class="dialog__body--user-select">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "home_security" %}
{% extends "layout/home_base.html" %}
{% block home_content %}
<div data-heading-extract-to="#menu-item-home_security">
+77
View File
@@ -0,0 +1,77 @@
{% 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|safe }}
</div>
</div>
<div class="section">
<div class="section__header">
<h1 class="section__title">{{ _('Problem') }}</h1>
</div>
{% if model.contest.isNotStarted(tdoc) %}
{{ nothing.render('This homework is not open and you cannot view problems.') }}
{% else %}
{% if attended or model.contest.isDone(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'] %}
{% set rdoc = rdict[psdict[pid]['rid']] %}
{% if handler.canShowRecord(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">{{ datetimeSpan(rdoc['_id'])|safe }}</td>
{% 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 %}
+105
View File
@@ -0,0 +1,105 @@
{% 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:'beginAtDate',
placeholder:'YYYY-mm-dd',
value:dateBeginText,
date:true,
row:false
}) }}
{{ form.form_text({
columns:4,
last_column:true,
label:'Begin Time',
name:'beginAtTime',
placeholder:'HH:MM',
value:timeBeginText,
time:true,
row:false
}) }}
</div><div class="row">
{{ form.form_text({
columns:4,
label:'End Date',
name:'penaltySinceDate',
placeholder:'YYYY-mm-dd',
value:datePenaltyText,
date:true,
row:false
}) }}
{{ form.form_text({
columns:4,
last_column:true,
label:'End Time',
name:'penaltySinceTime',
placeholder:'HH:MM',
value:timePenaltyText,
time:true,
row:false
}) }}
</div>
{{ form.form_text({
columns:4,
label:'Extension (days)',
name:'extensionDays',
value:extension_days
}) }}
<div class="row"><div class="columns">
<label>
{{ _('Extension Score Penalty') }}
<textarea name="penaltyRules" class="monospace textbox">{% if tdoc %}{{ penaltyRules }}{% else %}{% include 'partials/homework_default_penalty_rules.yaml' %}{% endif %}</textarea>
</label>
</div></div>
{{ form.form_text({
columns:null,
label:'Problems',
name:'pids',
value:pids
}) }}
{{ form.form_textarea({
columns:null,
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
@@ -0,0 +1,68 @@
{% extends "layout/basic.html" %}
{% block content %}
<script>
var Context = {
'docs': {{ calendar|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="/homework/create">{{ _('Create Homework') }}</a>
{% endif %}
</div>
</div>
<div class="section__body no-padding">
{% if not tdocs.length %}
{{ 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">{{ 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="/homework/{{ 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.isHomeworkExtended(tdoc) or model.contest.isDone(tdoc) %}
{{ _('Hard Deadline') }}: {{ datetimeSpan(tdoc['endAt'])|safe }}
{% else %}
{{ _('Deadline') }}: {{ datetimeSpan(tdoc['penaltySince'])|safe }}
{% endif %}
</li>
</ul>
</div>
</div>
</li>
{% endfor %}
</ol>
<div name="calendar_entry"></div>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "manage_dashboard" %}
{% import "components/user.html" as user %}
{% extends "manage_base.html" %}
{% block manage_content %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "manage_edit" %}
{% import "components/form.html" as form with context %}
{% extends "manage_base.html" %}
{% block manage_content %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "manage_module" %}
{% extends "manage_base.html" %}
{% block manage_content %}
<div style="display: none" class="dialog__body--add-module">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "manage_permission" %}
{% extends "manage_base.html" %}
{% block manage_content %}
<form method="post">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "manage_role" %}
{% extends "manage_base.html" %}
{% block manage_content %}
<div style="display: none" class="dialog__body--create-role">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "manage_settings" %}
{% extends "manage_base.html" %}
{% block manage_content %}
<div class="section">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "manage_user" %}
{% extends "manage_base.html" %}
{% block manage_content %}
<div style="display: none" class="dialog__body--add-user">
@@ -0,0 +1,6 @@
# Format:
# hours: coefficient
1: 0.9
3: 0.8
12: 0.75
9999: 0.5
+85
View File
@@ -0,0 +1,85 @@
{% 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="/homework/{{ tdoc.docId }}">
<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="/homework/{{ tdoc.docId }}">
<span class="icon icon-homework"></span> {{ _('View Homework') }}
</a></li>
{% endif %}
{% if not attended and not model.contest.isDone(tdoc) %}
<li class="menu__item">
{% if handler.hasPerm(perm.PERM_ATTEND_HOMEWORK) and handler.hasPerm(perm.PERM_LOGGEDIN) %}
<form action="/homework/{{ tdoc.docId }}" 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="/homework/{{ tdoc.docId }}/scoreboard">
<span class="icon icon-statistics"></span> {{ _('Scoreboard') }}
</a></li>
{% elif handler.canViewHiddenScoreboard(tdoc) %}
<li class="menu__item"><a class="menu__link" href="/homework/{{ tdoc.docId }}/scoreboard">
<span class="icon icon-statistics"></span> {{ _('Scoreboard (Hidden)') }}
</a></li>
{% endif %}
{% if tdoc.owner == handler.user._id or handler.hasPerm(perm.PERM_EDIT_HOMEWORK) %}
<li class="menu__item"><a class="menu__link" href="/homework/{{ tdoc.docId }}/edit">
<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="/homework/{{ tdoc.docId }}/code">
<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.docId }}">
<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 {{ model.contest.getStatus(tdoc) }}">{{ _(model.contest.statusText(tdoc)) }}</span></dd>
<dt>{{ _('Problem') }}</dt><dd>{{ tdoc['pids']|length }}</dd>
<dt>{{ _('Open Since') }}</dt><dd>{{ homework.render_time(tdoc['beginAt']) }}</dd>
<dt>{{ _('Deadline') }}</dt><dd>{{ homework.render_time(tdoc['penaltySince']) }}</dd>
<dt>{{ _('Can be Extended For') }}</dt><dd>{{ homework.render_extension(tdoc) }} {{ _('hour(s)') }}</dd>
</dl>
</div>
</div>
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "problem_detail" %}
{% extends "layout/basic.html" %}
{% block content %}
<script>
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "problem_import" %}
{% extends "layout/basic.html" %}
{% block content %}
<div class="row">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "problem_main" %}
{% import "components/record.html" as record with context %}
{% import "components/problem.html" as problem with context %}
{% extends "layout/basic.html" %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "problem_settings" %}
{% extends "layout/basic.html" %}
{% block content %}
<div class="row">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "problem_solution" %}
{% extends "layout/basic.html" %}
{% import "components/comments_solution.html" as comments with context %}
{% block content %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "problem_submit" %}
{% extends "layout/basic.html" %}
{% block content %}
<div class="row">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "record_detail" %}
{% import "components/problem.html" as problem with context %}
{% extends "layout/basic.html" %}
{% block content %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "record_main" %}
{% extends "layout/basic.html" %}
{% block content %}
<script>
+29 -30
View File
@@ -1,43 +1,42 @@
{% set page_name = "status" %}
{% extends "layout/basic.html" %}
{% block content %}
<div class="row">
<div class="medium-12 columns">
<div class="section">
<div class="section__body no-padding">
<div data-fragment-id="status">
<table class="data-table">
<div class="medium-12 columns">
<div class="section">
<div class="section__body no-padding">
<div data-fragment-id="status">
<table class="data-table">
<colgroup>
<col class="col--id">
<col class="col--status">
<col class="col--os">
<col class="col--cpu">
<col class="col--os">
<col class="col--cpu">
<col class="col--memory">
</colgroup>
<thead>
<tr>
</colgroup>
<thead>
<tr>
<th class="col--id">{{ _('ID') }}</th>
<th class="col--status">{{ _('Current Status') }}</th>
<th class="col--status">{{ _('Current Status') }}</th>
<th class="col--os">{{ _('OS Info') }}</th>
<th class="col--cpu">{{ _('CPU Info') }}</th>
<th class="col--memory">{{ _('Memory Info') }}</th>
</tr>
</thead>
<tbody>
{% for doc in stats %}
<tr>
<th class="col--cpu">{{ _('CPU Info') }}</th>
<th class="col--memory">{{ _('Memory Info') }}</th>
</tr>
</thead>
<tbody>
{% for doc in stats %}
<tr>
<td class="col--id">{{ doc._id|truncate(6, True, '') }}</td>
<td class="col--status">{{ doc.status }}</td>
<td class="col--os">{{ doc.osinfo }}</td>
<td class="col--cpu" data-tooltip="{{ doc.flags }}">{{ doc.cpu }}</td>
<td class="col--memory">{{ doc.memory }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
<td class="col--os">{{ doc.osinfo }}</td>
<td class="col--cpu" data-tooltip="{{ doc.flags }}">{{ doc.cpu }}</td>
<td class="col--memory">{{ doc.memory }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "training_detail" %}
{% import "components/record.html" as record with context %}
{% import "components/problem.html" as problem with context %}
{% extends "layout/basic.html" %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "training_main" %}
{% extends "layout/basic.html" %}
{% block content %}
<div class="row">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "user_detail" %}
{% import "components/home.html" as home with context %}
{% extends "layout/basic.html" %}
{% block content %}
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "user_login" %}
{% extends "layout/immersive.html" %}
{% block content %}
<div class="row"><div class="columns">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "user_register" %}
{% extends "layout/immersive.html" %}
{% block content %}
<div class="row"><div class="columns">
-1
View File
@@ -1,4 +1,3 @@
{% set page_name = "user_register_with_code" %}
{% extends "layout/immersive.html" %}
{% block content %}
<div class="immersive--content immersive--center">