hippofish/packages/client/src/components/page/page.button.vue
2023-04-07 17:01:42 -07:00

70 lines
1.5 KiB
Vue

<template>
<div>
<MkButton class="kudkigyw" :primary="block.primary" @click="click()">{{
hpml.interpolate(block.text)
}}</MkButton>
</div>
</template>
<script lang="ts">
import { defineComponent, PropType, unref } from "vue";
import MkButton from "../MkButton.vue";
import * as os from "@/os";
import { ButtonBlock } from "@/scripts/hpml/block";
import { Hpml } from "@/scripts/hpml/evaluator";
export default defineComponent({
components: {
MkButton,
},
props: {
block: {
type: Object as PropType<ButtonBlock>,
required: true,
},
hpml: {
type: Object as PropType<Hpml>,
required: true,
},
},
methods: {
click() {
if (this.block.action === "dialog") {
this.hpml.eval();
os.alert({
text: this.hpml.interpolate(this.block.content),
});
} else if (this.block.action === "resetRandom") {
this.hpml.updateRandomSeed(Math.random());
this.hpml.eval();
} else if (this.block.action === "pushEvent") {
os.api("page-push", {
pageId: this.hpml.page.id,
event: this.block.event,
...(this.block.var
? {
var: unref(this.hpml.vars)[this.block.var],
}
: {}),
});
os.alert({
type: "success",
text: this.hpml.interpolate(this.block.message),
});
} else if (this.block.action === "callAiScript") {
this.hpml.callAiScript(this.block.fn);
}
},
},
});
</script>
<style lang="scss" scoped>
.kudkigyw {
display: inline-block;
min-width: 200px;
max-width: 450px;
margin: 8px 0;
}
</style>