import Base from "./base"; import Util from "./util"; const BaseLayout = ($ => { const ClassName = { CANVAS: "bmd-layout-canvas", CONTAINER: "bmd-layout-container", BACKDROP: `bmd-layout-backdrop` }; const Selector = { CANVAS: `.${ClassName.CANVAS}`, CONTAINER: `.${ClassName.CONTAINER}`, BACKDROP: `.${ClassName.BACKDROP}` }; const Default = { canvas: { create: true, required: true, template: `
` }, backdrop: { create: true, required: true, template: `
` } }; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ class BaseLayout extends Base { constructor($element, config, properties = {}) { super($element, $.extend(true, {}, Default, config), properties); this.$container = this.findContainer(true); this.$backdrop = this.resolveBackdrop(); this.resolveCanvas(); } dispose(dataKey) { super.dispose(dataKey); this.$container = null; this.$backdrop = null; } // ------------------------------------------------------------------------ // protected // Will wrap container in bmd-layout-canvas if necessary resolveCanvas() { let bd = this.findCanvas(false); if (bd === undefined || bd.length === 0) { if (this.config.canvas.create) { this.$container.wrap(this.config.canvas.template); } bd = this.findCanvas(this.config.canvas.required); } return bd; } // Find closest bmd-layout-container based on the given context findCanvas(raiseError = true, context = this.$container) { let canvas = context.closest(Selector.CANVAS); if (canvas.length === 0 && raiseError) { $.error( `Failed to find ${Selector.CANVAS} for ${Util.describe(context)}` ); } return canvas; } // Will add bmd-layout-backdrop to bmd-layout-container if necessary resolveBackdrop() { let bd = this.findBackdrop(false); if (bd === undefined || bd.length === 0) { if (this.config.backdrop.create) { this.$container.append(this.config.backdrop.template); } bd = this.findBackdrop(this.config.backdrop.required); } return bd; } // Find closest bmd-layout-container based on the given context findBackdrop(raiseError = true, context = this.$container) { let backdrop = context.find(`> ${Selector.BACKDROP}`); if (backdrop.length === 0 && raiseError) { $.error( `Failed to find ${Selector.BACKDROP} for ${Util.describe(context)}` ); } return backdrop; } // Find closest bmd-layout-container based on the given context findContainer(raiseError = true, context = this.$element) { let container = context.closest(Selector.CONTAINER); if (container.length === 0 && raiseError) { $.error( `Failed to find ${Selector.CONTAINER} for ${Util.describe(context)}` ); } return container; } // ------------------------------------------------------------------------ // private // ------------------------------------------------------------------------ // static } return BaseLayout; })(jQuery); export default BaseLayout;