From ea6aa40b09a010c4ac5549d57d6a3cfee87c7d9b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 27 Dec 2020 23:13:01 +0900
Subject: Add button widget

---
 src/client/widgets/button.vue | 94 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100644 src/client/widgets/button.vue

(limited to 'src/client/widgets/button.vue')

diff --git a/src/client/widgets/button.vue b/src/client/widgets/button.vue
new file mode 100644
index 0000000000..db247d36b5
--- /dev/null
+++ b/src/client/widgets/button.vue
@@ -0,0 +1,94 @@
+<template>
+<div class="mkw-button">
+	<MkButton :primary="props.colored" full @click="run">
+		{{ props.label }}
+	</MkButton>
+</div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import define from './define';
+import MkButton from '@/components/ui/button.vue';
+import * as os from '@/os';
+import { AiScript, parse, utils } from '@syuilo/aiscript';
+import { createAiScriptEnv } from '@/scripts/aiscript/api';
+
+const widget = define({
+	name: 'button',
+	props: () => ({
+		label: {
+			type: 'string',
+			default: 'BUTTON',
+		},
+		colored: {
+			type: 'boolean',
+			default: true,
+		},
+		script: {
+			type: 'string',
+			multiline: true,
+			default: 'Mk:dialog("hello" "world")',
+		},
+	})
+});
+
+export default defineComponent({
+	components: {
+		MkButton
+	},
+	extends: widget,
+	data() {
+		return {
+		};
+	},
+	methods: {
+		async run() {
+			const aiscript = new AiScript(createAiScriptEnv({
+				storageKey: 'scratchpad'
+			}), {
+				in: (q) => {
+					return new Promise(ok => {
+						os.dialog({
+							title: q,
+							input: {}
+						}).then(({ canceled, result: a }) => {
+							ok(a);
+						});
+					});
+				},
+				out: (value) => {
+					// nop
+				},
+				log: (type, params) => {
+					// nop
+				}
+			});
+
+			let ast;
+			try {
+				ast = parse(this.props.script);
+			} catch (e) {
+				os.dialog({
+					type: 'error',
+					text: 'Syntax error :('
+				});
+				return;
+			}
+			try {
+				await aiscript.exec(ast);
+			} catch (e) {
+				os.dialog({
+					type: 'error',
+					text: e
+				});
+			}
+		},
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+.mkw-button {
+}
+</style>
-- 
cgit v1.2.3-freya

