diff --git a/packages/hydrooj/locales/zh.yaml b/packages/hydrooj/locales/zh.yaml index 4bc17877e..9f5ba9e57 100644 --- a/packages/hydrooj/locales/zh.yaml +++ b/packages/hydrooj/locales/zh.yaml @@ -720,6 +720,7 @@ Source type: 来源类型 Split View: 分屏预览 Star Topic: 收藏讨论 Star: 收藏 +Starred Problems: 收藏的题目 Start at: 开始于 Statistics: 统计 Status is hidden: 状态已隐藏 diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index a2c64e16c..8440c6245 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.39.28", + "version": "2.39.29", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/home.ts b/packages/hydrooj/src/handler/home.ts index 1ddf3f768..9d4f6888d 100644 --- a/packages/hydrooj/src/handler/home.ts +++ b/packages/hydrooj/src/handler/home.ts @@ -95,6 +95,21 @@ class HomeHandler extends Handler { return ['ranking', []]; } + async getStarredProblem(domainId: string, limit = 50) { + if (this.user.hasPerm(PERM.PERM_VIEW_PROBLEM)) { + const psdocs = await ProblemModel.getMultiStatus(domainId, { uid: this.user._id, star: true }) + .sort('_id', 1).limit(limit).toArray(); + const psdict = {}; + for (const psdoc of psdocs) psdict[psdoc.docId] = psdoc; + const pdict = await ProblemModel.getList( + domainId, psdocs.map((pdoc) => pdoc.docId), false, + ); + const pdocs = Object.keys(pdict).filter((i) => +i).map((i) => pdict[i]); + return ['problem', pdocs, psdict]; + } + return ['problem', [], {}]; + } + async get({ domainId }) { const homepageConfig = system.get('hydrooj.homepage'); const tasks = []; @@ -104,6 +119,7 @@ class HomeHandler extends Handler { if (!this[func]) continue; tasks.push(this[func](domainId, +info[key])); } + const [, pdocs, psdict] = await this.getStarredProblem(domainId); const contents = await Promise.all(tasks); const [udict, dodoc, vnodes] = await Promise.all([ user.getList(domainId, Array.from(this.uids)), @@ -116,6 +132,8 @@ class HomeHandler extends Handler { udict, domain: dodoc, vnodes, + pdocs, + psdict, }; } } diff --git a/packages/ui-default/components/media/media.page.js b/packages/ui-default/components/media/media.page.js index 5684ec6e9..05dc609d1 100644 --- a/packages/ui-default/components/media/media.page.js +++ b/packages/ui-default/components/media/media.page.js @@ -12,6 +12,7 @@ export default new AutoloadPage('media', async () => { }; users.get().forEach((ele) => resolve(ele, { type: 'user', id: +$(ele).text() })); $dom.find('.typo').get().forEach((el) => { + if (el.className.includes('no-media')) return; $(el).find('a[href]').get().forEach((ele) => { if ($(ele).parent().hasClass('user-profile-link')) return; let target = $(ele).attr('href'); diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index d6f4b02d7..7bc80a3b3 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.25.8", + "version": "4.25.9", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/templates/main.html b/packages/ui-default/templates/main.html index d6c8de77e..f05737ab4 100644 --- a/packages/ui-default/templates/main.html +++ b/packages/ui-default/templates/main.html @@ -1,7 +1,7 @@ -{% set no_path_section = true %} {% set page_name = "homepage" %} {% extends "layout/basic.html" %} {% import "components/contest.html" as contest with context %} +{% import "components/problem.html" as problem with context %} {% block content %}
@@ -49,6 +49,26 @@
+ {% if pdocs.length %} +
+
+

{{ _('Starred Problems') }}

+
+
+ {%- for pdoc in pdocs -%} +
+ + + +
+ {{ problem.render_problem_title(pdoc, show_tags=false, show_invisible_flag=false) }}
+ {%- endfor -%} +
+
+ {% endif %} {% if handler.user.hasPerm(perm.PERM_VIEW_DISCUSSION) %} {% include 'partials/discussion_nodes_widget.html' %} {% endif %} diff --git a/packages/ui-default/templates/partials/problem_list.html b/packages/ui-default/templates/partials/problem_list.html index e362168f9..79aa7ed3c 100644 --- a/packages/ui-default/templates/partials/problem_list.html +++ b/packages/ui-default/templates/partials/problem_list.html @@ -59,6 +59,16 @@ {% endif %} {% endif %} + {% if handler.user.hasPriv(PRIV.PRIV_USER_PROFILE) %} +
+ + + +
+ {% endif %} {{ problem.render_problem_title(pdoc) }} {{ pdoc.nSubmit }} diff --git a/packages/ui-default/templates/problem_detail.html b/packages/ui-default/templates/problem_detail.html index 68657c076..508546410 100644 --- a/packages/ui-default/templates/problem_detail.html +++ b/packages/ui-default/templates/problem_detail.html @@ -1,4 +1,3 @@ -{% set no_path_section = true %} {% extends "layout/basic.html" %} {% block content %}