Added button to trigger script

This commit is contained in:
kwaroran
2024-04-10 10:51:34 +09:00
parent 3d7d34334c
commit ff089e658f
4 changed files with 56 additions and 33 deletions

View File

@@ -175,4 +175,8 @@ html, body{
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.x-risu-button-default{
@apply border text-textcolor rounded-md shadow-sm focus:outline-none focus:ring-2 transition-colors duration-200 border-darkborderc px-4 py-2 bg-darkbutton hover:bg-borderc focus:ring-borderc
}

View File

@@ -4,43 +4,59 @@ import { CurrentCharacter, CurrentChat } from "./stores";
import { runCharacterJS } from "./plugins/embedscript";
function nodeObserve(node:HTMLElement){
const triggerName = node.getAttribute('risu-trigger');
const btnEvent = node.getAttribute('risu-btn');
const observerAdded = node.getAttribute('risu-observer');
if(observerAdded){
return
}
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,
});
node.setAttribute('risu-observer', 'true');
return
}
if(btnEvent){
node.addEventListener('click',async ()=>{
await runCharacterJS({
code: null,
mode: 'onButtonClick',
data: btnEvent
})
}, {passive: true})
node.setAttribute('risu-observer', 'true');
return
}
}
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(node.nodeType !== 1){
return;
}
if(btnEvent){
node.addEventListener('click',async ()=>{
await runCharacterJS({
code: null,
mode: 'onButtonClick',
data: btnEvent
})
}, {passive: true})
}
node.querySelectorAll('[risu-trigger]').forEach(nodeObserve);
node.querySelectorAll('[risu-btn]').forEach(nodeObserve);
nodeObserve(node)
});
});
@@ -48,5 +64,6 @@ export function startObserveDom(){
childList: true,
subtree: true,
attributeFilter: ['risu-trigger', 'risu-btn'],
attributes: true,
});
}

View File

@@ -732,7 +732,7 @@ const matcher = (p1:string,matcherArg:matcherArg) => {
return null
}
case 'button':{
return `<button style="padding" x-risu-prompt="${arra[2]}">${arra[1]}</button>`
return `<button class="button-default" risu-trigger="${arra[2]}">${arra[1]}</button>`
}
case 'risu':{
return `<img src="/logo2.png" style="height:${v || 45}px;width:${v || 45}px" />`

View File

@@ -30,6 +30,7 @@ import type { RisuModule } from "../process/modules";
import { listen } from '@tauri-apps/api/event'
import { registerPlugin } from '@capacitor/core';
import { language } from "src/lang";
import { startObserveDom } from "../observer";
//@ts-ignore
export const isTauri = !!window.__TAURI__
@@ -508,6 +509,7 @@ export async function loadData() {
}
loadedStore.set(true)
selectedCharID.set(-1)
startObserveDom()
saveDb()
} catch (error) {
alertError(`${error}`)