enhance(frontend): AiScriptAppウィジェットで構文エラーを検知してもダイアログではなくウィジェット内にエラーを表示するように
This commit is contained in:
parent
9b565728e7
commit
de1b2223ff
|
@ -4,9 +4,10 @@
|
||||||
-
|
-
|
||||||
|
|
||||||
### Client
|
### Client
|
||||||
|
- Enhance: AiScriptAppウィジェットで構文エラーを検知してもダイアログではなくウィジェット内にエラーを表示するように
|
||||||
|
- Enhance: /flushページでサイトキャッシュをクリアできるようになりました
|
||||||
- Fix: RSSティッカーウィジェットが正しく動作しない問題を修正
|
- Fix: RSSティッカーウィジェットが正しく動作しない問題を修正
|
||||||
- Fix: エラー画像が横に引き伸ばされてしまう問題に対応
|
- Fix: エラー画像が横に引き伸ばされてしまう問題に対応
|
||||||
- Enhance: /flushページでサイトキャッシュをクリアできるようになりました
|
|
||||||
|
|
||||||
### Server
|
### Server
|
||||||
-
|
-
|
||||||
|
|
|
@ -7,25 +7,26 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<MkContainer :showHeader="widgetProps.showHeader" class="mkw-aiscriptApp">
|
<MkContainer :showHeader="widgetProps.showHeader" class="mkw-aiscriptApp">
|
||||||
<template #header>App</template>
|
<template #header>App</template>
|
||||||
<div :class="$style.root">
|
<div :class="$style.root">
|
||||||
<MkAsUi v-if="root" :component="root" :components="components" size="small"/>
|
<div v-if="isSyntaxError">Syntax error :(</div>
|
||||||
|
<MkAsUi v-else-if="root" :component="root" :components="components" size="small"/>
|
||||||
</div>
|
</div>
|
||||||
</MkContainer>
|
</MkContainer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, ref, watch } from 'vue';
|
import { onMounted, ref, watch } from 'vue';
|
||||||
import type { Ref } from 'vue';
|
|
||||||
import { Interpreter, Parser } from '@syuilo/aiscript';
|
import { Interpreter, Parser } from '@syuilo/aiscript';
|
||||||
import { useWidgetPropsManager } from './widget.js';
|
import { useWidgetPropsManager } from './widget.js';
|
||||||
|
import type { Ref } from 'vue';
|
||||||
import type { WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
import type { WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||||
import type { FormWithDefault, GetFormResultType } from '@/utility/form.js';
|
import type { FormWithDefault, GetFormResultType } from '@/utility/form.js';
|
||||||
|
import type { AsUiComponent, AsUiRoot } from '@/aiscript/ui.js';
|
||||||
import * as os from '@/os.js';
|
import * as os from '@/os.js';
|
||||||
import { aiScriptReadline, createAiScriptEnv } from '@/aiscript/api.js';
|
import { aiScriptReadline, createAiScriptEnv } from '@/aiscript/api.js';
|
||||||
import { $i } from '@/i.js';
|
import { $i } from '@/i.js';
|
||||||
import MkAsUi from '@/components/MkAsUi.vue';
|
import MkAsUi from '@/components/MkAsUi.vue';
|
||||||
import MkContainer from '@/components/MkContainer.vue';
|
import MkContainer from '@/components/MkContainer.vue';
|
||||||
import { registerAsUiLib } from '@/aiscript/ui.js';
|
import { registerAsUiLib } from '@/aiscript/ui.js';
|
||||||
import type { AsUiComponent, AsUiRoot } from '@/aiscript/ui.js';
|
|
||||||
|
|
||||||
const name = 'aiscriptApp';
|
const name = 'aiscriptApp';
|
||||||
|
|
||||||
|
@ -56,8 +57,11 @@ const parser = new Parser();
|
||||||
|
|
||||||
const root = ref<AsUiRoot>();
|
const root = ref<AsUiRoot>();
|
||||||
const components = ref<Ref<AsUiComponent>[]>([]);
|
const components = ref<Ref<AsUiComponent>[]>([]);
|
||||||
|
const isSyntaxError = ref(false);
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
|
isSyntaxError.value = false;
|
||||||
|
|
||||||
const aiscript = new Interpreter({
|
const aiscript = new Interpreter({
|
||||||
...createAiScriptEnv({
|
...createAiScriptEnv({
|
||||||
storageKey: 'widget',
|
storageKey: 'widget',
|
||||||
|
@ -80,10 +84,7 @@ async function run() {
|
||||||
try {
|
try {
|
||||||
ast = parser.parse(widgetProps.script);
|
ast = parser.parse(widgetProps.script);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
os.alert({
|
isSyntaxError.value = true;
|
||||||
type: 'error',
|
|
||||||
text: 'Syntax error :(',
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -52,7 +52,7 @@ const { widgetProps, configure } = useWidgetPropsManager(name,
|
||||||
|
|
||||||
const parser = new Parser();
|
const parser = new Parser();
|
||||||
|
|
||||||
const run = async () => {
|
async function run() {
|
||||||
const aiscript = new Interpreter(createAiScriptEnv({
|
const aiscript = new Interpreter(createAiScriptEnv({
|
||||||
storageKey: 'widget',
|
storageKey: 'widget',
|
||||||
token: $i?.token,
|
token: $i?.token,
|
||||||
|
@ -84,7 +84,7 @@ const run = async () => {
|
||||||
text: err instanceof Error ? err.message : String(err),
|
text: err instanceof Error ? err.message : String(err),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
defineExpose<WidgetComponentExpose>({
|
defineExpose<WidgetComponentExpose>({
|
||||||
name,
|
name,
|
||||||
|
|
Loading…
Reference in New Issue