diff --git a/packages/blog/templates/blog_detail.html b/packages/blog/templates/blog_detail.html index ab82ce9f3..4547a8ebf 100644 --- a/packages/blog/templates/blog_detail.html +++ b/packages/blog/templates/blog_detail.html @@ -30,13 +30,7 @@ {% endif %}
  • {{ _('{0} views').format(ddoc.views) }}
  • {% if handler.user.hasPriv(PRIV.PRIV_USER_PROFILE) %} -
  • - - -
  • +
  • {% endif %}
  • {{ _('Report') }} diff --git a/packages/hydrooj/src/handler/discussion.ts b/packages/hydrooj/src/handler/discussion.ts index 4a740eef0..1068e0781 100644 --- a/packages/hydrooj/src/handler/discussion.ts +++ b/packages/hydrooj/src/handler/discussion.ts @@ -338,15 +338,10 @@ class DiscussionDetailHandler extends DiscussionHandler { } @param('did', Types.ObjectId) - async postStar(domainId: string, did: ObjectId) { - await discussion.setStar(domainId, did, this.user._id, true); - this.back({ star: true }); - } - - @param('did', Types.ObjectId) - async postUnstar(domainId: string, did: ObjectId) { - await discussion.setStar(domainId, did, this.user._id, false); - this.back({ star: false }); + @param('star', Types.Boolean) + async postStar(domainId: string, did: ObjectId, star = false) { + await discussion.setStar(domainId, did, this.user._id, star); + this.back({ star }); } } diff --git a/packages/hydrooj/src/handler/home.ts b/packages/hydrooj/src/handler/home.ts index 0a45bfdad..cadc156c4 100644 --- a/packages/hydrooj/src/handler/home.ts +++ b/packages/hydrooj/src/handler/home.ts @@ -352,28 +352,43 @@ class HomeSecurityHandler extends Handler { } function set(s: Setting, key: string, value: any) { - if (s) { - if (s.family === 'setting_storage') return undefined; - if (s.flag & setting.FLAG_DISABLED) return undefined; - if ((s.flag & setting.FLAG_SECRET) && !value) return undefined; - if (s.type === 'boolean') { - if (value === 'on') return true; - return false; - } - if (s.type === 'number') { - if (!Number.isSafeInteger(+value)) throw new ValidationError(key); - return +value; - } - if (s.subType === 'yaml') { - try { - yaml.load(value); - } catch (e) { - throw new ValidationError(key); - } - } - return value; + if (!s) return undefined; + if (s.family === 'setting_storage') return undefined; + if (s.flag & setting.FLAG_DISABLED) return undefined; + if ((s.flag & setting.FLAG_SECRET) && !value) return undefined; + if (s.type === 'boolean') { + if (value === 'on') return true; + return false; } - return undefined; + if (s.type === 'number') { + if (!Number.isSafeInteger(+value)) throw new ValidationError(key); + return +value; + } + if (s.type === 'float') { + if (Number.isNaN(+value)) throw new ValidationError(key); + return +value; + } + if (['json', 'yaml', 'markdown', 'textarea'].includes(s.type)) { + if (!Types.Content[1](value)) throw new ValidationError(key); + } + if (s.type === 'text') { + if (!Types.String[1](value)) throw new ValidationError(key); + } + if (s.subType === 'yaml') { + try { + yaml.load(value); + } catch (e) { + throw new ValidationError(key); + } + } + if (s.subType === 'json') { + try { + JSON.parse(value); + } catch (e) { + throw new ValidationError(key); + } + } + return value; } class HomeSettingsHandler extends Handler { @@ -484,15 +499,11 @@ class HomeDomainHandler extends Handler { } @param('id', Types.String) - async postStar(domainId: string, id: string) { - await user.setById(this.user._id, { pinnedDomains: [...this.user.pinnedDomains, id] }); - this.back({ star: true }); - } - - @param('id', Types.String) - async postUnstar(domainId: string, id: string) { - await user.setById(this.user._id, { pinnedDomains: this.user.pinnedDomains.filter((i) => i !== id) }); - this.back({ star: false }); + @param('star', Types.Boolean) + async postStar({ }, id: string, star = false) { + if (star) await user.setById(this.user._id, { pinnedDomains: [...this.user.pinnedDomains, id] }); + else user.setById(this.user._id, { pinnedDomains: this.user.pinnedDomains.filter((i) => i !== id) }); + this.back({ star }); } } diff --git a/packages/ui-default/components/star/star.page.ts b/packages/ui-default/components/star/star.page.ts index e823ca0bf..dd00b9659 100644 --- a/packages/ui-default/components/star/star.page.ts +++ b/packages/ui-default/components/star/star.page.ts @@ -1,6 +1,6 @@ import $ from 'jquery'; import { AutoloadPage } from 'vj/misc/Page'; -import { request, tpl } from 'vj/utils'; +import { i18n, request, tpl } from 'vj/utils'; function setStarButtonState($starButton: JQuery, star: boolean) { if (star) { @@ -14,18 +14,17 @@ const starPage = new AutoloadPage('starPage', () => { function render(container) { const eles = $(container).find('[data-star]'); for (const el of eles) { - if ($(el).find('.star-form')) continue; - const pid = $(el).closest('[data-pid]').data('pid'); - const star = $(el).data('star') === 'true' ? 1 : 0; - if (!pid) continue; - $(tpl`
    + if ($(el).find('.star-form').length) continue; + const action = $(el).closest('[data-star-action]').data('star-action'); + const star = ['true', true].includes($(el).data('star')) ? 1 : 0; + $(tpl` -
    `); + `).prependTo($(el)); } } @@ -39,9 +38,10 @@ const starPage = new AutoloadPage('starPage', () => { const currentState = $button.hasClass('activated'); const $form = $button.closest('form'); const $op = $form.find('[name="operation"]'); - if (!['star', 'unstar'].includes($op.val() as any)) return; + const $star = $form.find('[name="star"]'); + if ($op.val() !== 'star') return; ev.preventDefault(); - $op.val(currentState ? 'unstar' : 'star'); + $star.val(currentState ? 'false' : 'true'); setStarButtonState($button, !currentState); request .post($form.attr('action'), $form) diff --git a/packages/ui-default/templates/home_domain.html b/packages/ui-default/templates/home_domain.html index 2242f5323..1080e4744 100644 --- a/packages/ui-default/templates/home_domain.html +++ b/packages/ui-default/templates/home_domain.html @@ -32,16 +32,8 @@ - -
    - {% set _show = handler.user.pinnedDomains.includes(ddoc._id) %} - - -
    + {{ ddoc['name'] }} ({{ ddoc['_id'] }}) diff --git a/packages/ui-default/templates/partials/homepage/starred_problems.html b/packages/ui-default/templates/partials/homepage/starred_problems.html index 831456554..16cf1e755 100644 --- a/packages/ui-default/templates/partials/homepage/starred_problems.html +++ b/packages/ui-default/templates/partials/homepage/starred_problems.html @@ -6,7 +6,7 @@
    {%- for pdoc in pdocs -%} -

    +

    {{ problem.render_problem_title(pdoc, show_tags=false, show_invisible_flag=false) }}

    {%- endfor -%} diff --git a/packages/ui-default/templates/partials/problem_list.html b/packages/ui-default/templates/partials/problem_list.html index 0e9f8a017..89d5e3059 100644 --- a/packages/ui-default/templates/partials/problem_list.html +++ b/packages/ui-default/templates/partials/problem_list.html @@ -54,7 +54,7 @@ {% endif %} {% endif %} - + {{ problem.render_problem_title(pdoc) }} {{ pdoc.nAccept }} / {{ pdoc.nSubmit }}