From 3d7d34334c11ca8f50a6b6e15e83a9e762272c2e Mon Sep 17 00:00:00 2001 From: kwaroran Date: Wed, 10 Apr 2024 10:34:45 +0900 Subject: [PATCH] Update trigger button functionality and remove unused code --- src/main.ts | 2 -- src/ts/observer.ts | 52 +++++++++++++++++++++++++++++++++++ src/ts/parser.ts | 4 +-- src/ts/plugins/embedscript.ts | 19 ------------- 4 files changed, 54 insertions(+), 23 deletions(-) create mode 100644 src/ts/observer.ts diff --git a/src/main.ts b/src/main.ts index 4139b8b1..fddde13d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,7 +4,6 @@ import App from "./App.svelte"; import { loadData } from "./ts/storage/globalApi"; import { initHotkey } from "./ts/hotkey"; import { polyfill } from "./ts/polyfill"; -import { watchParamButton } from "./ts/plugins/embedscript"; let app: App; try { @@ -16,7 +15,6 @@ try { loadData() initHotkey() - watchParamButton() } catch (error) { console.error(error, error.stack) alert(error) diff --git a/src/ts/observer.ts b/src/ts/observer.ts new file mode 100644 index 00000000..ab61c536 --- /dev/null +++ b/src/ts/observer.ts @@ -0,0 +1,52 @@ +import { get } from "svelte/store"; +import { runTrigger } from "./process/triggers"; +import { CurrentCharacter, CurrentChat } from "./stores"; +import { runCharacterJS } from "./plugins/embedscript"; + + +export function startObserveDom(){ + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + const node = mutation.target as HTMLElement; + const triggerName = node.getAttribute('risu-trigger'); + const btnEvent = node.getAttribute('risu-btn'); + + if(triggerName){ + node.addEventListener('click', async () => { + const currentChar = get(CurrentCharacter) + if(currentChar.type === 'group'){ + return; + } + const triggerResult = await runTrigger(currentChar, 'manual', { + chat: get(CurrentChat), + manualName: triggerName, + }); + + if(triggerResult){ + CurrentChat.set(triggerResult.chat); + } + + }, { + passive: true, + }); + } + + if(btnEvent){ + node.addEventListener('click',async ()=>{ + await runCharacterJS({ + code: null, + mode: 'onButtonClick', + data: btnEvent + }) + }, {passive: true}) + } + + }); + }); + + observer.observe(document.body, { + childList: true, + subtree: true, + attributeFilter: ['risu-trigger', 'risu-btn'], + }); +} \ No newline at end of file diff --git a/src/ts/parser.ts b/src/ts/parser.ts index faebc640..e5943a3a 100644 --- a/src/ts/parser.ts +++ b/src/ts/parser.ts @@ -196,7 +196,7 @@ export async function ParseMarkdown(data:string, charArg:(character|simpleCharac if(db.automark){ return (DOMPurify.sanitize(autoMarkNew(data), { ADD_TAGS: ["iframe", "style", "risu-style", "x-em"], - ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling", "risu-btn"], + ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling", "risu-btn", 'risu-trigger'], })) } else{ @@ -204,7 +204,7 @@ export async function ParseMarkdown(data:string, charArg:(character|simpleCharac data = mconverted.parse(data) return decodeStyle(DOMPurify.sanitize(data, { ADD_TAGS: ["iframe", "style", "risu-style", "x-em"], - ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling", "risu-btn"], + ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling", "risu-btn", 'risu-trigger'], })) } } diff --git a/src/ts/plugins/embedscript.ts b/src/ts/plugins/embedscript.ts index ce139f26..d58d673c 100644 --- a/src/ts/plugins/embedscript.ts +++ b/src/ts/plugins/embedscript.ts @@ -324,23 +324,4 @@ export async function runCharacterJS(arg:{ return arg.data } -} - -export async function watchParamButton() { - while(true){ - const qs = document.querySelectorAll('*[risu-btn]:not([risu-btn-run="true"])') - for(let i = 0; i < qs.length; i++){ - const q = qs[i] - const code = q.getAttribute('risu-btn') - q.setAttribute('risu-btn-run','true') - q.addEventListener('click',async ()=>{ - await runCharacterJS({ - code: null, - mode: 'onButtonClick', - data: code - }) - }) - } - await sleep(100) - } } \ No newline at end of file