You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
3.5 KiB
141 lines
3.5 KiB
"use strict";
|
|
const styles = (v = "") => v.split(";").filter((v2) => v2 && !/^[\n\s]+$/.test(v2)).map((v2) => {
|
|
const key = v2.slice(0, v2.indexOf(":"));
|
|
const value = v2.slice(v2.indexOf(":") + 1);
|
|
return {
|
|
[key.replace(/-([a-z])/g, function() {
|
|
return arguments[1].toUpperCase();
|
|
}).replace(/\s+/g, "")]: value.replace(/^\s+/, "").replace(/\s+$/, "") || ""
|
|
};
|
|
});
|
|
function parent(parent2) {
|
|
return {
|
|
provide() {
|
|
return {
|
|
[parent2]: this
|
|
};
|
|
},
|
|
data() {
|
|
return {
|
|
el: {
|
|
css: {},
|
|
views: []
|
|
}
|
|
};
|
|
},
|
|
watch: {
|
|
css: {
|
|
handler(v) {
|
|
if (this.canvasId) {
|
|
this.el.css = (typeof v == "object" ? v : v && Object.assign(...styles(v))) || {};
|
|
this.canvasWidth = this.el.css && this.el.css.width || this.canvasWidth;
|
|
this.canvasHeight = this.el.css && this.el.css.height || this.canvasHeight;
|
|
}
|
|
},
|
|
immediate: true
|
|
}
|
|
}
|
|
};
|
|
}
|
|
function children(parent2, options = {}) {
|
|
options.indexKey || "index";
|
|
return {
|
|
inject: {
|
|
[parent2]: {
|
|
default: null
|
|
}
|
|
},
|
|
watch: {
|
|
el: {
|
|
handler(v, o) {
|
|
if (JSON.stringify(v) != JSON.stringify(o))
|
|
this.bindRelation();
|
|
},
|
|
deep: true,
|
|
immediate: true
|
|
},
|
|
src: {
|
|
handler(v, o) {
|
|
if (v != o)
|
|
this.bindRelation();
|
|
},
|
|
immediate: true
|
|
},
|
|
text: {
|
|
handler(v, o) {
|
|
if (v != o)
|
|
this.bindRelation();
|
|
},
|
|
immediate: true
|
|
},
|
|
css: {
|
|
handler(v, o) {
|
|
if (v != o)
|
|
this.el.css = (typeof v == "object" ? v : v && Object.assign(...styles(v))) || {};
|
|
},
|
|
immediate: true
|
|
},
|
|
replace: {
|
|
handler(v, o) {
|
|
if (JSON.stringify(v) != JSON.stringify(o))
|
|
this.bindRelation();
|
|
},
|
|
deep: true,
|
|
immediate: true
|
|
}
|
|
},
|
|
created() {
|
|
if (!this._uid) {
|
|
this._uid = this._.uid;
|
|
}
|
|
Object.defineProperty(this, "parent", {
|
|
get: () => this[parent2] || []
|
|
});
|
|
Object.defineProperty(this, "index", {
|
|
get: () => {
|
|
this.bindRelation();
|
|
const { parent: { el: { views = [] } = {} } = {} } = this;
|
|
return views.indexOf(this.el);
|
|
}
|
|
});
|
|
this.el.type = this.type;
|
|
this.bindRelation();
|
|
},
|
|
beforeUnmount() {
|
|
this.removeEl();
|
|
},
|
|
methods: {
|
|
removeEl() {
|
|
if (this.parent) {
|
|
this.parent.el.views = this.parent.el.views.filter(
|
|
(item) => item._uid !== this._uid
|
|
);
|
|
}
|
|
},
|
|
bindRelation() {
|
|
if (!this.el._uid) {
|
|
this.el._uid = this._uid;
|
|
}
|
|
if (["text", "qrcode"].includes(this.type)) {
|
|
this.el.text = this.$slots && this.$slots.default && this.$slots.default[0].text || `${this.text || ""}`.replace(/\\n/g, "\n");
|
|
}
|
|
if (this.type == "image") {
|
|
this.el.src = this.src;
|
|
}
|
|
if (!this.parent) {
|
|
return;
|
|
}
|
|
let views = this.parent.el.views || [];
|
|
if (views.indexOf(this.el) !== -1) {
|
|
this.parent.el.views = views.map((v) => v._uid == this._uid ? this.el : v);
|
|
} else {
|
|
this.parent.el.views = [...views, this.el];
|
|
}
|
|
}
|
|
},
|
|
mounted() {
|
|
}
|
|
};
|
|
}
|
|
exports.children = children;
|
|
exports.parent = parent;
|
|
|