From 6bda0e58d363a0fedb0559cc607dc36eed5d77b0 Mon Sep 17 00:00:00 2001 From: undefined Date: Tue, 9 Aug 2022 20:35:44 +0800 Subject: [PATCH] ui: better training validation output --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/error.ts | 2 +- packages/hydrooj/src/handler/training.ts | 2 +- packages/hydrooj/src/model/problem.ts | 1 + packages/hydrooj/src/service/layers/response.ts | 2 +- packages/hydrooj/src/service/server.ts | 1 + packages/ui-default/backendlib/template.js | 1 + packages/ui-default/package.json | 2 +- packages/ui-default/templates/error.html | 6 +++++- 9 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index b3e940970..4dfc920cc 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.15.7", + "version": "3.15.8", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/error.ts b/packages/hydrooj/src/error.ts index 0c50ff3a4..4c6e50d50 100644 --- a/packages/hydrooj/src/error.ts +++ b/packages/hydrooj/src/error.ts @@ -107,7 +107,7 @@ export const ProblemDataNotFoundError = Err('ProblemDataNotFoundError', NotFound export const MessageNotFoundError = Err('MessageNotFoundError', NotFoundError, 'Message {0} not found.'); export const DocumentNotFoundError = Err('DocumentNotFoundError', NotFoundError, 'Document {2} not found.'); -export const ProblemNotFoundError = Err('ProblemNotFountError', DocumentNotFoundError, 'Problem {1} not found.'); +export const ProblemNotFoundError = Err('ProblemNotFoundError', DocumentNotFoundError, 'Problem {1} not found.'); export const SolutionNotFoundError = Err('SolutionNotFoundError', DocumentNotFoundError, 'Solution {1} not found.'); export const TrainingNotFoundError = Err('TrainingNotFoundError', DocumentNotFoundError, 'Training {1} not found.'); export const ContestNotFoundError = Err('ContestNotFoundError', DocumentNotFoundError, 'Contest {1} not found.'); diff --git a/packages/hydrooj/src/handler/training.ts b/packages/hydrooj/src/handler/training.ts index d5011f04e..cc9e03967 100644 --- a/packages/hydrooj/src/handler/training.ts +++ b/packages/hydrooj/src/handler/training.ts @@ -49,7 +49,7 @@ async function _parseDagJson(domainId: string, _dag: string): Promise async (ctx: KoaContext, next) => { if (request.json) response.body = { error }; else { try { - await ctx.render(error instanceof UserFacingError ? 'error.html' : 'bsod.html', { error }); + await ctx.render(error instanceof UserFacingError ? 'error.html' : 'bsod.html', { UserFacingError, error }); } catch (e) { logger.error(e); // this.response.body.error = {}; diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index 654cc0fad..37afe63b9 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -246,6 +246,7 @@ export class Handler extends HandlerCommon { this.response.status = error instanceof UserFacingError ? error.code : 500; this.response.template = error instanceof UserFacingError ? 'error.html' : 'bsod.html'; this.response.body = { + UserFacingError, error: { message: error.msg(), params: error.params, stack: errorMessage(error.stack || '') }, }; } diff --git a/packages/ui-default/backendlib/template.js b/packages/ui-default/backendlib/template.js index dec33ffac..98183eff1 100644 --- a/packages/ui-default/backendlib/template.js +++ b/packages/ui-default/backendlib/template.js @@ -146,6 +146,7 @@ env.addGlobal('Math', Math); env.addGlobal('process', process); env.addGlobal('global', global); env.addGlobal('typeof', (o) => typeof o); +env.addGlobal('instanceof', (a, b) => a instanceof b); env.addGlobal('paginate', misc.paginate); env.addGlobal('size', misc.size); env.addGlobal('utils', { status }); diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 3c819b592..fbf6ec8db 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.39.2", + "version": "4.39.3", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/templates/error.html b/packages/ui-default/templates/error.html index c190e4656..6c65fefbc 100644 --- a/packages/ui-default/templates/error.html +++ b/packages/ui-default/templates/error.html @@ -12,7 +12,11 @@

{{ _('Arguments') }}:

    {%- for param in error.params -%} -
  1. {{ param }}
  2. + {% if instanceof(param, UserFacingError) %} +
  3. {{ _(param.message).formatFromArray(param.params)}}
  4. + {% else %} +
  5. {{ param }}
  6. + {% endif %} {%- endfor -%}