UNPKG

@print-one/grapesjs

Version:

Free and Open Source Web Builder Framework

74 lines (66 loc) 1.89 kB
import { ModuleView } from '../../abstract'; import Panel from '../model/Panel'; import Panels from '../model/Panels'; import PanelView from './PanelView'; export default class PanelsView extends ModuleView<Panels> { constructor(target: Panels) { super({ collection: target }); this.listenTo(target, 'add', this.addTo); this.listenTo(target, 'reset', this.render); this.listenTo(target, 'remove', this.onRemove); this.className = this.pfx + 'panels'; } private onRemove(model: Panel) { const view = model.view; view && view.remove(); } /** * Add to collection * @param Object Model * * @return Object * @private * */ private addTo(model: Panel) { this.addToCollection(model); } /** * Add new object to collection * @param Object Model * @param Object Fragment collection * @param integer Index of append * * @return Object Object created * @private * */ private addToCollection(model: Panel, fragmentEl?: DocumentFragment) { const fragment = fragmentEl || null; const el = model.get('el'); const view = new PanelView(model); const rendered = view.render().el; const appendTo = model.get('appendTo'); // Do nothing if the panel was requested to be another element if (el) { } else if (appendTo) { const appendEl = document.querySelector(appendTo); appendEl?.appendChild(rendered); } else { if (fragment) { fragment.appendChild(rendered); } else { this.$el.append(rendered); } } view.initResize(); return rendered; } public render() { const $el = this.$el; const frag = document.createDocumentFragment(); $el.empty(); this.collection.each(model => this.addToCollection(model, frag)); $el.append(frag); $el.attr('class', this.className); return this; } }