dialog.js000064400000052644150732377330006366 0ustar00/*! * Dialogs Manager v4.9.4 * https://github.com/kobizz/dialogs-manager * * Copyright Kobi Zaltzberg * Released under the MIT license * https://github.com/kobizz/dialogs-manager/blob/master/LICENSE.txt */ (function($, global) { 'use strict'; /* * Dialog Manager */ var DialogsManager = { widgetsTypes: {}, createWidgetType: function(typeName, properties, Parent) { if (!Parent) { Parent = this.Widget; } var WidgetType = function() { Parent.apply(this, arguments); }; var prototype = WidgetType.prototype = new Parent(typeName); prototype.types = prototype.types.concat([typeName]); $.extend(prototype, properties); prototype.constructor = WidgetType; WidgetType.extend = function(typeName, properties) { return DialogsManager.createWidgetType(typeName, properties, WidgetType); }; return WidgetType; }, addWidgetType: function(typeName, properties, Parent) { if (properties && properties.prototype instanceof this.Widget) { return this.widgetsTypes[typeName] = properties; } return this.widgetsTypes[typeName] = this.createWidgetType(typeName, properties, Parent); }, getWidgetType: function(widgetType) { return this.widgetsTypes[widgetType]; } }; /* * Dialog Manager instances constructor */ DialogsManager.Instance = function() { var self = this, elements = {}, settings = {}; self.openDialogs = []; var initElements = function() { elements.body = $('body'); }; var initSettings = function(options) { var defaultSettings = { classPrefix: 'dialog', effects: { show: 'fadeIn', hide: 'fadeOut' } }; $.extend(settings, defaultSettings, options); }; this.createWidget = function(widgetType, properties) { var WidgetTypeConstructor = DialogsManager.getWidgetType(widgetType), widget = new WidgetTypeConstructor(widgetType); properties = properties || {}; widget.init(self, properties); return widget; }; this.getSettings = function(property) { if (property) { return settings[property]; } return Object.create(settings); }; this.maybeLoadAssets = async function () { const isFrontend = !! window.elementorFrontend?.utils?.assetsLoader; if ( ! isFrontend ) { return; } try { await elementorFrontend.utils.assetsLoader.load( 'style', 'dialog' ); } catch ( error ) { console.error( 'Failed to load assets:', error ); } }; this.init = function (settings) { this.maybeLoadAssets(); initSettings(settings); initElements(); return self; }; self.init(); }; /* * Widget types constructor */ DialogsManager.Widget = function(widgetName) { var self = this, settings = {}, events = {}, elements = {}, hideTimeOut = 0, baseClosureMethods = ['refreshPosition']; var bindEvents = function() { var windows = [elements.window]; if (elements.iframe) { windows.push(jQuery(elements.iframe[0].contentWindow)); } windows.forEach(function(window) { if (settings.hide.onEscKeyPress) { window.on('keyup', onWindowKeyUp); } if (settings.hide.onOutsideClick) { window[0].addEventListener('click', hideOnOutsideClick, true); } if (settings.hide.onOutsideContextMenu) { window[0].addEventListener('contextmenu', hideOnOutsideClick, true); } if (settings.position.autoRefresh) { window.on('resize', self.refreshPosition); } }); if (settings.hide.onClick || settings.hide.onBackgroundClick) { elements.widget.on('click', hideOnClick); } }; var callEffect = function(intent, params) { var effect = settings.effects[intent], $widget = elements.widget; if ('function' === typeof effect) { effect.apply($widget, params); } else { if ($widget[effect]) { $widget[effect].apply($widget, params); } else { throw 'Reference Error: The effect ' + effect + ' not found'; } } }; var ensureClosureMethods = function() { var closureMethodsNames = baseClosureMethods.concat(self.getClosureMethods()); $.each(closureMethodsNames, function() { var methodName = this, oldMethod = self[methodName]; self[methodName] = function() { oldMethod.apply(self, arguments); }; }); }; var fixIframePosition = function(position) { if (! position.my) { return; } var horizontalOffsetRegex = /left|right/, extraOffsetRegex = /([+-]\d+)?$/, iframeOffset = elements.iframe.offset(), iframeWindow = elements.iframe[0].contentWindow, myParts = position.my.split(' '), fixedParts = []; if (myParts.length === 1) { if (horizontalOffsetRegex.test(myParts[0])) { myParts.push('center'); } else { myParts.unshift('center'); } } myParts.forEach(function(part, index) { var fixedPart = part.replace(extraOffsetRegex, function(partOffset) { partOffset = +partOffset || 0; if (! index) { partOffset += iframeOffset.left - iframeWindow.scrollX; } else { partOffset += iframeOffset.top - iframeWindow.scrollY; } if (partOffset >= 0) { partOffset = '+' + partOffset; } return partOffset; }); fixedParts.push(fixedPart); }); position.my = fixedParts.join(' '); }; var hideOnClick = function(event) { if (isContextMenuClickEvent(event)) { return; } if (settings.hide.onClick) { if ($(event.target).closest(settings.selectors.preventClose).length) { return; } } else if (event.target !== this) { return; } self.hide(); }; var isIgnoredTarget = function(event) { if (! settings.hide.ignore) { return false; } return !! $(event.target).closest(settings.hide.ignore).length; }; var hideOnOutsideClick = function(event) { if (isContextMenuClickEvent(event) || $(event.target).closest(elements.widget).length || isIgnoredTarget(event)) { return; } self.hide(); }; var initElements = function() { self.addElement('widget'); self.addElement('header'); self.addElement('message'); self.addElement('window', window); self.addElement('body', document.body); self.addElement('container', settings.container); if (settings.iframe) { self.addElement('iframe', settings.iframe); } if (settings.closeButton) { if ( settings.closeButtonClass ) { // Backwards compatibility settings.closeButtonOptions.iconClass = settings.closeButtonClass; } const $button = $('', settings.closeButtonOptions.attributes), $buttonIcon = $(settings.closeButtonOptions.iconElement).addClass(settings.closeButtonOptions.iconClass); $button.append($buttonIcon); self.addElement('closeButton', $button); } var id = self.getSettings('id'); if (id) { self.setID(id); } var classes = []; $.each(self.types, function() { classes.push(settings.classes.globalPrefix + '-type-' + this); }); classes.push(self.getSettings('className')); elements.widget .addClass(classes.join(' ')) .attr({ 'aria-modal': true, 'role': 'document', 'tabindex': 0, }); }; var initSettings = function(parent, userSettings) { var parentSettings = $.extend(true, {}, parent.getSettings()); settings = { headerMessage: '', message: '', effects: parentSettings.effects, classes: { globalPrefix: parentSettings.classPrefix, prefix: parentSettings.classPrefix + '-' + widgetName, preventScroll: parentSettings.classPrefix + '-prevent-scroll', }, selectors: { preventClose: '.' + parentSettings.classPrefix + '-prevent-close', }, container: 'body', preventScroll: false, iframe: null, closeButton: false, closeButtonOptions: { iconClass: parentSettings.classPrefix + '-close-button-icon', attributes: { role: 'button', 'tabindex': 0, 'aria-label': 'Close', href: '#', }, iconElement: '', }, position: { element: 'widget', my: 'center', at: 'center', enable: true, autoRefresh: false, }, hide: { auto: false, autoDelay: 5000, onClick: false, onOutsideClick: true, onOutsideContextMenu: false, onBackgroundClick: true, onEscKeyPress: true, ignore: '', }, }; $.extend(true, settings, self.getDefaultSettings(), userSettings); initSettingsEvents(); }; var initSettingsEvents = function() { $.each(settings, function(settingKey) { var eventName = settingKey.match(/^on([A-Z].*)/); if (!eventName) { return; } eventName = eventName[1].charAt(0).toLowerCase() + eventName[1].slice(1); self.on(eventName, this); }); }; var isContextMenuClickEvent = function(event) { // Firefox fires `click` event on every `contextmenu` event. return event.type === 'click' && event.button === 2; }; var normalizeClassName = function(name) { return name.replace(/([a-z])([A-Z])/g, function() { return arguments[1] + '-' + arguments[2].toLowerCase(); }); }; var onWindowKeyUp = function(event) { var ESC_KEY = 27, keyCode = event.which; if (ESC_KEY === keyCode) { self.hide(); } }; var unbindEvents = function() { var windows = [elements.window]; if (elements.iframe) { windows.push(jQuery(elements.iframe[0].contentWindow)); } windows.forEach(function(window) { if (settings.hide.onEscKeyPress) { window.off('keyup', onWindowKeyUp); } if (settings.hide.onOutsideClick) { window[0].removeEventListener('click', hideOnOutsideClick, true); } if (settings.hide.onOutsideContextMenu) { window[0].removeEventListener('contextmenu', hideOnOutsideClick, true); } if (settings.position.autoRefresh) { window.off('resize', self.refreshPosition); } }); if (settings.hide.onClick || settings.hide.onBackgroundClick) { elements.widget.off('click', hideOnClick); } }; this.addElement = function(name, element, classes) { var $newElement = elements[name] = $(element || '
'), normalizedName = normalizeClassName(name); classes = classes ? classes + ' ' : ''; classes += settings.classes.globalPrefix + '-' + normalizedName; classes += ' ' + settings.classes.prefix + '-' + normalizedName; $newElement.addClass(classes); return $newElement; }; this.destroy = function() { const widgetId = self.getElements('widget')?.attr('id'), index = self.parent.openDialogs.lastIndexOf(widgetId); if (index !== -1) { self.parent.openDialogs.splice(index, 1); } unbindEvents(); elements.widget.remove(); self.trigger('destroy'); return self; }; this.getElements = function(item) { return item ? elements[item] : elements; }; this.getSettings = function(setting) { var copy = Object.create(settings); if (setting) { return copy[setting]; } return copy; }; this.hide = function() { if (! self.isVisible()) { return; } const widgetId = self.getElements('widget')?.attr('id'), openDialogs = self.parent.openDialogs, topDialogId = openDialogs[openDialogs.length - 1]; if (topDialogId !== widgetId) { return; } openDialogs.pop(); clearTimeout(hideTimeOut); callEffect('hide', arguments); unbindEvents(); if (settings.preventScroll) { self.getElements('body').removeClass(settings.classes.preventScroll); } self.trigger('hide'); return self; }; this.init = function(parent, properties) { if (!(parent instanceof DialogsManager.Instance)) { throw 'The ' + self.widgetName + ' must to be initialized from an instance of DialogsManager.Instance'; } self.parent = parent; ensureClosureMethods(); self.trigger('init', properties); initSettings(parent, properties); initElements(); self.buildWidget(); self.attachEvents(); self.trigger('ready'); return self; }; this.isVisible = function() { return elements.widget.is(':visible'); }; this.on = function(eventName, callback) { if ('object' === typeof eventName) { $.each(eventName, function(singleEventName) { self.on(singleEventName, this); }); return self; } var eventNames = eventName.split(' '); eventNames.forEach(function(singleEventName) { if (!events[singleEventName]) { events[singleEventName] = []; } events[singleEventName].push(callback); }); return self; }; this.off = function(eventName, callback) { if (! events[ eventName ]) { return self; } if (! callback) { delete events[eventName]; return self; } var callbackIndex = events[eventName].indexOf(callback); if (-1 !== callbackIndex) { events[eventName].splice(callbackIndex, 1); } return self; }; this.refreshPosition = function() { if (! settings.position.enable) { return; } var position = $.extend({}, settings.position); if (elements[position.of]) { position.of = elements[position.of]; } if (! position.of) { position.of = window; } if (settings.iframe) { fixIframePosition(position); } elements[position.element].position(position); }; this.setID = function(id) { elements.widget.attr('id', id); return self; }; this.setHeaderMessage = function(message) { self.getElements('header').html(message); return self; }; this.setMessage = function(message) { elements.message.html(message); return self; }; this.setSettings = function(key, value) { if (jQuery.isPlainObject(value)) { $.extend(true, settings[key], value); } else { settings[key] = value; } return self; }; this.show = function() { clearTimeout(hideTimeOut); elements.widget.appendTo(elements.container).hide(); callEffect('show', arguments); self.refreshPosition(); if (settings.hide.auto) { hideTimeOut = setTimeout(self.hide, settings.hide.autoDelay); } bindEvents(); if (settings.preventScroll) { self.getElements('body').addClass(settings.classes.preventScroll); } self.trigger('show'); const widgetId = self.getElements('widget')?.attr('id'); self.parent.openDialogs.push(widgetId); return self; }; this.trigger = function(eventName, params) { var methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1); if (self[methodName]) { self[methodName](params); } var callbacks = events[eventName]; if (!callbacks) { return; } $.each(callbacks, function(index, callback) { callback.call(self, params); }); return self; }; }; DialogsManager.Widget.prototype.types = []; // Inheritable widget methods DialogsManager.Widget.prototype.buildWidget = function() { var elements = this.getElements(), settings = this.getSettings(); elements.widget.append(elements.header, elements.message); this.setHeaderMessage(settings.headerMessage); this.setMessage(settings.message); if (this.getSettings('closeButton')) { elements.widget.prepend(elements.closeButton); } }; DialogsManager.Widget.prototype.attachEvents = function() { var self = this; if (self.getSettings('closeButton')) { self.getElements('closeButton').on('click', function(event) { event.preventDefault(); self.hide(); }); } }; DialogsManager.Widget.prototype.getDefaultSettings = function() { return {}; }; DialogsManager.Widget.prototype.getClosureMethods = function() { return []; }; DialogsManager.Widget.prototype.onHide = function() { }; DialogsManager.Widget.prototype.onShow = function() { }; DialogsManager.Widget.prototype.onInit = function() { }; DialogsManager.Widget.prototype.onReady = function() { }; DialogsManager.widgetsTypes.simple = DialogsManager.Widget; DialogsManager.addWidgetType('buttons', { activeKeyUp: function(event) { var TAB_KEY = 9; if (event.which === TAB_KEY) { event.preventDefault(); } if (this.hotKeys[event.which]) { this.hotKeys[event.which](this); } }, activeKeyDown: function(event) { if (!this.focusedButton) { return; } var TAB_KEY = 9; if (event.which === TAB_KEY) { event.preventDefault(); var currentButtonIndex = this.focusedButton.index(), nextButtonIndex; if (event.shiftKey) { nextButtonIndex = currentButtonIndex - 1; if (nextButtonIndex < 0) { nextButtonIndex = this.buttons.length - 1; } } else { nextButtonIndex = currentButtonIndex + 1; if (nextButtonIndex >= this.buttons.length) { nextButtonIndex = 0; } } this.focusedButton = this.buttons[nextButtonIndex].trigger('focus'); } }, addButton: function(options) { var self = this, settings = self.getSettings(), buttonSettings = jQuery.extend(settings.button, options); var classes = options.classes ? options.classes + ' ' : ''; classes += settings.classes.globalPrefix + '-button'; var $button = self.addElement(options.name, $('<' + buttonSettings.tag + '>').html(options.text), classes); self.buttons.push($button); var buttonFn = function() { if (settings.hide.onButtonClick) { self.hide(); } if ('function' === typeof options.callback) { options.callback.call(this, self); } }; $button.on('click', buttonFn); if (options.hotKey) { this.hotKeys[options.hotKey] = buttonFn; } this.getElements('buttonsWrapper').append($button); if (options.focus) { this.focusedButton = $button; } return self; }, bindHotKeys: function() { this.getElements('window').on({ keyup: this.activeKeyUp, keydown: this.activeKeyDown }); }, buildWidget: function() { DialogsManager.Widget.prototype.buildWidget.apply(this, arguments); var $buttonsWrapper = this.addElement('buttonsWrapper'); this.getElements('widget').append($buttonsWrapper); }, getClosureMethods: function() { return [ 'activeKeyUp', 'activeKeyDown' ]; }, getDefaultSettings: function() { return { hide: { onButtonClick: true }, button: { tag: 'button' } }; }, onHide: function() { this.unbindHotKeys(); }, onInit: function() { this.buttons = []; this.hotKeys = {}; this.focusedButton = null; }, onShow: function() { this.bindHotKeys(); if (!this.focusedButton) { this.focusedButton = this.buttons[0]; } if (this.focusedButton) { this.focusedButton.trigger('focus'); } }, unbindHotKeys: function() { this.getElements('window').off({ keyup: this.activeKeyUp, keydown: this.activeKeyDown }); } }); DialogsManager.addWidgetType('lightbox', DialogsManager.getWidgetType('buttons').extend('lightbox', { getDefaultSettings: function() { var settings = DialogsManager.getWidgetType('buttons').prototype.getDefaultSettings.apply(this, arguments); return $.extend(true, settings, { contentWidth: 'auto', contentHeight: 'auto', position: { element: 'widgetContent', of: 'widget', autoRefresh: true } }); }, buildWidget: function() { DialogsManager.getWidgetType('buttons').prototype.buildWidget.apply(this, arguments); var $widgetContent = this.addElement('widgetContent'), elements = this.getElements(); $widgetContent.append(elements.header, elements.message, elements.buttonsWrapper); elements.widget.html($widgetContent); if (elements.closeButton) { $widgetContent.prepend(elements.closeButton); } }, onReady: function() { var elements = this.getElements(), settings = this.getSettings(); if ('auto' !== settings.contentWidth) { elements.message.width(settings.contentWidth); } if ('auto' !== settings.contentHeight) { elements.message.height(settings.contentHeight); } } })); DialogsManager.addWidgetType('confirm', DialogsManager.getWidgetType('lightbox').extend('confirm', { onReady: function() { DialogsManager.getWidgetType('lightbox').prototype.onReady.apply(this, arguments); var strings = this.getSettings('strings'), isDefaultCancel = this.getSettings('defaultOption') === 'cancel'; this.addButton({ name: 'cancel', text: strings.cancel, callback: function(widget) { widget.trigger('cancel'); }, focus: isDefaultCancel }); this.addButton({ name: 'ok', text: strings.confirm, callback: function(widget) { widget.trigger('confirm'); }, focus: !isDefaultCancel }); }, getDefaultSettings: function() { var settings = DialogsManager.getWidgetType('lightbox').prototype.getDefaultSettings.apply(this, arguments); settings.strings = { confirm: 'OK', cancel: 'Cancel' }; settings.defaultOption = 'cancel'; return settings; } })); DialogsManager.addWidgetType('alert', DialogsManager.getWidgetType('lightbox').extend('alert', { onReady: function() { DialogsManager.getWidgetType('lightbox').prototype.onReady.apply(this, arguments); var strings = this.getSettings('strings'); this.addButton({ name: 'ok', text: strings.confirm, callback: function(widget) { widget.trigger('confirm'); } }); }, getDefaultSettings: function() { var settings = DialogsManager.getWidgetType('lightbox').prototype.getDefaultSettings.apply(this, arguments); settings.strings = { confirm: 'OK' }; return settings; } })); // Exporting the DialogsManager variable to global global.DialogsManager = DialogsManager; })( typeof jQuery !== 'undefined' ? jQuery : typeof require === 'function' && require('jquery'), (typeof module !== 'undefined' && typeof module.exports !== 'undefined') ? module.exports : window ); dialog.min.js000064400000026546150732377330007152 0ustar00/*! * Dialogs Manager v4.9.4 * https://github.com/kobizz/dialogs-manager * * Copyright Kobi Zaltzberg * Released under the MIT license * https://github.com/kobizz/dialogs-manager/blob/master/LICENSE.txt */ !function(t,e){"use strict";var n={widgetsTypes:{},createWidgetType:function(e,i,o){o||(o=this.Widget);var s=function(){o.apply(this,arguments)},r=s.prototype=new o(e);return r.types=r.types.concat([e]),t.extend(r,i),r.constructor=s,s.extend=function(t,e){return n.createWidgetType(t,e,s)},s},addWidgetType:function(t,e,n){return e&&e.prototype instanceof this.Widget?this.widgetsTypes[t]=e:this.widgetsTypes[t]=this.createWidgetType(t,e,n)},getWidgetType:function(t){return this.widgetsTypes[t]}};n.Instance=function(){var e=this,i={},o={};e.openDialogs=[];var s=function(e){t.extend(o,{classPrefix:"dialog",effects:{show:"fadeIn",hide:"fadeOut"}},e)};this.createWidget=function(t,i){var o=new(n.getWidgetType(t))(t);return i=i||{},o.init(e,i),o},this.getSettings=function(t){return t?o[t]:Object.create(o)},this.maybeLoadAssets=async function(){if(!!window.elementorFrontend?.utils?.assetsLoader)try{await elementorFrontend.utils.assetsLoader.load("style","dialog")}catch(t){console.error("Failed to load assets:",t)}},this.init=function(n){return this.maybeLoadAssets(),s(n),i.body=t("body"),e},e.init()},n.Widget=function(e){var i=this,o={},s={},r={},a=0,c=["refreshPosition"],d=function(t,e){var n=o.effects[t],i=r.widget;if("function"==typeof n)n.apply(i,e);else{if(!i[n])throw"Reference Error: The effect "+n+" not found";i[n].apply(i,e)}},u=function(e){if(!f(e)){if(o.hide.onClick){if(t(e.target).closest(o.selectors.preventClose).length)return}else if(e.target!==this)return;i.hide()}},l=function(e){f(e)||t(e.target).closest(r.widget).length||function(e){return!!o.hide.ignore&&!!t(e.target).closest(o.hide.ignore).length}(e)||i.hide()},g=function(){t.each(o,(function(t){var e=t.match(/^on([A-Z].*)/);e&&(e=e[1].charAt(0).toLowerCase()+e[1].slice(1),i.on(e,this))}))},f=function(t){return"click"===t.type&&2===t.button},h=function(t){27===t.which&&i.hide()},p=function(){var t=[r.window];r.iframe&&t.push(jQuery(r.iframe[0].contentWindow)),t.forEach((function(t){o.hide.onEscKeyPress&&t.off("keyup",h),o.hide.onOutsideClick&&t[0].removeEventListener("click",l,!0),o.hide.onOutsideContextMenu&&t[0].removeEventListener("contextmenu",l,!0),o.position.autoRefresh&&t.off("resize",i.refreshPosition)})),(o.hide.onClick||o.hide.onBackgroundClick)&&r.widget.off("click",u)};this.addElement=function(e,n,i){var s=r[e]=t(n||"
"),a=function(t){return t.replace(/([a-z])([A-Z])/g,(function(){return arguments[1]+"-"+arguments[2].toLowerCase()}))}(e);return i=i?i+" ":"",i+=o.classes.globalPrefix+"-"+a,i+=" "+o.classes.prefix+"-"+a,s.addClass(i),s},this.destroy=function(){const t=i.getElements("widget")?.attr("id"),e=i.parent.openDialogs.lastIndexOf(t);return-1!==e&&i.parent.openDialogs.splice(e,1),p(),r.widget.remove(),i.trigger("destroy"),i},this.getElements=function(t){return t?r[t]:r},this.getSettings=function(t){var e=Object.create(o);return t?e[t]:e},this.hide=function(){if(!i.isVisible())return;const t=i.getElements("widget")?.attr("id"),e=i.parent.openDialogs;return e[e.length-1]===t?(e.pop(),clearTimeout(a),d("hide",arguments),p(),o.preventScroll&&i.getElements("body").removeClass(o.classes.preventScroll),i.trigger("hide"),i):void 0},this.init=function(s,a){if(!(s instanceof n.Instance))throw"The "+i.widgetName+" must to be initialized from an instance of DialogsManager.Instance";var d;return i.parent=s,d=c.concat(i.getClosureMethods()),t.each(d,(function(){var t=i[this];i[this]=function(){t.apply(i,arguments)}})),i.trigger("init",a),function(n,s){var r=t.extend(!0,{},n.getSettings());o={headerMessage:"",message:"",effects:r.effects,classes:{globalPrefix:r.classPrefix,prefix:r.classPrefix+"-"+e,preventScroll:r.classPrefix+"-prevent-scroll"},selectors:{preventClose:"."+r.classPrefix+"-prevent-close"},container:"body",preventScroll:!1,iframe:null,closeButton:!1,closeButtonOptions:{iconClass:r.classPrefix+"-close-button-icon",attributes:{role:"button",tabindex:0,"aria-label":"Close",href:"#"},iconElement:""},position:{element:"widget",my:"center",at:"center",enable:!0,autoRefresh:!1},hide:{auto:!1,autoDelay:5e3,onClick:!1,onOutsideClick:!0,onOutsideContextMenu:!1,onBackgroundClick:!0,onEscKeyPress:!0,ignore:""}},t.extend(!0,o,i.getDefaultSettings(),s),g()}(s,a),function(){if(i.addElement("widget"),i.addElement("header"),i.addElement("message"),i.addElement("window",window),i.addElement("body",document.body),i.addElement("container",o.container),o.iframe&&i.addElement("iframe",o.iframe),o.closeButton){o.closeButtonClass&&(o.closeButtonOptions.iconClass=o.closeButtonClass);const e=t("",o.closeButtonOptions.attributes),n=t(o.closeButtonOptions.iconElement).addClass(o.closeButtonOptions.iconClass);e.append(n),i.addElement("closeButton",e)}var e=i.getSettings("id");e&&i.setID(e);var n=[];t.each(i.types,(function(){n.push(o.classes.globalPrefix+"-type-"+this)})),n.push(i.getSettings("className")),r.widget.addClass(n.join(" ")).attr({"aria-modal":!0,role:"document",tabindex:0})}(),i.buildWidget(),i.attachEvents(),i.trigger("ready"),i},this.isVisible=function(){return r.widget.is(":visible")},this.on=function(e,n){return"object"==typeof e?(t.each(e,(function(t){i.on(t,this)})),i):(e.split(" ").forEach((function(t){s[t]||(s[t]=[]),s[t].push(n)})),i)},this.off=function(t,e){if(!s[t])return i;if(!e)return delete s[t],i;var n=s[t].indexOf(e);return-1!==n&&s[t].splice(n,1),i},this.refreshPosition=function(){if(o.position.enable){var e=t.extend({},o.position);r[e.of]&&(e.of=r[e.of]),e.of||(e.of=window),o.iframe&&function(t){if(t.my){var e=/([+-]\d+)?$/,n=r.iframe.offset(),i=r.iframe[0].contentWindow,o=t.my.split(" "),s=[];1===o.length&&(/left|right/.test(o[0])?o.push("center"):o.unshift("center")),o.forEach((function(t,o){var r=t.replace(e,(function(t){return t=+t||0,(t+=o?n.top-i.scrollY:n.left-i.scrollX)>=0&&(t="+"+t),t}));s.push(r)})),t.my=s.join(" ")}}(e),r[e.element].position(e)}},this.setID=function(t){return r.widget.attr("id",t),i},this.setHeaderMessage=function(t){return i.getElements("header").html(t),i},this.setMessage=function(t){return r.message.html(t),i},this.setSettings=function(e,n){return jQuery.isPlainObject(n)?t.extend(!0,o[e],n):o[e]=n,i},this.show=function(){var t;clearTimeout(a),r.widget.appendTo(r.container).hide(),d("show",arguments),i.refreshPosition(),o.hide.auto&&(a=setTimeout(i.hide,o.hide.autoDelay)),t=[r.window],r.iframe&&t.push(jQuery(r.iframe[0].contentWindow)),t.forEach((function(t){o.hide.onEscKeyPress&&t.on("keyup",h),o.hide.onOutsideClick&&t[0].addEventListener("click",l,!0),o.hide.onOutsideContextMenu&&t[0].addEventListener("contextmenu",l,!0),o.position.autoRefresh&&t.on("resize",i.refreshPosition)})),(o.hide.onClick||o.hide.onBackgroundClick)&&r.widget.on("click",u),o.preventScroll&&i.getElements("body").addClass(o.classes.preventScroll),i.trigger("show");const e=i.getElements("widget")?.attr("id");return i.parent.openDialogs.push(e),i},this.trigger=function(e,n){var o="on"+e[0].toUpperCase()+e.slice(1);i[o]&&i[o](n);var r=s[e];if(r)return t.each(r,(function(t,e){e.call(i,n)})),i}},n.Widget.prototype.types=[],n.Widget.prototype.buildWidget=function(){var t=this.getElements(),e=this.getSettings();t.widget.append(t.header,t.message),this.setHeaderMessage(e.headerMessage),this.setMessage(e.message),this.getSettings("closeButton")&&t.widget.prepend(t.closeButton)},n.Widget.prototype.attachEvents=function(){var t=this;t.getSettings("closeButton")&&t.getElements("closeButton").on("click",(function(e){e.preventDefault(),t.hide()}))},n.Widget.prototype.getDefaultSettings=function(){return{}},n.Widget.prototype.getClosureMethods=function(){return[]},n.Widget.prototype.onHide=function(){},n.Widget.prototype.onShow=function(){},n.Widget.prototype.onInit=function(){},n.Widget.prototype.onReady=function(){},n.widgetsTypes.simple=n.Widget,n.addWidgetType("buttons",{activeKeyUp:function(t){9===t.which&&t.preventDefault(),this.hotKeys[t.which]&&this.hotKeys[t.which](this)},activeKeyDown:function(t){if(this.focusedButton){if(9===t.which){t.preventDefault();var e,n=this.focusedButton.index();t.shiftKey?(e=n-1)<0&&(e=this.buttons.length-1):(e=n+1)>=this.buttons.length&&(e=0),this.focusedButton=this.buttons[e].trigger("focus")}}},addButton:function(e){var n=this,i=n.getSettings(),o=jQuery.extend(i.button,e),s=e.classes?e.classes+" ":"";s+=i.classes.globalPrefix+"-button";var r=n.addElement(e.name,t("<"+o.tag+">").html(e.text),s);n.buttons.push(r);var a=function(){i.hide.onButtonClick&&n.hide(),"function"==typeof e.callback&&e.callback.call(this,n)};return r.on("click",a),e.hotKey&&(this.hotKeys[e.hotKey]=a),this.getElements("buttonsWrapper").append(r),e.focus&&(this.focusedButton=r),n},bindHotKeys:function(){this.getElements("window").on({keyup:this.activeKeyUp,keydown:this.activeKeyDown})},buildWidget:function(){n.Widget.prototype.buildWidget.apply(this,arguments);var t=this.addElement("buttonsWrapper");this.getElements("widget").append(t)},getClosureMethods:function(){return["activeKeyUp","activeKeyDown"]},getDefaultSettings:function(){return{hide:{onButtonClick:!0},button:{tag:"button"}}},onHide:function(){this.unbindHotKeys()},onInit:function(){this.buttons=[],this.hotKeys={},this.focusedButton=null},onShow:function(){this.bindHotKeys(),this.focusedButton||(this.focusedButton=this.buttons[0]),this.focusedButton&&this.focusedButton.trigger("focus")},unbindHotKeys:function(){this.getElements("window").off({keyup:this.activeKeyUp,keydown:this.activeKeyDown})}}),n.addWidgetType("lightbox",n.getWidgetType("buttons").extend("lightbox",{getDefaultSettings:function(){var e=n.getWidgetType("buttons").prototype.getDefaultSettings.apply(this,arguments);return t.extend(!0,e,{contentWidth:"auto",contentHeight:"auto",position:{element:"widgetContent",of:"widget",autoRefresh:!0}})},buildWidget:function(){n.getWidgetType("buttons").prototype.buildWidget.apply(this,arguments);var t=this.addElement("widgetContent"),e=this.getElements();t.append(e.header,e.message,e.buttonsWrapper),e.widget.html(t),e.closeButton&&t.prepend(e.closeButton)},onReady:function(){var t=this.getElements(),e=this.getSettings();"auto"!==e.contentWidth&&t.message.width(e.contentWidth),"auto"!==e.contentHeight&&t.message.height(e.contentHeight)}})),n.addWidgetType("confirm",n.getWidgetType("lightbox").extend("confirm",{onReady:function(){n.getWidgetType("lightbox").prototype.onReady.apply(this,arguments);var t=this.getSettings("strings"),e="cancel"===this.getSettings("defaultOption");this.addButton({name:"cancel",text:t.cancel,callback:function(t){t.trigger("cancel")},focus:e}),this.addButton({name:"ok",text:t.confirm,callback:function(t){t.trigger("confirm")},focus:!e})},getDefaultSettings:function(){var t=n.getWidgetType("lightbox").prototype.getDefaultSettings.apply(this,arguments);return t.strings={confirm:"OK",cancel:"Cancel"},t.defaultOption="cancel",t}})),n.addWidgetType("alert",n.getWidgetType("lightbox").extend("alert",{onReady:function(){n.getWidgetType("lightbox").prototype.onReady.apply(this,arguments);var t=this.getSettings("strings");this.addButton({name:"ok",text:t.confirm,callback:function(t){t.trigger("confirm")}})},getDefaultSettings:function(){var t=n.getWidgetType("lightbox").prototype.getDefaultSettings.apply(this,arguments);return t.strings={confirm:"OK"},t}})),e.DialogsManager=n}("undefined"!=typeof jQuery?jQuery:"function"==typeof require&&require("jquery"),"undefined"!=typeof module&&void 0!==module.exports?module.exports:window);