From 578b0ebe0cb8fd4a983cf620d600e3f8149ed908 Mon Sep 17 00:00:00 2001 From: FineArchs <133759614+FineArchs@users.noreply.github.com> Date: Tue, 19 Sep 2023 16:53:43 +0900 Subject: [PATCH] =?UTF-8?q?Scratchpad=E3=81=AB=E9=9D=9E=E5=90=8C=E6=9C=9F?= =?UTF-8?q?=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20(#11850)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * opts.callをtopCallに置換 * AiScriptのエラーコールバックをscratchpadに導入 * lint * Update CHANGELOG.md --- CHANGELOG.md | 1 + packages/frontend/src/pages/scratchpad.vue | 18 +++++++++++--- packages/frontend/src/scripts/aiscript/ui.ts | 26 ++++++++++---------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 683c0a85a5..d96556ec0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,7 @@ - AiScriptを0.16.0に更新 - Mk:apiが失敗した時にエラー型の値(AiScript 0.16.0で追加)を返すように - タイムラインでリスト/アンテナ選択時のパフォーマンスを改善 +- ScratchpadでAsync:系関数やボタンのコールバックなどのエラーにもダイアログを出すように(試験的なためPlayなどには未実装) - 「Moderation note」、「Add moderation note」をローカライズできるように - 新しい実績を追加 - Fix: サーバー情報画面(`/instance-info/{domain}`)でブロックができないのを修正 diff --git a/packages/frontend/src/pages/scratchpad.vue b/packages/frontend/src/pages/scratchpad.vue index 8d5a29d394..3dfd2d661f 100644 --- a/packages/frontend/src/pages/scratchpad.vue +++ b/packages/frontend/src/pages/scratchpad.vue @@ -109,6 +109,13 @@ async function run() { print: true, }); }, + err: (err) => { + os.alert({ + type: 'error', + title: 'AiScript Error', + text: err.toString(), + }); + }, log: (type, params) => { switch (type) { case 'end': logs.value.push({ @@ -124,20 +131,23 @@ async function run() { let ast; try { ast = parser.parse(code.value); - } catch (error) { + } catch (err: any) { os.alert({ type: 'error', - text: 'Syntax error :(', + title: 'Syntax Error', + text: err.toString(), }); return; } try { await aiscript.exec(ast); } catch (err: any) { + // AiScript runtime errors should be processed by error callback function + // so errors caught here are AiScript's internal errors. os.alert({ type: 'error', - title: 'AiScript Error', - text: err.message, + title: 'Internal Error', + text: err.toString(), }); } } diff --git a/packages/frontend/src/scripts/aiscript/ui.ts b/packages/frontend/src/scripts/aiscript/ui.ts index 7e17563ec8..d326b956e8 100644 --- a/packages/frontend/src/scripts/aiscript/ui.ts +++ b/packages/frontend/src/scripts/aiscript/ui.ts @@ -551,55 +551,55 @@ export function registerAsUiLib(components: Ref[], done: (root: R }), 'Ui:C:container': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('container', def, id, getContainerOptions, opts.call); + return createComponentInstance('container', def, id, getContainerOptions, opts.topCall); }), 'Ui:C:text': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('text', def, id, getTextOptions, opts.call); + return createComponentInstance('text', def, id, getTextOptions, opts.topCall); }), 'Ui:C:mfm': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('mfm', def, id, getMfmOptions, opts.call); + return createComponentInstance('mfm', def, id, getMfmOptions, opts.topCall); }), 'Ui:C:textarea': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('textarea', def, id, getTextareaOptions, opts.call); + return createComponentInstance('textarea', def, id, getTextareaOptions, opts.topCall); }), 'Ui:C:textInput': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('textInput', def, id, getTextInputOptions, opts.call); + return createComponentInstance('textInput', def, id, getTextInputOptions, opts.topCall); }), 'Ui:C:numberInput': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('numberInput', def, id, getNumberInputOptions, opts.call); + return createComponentInstance('numberInput', def, id, getNumberInputOptions, opts.topCall); }), 'Ui:C:button': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('button', def, id, getButtonOptions, opts.call); + return createComponentInstance('button', def, id, getButtonOptions, opts.topCall); }), 'Ui:C:buttons': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('buttons', def, id, getButtonsOptions, opts.call); + return createComponentInstance('buttons', def, id, getButtonsOptions, opts.topCall); }), 'Ui:C:switch': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('switch', def, id, getSwitchOptions, opts.call); + return createComponentInstance('switch', def, id, getSwitchOptions, opts.topCall); }), 'Ui:C:select': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('select', def, id, getSelectOptions, opts.call); + return createComponentInstance('select', def, id, getSelectOptions, opts.topCall); }), 'Ui:C:folder': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('folder', def, id, getFolderOptions, opts.call); + return createComponentInstance('folder', def, id, getFolderOptions, opts.topCall); }), 'Ui:C:postFormButton': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('postFormButton', def, id, getPostFormButtonOptions, opts.call); + return createComponentInstance('postFormButton', def, id, getPostFormButtonOptions, opts.topCall); }), 'Ui:C:postForm': values.FN_NATIVE(([def, id], opts) => { - return createComponentInstance('postForm', def, id, getPostFormOptions, opts.call); + return createComponentInstance('postForm', def, id, getPostFormOptions, opts.topCall); }), }; }