import $ from 'jquery'; import moment from 'moment'; import ProblemSelectAutoComplete from 'vj/components/autocomplete/ProblemSelectAutoComplete'; import UserSelectAutoComplete from 'vj/components/autocomplete/UserSelectAutoComplete'; import { ConfirmDialog } from 'vj/components/dialog'; import { NamedPage } from 'vj/misc/Page'; import { i18n, request, tpl } from 'vj/utils'; const page = new NamedPage(['contest_edit', 'contest_create', 'homework_create', 'homework_edit'], (pagename) => { ProblemSelectAutoComplete.getOrConstruct($('[name="pids"]'), { multi: true, clearDefaultValue: false }); UserSelectAutoComplete.getOrConstruct($('[name="maintainer"]'), { multi: true, clearDefaultValue: false }); $('[name="rule"]').on('change', () => { const rule = $('[name="rule"]').val(); $('.contest-rule-settings input').attr('disabled', 'disabled'); $('.contest-rule-settings').hide(); $(`.contest-rule--${rule} input`).removeAttr('disabled'); $(`.contest-rule--${rule}`).show(); }).trigger('change'); $('[name="beginAtDate"], [name="beginAtTime"], [name="duration"]').on('change', () => { const beginAtDate = $('[name="beginAtDate"]').val(); const beginAtTime = $('[name="beginAtTime"]').val(); const duration = $('[name="duration"]').val(); const endAt = moment(`${beginAtDate} ${beginAtTime}`).add(+duration, 'hours').toDate(); if (endAt) $('[name="endAt"]').val(moment(endAt).format('YYYY-MM-DD HH:mm')); }); $('[name="permission"]').removeAttr('disabled').on('change', () => { const type = $('[name="permission"]').val(); $('[data-perm] input').attr('disabled', 'disabled'); $('[data-perm]').hide(); $(`[data-perm="${type}"] input`).removeAttr('disabled'); $(`[data-perm="${type}"]`).show(); }).trigger('change'); if (pagename.endsWith('edit')) { let confirmed = false; $(document).on('click', '[value="delete"]', (ev) => { ev.preventDefault(); if (confirmed) { return request.post('', { operation: 'delete' }).then((res) => { window.location.href = res.url; }); } const message = `Confirm deleting this ${pagename.split('_')[0]}? Its status will be deleted as well.`; return new ConfirmDialog({ $body: tpl.typoMsg(i18n(message)), }).open().then((action) => { if (action !== 'yes') return; confirmed = true; ev.target.click(); }); }); setInterval(() => { $('img').each(function () { if ($(this).attr('src').startsWith('file://')) { $(this).attr('src', $(this).attr('src').replace('file://', './file/')); } }); }, 500); } }); export default page;