"use strict"; // Class definition var KTBlockUI = function(element, options) { ////////////////////////////// // ** Private variables ** // ////////////////////////////// var the = this; if ( typeof element === "undefined" || element === null ) { return; } // Default options var defaultOptions = { zIndex: false, overlayClass: '', overflow: 'hidden', message: '' }; //////////////////////////// // ** Private methods ** // //////////////////////////// var _construct = function() { if ( KTUtil.data(element).has('blockui') ) { the = KTUtil.data(element).get('blockui'); } else { _init(); } } var _init = function() { // Variables the.options = KTUtil.deepExtend({}, defaultOptions, options); the.element = element; the.overlayElement = null; the.blocked = false; the.positionChanged = false; the.overflowChanged = false; // Bind Instance KTUtil.data(the.element).set('blockui', the); } var _block = function() { if ( KTEventHandler.trigger(the.element, 'kt.blockui.block', the) === false ) { return; } var isPage = (the.element.tagName === 'BODY'); var position = KTUtil.css(the.element, 'position'); var overflow = KTUtil.css(the.element, 'overflow'); var zIndex = isPage ? 10000 : 1; if (the.options.zIndex > 0) { zIndex = the.options.zIndex; } else { if (KTUtil.css(the.element, 'z-index') != 'auto') { zIndex = KTUtil.css(the.element, 'z-index'); } } the.element.classList.add('blockui'); if (position === "absolute" || position === "relative" || position === "fixed") { KTUtil.css(the.element, 'position', 'relative'); the.positionChanged = true; } if (the.options.overflow === 'hidden' && overflow === 'visible') { KTUtil.css(the.element, 'overflow', 'hidden'); the.overflowChanged = true; } the.overlayElement = document.createElement('DIV'); the.overlayElement.setAttribute('class', 'blockui-overlay ' + the.options.overlayClass); the.overlayElement.innerHTML = the.options.message; KTUtil.css(the.overlayElement, 'z-index', zIndex); the.element.append(the.overlayElement); the.blocked = true; KTEventHandler.trigger(the.element, 'kt.blockui.after.blocked', the) } var _release = function() { if ( KTEventHandler.trigger(the.element, 'kt.blockui.release', the) === false ) { return; } the.element.classList.add('blockui'); if (the.positionChanged) { KTUtil.css(the.element, 'position', ''); } if (the.overflowChanged) { KTUtil.css(the.element, 'overflow', ''); } if (the.overlayElement) { KTUtil.remove(the.overlayElement); } the.blocked = false; KTEventHandler.trigger(the.element, 'kt.blockui.released', the); } var _isBlocked = function() { return the.blocked; } var _destroy = function() { KTUtil.data(the.element).remove('blockui'); } // Construct class _construct(); /////////////////////// // ** Public API ** // /////////////////////// // Plugin API the.block = function() { _block(); } the.release = function() { _release(); } the.isBlocked = function() { return _isBlocked(); } the.destroy = function() { return _destroy(); } // Event API the.on = function(name, handler) { return KTEventHandler.on(the.element, name, handler); } the.one = function(name, handler) { return KTEventHandler.one(the.element, name, handler); } the.off = function(name, handlerId) { return KTEventHandler.off(the.element, name, handlerId); } the.trigger = function(name, event) { return KTEventHandler.trigger(the.element, name, event, the, event); } }; // Static methods KTBlockUI.getInstance = function(element) { if (element !== null && KTUtil.data(element).has('blockui')) { return KTUtil.data(element).get('blockui'); } else { return null; } } // Webpack support if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { module.exports = KTBlockUI; }