grapesjs_codeapps
Version:
Free and Open Source Web Builder Framework/SC Modification
96 lines (81 loc) • 2.14 kB
JavaScript
import { isUndefined } from 'underscore';
module.exports = require('backbone').Model.extend({
defaults: {
type: 'text', // text, number, range, select
label: '',
name: '',
min: '',
max: '',
unit: '',
step: 1,
value: '',
target: '',
default: '',
placeholder: '',
changeProp: 0,
options: []
},
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);
}
},
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;
if (this.get('changeProp')) {
target.set(name, value, opts);
} else {
const attrs = { ...target.get('attributes') };
attrs[name] = value;
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');
}
});