mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-12-24 03:33:09 +02:00
feat(client): Improve pages aiscript
This commit is contained in:
parent
63225ed0fd
commit
a19e252c9e
6 changed files with 61 additions and 37 deletions
|
@ -42,7 +42,7 @@
|
||||||
"@koa/cors": "3.0.0",
|
"@koa/cors": "3.0.0",
|
||||||
"@koa/multer": "2.0.2",
|
"@koa/multer": "2.0.2",
|
||||||
"@koa/router": "8.0.8",
|
"@koa/router": "8.0.8",
|
||||||
"@syuilo/aiscript": "0.1.4",
|
"@syuilo/aiscript": "0.2.0",
|
||||||
"@types/bcryptjs": "2.4.2",
|
"@types/bcryptjs": "2.4.2",
|
||||||
"@types/bull": "3.12.1",
|
"@types/bull": "3.12.1",
|
||||||
"@types/cbor": "5.0.0",
|
"@types/cbor": "5.0.0",
|
||||||
|
|
|
@ -26,7 +26,7 @@ class Script {
|
||||||
this.aoiScript = aoiScript;
|
this.aoiScript = aoiScript;
|
||||||
this.onError = onError;
|
this.onError = onError;
|
||||||
|
|
||||||
if (this.page.script) {
|
if (this.page.script && this.aoiScript.aiscript) {
|
||||||
let ast;
|
let ast;
|
||||||
try {
|
try {
|
||||||
ast = parse(this.page.script);
|
ast = parse(this.page.script);
|
||||||
|
@ -49,8 +49,10 @@ class Script {
|
||||||
});*/
|
});*/
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.eval();
|
setTimeout(() => {
|
||||||
cb();
|
this.eval();
|
||||||
|
cb();
|
||||||
|
}, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +73,7 @@ class Script {
|
||||||
}
|
}
|
||||||
|
|
||||||
public callAiScript(fn: string) {
|
public callAiScript(fn: string) {
|
||||||
this.aoiScript.aiscript.execFn(this.aoiScript.aiscript.scope.get(fn), []);
|
if (this.aoiScript.aiscript) this.aoiScript.aiscript.execFn(this.aoiScript.aiscript.scope.get(fn), []);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,18 +105,23 @@ export default Vue.extend({
|
||||||
randomSeed: Math.random(),
|
randomSeed: Math.random(),
|
||||||
visitor: this.$store.state.i,
|
visitor: this.$store.state.i,
|
||||||
page: this.page,
|
page: this.page,
|
||||||
url: url
|
url: url,
|
||||||
|
enableAiScript: !this.$store.state.device.disablePagesScript
|
||||||
}), e => {
|
}), e => {
|
||||||
console.dir(e);
|
console.dir(e);
|
||||||
}, () => {
|
}, () => {
|
||||||
this.script = s;
|
this.script = s;
|
||||||
});
|
});
|
||||||
|
|
||||||
s.aoiScript.aiscript.scope.opts.onUpdated = (name, value) => {
|
if (s.aoiScript.aiscript) s.aoiScript.aiscript.scope.opts.onUpdated = (name, value) => {
|
||||||
s.eval();
|
s.eval();
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
beforeDestroy() {
|
||||||
|
if (this.script.aoiScript.aiscript) this.script.aoiScript.aiscript.abort();
|
||||||
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
getPageVars() {
|
getPageVars() {
|
||||||
return collectPageVars(this.page.content);
|
return collectPageVars(this.page.content);
|
||||||
|
|
|
@ -65,6 +65,7 @@
|
||||||
<template #desc><mfm text="🍮🍦🍭🍩🍰🍫🍬🥞🍪"/></template>
|
<template #desc><mfm text="🍮🍦🍭🍩🍰🍫🍬🥞🍪"/></template>
|
||||||
</mk-switch>
|
</mk-switch>
|
||||||
<mk-switch v-model="showFixedPostForm">{{ $t('showFixedPostForm') }}</mk-switch>
|
<mk-switch v-model="showFixedPostForm">{{ $t('showFixedPostForm') }}</mk-switch>
|
||||||
|
<mk-switch v-model="disablePagesScript">{{ $t('disablePagesScript') }}</mk-switch>
|
||||||
</div>
|
</div>
|
||||||
<div class="_content">
|
<div class="_content">
|
||||||
<mk-select v-model="lang">
|
<mk-select v-model="lang">
|
||||||
|
@ -171,6 +172,11 @@ export default Vue.extend({
|
||||||
set(value) { this.$store.commit('device/set', { key: 'imageNewTab', value }); }
|
set(value) { this.$store.commit('device/set', { key: 'imageNewTab', value }); }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
disablePagesScript: {
|
||||||
|
get() { return this.$store.state.device.disablePagesScript; },
|
||||||
|
set(value) { this.$store.commit('device/set', { key: 'disablePagesScript', value }); }
|
||||||
|
},
|
||||||
|
|
||||||
showFixedPostForm: {
|
showFixedPostForm: {
|
||||||
get() { return this.$store.state.device.showFixedPostForm; },
|
get() { return this.$store.state.device.showFixedPostForm; },
|
||||||
set(value) { this.$store.commit('device/set', { key: 'showFixedPostForm', value }); }
|
set(value) { this.$store.commit('device/set', { key: 'showFixedPostForm', value }); }
|
||||||
|
|
|
@ -17,41 +17,45 @@ export class ASEvaluator {
|
||||||
private variables: Variable[];
|
private variables: Variable[];
|
||||||
private pageVars: PageVar[];
|
private pageVars: PageVar[];
|
||||||
private envVars: Record<keyof typeof envVarsDef, any>;
|
private envVars: Record<keyof typeof envVarsDef, any>;
|
||||||
public aiscript: AiScript;
|
public aiscript: AiScript | undefined;
|
||||||
private pageVarUpdatedCallback;
|
private pageVarUpdatedCallback;
|
||||||
|
|
||||||
private opts: {
|
private opts: {
|
||||||
randomSeed: string; visitor?: any; page?: any; url?: string;
|
randomSeed: string; visitor?: any; page?: any; url?: string;
|
||||||
|
enableAiScript: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(vm: any, variables: Variable[], pageVars: PageVar[], opts: ASEvaluator['opts']) {
|
constructor(vm: any, variables: Variable[], pageVars: PageVar[], opts: ASEvaluator['opts']) {
|
||||||
this.variables = variables;
|
this.variables = variables;
|
||||||
this.pageVars = pageVars;
|
this.pageVars = pageVars;
|
||||||
this.opts = opts;
|
this.opts = opts;
|
||||||
this.aiscript = new AiScript({ ...createAiScriptEnv(vm, {
|
|
||||||
storageKey: 'pages:' + opts.page.id
|
if (this.opts.enableAiScript) {
|
||||||
}), ...{
|
this.aiscript = new AiScript({ ...createAiScriptEnv(vm, {
|
||||||
'MkPages:updated': values.FN_NATIVE(([callback]) => {
|
storageKey: 'pages:' + opts.page.id
|
||||||
this.pageVarUpdatedCallback = callback;
|
}), ...{
|
||||||
})
|
'MkPages:updated': values.FN_NATIVE(([callback]) => {
|
||||||
}}, {
|
this.pageVarUpdatedCallback = callback;
|
||||||
in: (q) => {
|
})
|
||||||
return new Promise(ok => {
|
}}, {
|
||||||
vm.$root.dialog({
|
in: (q) => {
|
||||||
title: q,
|
return new Promise(ok => {
|
||||||
input: {}
|
vm.$root.dialog({
|
||||||
}).then(({ canceled, result: a }) => {
|
title: q,
|
||||||
ok(a);
|
input: {}
|
||||||
|
}).then(({ canceled, result: a }) => {
|
||||||
|
ok(a);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
},
|
||||||
},
|
out: (value) => {
|
||||||
out: (value) => {
|
console.log(value);
|
||||||
console.log(value);
|
},
|
||||||
},
|
log: (type, params) => {
|
||||||
log: (type, params) => {
|
},
|
||||||
},
|
maxStep: 16384
|
||||||
maxStep: 16384
|
});
|
||||||
});
|
}
|
||||||
|
|
||||||
const date = new Date();
|
const date = new Date();
|
||||||
|
|
||||||
|
@ -79,7 +83,7 @@ export class ASEvaluator {
|
||||||
if (pageVar !== undefined) {
|
if (pageVar !== undefined) {
|
||||||
pageVar.value = value;
|
pageVar.value = value;
|
||||||
if (this.pageVarUpdatedCallback) {
|
if (this.pageVarUpdatedCallback) {
|
||||||
this.aiscript.execFn(this.pageVarUpdatedCallback, [values.STR(name), utils.jsToVal(value)]);
|
if (this.aiscript) this.aiscript.execFn(this.pageVarUpdatedCallback, [values.STR(name), utils.jsToVal(value)]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new AoiScriptError(`No such page var '${name}'`);
|
throw new AoiScriptError(`No such page var '${name}'`);
|
||||||
|
@ -142,7 +146,11 @@ export class ASEvaluator {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (block.type === 'aiScriptVar') {
|
if (block.type === 'aiScriptVar') {
|
||||||
return utils.valToJs(this.aiscript.scope.get(block.value));
|
if (this.aiscript) {
|
||||||
|
return utils.valToJs(this.aiscript.scope.get(block.value));
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFnBlock(block)) { // ユーザー関数定義
|
if (isFnBlock(block)) { // ユーザー関数定義
|
||||||
|
|
|
@ -42,6 +42,7 @@ const defaultDeviceSettings = {
|
||||||
animatedMfm: true,
|
animatedMfm: true,
|
||||||
imageNewTab: false,
|
imageNewTab: false,
|
||||||
showFixedPostForm: false,
|
showFixedPostForm: false,
|
||||||
|
disablePagesScript: true,
|
||||||
sfxVolume: 0.3,
|
sfxVolume: 0.3,
|
||||||
sfxNote: 'syuilo/down',
|
sfxNote: 'syuilo/down',
|
||||||
sfxNoteMy: 'syuilo/up',
|
sfxNoteMy: 'syuilo/up',
|
||||||
|
|
10
yarn.lock
10
yarn.lock
|
@ -144,13 +144,15 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
type-detect "4.0.8"
|
type-detect "4.0.8"
|
||||||
|
|
||||||
"@syuilo/aiscript@0.1.4":
|
"@syuilo/aiscript@0.2.0":
|
||||||
version "0.1.4"
|
version "0.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@syuilo/aiscript/-/aiscript-0.1.4.tgz#ff027552f32990ae3e29145ce6efe0a7a516b442"
|
resolved "https://registry.yarnpkg.com/@syuilo/aiscript/-/aiscript-0.2.0.tgz#dcb489bca13f6d965ac86034a45fd46514b1487a"
|
||||||
integrity sha512-SMDlBInsGTL3DOe0U394X7na0N6ryYg0RGQPPtCVhXkJpVDZiaqUe5vDO+DkRyuRlkmBbN82LWToou19j/Uv8g==
|
integrity sha512-N9fYchn3zjtniG9fNmZ81PwYZFdulk+RSBcjDZWBgHsFJQc1wxOCr9hZux/vSXrZ/ZWEzK0loNz1dorl2jJLeA==
|
||||||
dependencies:
|
dependencies:
|
||||||
|
"@types/seedrandom" "2.4.28"
|
||||||
autobind-decorator "2.4.0"
|
autobind-decorator "2.4.0"
|
||||||
chalk "4.0.0"
|
chalk "4.0.0"
|
||||||
|
seedrandom "3.0.5"
|
||||||
uuid "7.0.3"
|
uuid "7.0.3"
|
||||||
|
|
||||||
"@tokenizer/token@^0.1.0", "@tokenizer/token@^0.1.1":
|
"@tokenizer/token@^0.1.0", "@tokenizer/token@^0.1.1":
|
||||||
|
|
Loading…
Reference in a new issue