UNPKG

grapesjs

Version:

Free and Open Source Web Builder Framework

64 lines (54 loc) 1.48 kB
import { isString } from 'underscore'; import { createId } from 'utils/mixins'; export default { getConfig(name) { const res = this.config || {}; return name ? res[name] : res; }, getAll() { return this.all || []; }, getAllMap() { return this.getAll().reduce((acc, i) => { acc[i.get('id')] = i; return acc; }, {}); }, __initListen() { const { all, em, events } = this; all && em && all .on('add', (m, c, o) => em.trigger(events.add, m, o)) .on('remove', (m, c, o) => em.trigger(events.remove, m, o)) .on('change', (p, c) => em.trigger(events.update, p, p.changedAttributes(), c) ) .on('all', this.__catchAllEvent, this); }, __remove(model, opts = {}) { const { em } = this; const md = isString(model) ? this.get(model) : model; const rm = () => { md && this.all.remove(md, opts); return md; }; !opts.silent && em && em.trigger(this.events.removeBefore, md, rm, opts); return !opts.abort && rm(); }, __catchAllEvent(event, model, coll, opts) { const { em, events } = this; const options = opts || coll; em && events.all && em.trigger(events.all, { event, model, options }); }, _createId(len = 16) { const all = this.getAll(); const ln = all.length + len; const allMap = this.getAllMap(); let id; do { id = createId(ln); } while (allMap[id]); return id; } };