UNPKG

drapcode-builder

Version:

Drapcode Builder Library

115 lines (98 loc) 2.48 kB
import Backbone from "backbone"; import { isUndefined } from "underscore"; export default Backbone.Model.extend({ defaults: { type: "text", // text, number, range, select label: "", name: "", min: "", max: "", unit: "", step: 1, value: "", target: "", default: "", placeholder: "", changeProp: 0, options: [], title: "", info: "", infoStyle: "" }, initialize() { const target = this.get("target"); const name = this.get("name"); const changeProp = this.get("changeProp"); if (target) { this.target = target; this.unset("target"); const targetEvent = changeProp ? `change:${name}` : `change:attributes:${name}`; this.listenTo(target, targetEvent, this.targetUpdated); } }, /** * Return all the propeties * @returns {Object} */ props() { return this.attributes; }, targetUpdated() { const value = this.getTargetValue(); this.set({ value }, { fromTarget: 1 }); }, getTargetValue() { const name = this.get("name"); const target = this.target; let value; if (this.get("changeProp")) { value = target.get(name); } else { value = target.getAttributes()[name]; } return !isUndefined(value) ? value : ""; }, setTargetValue(value, opts = {}) { const target = this.target; const name = this.get("name"); if (isUndefined(value)) return; let valueToSet = value; if (value === "false") { valueToSet = false; } else if (value === "true") { valueToSet = true; } if (this.get("changeProp")) { target.set(name, valueToSet, opts); } else { const attrs = { ...target.get("attributes") }; attrs[name] = valueToSet; target.set("attributes", attrs, opts); } }, setValueFromInput(value, final = 1, opts = {}) { const toSet = { value }; this.set(toSet, { ...opts, avoidStore: 1 }); // Have to trigger the change if (final) { this.set("value", "", opts); this.set(toSet, opts); } }, /** * Get the initial value of the trait * @return {string} */ getInitValue() { const target = this.target; const name = this.get("name"); let value; if (target) { const attrs = target.get("attributes"); value = this.get("changeProp") ? target.get(name) : attrs[name]; } return value || this.get("value") || this.get("default"); } });