From 1febbbb12c8bfb55dda785b8335b32bfb2111e37 Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 15 Feb 2018 01:07:09 +0900 Subject: wip --- src/web/app/common/define-widget.ts | 51 ++++++++++++++++++++++ .../common/views/components/widgets/profile.vue | 5 +++ 2 files changed, 56 insertions(+) create mode 100644 src/web/app/common/define-widget.ts create mode 100644 src/web/app/common/views/components/widgets/profile.vue (limited to 'src') diff --git a/src/web/app/common/define-widget.ts b/src/web/app/common/define-widget.ts new file mode 100644 index 0000000000..9aed5a8902 --- /dev/null +++ b/src/web/app/common/define-widget.ts @@ -0,0 +1,51 @@ +import Vue from 'vue'; + +export default function(data: { + name: string; + props: any; +}) { + return Vue.extend({ + props: { + wid: { + type: String, + required: true + }, + place: { + type: String, + required: true + }, + wprops: { + type: Object, + required: false + } + }, + computed: { + id(): string { + return this.wid; + } + }, + data() { + return { + props: data.props + }; + }, + watch: { + props(newProps, oldProps) { + if (JSON.stringify(newProps) == JSON.stringify(oldProps)) return; + this.$root.$data.os.api('i/update_home', { + id: this.id, + data: newProps + }).then(() => { + this.$root.$data.os.i.client_settings.home.find(w => w.id == this.id).data = newProps; + }); + } + }, + created() { + if (this.props) { + Object.keys(this.wprops).forEach(prop => { + this.props[prop] = this.props.data.hasOwnProperty(prop) ? this.props.data[prop] : this.props[prop]; + }); + } + } + }); +} diff --git a/src/web/app/common/views/components/widgets/profile.vue b/src/web/app/common/views/components/widgets/profile.vue new file mode 100644 index 0000000000..4a22d2391b --- /dev/null +++ b/src/web/app/common/views/components/widgets/profile.vue @@ -0,0 +1,5 @@ + -- cgit v1.2.3-freya