'),
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.js 0000644 00000026546 15073237733 0007152 0 ustar 00 /*!
* 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);