| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | const styles = (v ='') =>  v.split(';').filter(v => v && !/^[\n\s]+$/.test(v)).map(v => {						const key = v.slice(0, v.indexOf(':'))						const value = v.slice(v.indexOf(':')+1)						return {							[key								.replace(/-([a-z])/g, function() { return arguments[1].toUpperCase()})								.replace(/\s+/g, '')							]: value.replace(/^\s+/, '').replace(/\s+$/, '') || ''						}					})export function parent(parent) {	return {		provide() {			return {				[parent]: this			}		},		data() {			return {				el: {					id: null,					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			}		}	}}export function children(parent, options = {}) {	const indexKey = options.indexKey || 'index'	return {		inject: {			[parent]: {				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[parent] || [],			})			Object.defineProperty(this, 'index', {				get: () =>  {					this.bindRelation();					const {parent: {el: {views=[]}={}}={}} = this					return views.indexOf(this.el)				},			});			this.el.type = this.type			if(this.uid) {				this.el.uid = this.uid			}			this.bindRelation()		},		// #ifdef VUE3		beforeUnmount() {			this.removeEl()		},		// #endif		// #ifdef VUE2		beforeDestroy() {			this.removeEl()		},		// #endif		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() {			// this.bindRelation()		},	}}
 |