core&ui: contest_files

This commit is contained in:
undefined committed 2022-07-09 18:08:42 +08:00
1 parent 86d77625f6
commit 996ff2a9dd
16 files changed
+154 -32

No files matched your search

+1 -1
View File
@@ -53,7 +53,7 @@ about: 关于
About: 关于
AC Message: 通过消息
Accept: 通过
Accepted Problem: 通过的题目
Accepted Problems: 通过的题目
Accepted Ratio: 通过率
Accepted: 已通过
Access Control: 访问控制
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@hydrooj/ui-default",
"version": "4.38.6",
"version": "4.38.7",
"author": "undefined <i@undefined.moe>",
"license": "AGPL-3.0",
"main": "hydro.js",
@@ -14,7 +14,7 @@ function onBeforeUnload(e) {
function ensureAndGetSelectedFiles() {
const files = _.map(
$('.home-files tbody [data-checkbox-group="user_files"]:checked'),
$('.files tbody [data-checkbox-group="files"]:checked'),
(ch) => $(ch).closest('tr').attr('data-filename'),
);
if (files.length === 0) {
@@ -152,12 +152,9 @@ function handleDrop(ev) {
handleClickUpload(files);
}
const page = new NamedPage('home_files', () => {
const clip = new Clipboard('.home-files .col--name', {
text: (trigger) => {
const filename = trigger.closest('[data-filename]').getAttribute('data-filename');
return new URL(`/file/${UserContext._id}/${filename}`, window.location.href).toString();
},
const page = new NamedPage(['home_files', 'contest_files'], () => {
const clip = new Clipboard('.files .col--name', {
text: (trigger) => new URL(trigger.children[0].href, window.location.href).toString(),
});
clip.on('success', () => {
Notification.success(i18n('Download link copied to clipboard!'), 1000);
@@ -165,11 +162,11 @@ const page = new NamedPage('home_files', () => {
clip.on('error', () => {
Notification.error(i18n('Copy failed :('));
});
$(document).on('click', '.home-files .col--name', (ev) => ev.preventDefault());
$(document).on('click', '.files .col--name', (ev) => ev.preventDefault());
$(document).on('click', '[name="upload_file"]', () => handleClickUpload());
$(document).on('click', '[name="remove_selected"]', () => handleClickRemoveSelected());
$(document).on('dragover', '.home-files', (ev) => handleDragOver(ev));
$(document).on('drop', '.home-files', (ev) => handleDrop(ev));
$(document).on('dragover', '.files', (ev) => handleDragOver(ev));
$(document).on('drop', '.files', (ev) => handleDrop(ev));
});
export default page;
@@ -0,0 +1,27 @@
{% extends "layout/basic.html" %}
{% import "components/contest.html" as contest with context %}
{% import "components/record.html" as record with context %}
{% import "components/problem.html" as problem with context %}
{% block content %}
{{ set(UiContext, 'tdoc', tdoc) }}
<div class="row">
<div class="medium-9 columns">
<div class="section">
<div class="section__header">
<h1 class="section__title">{{ _('Files') }}</h1>
<div class="section__tools">
<button class="primary rounded button" name="upload_file">{{ _('Upload File') }}</button>
</div>
</div>
{{ noscript_note.render() }}
{% include "partials/files.html" %}
<div class="section__body">
<button class="rounded button" name="remove_selected">{{ _('Remove Selected') }}</button>
</div>
</div>
</div>
<div class="medium-3 columns">
{% include "partials/contest_sidebar.html" %}
</div>
</div>
{% endblock %}
@@ -8,7 +8,7 @@
</div>
</div>
{{ noscript_note.render() }}
{% include "partials/home_files.html" %}
{% include "partials/files.html" %}
<div class="section__body">
<button class="rounded button" name="remove_selected">{{ _('Remove Selected') }}</button>
</div>
@@ -72,6 +72,9 @@
<li class="menu__item"><a class="menu__link" href="{{ url('contest_edit', tid=tdoc.docId) }}">
<span class="icon icon-edit"></span> {{ _('Edit Contest') }}
</a></li>
<li class="menu__item"><a class="menu__link" href="{{ url('contest_files', tid=tdoc.docId) }}">
<span class="icon icon-file"></span> {{ _('Files') }}
</a></li>
{% endif %}
{% if handler.user.own(tdoc) or handler.user.hasPriv(PRIV.PRIV_READ_RECORD_CODE) or handler.user.hasPerm(perm.PERM_READ_RECORD_CODE) %}
{% if model.contest.canShowRecord.call(handler, tdoc, true) %}
@@ -1,5 +1,5 @@
{% import "components/nothing.html" as nothing with context %}
<div class="section__body no-padding home-files" data-fragment-id="home-files">
<div class="section__body no-padding files" data-fragment-id="files">
{% if files.length %}
<table class="data-table">
<colgroup>
@@ -11,7 +11,7 @@
<tr>
<th class="col--checkbox">
<label class="compact checkbox">
<input type="checkbox" name="select_all" data-checkbox-toggle="user_files">
<input type="checkbox" name="select_all" data-checkbox-toggle="files">
</label>
</th>
<th class="col--name">{{ _('Filename') }}</th>
@@ -23,11 +23,11 @@
<tr data-filename="{{ file.name }}" data-size="{{ file.size }}">
<td class="col--checkbox">
<label class="compact checkbox">
<input type="checkbox" data-checkbox-group="user_files" data-checkbox-range>
<input type="checkbox" data-checkbox-group="files" data-checkbox-range>
</label>
</td>
<td class="col--name">
<a href="{{ url('fs_download', {uid: handler.user._id, filename: file.name}) }}">{{ file.name }}</a>
<a href="{{ urlForFile(file.name) }}">{{ file.name }}</a>
</td>
<td class="col--size">{{ size(file.size) }}</td>
</tr>