mirror of https://github.com/artf/grapesjs.git
4 changed files with 77 additions and 41 deletions
@ -1,37 +1,69 @@ |
|||||
import Property from './Property'; |
import Property from './Property'; |
||||
|
|
||||
export default Property.extend({ |
export default class PropertyRadio extends Property { |
||||
defaults: () => ({ |
defaults() { |
||||
...Property.prototype.defaults, |
return { |
||||
// Array of options, eg. [{name: 'Label ', value: '100'}]
|
...Property.prototype.defaults, |
||||
options: [], |
options: [], // Array of options, eg. [{ id: '100', label: 'Set 100' }]
|
||||
full: 1 |
full: 1 |
||||
}), |
}; |
||||
|
} |
||||
initialize(...args) { |
|
||||
Property.prototype.initialize.apply(this, args); |
|
||||
this.listenTo(this, 'change:options', this.onOptionChange); |
|
||||
}, |
|
||||
|
|
||||
onOptionChange() { |
|
||||
this.set('list', this.get('options')); |
|
||||
}, |
|
||||
|
|
||||
|
/** |
||||
|
* Get available options. |
||||
|
* @returns {Array<Object>} Array of options |
||||
|
*/ |
||||
getOptions() { |
getOptions() { |
||||
|
// support old list property
|
||||
const { options, list } = this.attributes; |
const { options, list } = this.attributes; |
||||
return options && options.length ? options : list; |
return options && options.length ? options : list; |
||||
}, |
} |
||||
|
|
||||
setOptions(opts = []) { |
/** |
||||
this.set('options', opts); |
* Update options. |
||||
|
* @param {Array<Object>} value Array of options, eg. `[{ id: 'val-1', label: 'Value 1' }]` |
||||
|
*/ |
||||
|
setOptions(value = []) { |
||||
|
this.set('options', value); |
||||
return this; |
return this; |
||||
}, |
} |
||||
|
|
||||
addOption(opt) { |
/** |
||||
if (opt) { |
* Add new option. |
||||
|
* @param {Object} value Option object, eg. `{ id: 'val-1', label: 'Value 1' }` |
||||
|
*/ |
||||
|
addOption(value) { |
||||
|
if (value) { |
||||
const opts = this.getOptions(); |
const opts = this.getOptions(); |
||||
this.setOptions([...opts, opt]); |
this.setOptions([...opts, value]); |
||||
} |
} |
||||
return this; |
return this; |
||||
} |
} |
||||
}); |
|
||||
|
/** |
||||
|
* Get option label. |
||||
|
* @param {String} id Option id |
||||
|
* @param {Object} [opts={}] Options |
||||
|
* @param {Boolean} [opts.locale=true] Use the locale string from i18n module |
||||
|
* @returns {String} Option label |
||||
|
*/ |
||||
|
getOptionLabel(id, opts = {}) { |
||||
|
const { locale = true } = opts; |
||||
|
const options = this.getOptions(); |
||||
|
const option = options.filter(o => o.id === id || o.value === id)[0] || {}; |
||||
|
const label = option.label || option.name || id; |
||||
|
const propId = this.getId(); |
||||
|
return ( |
||||
|
(locale && this.em?.t(`styleManager.options.${propId}.${id}`)) || label |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
initialize(...args) { |
||||
|
Property.prototype.initialize.apply(this, args); |
||||
|
this.listenTo(this, 'change:options', this.__onOptionChange); |
||||
|
} |
||||
|
|
||||
|
__onOptionChange() { |
||||
|
this.set('list', this.get('options')); |
||||
|
} |
||||
|
} |
||||
|
|||||
Loading…
Reference in new issue