diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 5d58b4daf..bc1e3bf08 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.29.37", + "version": "2.29.38", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index f9cdee063..c21b57d21 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -562,6 +562,18 @@ export class ProblemCreateHandler extends Handler { export class ProblemPrefixListHandler extends Handler { @param('prefix', Types.Name) async get(domainId: string, prefix: string) { + let cors = false; + if (prefix.includes(':')) { + const [pdomain, s] = prefix.split(':'); + const ddoc = await domain.get(pdomain); + this.response.body = []; + if (!ddoc || ddoc._id === domainId || !ddoc.share || !s.trim()) return; + ddoc.share = ddoc.share.replace(/,/g, ',').split(',').map((q) => q.trim()).join(','); + if (ddoc.share !== '*' && !`,${ddoc.share},`.includes(`,${domainId},`)) return; + domainId = pdomain; + prefix = s; + cors = true; + } const pdocs = await problem.getPrefixList(domainId, prefix); if (!Number.isNaN(+prefix)) { const pdoc = await problem.get(domainId, +prefix, ['domainId', 'docId', 'pid', 'title']); @@ -576,6 +588,7 @@ export class ProblemPrefixListHandler extends Handler { } } this.response.body = pdocs; + if (cors) this.response.body.forEach((v) => { v.docId = `${domainId}:${v.docId}`; }); } } diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 026df20c4..8d2338be4 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.13.2", + "version": "4.13.3", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/pages/problem_main.page.js b/packages/ui-default/pages/problem_main.page.js index 247bb9a6a..f090a34a5 100644 --- a/packages/ui-default/pages/problem_main.page.js +++ b/packages/ui-default/pages/problem_main.page.js @@ -214,6 +214,7 @@ const page = new NamedPage(['problem_main', 'problem_category'], () => { $('[name="hide_selected_problems"]').on('click', () => handleOperation('hide')); $('[name="unhide_selected_problems"]').on('click', () => handleOperation('unhide')); $('[name="download_selected_problems"]').on('click', handleDownload); + $('#hideTags').on('click', () => $('.problem__tags').hide()); $('#search').on('click', (ev) => { ev.preventDefault(); updateSelection(); diff --git a/packages/ui-default/templates/partials/problem_list.html b/packages/ui-default/templates/partials/problem_list.html index 0d488aaeb..e362168f9 100644 --- a/packages/ui-default/templates/partials/problem_list.html +++ b/packages/ui-default/templates/partials/problem_list.html @@ -22,18 +22,18 @@ - {% if handler.user.hasPerm(perm.PERM_EDIT_PROBLEM) %} - - - - {{ _('ID') }} - {% endif %} - {% if handler.user.hasPriv(PRIV.PRIV_USER_PROFILE) %} - {{ _('Status') }} - {% endif %} - {{ _('Problem') }} + {% if handler.user.hasPerm(perm.PERM_EDIT_PROBLEM) %} + + + + {{ _('ID') }} + {% endif %} + {% if handler.user.hasPriv(PRIV.PRIV_USER_PROFILE) %} + {{ _('Status') }} + {% endif %} + {{ _('Problem') }}{{ _('Hide tags') }} {{ _('Tried') }} {{ _('AC') }} {{ _('Difficulty') }} diff --git a/packages/ui-default/templates/problem_main.html b/packages/ui-default/templates/problem_main.html index 5431cbf78..fa3444d3c 100644 --- a/packages/ui-default/templates/problem_main.html +++ b/packages/ui-default/templates/problem_main.html @@ -13,7 +13,7 @@