mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-19 17:38:19 +08:00
core: add contest invitation code
This commit is contained in:
1 parent
f91f201f1e
commit
4e564f1ca8
7 files changed
+51
-14
No files matched your search
@@ -0,0 +1,24 @@
|
||||
import { AutoloadPage } from 'vj/misc/Page';
|
||||
import delay from 'vj/utils/delay';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import request from 'vj/utils/request';
|
||||
import Notification from 'vj/components/notification';
|
||||
|
||||
const contestPage = new AutoloadPage('contestPage', () => {
|
||||
$('[data-contest-code]').on('click', (ev) => {
|
||||
ev.preventDefault();
|
||||
// eslint-disable-next-line no-alert
|
||||
const code = prompt(i18n('Invitation code:'));
|
||||
request.post('', {
|
||||
operation: 'attend',
|
||||
code,
|
||||
}).then(() => {
|
||||
Notification.success(i18n('Successfully attended'));
|
||||
delay(1000).then(() => window.location.reload());
|
||||
}).catch((e) => {
|
||||
Notification.error(e.message || e);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
export default contestPage;
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@hydrooj/ui-default",
|
||||
"version": "4.12.19",
|
||||
"version": "4.12.20",
|
||||
"author": "undefined <i@undefined.moe>",
|
||||
"license": "AGPL-3.0",
|
||||
"main": "hydro.js",
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<form method="post">
|
||||
<div class="row">
|
||||
{{ form.form_select({
|
||||
columns:4,
|
||||
columns:3,
|
||||
label:'Rule',
|
||||
name:'rule',
|
||||
options:rules,
|
||||
@@ -23,8 +23,16 @@
|
||||
autofocus:true,
|
||||
row:false
|
||||
}) }}
|
||||
{{ form.form_text({
|
||||
columns:3,
|
||||
label:'Invitation code',
|
||||
name:'code',
|
||||
placeholder:_('(leave blank if none)'),
|
||||
value:tdoc.code|default(''),
|
||||
row:false
|
||||
}) }}
|
||||
{{ form.form_checkbox({
|
||||
columns:4,
|
||||
columns:2,
|
||||
label:'Rated',
|
||||
name:'rated',
|
||||
placeholder:_('Is rated'),
|
||||
|
||||
@@ -41,13 +41,13 @@
|
||||
{% if not attended and not model.contest.isDone(tdoc) %}
|
||||
<li class="menu__item">
|
||||
{% if handler.user.hasPerm(perm.PERM_ATTEND_CONTEST) and handler.user.hasPriv(PRIV.PRIV_USER_PROFILE) %}
|
||||
<form action="{{ url('contest_detail', tid=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> {{ _('Attend Contest') }}
|
||||
</button>
|
||||
</form>
|
||||
<form action="{{ url('contest_detail', tid=tdoc.docId) }}" method="POST">
|
||||
<input type="hidden" name="operation" value="attend">
|
||||
<input type="hidden" name="csrfToken" value="{{ handler.csrfToken }}">
|
||||
<button class="menu__link" {% if tdoc._code %}data-contest-code{% endif %} type="submit">
|
||||
<span class="icon icon-add"></span> {{ _('Attend Contest') }}
|
||||
</button>
|
||||
</form>
|
||||
{% elif not handler.user.hasPriv(PRIV.PRIV_USER_PROFILE) %}
|
||||
<a class="menu__link" href="javascript:showSignInDialog()">
|
||||
<span class="icon icon-add"></span> {{ _('Login to Attend Contest') }}
|
||||
|
||||
Reference in new issue
Block a user