UNPKG

alchemy-widget

Version:

The widget plugin for the AlchemyMVC

111 lines (88 loc) 2.39 kB
/** * The al-widgets element * * @author Jelle De Loecker <jelle@elevenways.be> * @since 0.1.0 * @version 0.2.0 */ let AddArea = Function.inherits('Alchemy.Element.Widget.Base', function WidgetAddArea() { WidgetAddArea.super.call(this); this.innerHTML = ` <div class="main-button"> <button class="add-button widget-button" title="Add"><al-icon icon-name="plus"></al-icon></button> <button class="menu-button widget-button" title="Menu"><al-icon icon-name="grid"></al-icon></button> </div> <div class="widget-types"> TYPES </div> `; }); /** * Show the types to add * * @author Jelle De Loecker <jelle@elevenways.be> * @since 0.1.0 * @version 0.2.0 */ AddArea.setMethod(function showTypes(event) { let that = this; let context_button = document.querySelector('al-widget-context'); if (context_button) { context_button.forceUnselection(); } let context = this.createElement('he-context-menu'); let widgets = Object.values(alchemy.getClassGroup('widgets')).sortByPath(1, 'title'); for (let widget of widgets) { if (!widget.canBeAdded(that.parentElement)) { continue; } context.addEntry({ title : widget.title, icon : null, }, e => { that.parentElement.addWidget(widget.type_name); }); } context.show(event); }); /** * Show the actionbar * * @author Jelle De Loecker <jelle@elevenways.be> * @since 0.1.0 * @version 0.2.0 */ AddArea.setMethod(function showActionbar() { if (!this.actionbar) { this.actionbar = document.createElement('al-widget-actionbar'); this.append(this.actionbar); } if (this.actionbar.context_element == this && !this.actionbar.hidden) { this.actionbar.close(); return; } this.actionbar.hidden = false; this.actionbar.context_element = this; this.actionbar.showWidgetActions(this.parentElement); }); /** * Enable the editor * * @author Jelle De Loecker <jelle@elevenways.be> * @since 0.1.0 * @version 0.1.0 */ AddArea.setMethod(function introduced() { introduced.super.call(this); const that = this; let add_button = this.querySelector('.add-button'); add_button.addEventListener('click', function onClick(e) { e.preventDefault(); that.showTypes(e); }); let context_button = this.querySelector('.menu-button'); context_button.addEventListener('click', function onClick(e) { e.preventDefault(); that.showActionbar(); }); });