mirror of
https://github.com/mdbootstrap/mdb-ui-kit.git
synced 2024-12-03 23:13:45 +03:00
125 lines
3.4 KiB
JavaScript
125 lines
3.4 KiB
JavaScript
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: `<div class="${ClassName.CANVAS}"></div>`
|
|
},
|
|
backdrop: {
|
|
create: true,
|
|
required: true,
|
|
template: `<div class="${ClassName.BACKDROP}"></div>`
|
|
}
|
|
};
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------
|
|
* 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;
|