first commit
This commit is contained in:
2
wp-content/plugins/elementor-pro/assets/js/1b816ba777b14157325b.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/1b816ba777b14157325b.bundle.min.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[315],{6315:(e,t,n)=>{var o=n(8003).__,a=n(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=a(n(4124));class TemplateQueryControl extends i.default{ui(){return{...super.ui(),newButton:'button[data-action="new"]',editButton:'button[data-action="edit"]'}}events(){return{...super.events(),"click @ui.newButton":"onNewButtonClicked","click @ui.editButton":"onEditButtonClicked"}}onRender(...e){super.onRender(...e),this.toggleButtons(this.getControlValue())}onBaseInputChange(...e){super.onBaseInputChange(...e),this.toggleButtons(this.getInputValue(e[0].currentTarget))}toggleButtons(e){e?this.showEditTemplateButton():this.showNewTemplateButton()}showNewTemplateButton(){this.ui.newButton.get(0).style.display="block",this.ui.editButton.get(0).style.display="none"}showEditTemplateButton(){this.ui.newButton.get(0).style.display="none",this.ui.editButton.get(0).style.display="block"}async onNewButtonClicked(){this.createTemplate()}createTemplate(){this.confirmSaveBeforeTemplateCreateDialog||(this.confirmSaveBeforeTemplateCreateDialog=elementorCommon.dialogsManager.createWidget("confirm",{id:"e-confirm-save-before-template-create",headerMessage:o("Save Changes","elementor-pro"),message:o("Would you like to save the changes you've made?","elementor-pro"),position:{my:"center center",at:"center center"},strings:{confirm:o("Save","elementor-pro"),cancel:o("Discard","elementor-pro")},onConfirm:async()=>{await this.onConfirmCreateTemplate()}})),this.confirmSaveBeforeTemplateCreateDialog.show()}async onConfirmCreateTemplate(){$e.internal("panel/state-loading");const e=await this.createAndSetTemplate();this.afterAction("new",e),$e.internal("panel/state-ready")}async createAndSetTemplate(){const e=this.model.get("name"),t=this.options.container.controls[e].actions.new.document_config.type,n=this.getTemplateSourceTypeValue(),o=await $e.data.create("library/templates",{type:t,page_settings:{source:n}}),a=parseInt(o.data.template_id);return this.setValue(a),a}getTemplateSourceTypeValue(){return"repeater"===this.options?.container?.args?.type?this.options.container.renderer.args.settings.attributes._skin||void 0:this.options.container.controls._skin?this.options.container.panel.getControlView("_skin").getControlValue():void 0}async switchDocument(e){await $e.run("editor/documents/switch",{id:parseInt(e),mode:"save"});const t=elementor.documents.getCurrent();t.config.container_attributes&&t.config.container_attributes.class&&t.$element.addClass(t.config.container_attributes.class)}async onEditButtonClicked(){this.afterAction("edit",this.getControlValue())}getSelect2Placeholder(){return{id:"",text:o("Start typing its name","elementor-pro")}}async afterAction(e,t){"switch_document"===("new"===e?this.ui.newButton[0].getAttribute("data-after-action"):this.ui.editButton[0].getAttribute("data-after-action"))?await this.switchDocument(t):window.open(this.getThemeBuilderURL(t),"_blank")}getThemeBuilderURL(e){return`${elementor.config.admin_url}post.php?post=${e}&action=elementor`}}t.default=TemplateQueryControl}}]);
|
||||
@@ -0,0 +1,166 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["modules_query-control_assets_js_editor_template-query-control_js"],{
|
||||
|
||||
/***/ "../modules/query-control/assets/js/editor/template-query-control.js":
|
||||
/*!***************************************************************************!*\
|
||||
!*** ../modules/query-control/assets/js/editor/template-query-control.js ***!
|
||||
\***************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
/* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _queryControl = _interopRequireDefault(__webpack_require__(/*! ./query-control */ "../modules/query-control/assets/js/editor/query-control.js"));
|
||||
class TemplateQueryControl extends _queryControl.default {
|
||||
ui() {
|
||||
return {
|
||||
...super.ui(),
|
||||
newButton: 'button[data-action="new"]',
|
||||
editButton: 'button[data-action="edit"]'
|
||||
};
|
||||
}
|
||||
events() {
|
||||
return {
|
||||
...super.events(),
|
||||
'click @ui.newButton': 'onNewButtonClicked',
|
||||
'click @ui.editButton': 'onEditButtonClicked'
|
||||
};
|
||||
}
|
||||
onRender(...args) {
|
||||
super.onRender(...args);
|
||||
this.toggleButtons(this.getControlValue());
|
||||
}
|
||||
onBaseInputChange(...args) {
|
||||
super.onBaseInputChange(...args);
|
||||
this.toggleButtons(this.getInputValue(args[0].currentTarget));
|
||||
}
|
||||
toggleButtons(templateID) {
|
||||
if (!templateID) {
|
||||
this.showNewTemplateButton();
|
||||
} else {
|
||||
this.showEditTemplateButton();
|
||||
}
|
||||
}
|
||||
showNewTemplateButton() {
|
||||
this.ui.newButton.get(0).style.display = 'block';
|
||||
this.ui.editButton.get(0).style.display = 'none';
|
||||
}
|
||||
showEditTemplateButton() {
|
||||
this.ui.newButton.get(0).style.display = 'none';
|
||||
this.ui.editButton.get(0).style.display = 'block';
|
||||
}
|
||||
async onNewButtonClicked() {
|
||||
this.createTemplate();
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to create a new template via the REST API.
|
||||
* We first show a confirm dialog so the user knows that the current document will be saved while creating
|
||||
* and editing a new template. If the user chooses to cancel the process will not continue,
|
||||
* and if confirmed the new template is created and the Editor switched to this newly created template.
|
||||
*
|
||||
* @since 3.8.0
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
createTemplate() {
|
||||
if (!this.confirmSaveBeforeTemplateCreateDialog) {
|
||||
this.confirmSaveBeforeTemplateCreateDialog = elementorCommon.dialogsManager.createWidget('confirm', {
|
||||
id: 'e-confirm-save-before-template-create',
|
||||
headerMessage: __('Save Changes', 'elementor-pro'),
|
||||
message: __('Would you like to save the changes you\'ve made?', 'elementor-pro'),
|
||||
position: {
|
||||
my: 'center center',
|
||||
at: 'center center'
|
||||
},
|
||||
strings: {
|
||||
confirm: __('Save', 'elementor-pro'),
|
||||
cancel: __('Discard', 'elementor-pro')
|
||||
},
|
||||
onConfirm: async () => {
|
||||
await this.onConfirmCreateTemplate();
|
||||
}
|
||||
});
|
||||
}
|
||||
this.confirmSaveBeforeTemplateCreateDialog.show();
|
||||
}
|
||||
async onConfirmCreateTemplate() {
|
||||
$e.internal('panel/state-loading');
|
||||
const templateID = await this.createAndSetTemplate();
|
||||
this.afterAction('new', templateID);
|
||||
$e.internal('panel/state-ready');
|
||||
}
|
||||
async createAndSetTemplate() {
|
||||
const controlId = this.model.get('name'),
|
||||
newTemplateType = this.options.container.controls[controlId].actions.new.document_config.type,
|
||||
newTemplateSource = this.getTemplateSourceTypeValue(),
|
||||
newTemplate = await $e.data.create('library/templates', {
|
||||
type: newTemplateType,
|
||||
page_settings: {
|
||||
source: newTemplateSource
|
||||
}
|
||||
}),
|
||||
templateID = parseInt(newTemplate.data.template_id);
|
||||
this.setValue(templateID);
|
||||
return templateID;
|
||||
}
|
||||
getTemplateSourceTypeValue() {
|
||||
if ('repeater' === this.options?.container?.args?.type) {
|
||||
return this.options.container.renderer.args.settings.attributes._skin || undefined;
|
||||
}
|
||||
return this.options.container.controls._skin ? this.options.container.panel.getControlView('_skin').getControlValue() : undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to switch the Editor when a user clicks to create a new template or edit the chosen template.
|
||||
*
|
||||
* @since 3.8.0
|
||||
*
|
||||
* @param {string|number} id
|
||||
*
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
async switchDocument(id) {
|
||||
// Await $e.run( 'document/save/update', { force: true } );
|
||||
await $e.run('editor/documents/switch', {
|
||||
id: parseInt(id),
|
||||
mode: 'save'
|
||||
});
|
||||
const document = elementor.documents.getCurrent();
|
||||
if (document.config.container_attributes && document.config.container_attributes.class) {
|
||||
document.$element.addClass(document.config.container_attributes.class);
|
||||
}
|
||||
}
|
||||
async onEditButtonClicked() {
|
||||
this.afterAction('edit', this.getControlValue());
|
||||
}
|
||||
getSelect2Placeholder() {
|
||||
return {
|
||||
id: '',
|
||||
text: __('Start typing its name', 'elementor-pro')
|
||||
};
|
||||
}
|
||||
async afterAction(context, templateID) {
|
||||
const action = 'new' === context ? this.ui.newButton[0].getAttribute('data-after-action') : this.ui.editButton[0].getAttribute('data-after-action');
|
||||
if ('switch_document' === action) {
|
||||
await this.switchDocument(templateID);
|
||||
} else {
|
||||
window.open(this.getThemeBuilderURL(templateID), '_blank');
|
||||
}
|
||||
}
|
||||
getThemeBuilderURL(templateID) {
|
||||
return `${elementor.config.admin_url}post.php?post=${templateID}&action=elementor`;
|
||||
}
|
||||
}
|
||||
exports["default"] = TemplateQueryControl;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=4abfbfd970d6f7680bc7.bundle.js.map
|
||||
3
wp-content/plugins/elementor-pro/assets/js/60745ddf42fde6647dbc.bundle.min.js
vendored
Normal file
3
wp-content/plugins/elementor-pro/assets/js/60745ddf42fde6647dbc.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
/*! @license DOMPurify 3.0.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.3/LICENSE */
|
||||
File diff suppressed because it is too large
Load Diff
1666
wp-content/plugins/elementor-pro/assets/js/admin.js
Normal file
1666
wp-content/plugins/elementor-pro/assets/js/admin.js
Normal file
File diff suppressed because it is too large
Load Diff
2
wp-content/plugins/elementor-pro/assets/js/admin.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/admin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[356],{6128:(e,t,n)=>{var s=n(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=s(n(8491)),r=s(n(6399));class AjaxPagination extends elementorModules.frontend.handlers.Base{getDefaultSettings(){return{selectors:{links:"a.page-numbers:not(.current)",widgetContainer:".elementor-widget-container",postWrapperTag:".e-loop-item"}}}getDefaultElements(){const e=this.getSettings("selectors");return{links:this.$element[0].querySelectorAll(e.links),widgetContainer:this.$element[0].querySelector(e.widgetContainer)}}bindEvents(){super.bindEvents(),this.linksEventListeners()}linksEventListeners(){this.elements.links.length&&"ajax"===this.getElementSettings("pagination_load_type")&&this.elements.links.forEach((e=>{e.addEventListener("click",(e=>{this.handleLinkClick(e)}))}))}handleLinkClick(e){if(e.preventDefault(),this.isLoading)return;this.removeLinksListeners(),this.handleUiBeforeLoading();const t=e?.target.getAttribute("href");return this.updateURLQueryString(t),fetch(t).then((e=>e.text())).then((e=>{const t=(new DOMParser).parseFromString(e,"text/html");this.handleSuccessFetch(t)}))}removeLinksListeners(){this.elements.links.length&&this.elements.links.forEach((e=>{e.removeEventListener("click",this.handleLinkClick)}))}updateURLQueryString(e){const t=new URL(window.location.href),n=t.searchParams,s=new URL(e).searchParams;s.forEach(((e,t)=>{n.set(t,e)})),s.has("e-page-"+this.elementId)||n.delete("e-page-"+this.elementId),history.pushState(null,"",t.href)}handleUiBeforeLoading(){this.setLoading(!0),this.ajaxHelper.addLoadingAnimationOverlay(this.elementId),this.maybeScrollToTop()}setLoading(e){this.isLoading=e}maybeScrollToTop(){if("yes"!==this.getElementSettings("auto_scroll"))return;const e=document.querySelector(`.elementor-element-${this.elementId}`);e&&e.scrollIntoView({behavior:"smooth"})}handleUiAfterLoading(){this.setLoading(!1),this.ajaxHelper.removeLoadingAnimationOverlay(this.elementId)}handleSuccessFetch(e){this.handleUiAfterLoading();const t=this.getSettings("selectors"),n=e.querySelector(`[data-id="${this.elementId}"] ${t.widgetContainer}`),s=this.elements.widgetContainer;this.$element[0].replaceChild(n,s),this.afterInsertPosts()}afterInsertPosts(){const e=this.getSettings("selectors"),t=document.querySelectorAll(`[data-id="${this.elementId}"] ${e.postWrapperTag}`);elementorFrontend.elementsHandler.runReadyTrigger(this.$element[0]),(0,r.default)(t),elementorFrontend.config.experimentalFeatures.e_lazyload&&document.dispatchEvent(new Event("elementor/lazyload/observe"))}onInit(){super.onInit(),this.setLoading(!1),this.elementId=this.getID(),this.ajaxHelper=new i.default}}t.default=AjaxPagination}}]);
|
||||
@@ -0,0 +1,146 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["ajax-pagination"],{
|
||||
|
||||
/***/ "../modules/loop-builder/assets/js/frontend/handlers/ajax-pagination.js":
|
||||
/*!******************************************************************************!*\
|
||||
!*** ../modules/loop-builder/assets/js/frontend/handlers/ajax-pagination.js ***!
|
||||
\******************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _ajaxHelper = _interopRequireDefault(__webpack_require__(/*! elementor-pro/frontend/utils/ajax-helper */ "../assets/dev/js/frontend/utils/ajax-helper.js"));
|
||||
var _runElementHandlers = _interopRequireDefault(__webpack_require__(/*! elementor-pro/frontend/utils/run-element-handlers */ "../assets/dev/js/frontend/utils/run-element-handlers.js"));
|
||||
class AjaxPagination extends elementorModules.frontend.handlers.Base {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
links: 'a.page-numbers:not(.current)',
|
||||
widgetContainer: '.elementor-widget-container',
|
||||
postWrapperTag: '.e-loop-item'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const selectors = this.getSettings('selectors');
|
||||
return {
|
||||
links: this.$element[0].querySelectorAll(selectors.links),
|
||||
widgetContainer: this.$element[0].querySelector(selectors.widgetContainer)
|
||||
};
|
||||
}
|
||||
bindEvents() {
|
||||
super.bindEvents();
|
||||
this.linksEventListeners();
|
||||
}
|
||||
linksEventListeners() {
|
||||
if (!this.elements.links.length) {
|
||||
return;
|
||||
}
|
||||
if ('ajax' !== this.getElementSettings('pagination_load_type')) {
|
||||
return;
|
||||
}
|
||||
this.elements.links.forEach(link => {
|
||||
link.addEventListener('click', event => {
|
||||
this.handleLinkClick(event);
|
||||
});
|
||||
});
|
||||
}
|
||||
handleLinkClick(event) {
|
||||
event.preventDefault();
|
||||
if (this.isLoading) {
|
||||
return;
|
||||
}
|
||||
this.removeLinksListeners();
|
||||
this.handleUiBeforeLoading();
|
||||
const nextPageUrl = event?.target.getAttribute('href');
|
||||
this.updateURLQueryString(nextPageUrl);
|
||||
return fetch(nextPageUrl).then(response => response.text()).then(html => {
|
||||
// Convert the HTML string into a document object
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString(html, 'text/html');
|
||||
this.handleSuccessFetch(doc);
|
||||
});
|
||||
}
|
||||
removeLinksListeners() {
|
||||
if (!this.elements.links.length) {
|
||||
return;
|
||||
}
|
||||
this.elements.links.forEach(link => {
|
||||
link.removeEventListener('click', this.handleLinkClick);
|
||||
});
|
||||
}
|
||||
updateURLQueryString(nextPageUrl) {
|
||||
const currentUrl = new URL(window.location.href);
|
||||
const currentParams = currentUrl.searchParams;
|
||||
const targetUrl = new URL(nextPageUrl);
|
||||
const targetParams = targetUrl.searchParams;
|
||||
targetParams.forEach((value, key) => {
|
||||
currentParams.set(key, value);
|
||||
});
|
||||
|
||||
// Clicked on page 1.
|
||||
if (!targetParams.has('e-page-' + this.elementId)) {
|
||||
currentParams.delete('e-page-' + this.elementId);
|
||||
}
|
||||
history.pushState(null, '', currentUrl.href);
|
||||
}
|
||||
handleUiBeforeLoading() {
|
||||
this.setLoading(true);
|
||||
this.ajaxHelper.addLoadingAnimationOverlay(this.elementId);
|
||||
this.maybeScrollToTop();
|
||||
}
|
||||
setLoading(loadng) {
|
||||
this.isLoading = loadng;
|
||||
}
|
||||
maybeScrollToTop() {
|
||||
if ('yes' !== this.getElementSettings('auto_scroll')) {
|
||||
return;
|
||||
}
|
||||
const widget = document.querySelector(`.elementor-element-${this.elementId}`);
|
||||
if (!widget) {
|
||||
return;
|
||||
}
|
||||
widget.scrollIntoView({
|
||||
behavior: 'smooth'
|
||||
});
|
||||
}
|
||||
handleUiAfterLoading() {
|
||||
this.setLoading(false);
|
||||
this.ajaxHelper.removeLoadingAnimationOverlay(this.elementId);
|
||||
}
|
||||
handleSuccessFetch(result) {
|
||||
this.handleUiAfterLoading();
|
||||
const selectors = this.getSettings('selectors');
|
||||
const newWidgetContainer = result.querySelector(`[data-id="${this.elementId}"] ${selectors.widgetContainer}`);
|
||||
const existingWidgetContainer = this.elements.widgetContainer;
|
||||
this.$element[0].replaceChild(newWidgetContainer, existingWidgetContainer);
|
||||
this.afterInsertPosts();
|
||||
}
|
||||
afterInsertPosts() {
|
||||
const selectors = this.getSettings('selectors'),
|
||||
postsElements = document.querySelectorAll(`[data-id="${this.elementId}"] ${selectors.postWrapperTag}`);
|
||||
elementorFrontend.elementsHandler.runReadyTrigger(this.$element[0]);
|
||||
(0, _runElementHandlers.default)(postsElements);
|
||||
if (elementorFrontend.config.experimentalFeatures.e_lazyload) {
|
||||
document.dispatchEvent(new Event('elementor/lazyload/observe'));
|
||||
}
|
||||
}
|
||||
onInit() {
|
||||
super.onInit();
|
||||
this.setLoading(false);
|
||||
this.elementId = this.getID();
|
||||
this.ajaxHelper = new _ajaxHelper.default();
|
||||
}
|
||||
}
|
||||
exports["default"] = AjaxPagination;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=ajax-pagination.bc400e6cb24a14a2ea97.bundle.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,311 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["animated-headline"],{
|
||||
|
||||
/***/ "../assets/dev/js/frontend/utils/scroll.js":
|
||||
/*!*************************************************!*\
|
||||
!*** ../assets/dev/js/frontend/utils/scroll.js ***!
|
||||
\*************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
if (window.elementorCommon) {
|
||||
window.elementorCommon.helpers.softDeprecated('Scroll util from "/dev/js/frontend/utils/scroll"', '3.1.0', 'elementorModules.utils.Scroll');
|
||||
}
|
||||
var _default = exports["default"] = elementorModules.utils.Scroll;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/animated-headline/assets/js/frontend/handlers/animated-headlines.js":
|
||||
/*!**************************************************************************************!*\
|
||||
!*** ../modules/animated-headline/assets/js/frontend/handlers/animated-headlines.js ***!
|
||||
\**************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _scroll = _interopRequireDefault(__webpack_require__(/*! elementor-pro/frontend/utils/scroll */ "../assets/dev/js/frontend/utils/scroll.js"));
|
||||
var _default = exports["default"] = elementorModules.frontend.handlers.Base.extend({
|
||||
svgPaths: {
|
||||
circle: ['M325,18C228.7-8.3,118.5,8.3,78,21C22.4,38.4,4.6,54.6,5.6,77.6c1.4,32.4,52.2,54,142.6,63.7 c66.2,7.1,212.2,7.5,273.5-8.3c64.4-16.6,104.3-57.6,33.8-98.2C386.7-4.9,179.4-1.4,126.3,20.7'],
|
||||
underline_zigzag: ['M9.3,127.3c49.3-3,150.7-7.6,199.7-7.4c121.9,0.4,189.9,0.4,282.3,7.2C380.1,129.6,181.2,130.6,70,139 c82.6-2.9,254.2-1,335.9,1.3c-56,1.4-137.2-0.3-197.1,9'],
|
||||
x: ['M497.4,23.9C301.6,40,155.9,80.6,4,144.4', 'M14.1,27.6c204.5,20.3,393.8,74,467.3,111.7'],
|
||||
strikethrough: ['M3,75h493.5'],
|
||||
curly: ['M3,146.1c17.1-8.8,33.5-17.8,51.4-17.8c15.6,0,17.1,18.1,30.2,18.1c22.9,0,36-18.6,53.9-18.6 c17.1,0,21.3,18.5,37.5,18.5c21.3,0,31.8-18.6,49-18.6c22.1,0,18.8,18.8,36.8,18.8c18.8,0,37.5-18.6,49-18.6c20.4,0,17.1,19,36.8,19 c22.9,0,36.8-20.6,54.7-18.6c17.7,1.4,7.1,19.5,33.5,18.8c17.1,0,47.2-6.5,61.1-15.6'],
|
||||
diagonal: ['M13.5,15.5c131,13.7,289.3,55.5,475,125.5'],
|
||||
double: ['M8.4,143.1c14.2-8,97.6-8.8,200.6-9.2c122.3-0.4,287.5,7.2,287.5,7.2', 'M8,19.4c72.3-5.3,162-7.8,216-7.8c54,0,136.2,0,267,7.8'],
|
||||
double_underline: ['M5,125.4c30.5-3.8,137.9-7.6,177.3-7.6c117.2,0,252.2,4.7,312.7,7.6', 'M26.9,143.8c55.1-6.1,126-6.3,162.2-6.1c46.5,0.2,203.9,3.2,268.9,6.4'],
|
||||
underline: ['M7.7,145.6C109,125,299.9,116.2,401,121.3c42.1,2.2,87.6,11.8,87.3,25.7']
|
||||
},
|
||||
getDefaultSettings() {
|
||||
const iterationDelay = this.getElementSettings('rotate_iteration_delay'),
|
||||
settings = {
|
||||
animationDelay: iterationDelay || 2500,
|
||||
// Letters effect
|
||||
lettersDelay: iterationDelay * 0.02 || 50,
|
||||
// Typing effect
|
||||
typeLettersDelay: iterationDelay * 0.06 || 150,
|
||||
selectionDuration: iterationDelay * 0.2 || 500,
|
||||
// Clip effect
|
||||
revealDuration: iterationDelay * 0.24 || 600,
|
||||
revealAnimationDelay: iterationDelay * 0.6 || 1500,
|
||||
// Highlighted headline
|
||||
highlightAnimationDuration: this.getElementSettings('highlight_animation_duration') || 1200,
|
||||
highlightAnimationDelay: this.getElementSettings('highlight_iteration_delay') || 8000
|
||||
};
|
||||
settings.typeAnimationDelay = settings.selectionDuration + 800;
|
||||
settings.selectors = {
|
||||
headline: '.elementor-headline',
|
||||
dynamicWrapper: '.elementor-headline-dynamic-wrapper',
|
||||
dynamicText: '.elementor-headline-dynamic-text'
|
||||
};
|
||||
settings.classes = {
|
||||
dynamicText: 'elementor-headline-dynamic-text',
|
||||
dynamicLetter: 'elementor-headline-dynamic-letter',
|
||||
textActive: 'elementor-headline-text-active',
|
||||
textInactive: 'elementor-headline-text-inactive',
|
||||
letters: 'elementor-headline-letters',
|
||||
animationIn: 'elementor-headline-animation-in',
|
||||
typeSelected: 'elementor-headline-typing-selected',
|
||||
activateHighlight: 'e-animated',
|
||||
hideHighlight: 'e-hide-highlight'
|
||||
};
|
||||
return settings;
|
||||
},
|
||||
getDefaultElements() {
|
||||
var selectors = this.getSettings('selectors');
|
||||
return {
|
||||
$headline: this.$element.find(selectors.headline),
|
||||
$dynamicWrapper: this.$element.find(selectors.dynamicWrapper),
|
||||
$dynamicText: this.$element.find(selectors.dynamicText)
|
||||
};
|
||||
},
|
||||
getNextWord($word) {
|
||||
return $word.is(':last-child') ? $word.parent().children().eq(0) : $word.next();
|
||||
},
|
||||
switchWord($oldWord, $newWord) {
|
||||
$oldWord.removeClass('elementor-headline-text-active').addClass('elementor-headline-text-inactive');
|
||||
$newWord.removeClass('elementor-headline-text-inactive').addClass('elementor-headline-text-active');
|
||||
this.setDynamicWrapperWidth($newWord);
|
||||
},
|
||||
singleLetters() {
|
||||
var classes = this.getSettings('classes');
|
||||
this.elements.$dynamicText.each(function () {
|
||||
var $word = jQuery(this),
|
||||
letters = $word.text().split(''),
|
||||
isActive = $word.hasClass(classes.textActive);
|
||||
$word.empty();
|
||||
letters.forEach(function (letter) {
|
||||
var $letter = jQuery('<span>', {
|
||||
class: classes.dynamicLetter
|
||||
}).text(letter);
|
||||
if (isActive) {
|
||||
$letter.addClass(classes.animationIn);
|
||||
}
|
||||
$word.append($letter);
|
||||
});
|
||||
$word.css('opacity', 1);
|
||||
});
|
||||
},
|
||||
showLetter($letter, $word, bool, duration) {
|
||||
var self = this,
|
||||
classes = this.getSettings('classes');
|
||||
$letter.addClass(classes.animationIn);
|
||||
if (!$letter.is(':last-child')) {
|
||||
setTimeout(function () {
|
||||
self.showLetter($letter.next(), $word, bool, duration);
|
||||
}, duration);
|
||||
} else if (!bool) {
|
||||
setTimeout(function () {
|
||||
self.hideWord($word);
|
||||
}, self.getSettings('animationDelay'));
|
||||
}
|
||||
},
|
||||
hideLetter($letter, $word, bool, duration) {
|
||||
var self = this,
|
||||
settings = this.getSettings();
|
||||
$letter.removeClass(settings.classes.animationIn);
|
||||
if (!$letter.is(':last-child')) {
|
||||
setTimeout(function () {
|
||||
self.hideLetter($letter.next(), $word, bool, duration);
|
||||
}, duration);
|
||||
} else if (bool) {
|
||||
setTimeout(function () {
|
||||
self.hideWord(self.getNextWord($word));
|
||||
}, self.getSettings('animationDelay'));
|
||||
}
|
||||
},
|
||||
showWord($word, $duration) {
|
||||
var self = this,
|
||||
settings = self.getSettings(),
|
||||
animationType = self.getElementSettings('animation_type');
|
||||
if ('typing' === animationType) {
|
||||
self.showLetter($word.find('.' + settings.classes.dynamicLetter).eq(0), $word, false, $duration);
|
||||
$word.addClass(settings.classes.textActive).removeClass(settings.classes.textInactive);
|
||||
} else if ('clip' === animationType) {
|
||||
self.elements.$dynamicWrapper.animate({
|
||||
width: $word.width() + 10
|
||||
}, settings.revealDuration, function () {
|
||||
setTimeout(function () {
|
||||
self.hideWord($word);
|
||||
}, settings.revealAnimationDelay);
|
||||
});
|
||||
}
|
||||
},
|
||||
hideWord($word) {
|
||||
var self = this,
|
||||
settings = self.getSettings(),
|
||||
classes = settings.classes,
|
||||
letterSelector = '.' + classes.dynamicLetter;
|
||||
if (!this.isLoopMode && $word.is(':last-child')) {
|
||||
return;
|
||||
}
|
||||
var animationType = self.getElementSettings('animation_type'),
|
||||
nextWord = self.getNextWord($word);
|
||||
if ('typing' === animationType) {
|
||||
self.elements.$dynamicWrapper.addClass(classes.typeSelected);
|
||||
setTimeout(function () {
|
||||
self.elements.$dynamicWrapper.removeClass(classes.typeSelected);
|
||||
$word.addClass(settings.classes.textInactive).removeClass(classes.textActive).children(letterSelector).removeClass(classes.animationIn);
|
||||
}, settings.selectionDuration);
|
||||
setTimeout(function () {
|
||||
self.showWord(nextWord, settings.typeLettersDelay);
|
||||
}, settings.typeAnimationDelay);
|
||||
} else if (self.elements.$headline.hasClass(classes.letters)) {
|
||||
var bool = $word.children(letterSelector).length >= nextWord.children(letterSelector).length;
|
||||
self.hideLetter($word.find(letterSelector).eq(0), $word, bool, settings.lettersDelay);
|
||||
self.showLetter(nextWord.find(letterSelector).eq(0), nextWord, bool, settings.lettersDelay);
|
||||
self.setDynamicWrapperWidth(nextWord);
|
||||
} else if ('clip' === animationType) {
|
||||
self.elements.$dynamicWrapper.animate({
|
||||
width: '2px'
|
||||
}, settings.revealDuration, function () {
|
||||
self.switchWord($word, nextWord);
|
||||
self.showWord(nextWord);
|
||||
});
|
||||
} else {
|
||||
self.switchWord($word, nextWord);
|
||||
setTimeout(function () {
|
||||
self.hideWord(nextWord);
|
||||
}, settings.animationDelay);
|
||||
}
|
||||
},
|
||||
setDynamicWrapperWidth($word) {
|
||||
const animationType = this.getElementSettings('animation_type');
|
||||
if ('clip' !== animationType && 'typing' !== animationType) {
|
||||
this.elements.$dynamicWrapper.css('width', $word.width());
|
||||
}
|
||||
},
|
||||
animateHeadline() {
|
||||
var self = this,
|
||||
animationType = self.getElementSettings('animation_type'),
|
||||
$dynamicWrapper = self.elements.$dynamicWrapper;
|
||||
if ('clip' === animationType) {
|
||||
$dynamicWrapper.width($dynamicWrapper.width() + 10);
|
||||
} else if ('typing' !== animationType) {
|
||||
self.setDynamicWrapperWidth(self.elements.$dynamicText);
|
||||
}
|
||||
|
||||
// Trigger animation
|
||||
setTimeout(function () {
|
||||
self.hideWord(self.elements.$dynamicText.eq(0));
|
||||
}, self.getSettings('animationDelay'));
|
||||
},
|
||||
getSvgPaths(pathName) {
|
||||
var pathsInfo = this.svgPaths[pathName],
|
||||
$paths = jQuery();
|
||||
pathsInfo.forEach(function (pathInfo) {
|
||||
$paths = $paths.add(jQuery('<path>', {
|
||||
d: pathInfo
|
||||
}));
|
||||
});
|
||||
return $paths;
|
||||
},
|
||||
addHighlight() {
|
||||
const elementSettings = this.getElementSettings(),
|
||||
$svg = jQuery('<svg>', {
|
||||
xmlns: 'http://www.w3.org/2000/svg',
|
||||
viewBox: '0 0 500 150',
|
||||
preserveAspectRatio: 'none'
|
||||
}).html(this.getSvgPaths(elementSettings.marker));
|
||||
this.elements.$dynamicWrapper.append($svg[0].outerHTML);
|
||||
},
|
||||
rotateHeadline() {
|
||||
var settings = this.getSettings();
|
||||
|
||||
// Insert <span> for each letter of a changing word
|
||||
if (this.elements.$headline.hasClass(settings.classes.letters)) {
|
||||
this.singleLetters();
|
||||
}
|
||||
|
||||
// Initialise headline animation
|
||||
this.animateHeadline();
|
||||
},
|
||||
initHeadline() {
|
||||
const headlineStyle = this.getElementSettings('headline_style');
|
||||
if ('rotate' === headlineStyle) {
|
||||
this.rotateHeadline();
|
||||
} else if ('highlight' === headlineStyle) {
|
||||
this.addHighlight();
|
||||
this.activateHighlightAnimation();
|
||||
}
|
||||
this.deactivateScrollListener();
|
||||
},
|
||||
activateHighlightAnimation() {
|
||||
const settings = this.getSettings(),
|
||||
classes = settings.classes,
|
||||
$headline = this.elements.$headline;
|
||||
$headline.removeClass(classes.hideHighlight).addClass(classes.activateHighlight);
|
||||
if (!this.isLoopMode) {
|
||||
return;
|
||||
}
|
||||
setTimeout(() => {
|
||||
$headline.removeClass(classes.activateHighligh).addClass(classes.hideHighlight);
|
||||
}, settings.highlightAnimationDuration + settings.highlightAnimationDelay * .8);
|
||||
setTimeout(() => {
|
||||
this.activateHighlightAnimation(false);
|
||||
}, settings.highlightAnimationDuration + settings.highlightAnimationDelay);
|
||||
},
|
||||
activateScrollListener() {
|
||||
const scrollBuffer = -100;
|
||||
this.intersectionObservers.startAnimation.observer = _scroll.default.scrollObserver({
|
||||
offset: `0px 0px ${scrollBuffer}px`,
|
||||
callback: event => {
|
||||
if (event.isInViewport) {
|
||||
this.initHeadline();
|
||||
}
|
||||
}
|
||||
});
|
||||
this.intersectionObservers.startAnimation.element = this.elements.$headline[0];
|
||||
this.intersectionObservers.startAnimation.observer.observe(this.intersectionObservers.startAnimation.element);
|
||||
},
|
||||
deactivateScrollListener() {
|
||||
this.intersectionObservers.startAnimation.observer.unobserve(this.intersectionObservers.startAnimation.element);
|
||||
},
|
||||
onInit() {
|
||||
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
|
||||
this.intersectionObservers = {
|
||||
startAnimation: {
|
||||
observer: null,
|
||||
element: null
|
||||
}
|
||||
};
|
||||
this.isLoopMode = 'yes' === this.getElementSettings('loop');
|
||||
this.activateScrollListener();
|
||||
}
|
||||
});
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=animated-headline.e4c2ed3934d0df18c40a.bundle.js.map
|
||||
7882
wp-content/plugins/elementor-pro/assets/js/app.js
Normal file
7882
wp-content/plugins/elementor-pro/assets/js/app.js
Normal file
File diff suppressed because it is too large
Load Diff
2
wp-content/plugins/elementor-pro/assets/js/app.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/app.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,401 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["archive-posts"],{
|
||||
|
||||
/***/ "../modules/posts/assets/js/frontend/handlers/cards.js":
|
||||
/*!*************************************************************!*\
|
||||
!*** ../modules/posts/assets/js/frontend/handlers/cards.js ***!
|
||||
\*************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _posts = _interopRequireDefault(__webpack_require__(/*! ./posts */ "../modules/posts/assets/js/frontend/handlers/posts.js"));
|
||||
var _default = exports["default"] = _posts.default.extend({
|
||||
getSkinPrefix() {
|
||||
return 'cards_';
|
||||
}
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/posts/assets/js/frontend/handlers/load-more.js":
|
||||
/*!*****************************************************************!*\
|
||||
!*** ../modules/posts/assets/js/frontend/handlers/load-more.js ***!
|
||||
\*****************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class LoadMore extends elementorModules.frontend.handlers.Base {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
postsContainer: '.elementor-posts-container',
|
||||
postWrapperTag: 'article',
|
||||
loadMoreButton: '.elementor-button',
|
||||
loadMoreSpinnerWrapper: '.e-load-more-spinner',
|
||||
loadMoreSpinner: '.e-load-more-spinner i, .e-load-more-spinner svg',
|
||||
loadMoreAnchor: '.e-load-more-anchor'
|
||||
},
|
||||
classes: {
|
||||
loadMoreSpin: 'eicon-animation-spin',
|
||||
loadMoreIsLoading: 'e-load-more-pagination-loading',
|
||||
loadMorePaginationEnd: 'e-load-more-pagination-end',
|
||||
loadMoreNoSpinner: 'e-load-more-no-spinner'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const selectors = this.getSettings('selectors');
|
||||
return {
|
||||
postsWidgetWrapper: this.$element[0],
|
||||
postsContainer: this.$element[0].querySelector(selectors.postsContainer),
|
||||
loadMoreButton: this.$element[0].querySelector(selectors.loadMoreButton),
|
||||
loadMoreSpinnerWrapper: this.$element[0].querySelector(selectors.loadMoreSpinnerWrapper),
|
||||
loadMoreSpinner: this.$element[0].querySelector(selectors.loadMoreSpinner),
|
||||
loadMoreAnchor: this.$element[0].querySelector(selectors.loadMoreAnchor)
|
||||
};
|
||||
}
|
||||
bindEvents() {
|
||||
super.bindEvents();
|
||||
|
||||
// Handle load more functionality for on-click type.
|
||||
if (!this.elements.loadMoreButton) {
|
||||
return;
|
||||
}
|
||||
this.elements.loadMoreButton.addEventListener('click', event => {
|
||||
if (this.isLoading) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
this.handlePostsQuery();
|
||||
});
|
||||
}
|
||||
onInit() {
|
||||
super.onInit();
|
||||
this.classes = this.getSettings('classes');
|
||||
this.isLoading = false;
|
||||
const paginationType = this.getElementSettings('pagination_type');
|
||||
if ('load_more_on_click' !== paginationType && 'load_more_infinite_scroll' !== paginationType) {
|
||||
return;
|
||||
}
|
||||
this.isInfinteScroll = 'load_more_infinite_scroll' === paginationType;
|
||||
|
||||
// When spinner is not available, the button's text should not be hidden.
|
||||
this.isSpinnerAvailable = this.getElementSettings('load_more_spinner').value;
|
||||
if (!this.isSpinnerAvailable) {
|
||||
this.elements.postsWidgetWrapper.classList.add(this.classes.loadMoreNoSpinner);
|
||||
}
|
||||
if (this.isInfinteScroll) {
|
||||
this.handleInfiniteScroll();
|
||||
} else if (this.elements.loadMoreSpinnerWrapper && this.elements.loadMoreButton) {
|
||||
// Instead of creating 2 spinners for on-click and infinity-scroll, one spinner will be used so it should be appended to the button in on-click mode.
|
||||
this.elements.loadMoreButton.insertAdjacentElement('beforeEnd', this.elements.loadMoreSpinnerWrapper);
|
||||
}
|
||||
|
||||
// Set the post id and element id for the ajax request.
|
||||
this.elementId = this.getID();
|
||||
this.postId = elementorFrontendConfig.post.id;
|
||||
|
||||
// Set the current page and last page for handling the load more post and when no more posts to show.
|
||||
if (this.elements.loadMoreAnchor) {
|
||||
this.currentPage = parseInt(this.elements.loadMoreAnchor.getAttribute('data-page'));
|
||||
this.maxPage = parseInt(this.elements.loadMoreAnchor.getAttribute('data-max-page'));
|
||||
if (this.currentPage === this.maxPage || !this.currentPage) {
|
||||
this.handleUiWhenNoPosts();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle load more functionality for infinity-scroll type.
|
||||
handleInfiniteScroll() {
|
||||
if (this.isEdit) {
|
||||
return;
|
||||
}
|
||||
this.observer = elementorModules.utils.Scroll.scrollObserver({
|
||||
callback: event => {
|
||||
if (!event.isInViewport || this.isLoading) {
|
||||
return;
|
||||
}
|
||||
|
||||
// When the observer is triggered it won't be triggered without scrolling, but sometimes there will be no scrollbar to trigger it again.
|
||||
this.observer.unobserve(this.elements.loadMoreAnchor);
|
||||
this.handlePostsQuery().then(() => {
|
||||
if (this.currentPage !== this.maxPage) {
|
||||
this.observer.observe(this.elements.loadMoreAnchor);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
this.observer.observe(this.elements.loadMoreAnchor);
|
||||
}
|
||||
handleUiBeforeLoading() {
|
||||
this.isLoading = true;
|
||||
if (this.elements.loadMoreSpinner) {
|
||||
this.elements.loadMoreSpinner.classList.add(this.classes.loadMoreSpin);
|
||||
}
|
||||
this.elements.postsWidgetWrapper.classList.add(this.classes.loadMoreIsLoading);
|
||||
}
|
||||
handleUiAfterLoading() {
|
||||
this.isLoading = false;
|
||||
if (this.elements.loadMoreSpinner) {
|
||||
this.elements.loadMoreSpinner.classList.remove(this.classes.loadMoreSpin);
|
||||
}
|
||||
if (this.isInfinteScroll && this.elements.loadMoreSpinnerWrapper && this.elements.loadMoreAnchor) {
|
||||
// Since the spinner has to be shown after the new content (posts), it should be appended after the anchor element.
|
||||
this.elements.loadMoreAnchor.insertAdjacentElement('afterend', this.elements.loadMoreSpinnerWrapper);
|
||||
}
|
||||
this.elements.postsWidgetWrapper.classList.remove(this.classes.loadMoreIsLoading);
|
||||
}
|
||||
handleUiWhenNoPosts() {
|
||||
this.elements.postsWidgetWrapper.classList.add(this.classes.loadMorePaginationEnd);
|
||||
}
|
||||
afterInsertPosts() {}
|
||||
handleSuccessFetch(result) {
|
||||
this.handleUiAfterLoading();
|
||||
const selectors = this.getSettings('selectors');
|
||||
|
||||
// Grabbing only the new articles from the response without the existing ones (prevent posts duplication).
|
||||
const postsElements = result.querySelectorAll(`[data-id="${this.elementId}"] ${selectors.postsContainer} > ${selectors.postWrapperTag}`);
|
||||
const nextPageUrl = result.querySelector(`[data-id="${this.elementId}"] .e-load-more-anchor`).getAttribute('data-next-page');
|
||||
postsElements.forEach(element => this.elements.postsContainer.append(element));
|
||||
this.elements.loadMoreAnchor.setAttribute('data-page', this.currentPage);
|
||||
this.elements.loadMoreAnchor.setAttribute('data-next-page', nextPageUrl);
|
||||
if (this.currentPage === this.maxPage) {
|
||||
this.handleUiWhenNoPosts();
|
||||
}
|
||||
this.afterInsertPosts(postsElements, result);
|
||||
}
|
||||
handlePostsQuery() {
|
||||
this.handleUiBeforeLoading();
|
||||
this.currentPage++;
|
||||
const nextPageUrl = this.elements.loadMoreAnchor.getAttribute('data-next-page');
|
||||
return fetch(nextPageUrl).then(response => response.text()).then(html => {
|
||||
// Convert the HTML string into a document object
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString(html, 'text/html');
|
||||
this.handleSuccessFetch(doc);
|
||||
});
|
||||
}
|
||||
}
|
||||
exports["default"] = LoadMore;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/posts/assets/js/frontend/handlers/posts.js":
|
||||
/*!*************************************************************!*\
|
||||
!*** ../modules/posts/assets/js/frontend/handlers/posts.js ***!
|
||||
\*************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _default = exports["default"] = elementorModules.frontend.handlers.Base.extend({
|
||||
getSkinPrefix() {
|
||||
return 'classic_';
|
||||
},
|
||||
bindEvents() {
|
||||
elementorFrontend.addListenerOnce(this.getModelCID(), 'resize', this.onWindowResize);
|
||||
},
|
||||
unbindEvents() {
|
||||
elementorFrontend.removeListeners(this.getModelCID(), 'resize', this.onWindowResize);
|
||||
},
|
||||
getClosureMethodsNames() {
|
||||
return elementorModules.frontend.handlers.Base.prototype.getClosureMethodsNames.apply(this, arguments).concat(['fitImages', 'onWindowResize', 'runMasonry']);
|
||||
},
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
classes: {
|
||||
fitHeight: 'elementor-fit-height',
|
||||
hasItemRatio: 'elementor-has-item-ratio'
|
||||
},
|
||||
selectors: {
|
||||
postsContainer: '.elementor-posts-container',
|
||||
post: '.elementor-post',
|
||||
postThumbnail: '.elementor-post__thumbnail',
|
||||
postThumbnailImage: '.elementor-post__thumbnail img'
|
||||
}
|
||||
};
|
||||
},
|
||||
getDefaultElements() {
|
||||
var selectors = this.getSettings('selectors');
|
||||
return {
|
||||
$postsContainer: this.$element.find(selectors.postsContainer),
|
||||
$posts: this.$element.find(selectors.post)
|
||||
};
|
||||
},
|
||||
fitImage($post) {
|
||||
var settings = this.getSettings(),
|
||||
$imageParent = $post.find(settings.selectors.postThumbnail),
|
||||
$image = $imageParent.find('img'),
|
||||
image = $image[0];
|
||||
if (!image) {
|
||||
return;
|
||||
}
|
||||
var imageParentRatio = $imageParent.outerHeight() / $imageParent.outerWidth(),
|
||||
imageRatio = image.naturalHeight / image.naturalWidth;
|
||||
$imageParent.toggleClass(settings.classes.fitHeight, imageRatio < imageParentRatio);
|
||||
},
|
||||
fitImages() {
|
||||
var $ = jQuery,
|
||||
self = this,
|
||||
itemRatio = getComputedStyle(this.$element[0], ':after').content,
|
||||
settings = this.getSettings();
|
||||
if (self.isMasonryEnabled()) {
|
||||
this.elements.$postsContainer.removeClass(settings.classes.hasItemRatio);
|
||||
return;
|
||||
}
|
||||
this.elements.$postsContainer.toggleClass(settings.classes.hasItemRatio, !!itemRatio.match(/\d/));
|
||||
this.elements.$posts.each(function () {
|
||||
var $post = $(this),
|
||||
$image = $post.find(settings.selectors.postThumbnailImage);
|
||||
self.fitImage($post);
|
||||
$image.on('load', function () {
|
||||
self.fitImage($post);
|
||||
});
|
||||
});
|
||||
},
|
||||
setColsCountSettings() {
|
||||
const settings = this.getElementSettings(),
|
||||
skinPrefix = this.getSkinPrefix(),
|
||||
colsCount = elementorProFrontend.utils.controls.getResponsiveControlValue(settings, `${skinPrefix}columns`);
|
||||
this.setSettings('colsCount', colsCount);
|
||||
},
|
||||
isMasonryEnabled() {
|
||||
return !!this.getElementSettings(this.getSkinPrefix() + 'masonry');
|
||||
},
|
||||
initMasonry() {
|
||||
imagesLoaded(this.elements.$posts, this.runMasonry);
|
||||
},
|
||||
getVerticalSpaceBetween() {
|
||||
/* The `verticalSpaceBetween` variable is set up in a way that supports older versions of the portfolio widget */
|
||||
let verticalSpaceBetween = elementorProFrontend.utils.controls.getResponsiveControlValue(this.getElementSettings(), `${this.getSkinPrefix()}row_gap`, 'size');
|
||||
if ('' === this.getSkinPrefix() && '' === verticalSpaceBetween) {
|
||||
verticalSpaceBetween = this.getElementSettings('item_gap.size');
|
||||
}
|
||||
return verticalSpaceBetween;
|
||||
},
|
||||
runMasonry() {
|
||||
var elements = this.elements;
|
||||
elements.$posts.css({
|
||||
marginTop: '',
|
||||
transitionDuration: ''
|
||||
});
|
||||
this.setColsCountSettings();
|
||||
var colsCount = this.getSettings('colsCount'),
|
||||
hasMasonry = this.isMasonryEnabled() && colsCount >= 2;
|
||||
elements.$postsContainer.toggleClass('elementor-posts-masonry', hasMasonry);
|
||||
if (!hasMasonry) {
|
||||
elements.$postsContainer.height('');
|
||||
return;
|
||||
}
|
||||
const verticalSpaceBetween = this.getVerticalSpaceBetween();
|
||||
var masonry = new elementorModules.utils.Masonry({
|
||||
container: elements.$postsContainer,
|
||||
items: elements.$posts.filter(':visible'),
|
||||
columnsCount: this.getSettings('colsCount'),
|
||||
verticalSpaceBetween: verticalSpaceBetween || 0
|
||||
});
|
||||
masonry.run();
|
||||
},
|
||||
run() {
|
||||
// For slow browsers
|
||||
setTimeout(this.fitImages, 0);
|
||||
this.initMasonry();
|
||||
},
|
||||
onInit() {
|
||||
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
|
||||
this.bindEvents();
|
||||
this.run();
|
||||
},
|
||||
onWindowResize() {
|
||||
this.fitImages();
|
||||
this.runMasonry();
|
||||
},
|
||||
onElementChange() {
|
||||
this.fitImages();
|
||||
setTimeout(this.runMasonry);
|
||||
}
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/theme-builder/assets/js/frontend/handlers/archive-posts-load-more.js":
|
||||
/*!***************************************************************************************!*\
|
||||
!*** ../modules/theme-builder/assets/js/frontend/handlers/archive-posts-load-more.js ***!
|
||||
\***************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _loadMore = _interopRequireDefault(__webpack_require__(/*! ../../../../../posts/assets/js/frontend/handlers/load-more */ "../modules/posts/assets/js/frontend/handlers/load-more.js"));
|
||||
class ArchivePostsLoadMore extends _loadMore.default {}
|
||||
exports["default"] = ArchivePostsLoadMore;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/theme-builder/assets/js/frontend/handlers/archive-posts-skin-cards.js":
|
||||
/*!****************************************************************************************!*\
|
||||
!*** ../modules/theme-builder/assets/js/frontend/handlers/archive-posts-skin-cards.js ***!
|
||||
\****************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _cards = _interopRequireDefault(__webpack_require__(/*! ../../../../../posts/assets/js/frontend/handlers/cards */ "../modules/posts/assets/js/frontend/handlers/cards.js"));
|
||||
var _default = exports["default"] = _cards.default.extend({
|
||||
getSkinPrefix() {
|
||||
return 'archive_cards_';
|
||||
}
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/theme-builder/assets/js/frontend/handlers/archive-posts-skin-classic.js":
|
||||
/*!******************************************************************************************!*\
|
||||
!*** ../modules/theme-builder/assets/js/frontend/handlers/archive-posts-skin-classic.js ***!
|
||||
\******************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _posts = _interopRequireDefault(__webpack_require__(/*! modules/posts/assets/js/frontend/handlers/posts */ "../modules/posts/assets/js/frontend/handlers/posts.js"));
|
||||
var _default = exports["default"] = _posts.default.extend({
|
||||
getSkinPrefix() {
|
||||
return 'archive_classic_';
|
||||
}
|
||||
});
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=archive-posts.0aae8c3bd7d196797b6c.bundle.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/archive-posts.d30c917134774f65dd6d.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/archive-posts.d30c917134774f65dd6d.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,294 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["carousel"],{
|
||||
|
||||
/***/ "../modules/carousel/assets/js/frontend/handlers/base.js":
|
||||
/*!***************************************************************!*\
|
||||
!*** ../modules/carousel/assets/js/frontend/handlers/base.js ***!
|
||||
\***************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class CarouselBase extends elementorModules.frontend.handlers.SwiperBase {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
swiperContainer: '.elementor-main-swiper',
|
||||
swiperSlide: '.swiper-slide'
|
||||
},
|
||||
slidesPerView: {
|
||||
widescreen: 3,
|
||||
desktop: 3,
|
||||
laptop: 3,
|
||||
tablet_extra: 3,
|
||||
tablet: 2,
|
||||
mobile_extra: 2,
|
||||
mobile: 1
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const selectors = this.getSettings('selectors'),
|
||||
elements = {
|
||||
$swiperContainer: this.$element.find(selectors.swiperContainer)
|
||||
};
|
||||
elements.$slides = elements.$swiperContainer.find(selectors.swiperSlide);
|
||||
return elements;
|
||||
}
|
||||
getEffect() {
|
||||
return this.getElementSettings('effect');
|
||||
}
|
||||
getDeviceSlidesPerView(device) {
|
||||
const slidesPerViewKey = 'slides_per_view' + ('desktop' === device ? '' : '_' + device);
|
||||
return Math.min(this.getSlidesCount(), +this.getElementSettings(slidesPerViewKey) || this.getSettings('slidesPerView')[device]);
|
||||
}
|
||||
getSlidesPerView(device) {
|
||||
if ('slide' === this.getEffect()) {
|
||||
return this.getDeviceSlidesPerView(device);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
getDeviceSlidesToScroll(device) {
|
||||
const slidesToScrollKey = 'slides_to_scroll' + ('desktop' === device ? '' : '_' + device);
|
||||
return Math.min(this.getSlidesCount(), +this.getElementSettings(slidesToScrollKey) || 1);
|
||||
}
|
||||
getSlidesToScroll(device) {
|
||||
if ('slide' === this.getEffect()) {
|
||||
return this.getDeviceSlidesToScroll(device);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
getSpaceBetween(device) {
|
||||
let propertyName = 'space_between';
|
||||
if (device && 'desktop' !== device) {
|
||||
propertyName += '_' + device;
|
||||
}
|
||||
return this.getElementSettings(propertyName).size || 0;
|
||||
}
|
||||
getSwiperOptions() {
|
||||
const elementSettings = this.getElementSettings();
|
||||
const swiperOptions = {
|
||||
grabCursor: true,
|
||||
initialSlide: this.getInitialSlide(),
|
||||
slidesPerView: this.getSlidesPerView('desktop'),
|
||||
slidesPerGroup: this.getSlidesToScroll('desktop'),
|
||||
spaceBetween: this.getSpaceBetween(),
|
||||
loop: 'yes' === elementSettings.loop,
|
||||
speed: elementSettings.speed,
|
||||
effect: this.getEffect(),
|
||||
preventClicksPropagation: false,
|
||||
slideToClickedSlide: true,
|
||||
handleElementorBreakpoints: true
|
||||
};
|
||||
if ('yes' === elementSettings.lazyload) {
|
||||
swiperOptions.lazy = {
|
||||
loadPrevNext: true,
|
||||
loadPrevNextAmount: 1
|
||||
};
|
||||
}
|
||||
if (elementSettings.show_arrows) {
|
||||
swiperOptions.navigation = {
|
||||
prevEl: '.elementor-swiper-button-prev',
|
||||
nextEl: '.elementor-swiper-button-next'
|
||||
};
|
||||
}
|
||||
if (elementSettings.pagination) {
|
||||
swiperOptions.pagination = {
|
||||
el: '.swiper-pagination',
|
||||
type: elementSettings.pagination,
|
||||
clickable: true
|
||||
};
|
||||
}
|
||||
if ('cube' !== this.getEffect()) {
|
||||
const breakpointsSettings = {},
|
||||
breakpoints = elementorFrontend.config.responsive.activeBreakpoints;
|
||||
Object.keys(breakpoints).forEach(breakpointName => {
|
||||
breakpointsSettings[breakpoints[breakpointName].value] = {
|
||||
slidesPerView: this.getSlidesPerView(breakpointName),
|
||||
slidesPerGroup: this.getSlidesToScroll(breakpointName),
|
||||
spaceBetween: this.getSpaceBetween(breakpointName)
|
||||
};
|
||||
});
|
||||
swiperOptions.breakpoints = breakpointsSettings;
|
||||
}
|
||||
if (!this.isEdit && elementSettings.autoplay) {
|
||||
swiperOptions.autoplay = {
|
||||
delay: elementSettings.autoplay_speed,
|
||||
disableOnInteraction: !!elementSettings.pause_on_interaction
|
||||
};
|
||||
}
|
||||
return swiperOptions;
|
||||
}
|
||||
getDeviceBreakpointValue(device) {
|
||||
if (!this.breakpointsDictionary) {
|
||||
const breakpoints = elementorFrontend.config.responsive.activeBreakpoints;
|
||||
this.breakpointsDictionary = {};
|
||||
Object.keys(breakpoints).forEach(breakpointName => {
|
||||
this.breakpointsDictionary[breakpointName] = breakpoints[breakpointName].value;
|
||||
});
|
||||
}
|
||||
return this.breakpointsDictionary[device];
|
||||
}
|
||||
updateSpaceBetween(propertyName) {
|
||||
const deviceMatch = propertyName.match('space_between_(.*)'),
|
||||
device = deviceMatch ? deviceMatch[1] : 'desktop',
|
||||
newSpaceBetween = this.getSpaceBetween(device);
|
||||
if ('desktop' !== device) {
|
||||
this.swiper.params.breakpoints[this.getDeviceBreakpointValue(device)].spaceBetween = newSpaceBetween;
|
||||
} else {
|
||||
this.swiper.params.spaceBetween = newSpaceBetween;
|
||||
}
|
||||
this.swiper.params.spaceBetween = newSpaceBetween;
|
||||
this.swiper.update();
|
||||
}
|
||||
async onInit() {
|
||||
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
|
||||
if (1 >= this.getSlidesCount()) {
|
||||
return;
|
||||
}
|
||||
const Swiper = elementorFrontend.utils.swiper;
|
||||
this.swiper = await new Swiper(this.elements.$swiperContainer, this.getSwiperOptions());
|
||||
const elementSettings = this.getElementSettings();
|
||||
if ('yes' === elementSettings.pause_on_hover) {
|
||||
this.togglePauseOnHover(true);
|
||||
}
|
||||
|
||||
// Expose the swiper instance in the frontend
|
||||
this.elements.$swiperContainer.data('swiper', this.swiper);
|
||||
}
|
||||
getChangeableProperties() {
|
||||
return {
|
||||
autoplay: 'autoplay',
|
||||
pause_on_hover: 'pauseOnHover',
|
||||
pause_on_interaction: 'disableOnInteraction',
|
||||
autoplay_speed: 'delay',
|
||||
speed: 'speed',
|
||||
width: 'width'
|
||||
};
|
||||
}
|
||||
updateSwiperOption(propertyName) {
|
||||
if (0 === propertyName.indexOf('width')) {
|
||||
this.swiper.update();
|
||||
return;
|
||||
}
|
||||
const elementSettings = this.getElementSettings(),
|
||||
newSettingValue = elementSettings[propertyName],
|
||||
changeableProperties = this.getChangeableProperties();
|
||||
let propertyToUpdate = changeableProperties[propertyName],
|
||||
valueToUpdate = newSettingValue;
|
||||
|
||||
// Handle special cases where the value to update is not the value that the Swiper library accepts
|
||||
switch (propertyName) {
|
||||
case 'autoplay':
|
||||
if (newSettingValue) {
|
||||
valueToUpdate = {
|
||||
delay: elementSettings.autoplay_speed,
|
||||
disableOnInteraction: 'yes' === elementSettings.pause_on_interaction
|
||||
};
|
||||
} else {
|
||||
valueToUpdate = false;
|
||||
}
|
||||
break;
|
||||
case 'autoplay_speed':
|
||||
propertyToUpdate = 'autoplay';
|
||||
valueToUpdate = {
|
||||
delay: newSettingValue,
|
||||
disableOnInteraction: 'yes' === elementSettings.pause_on_interaction
|
||||
};
|
||||
break;
|
||||
case 'pause_on_hover':
|
||||
this.togglePauseOnHover('yes' === newSettingValue);
|
||||
break;
|
||||
case 'pause_on_interaction':
|
||||
valueToUpdate = 'yes' === newSettingValue;
|
||||
break;
|
||||
}
|
||||
|
||||
// 'pause_on_hover' is implemented by the handler with event listeners, not the Swiper library
|
||||
if ('pause_on_hover' !== propertyName) {
|
||||
this.swiper.params[propertyToUpdate] = valueToUpdate;
|
||||
}
|
||||
this.swiper.update();
|
||||
}
|
||||
onElementChange(propertyName) {
|
||||
if (1 >= this.getSlidesCount()) {
|
||||
return;
|
||||
}
|
||||
if (0 === propertyName.indexOf('width')) {
|
||||
this.swiper.update();
|
||||
|
||||
// If there is another thumbs slider, like in the Media Carousel widget.
|
||||
if (this.thumbsSwiper) {
|
||||
this.thumbsSwiper.update();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// This is for handling the responsive control 'space_between'.
|
||||
// Responsive controls require a separate way of handling, and some currently don't work
|
||||
// (Swiper bug, currently exists in v5.3.6) TODO: update Swiper when bug is fixed and handle responsive controls
|
||||
if (0 === propertyName.indexOf('space_between')) {
|
||||
this.updateSpaceBetween(propertyName);
|
||||
return;
|
||||
}
|
||||
const changeableProperties = this.getChangeableProperties();
|
||||
if (Object.prototype.hasOwnProperty.call(changeableProperties, propertyName)) {
|
||||
this.updateSwiperOption(propertyName);
|
||||
}
|
||||
}
|
||||
onEditSettingsChange(propertyName) {
|
||||
if (1 >= this.getSlidesCount()) {
|
||||
return;
|
||||
}
|
||||
if ('activeItemIndex' === propertyName) {
|
||||
this.swiper.slideToLoop(this.getEditSettings('activeItemIndex') - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports["default"] = CarouselBase;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/carousel/assets/js/frontend/handlers/testimonial-carousel.js":
|
||||
/*!*******************************************************************************!*\
|
||||
!*** ../modules/carousel/assets/js/frontend/handlers/testimonial-carousel.js ***!
|
||||
\*******************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../modules/carousel/assets/js/frontend/handlers/base.js"));
|
||||
class TestimonialCarousel extends _base.default {
|
||||
getDefaultSettings() {
|
||||
const defaultSettings = super.getDefaultSettings();
|
||||
defaultSettings.slidesPerView = {
|
||||
desktop: 1
|
||||
};
|
||||
Object.keys(elementorFrontend.config.responsive.activeBreakpoints).forEach(breakpointName => {
|
||||
defaultSettings.slidesPerView[breakpointName] = 1;
|
||||
});
|
||||
if (defaultSettings.loop) {
|
||||
defaultSettings.loopedSlides = this.getSlidesCount();
|
||||
}
|
||||
return defaultSettings;
|
||||
}
|
||||
getEffect() {
|
||||
return 'slide';
|
||||
}
|
||||
}
|
||||
exports["default"] = TestimonialCarousel;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=carousel.998a291abf70435fd698.bundle.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/carousel.9b02b45d7826c1c48f33.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/carousel.9b02b45d7826c1c48f33.bundle.min.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[369],{5467:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class CarouselBase extends elementorModules.frontend.handlers.SwiperBase{getDefaultSettings(){return{selectors:{swiperContainer:".elementor-main-swiper",swiperSlide:".swiper-slide"},slidesPerView:{widescreen:3,desktop:3,laptop:3,tablet_extra:3,tablet:2,mobile_extra:2,mobile:1}}}getDefaultElements(){const e=this.getSettings("selectors"),t={$swiperContainer:this.$element.find(e.swiperContainer)};return t.$slides=t.$swiperContainer.find(e.swiperSlide),t}getEffect(){return this.getElementSettings("effect")}getDeviceSlidesPerView(e){const t="slides_per_view"+("desktop"===e?"":"_"+e);return Math.min(this.getSlidesCount(),+this.getElementSettings(t)||this.getSettings("slidesPerView")[e])}getSlidesPerView(e){return"slide"===this.getEffect()?this.getDeviceSlidesPerView(e):1}getDeviceSlidesToScroll(e){const t="slides_to_scroll"+("desktop"===e?"":"_"+e);return Math.min(this.getSlidesCount(),+this.getElementSettings(t)||1)}getSlidesToScroll(e){return"slide"===this.getEffect()?this.getDeviceSlidesToScroll(e):1}getSpaceBetween(e){let t="space_between";return e&&"desktop"!==e&&(t+="_"+e),this.getElementSettings(t).size||0}getSwiperOptions(){const e=this.getElementSettings(),t={grabCursor:!0,initialSlide:this.getInitialSlide(),slidesPerView:this.getSlidesPerView("desktop"),slidesPerGroup:this.getSlidesToScroll("desktop"),spaceBetween:this.getSpaceBetween(),loop:"yes"===e.loop,speed:e.speed,effect:this.getEffect(),preventClicksPropagation:!1,slideToClickedSlide:!0,handleElementorBreakpoints:!0};if("yes"===e.lazyload&&(t.lazy={loadPrevNext:!0,loadPrevNextAmount:1}),e.show_arrows&&(t.navigation={prevEl:".elementor-swiper-button-prev",nextEl:".elementor-swiper-button-next"}),e.pagination&&(t.pagination={el:".swiper-pagination",type:e.pagination,clickable:!0}),"cube"!==this.getEffect()){const e={},i=elementorFrontend.config.responsive.activeBreakpoints;Object.keys(i).forEach((t=>{e[i[t].value]={slidesPerView:this.getSlidesPerView(t),slidesPerGroup:this.getSlidesToScroll(t),spaceBetween:this.getSpaceBetween(t)}})),t.breakpoints=e}return!this.isEdit&&e.autoplay&&(t.autoplay={delay:e.autoplay_speed,disableOnInteraction:!!e.pause_on_interaction}),t}getDeviceBreakpointValue(e){if(!this.breakpointsDictionary){const e=elementorFrontend.config.responsive.activeBreakpoints;this.breakpointsDictionary={},Object.keys(e).forEach((t=>{this.breakpointsDictionary[t]=e[t].value}))}return this.breakpointsDictionary[e]}updateSpaceBetween(e){const t=e.match("space_between_(.*)"),i=t?t[1]:"desktop",s=this.getSpaceBetween(i);"desktop"!==i?this.swiper.params.breakpoints[this.getDeviceBreakpointValue(i)].spaceBetween=s:this.swiper.params.spaceBetween=s,this.swiper.params.spaceBetween=s,this.swiper.update()}async onInit(){if(elementorModules.frontend.handlers.Base.prototype.onInit.apply(this,arguments),1>=this.getSlidesCount())return;const e=elementorFrontend.utils.swiper;this.swiper=await new e(this.elements.$swiperContainer,this.getSwiperOptions());"yes"===this.getElementSettings().pause_on_hover&&this.togglePauseOnHover(!0),this.elements.$swiperContainer.data("swiper",this.swiper)}getChangeableProperties(){return{autoplay:"autoplay",pause_on_hover:"pauseOnHover",pause_on_interaction:"disableOnInteraction",autoplay_speed:"delay",speed:"speed",width:"width"}}updateSwiperOption(e){if(0===e.indexOf("width"))return void this.swiper.update();const t=this.getElementSettings(),i=t[e];let s=this.getChangeableProperties()[e],n=i;switch(e){case"autoplay":n=!!i&&{delay:t.autoplay_speed,disableOnInteraction:"yes"===t.pause_on_interaction};break;case"autoplay_speed":s="autoplay",n={delay:i,disableOnInteraction:"yes"===t.pause_on_interaction};break;case"pause_on_hover":this.togglePauseOnHover("yes"===i);break;case"pause_on_interaction":n="yes"===i}"pause_on_hover"!==e&&(this.swiper.params[s]=n),this.swiper.update()}onElementChange(e){if(1>=this.getSlidesCount())return;if(0===e.indexOf("width"))return this.swiper.update(),void(this.thumbsSwiper&&this.thumbsSwiper.update());if(0===e.indexOf("space_between"))return void this.updateSpaceBetween(e);const t=this.getChangeableProperties();Object.prototype.hasOwnProperty.call(t,e)&&this.updateSwiperOption(e)}onEditSettingsChange(e){1>=this.getSlidesCount()||"activeItemIndex"===e&&this.swiper.slideToLoop(this.getEditSettings("activeItemIndex")-1)}}t.default=CarouselBase},4526:(e,t,i)=>{var s=i(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=s(i(5467));class TestimonialCarousel extends n.default{getDefaultSettings(){const e=super.getDefaultSettings();return e.slidesPerView={desktop:1},Object.keys(elementorFrontend.config.responsive.activeBreakpoints).forEach((t=>{e.slidesPerView[t]=1})),e.loop&&(e.loopedSlides=this.getSlidesCount()),e}getEffect(){return"slide"}}t.default=TestimonialCarousel}}]);
|
||||
2
wp-content/plugins/elementor-pro/assets/js/code-highlight.28a979661569ddbbf60d.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/code-highlight.28a979661569ddbbf60d.bundle.min.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[714],{8604:(e,l)=>{Object.defineProperty(l,"__esModule",{value:!0}),l.default=void 0;class codeHighlightHandler extends elementorModules.frontend.handlers.Base{onInit(){super.onInit(...arguments),Prism.highlightAllUnder(this.$element[0],!1)}onElementChange(){Prism.highlightAllUnder(this.$element[0],!1)}}l.default=codeHighlightHandler}}]);
|
||||
@@ -0,0 +1,32 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["code-highlight"],{
|
||||
|
||||
/***/ "../modules/code-highlight/assets/js/frontend/handler.js":
|
||||
/*!***************************************************************!*\
|
||||
!*** ../modules/code-highlight/assets/js/frontend/handler.js ***!
|
||||
\***************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class codeHighlightHandler extends elementorModules.frontend.handlers.Base {
|
||||
onInit() {
|
||||
super.onInit(...arguments);
|
||||
Prism.highlightAllUnder(this.$element[0], false);
|
||||
}
|
||||
onElementChange() {
|
||||
// Handle the changes for "Word Wrap" feature
|
||||
Prism.highlightAllUnder(this.$element[0], false);
|
||||
}
|
||||
}
|
||||
exports["default"] = codeHighlightHandler;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=code-highlight.8b676d9a001f56fb77fa.bundle.js.map
|
||||
@@ -0,0 +1,148 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["countdown"],{
|
||||
|
||||
/***/ "../modules/countdown/assets/js/frontend/handlers/countdown.js":
|
||||
/*!*********************************************************************!*\
|
||||
!*** ../modules/countdown/assets/js/frontend/handlers/countdown.js ***!
|
||||
\*********************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _default = exports["default"] = elementorModules.frontend.handlers.Base.extend({
|
||||
cache: null,
|
||||
cacheElements() {
|
||||
const $countDown = this.$element.find('.elementor-countdown-wrapper');
|
||||
this.cache = {
|
||||
$countDown,
|
||||
timeInterval: null,
|
||||
elements: {
|
||||
$countdown: $countDown.find('.elementor-countdown-wrapper'),
|
||||
$daysSpan: $countDown.find('.elementor-countdown-days'),
|
||||
$hoursSpan: $countDown.find('.elementor-countdown-hours'),
|
||||
$minutesSpan: $countDown.find('.elementor-countdown-minutes'),
|
||||
$secondsSpan: $countDown.find('.elementor-countdown-seconds'),
|
||||
$expireMessage: $countDown.parent().find('.elementor-countdown-expire--message')
|
||||
},
|
||||
data: {
|
||||
id: this.$element.data('id'),
|
||||
endTime: new Date($countDown.data('date') * 1000),
|
||||
actions: $countDown.data('expire-actions'),
|
||||
evergreenInterval: $countDown.data('evergreen-interval')
|
||||
}
|
||||
};
|
||||
},
|
||||
onInit() {
|
||||
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
|
||||
this.cacheElements();
|
||||
if (0 < this.cache.data.evergreenInterval) {
|
||||
this.cache.data.endTime = this.getEvergreenDate();
|
||||
}
|
||||
this.initializeClock();
|
||||
},
|
||||
updateClock() {
|
||||
const self = this,
|
||||
timeRemaining = this.getTimeRemaining(this.cache.data.endTime);
|
||||
jQuery.each(timeRemaining.parts, function (timePart) {
|
||||
const $element = self.cache.elements['$' + timePart + 'Span'];
|
||||
let partValue = this.toString();
|
||||
if (1 === partValue.length) {
|
||||
partValue = 0 + partValue;
|
||||
}
|
||||
if ($element.length) {
|
||||
$element.text(partValue);
|
||||
}
|
||||
});
|
||||
if (timeRemaining.total <= 0) {
|
||||
clearInterval(this.cache.timeInterval);
|
||||
this.runActions();
|
||||
}
|
||||
},
|
||||
initializeClock() {
|
||||
const self = this;
|
||||
this.updateClock();
|
||||
this.cache.timeInterval = setInterval(function () {
|
||||
self.updateClock();
|
||||
}, 1000);
|
||||
},
|
||||
runActions() {
|
||||
const self = this;
|
||||
|
||||
// Trigger general event for 3rd patry actions
|
||||
self.$element.trigger('countdown_expire', self.$element);
|
||||
if (!this.cache.data.actions) {
|
||||
return;
|
||||
}
|
||||
this.cache.data.actions.forEach(function (action) {
|
||||
switch (action.type) {
|
||||
case 'hide':
|
||||
self.cache.$countDown.hide();
|
||||
break;
|
||||
case 'redirect':
|
||||
if (action.redirect_url && action.redirect_url.startsWith('http')) {
|
||||
window.location.href = action.redirect_url;
|
||||
}
|
||||
break;
|
||||
case 'message':
|
||||
self.cache.elements.$expireMessage.show();
|
||||
break;
|
||||
}
|
||||
});
|
||||
},
|
||||
getTimeRemaining(endTime) {
|
||||
const timeRemaining = endTime - new Date();
|
||||
let seconds = Math.floor(timeRemaining / 1000 % 60),
|
||||
minutes = Math.floor(timeRemaining / 1000 / 60 % 60),
|
||||
hours = Math.floor(timeRemaining / (1000 * 60 * 60) % 24),
|
||||
days = Math.floor(timeRemaining / (1000 * 60 * 60 * 24));
|
||||
if (days < 0 || hours < 0 || minutes < 0) {
|
||||
seconds = minutes = hours = days = 0;
|
||||
}
|
||||
return {
|
||||
total: timeRemaining,
|
||||
parts: {
|
||||
days,
|
||||
hours,
|
||||
minutes,
|
||||
seconds
|
||||
}
|
||||
};
|
||||
},
|
||||
getEvergreenDate() {
|
||||
const self = this,
|
||||
id = this.cache.data.id,
|
||||
interval = this.cache.data.evergreenInterval,
|
||||
dueDateKey = id + '-evergreen_due_date',
|
||||
intervalKey = id + '-evergreen_interval',
|
||||
localData = {
|
||||
dueDate: localStorage.getItem(dueDateKey),
|
||||
interval: localStorage.getItem(intervalKey)
|
||||
},
|
||||
initEvergreen = function () {
|
||||
var evergreenDueDate = new Date();
|
||||
self.cache.data.endTime = evergreenDueDate.setSeconds(evergreenDueDate.getSeconds() + interval);
|
||||
localStorage.setItem(dueDateKey, self.cache.data.endTime);
|
||||
localStorage.setItem(intervalKey, interval);
|
||||
return self.cache.data.endTime;
|
||||
};
|
||||
if (null === localData.dueDate && null === localData.interval) {
|
||||
return initEvergreen();
|
||||
}
|
||||
if (null !== localData.dueDate && interval !== parseInt(localData.interval, 10)) {
|
||||
return initEvergreen();
|
||||
}
|
||||
if (localData.dueDate > 0 && parseInt(localData.interval, 10) === interval) {
|
||||
return localData.dueDate;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=countdown.60cf02eaf22d71d83f3d.bundle.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/countdown.be941c879efa861dbbfa.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/countdown.be941c879efa861dbbfa.bundle.min.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[804],{5449:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=elementorModules.frontend.handlers.Base.extend({cache:null,cacheElements(){const e=this.$element.find(".elementor-countdown-wrapper");this.cache={$countDown:e,timeInterval:null,elements:{$countdown:e.find(".elementor-countdown-wrapper"),$daysSpan:e.find(".elementor-countdown-days"),$hoursSpan:e.find(".elementor-countdown-hours"),$minutesSpan:e.find(".elementor-countdown-minutes"),$secondsSpan:e.find(".elementor-countdown-seconds"),$expireMessage:e.parent().find(".elementor-countdown-expire--message")},data:{id:this.$element.data("id"),endTime:new Date(1e3*e.data("date")),actions:e.data("expire-actions"),evergreenInterval:e.data("evergreen-interval")}}},onInit(){elementorModules.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.cacheElements(),0<this.cache.data.evergreenInterval&&(this.cache.data.endTime=this.getEvergreenDate()),this.initializeClock()},updateClock(){const e=this,t=this.getTimeRemaining(this.cache.data.endTime);jQuery.each(t.parts,(function(t){const n=e.cache.elements["$"+t+"Span"];let a=this.toString();1===a.length&&(a=0+a),n.length&&n.text(a)})),t.total<=0&&(clearInterval(this.cache.timeInterval),this.runActions())},initializeClock(){const e=this;this.updateClock(),this.cache.timeInterval=setInterval((function(){e.updateClock()}),1e3)},runActions(){const e=this;e.$element.trigger("countdown_expire",e.$element),this.cache.data.actions&&this.cache.data.actions.forEach((function(t){switch(t.type){case"hide":e.cache.$countDown.hide();break;case"redirect":t.redirect_url&&t.redirect_url.startsWith("http")&&(window.location.href=t.redirect_url);break;case"message":e.cache.elements.$expireMessage.show()}}))},getTimeRemaining(e){const t=e-new Date;let n=Math.floor(t/1e3%60),a=Math.floor(t/1e3/60%60),r=Math.floor(t/36e5%24),o=Math.floor(t/864e5);return(o<0||r<0||a<0)&&(n=a=r=o=0),{total:t,parts:{days:o,hours:r,minutes:a,seconds:n}}},getEvergreenDate(){const e=this,t=this.cache.data.id,n=this.cache.data.evergreenInterval,a=t+"-evergreen_due_date",r=t+"-evergreen_interval",o={dueDate:localStorage.getItem(a),interval:localStorage.getItem(r)},initEvergreen=function(){var t=new Date;return e.cache.data.endTime=t.setSeconds(t.getSeconds()+n),localStorage.setItem(a,e.cache.data.endTime),localStorage.setItem(r,n),e.cache.data.endTime};return null===o.dueDate&&null===o.interval||null!==o.dueDate&&n!==parseInt(o.interval,10)?initEvergreen():o.dueDate>0&&parseInt(o.interval,10)===n?o.dueDate:void 0}})}}]);
|
||||
2648
wp-content/plugins/elementor-pro/assets/js/custom-code.js
Normal file
2648
wp-content/plugins/elementor-pro/assets/js/custom-code.js
Normal file
File diff suppressed because it is too large
Load Diff
2
wp-content/plugins/elementor-pro/assets/js/custom-code.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/custom-code.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5508
wp-content/plugins/elementor-pro/assets/js/display-conditions.js
Normal file
5508
wp-content/plugins/elementor-pro/assets/js/display-conditions.js
Normal file
File diff suppressed because one or more lines are too long
2
wp-content/plugins/elementor-pro/assets/js/display-conditions.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/display-conditions.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
9744
wp-content/plugins/elementor-pro/assets/js/editor.js
Normal file
9744
wp-content/plugins/elementor-pro/assets/js/editor.js
Normal file
File diff suppressed because it is too large
Load Diff
2
wp-content/plugins/elementor-pro/assets/js/editor.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/editor.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2475
wp-content/plugins/elementor-pro/assets/js/elements-handlers.js
Normal file
2475
wp-content/plugins/elementor-pro/assets/js/elements-handlers.js
Normal file
File diff suppressed because it is too large
Load Diff
2
wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7131
wp-content/plugins/elementor-pro/assets/js/form-submission-admin.js
Normal file
7131
wp-content/plugins/elementor-pro/assets/js/form-submission-admin.js
Normal file
File diff suppressed because it is too large
Load Diff
2
wp-content/plugins/elementor-pro/assets/js/form-submission-admin.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/form-submission-admin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
wp-content/plugins/elementor-pro/assets/js/form.10bf1a6475f0741920ff.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/form.10bf1a6475f0741920ff.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,945 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["form"],{
|
||||
|
||||
/***/ "../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js":
|
||||
/*!***********************************************************************************!*\
|
||||
!*** ../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js ***!
|
||||
\***********************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class DataTimeFieldBase extends elementorModules.frontend.handlers.Base {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
fields: this.getFieldsSelector()
|
||||
},
|
||||
classes: {
|
||||
useNative: 'elementor-use-native'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const {
|
||||
selectors
|
||||
} = this.getDefaultSettings();
|
||||
return {
|
||||
$fields: this.$element.find(selectors.fields)
|
||||
};
|
||||
}
|
||||
addPicker(element) {
|
||||
const {
|
||||
classes
|
||||
} = this.getDefaultSettings(),
|
||||
$element = jQuery(element);
|
||||
if ($element.hasClass(classes.useNative)) {
|
||||
return;
|
||||
}
|
||||
element.flatpickr(this.getPickerOptions(element));
|
||||
}
|
||||
onInit() {
|
||||
super.onInit(...arguments);
|
||||
this.elements.$fields.each((index, element) => this.addPicker(element));
|
||||
}
|
||||
}
|
||||
exports["default"] = DataTimeFieldBase;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/forms/assets/js/frontend/handlers/fields/date.js":
|
||||
/*!*******************************************************************!*\
|
||||
!*** ../modules/forms/assets/js/frontend/handlers/fields/date.js ***!
|
||||
\*******************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _dataTimeFieldBase = _interopRequireDefault(__webpack_require__(/*! ./data-time-field-base */ "../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js"));
|
||||
class DateField extends _dataTimeFieldBase.default {
|
||||
getFieldsSelector() {
|
||||
return '.elementor-date-field';
|
||||
}
|
||||
getPickerOptions(element) {
|
||||
const $element = jQuery(element);
|
||||
return {
|
||||
minDate: $element.attr('min') || null,
|
||||
maxDate: $element.attr('max') || null,
|
||||
allowInput: true
|
||||
};
|
||||
}
|
||||
}
|
||||
exports["default"] = DateField;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/forms/assets/js/frontend/handlers/fields/time.js":
|
||||
/*!*******************************************************************!*\
|
||||
!*** ../modules/forms/assets/js/frontend/handlers/fields/time.js ***!
|
||||
\*******************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _dataTimeFieldBase = _interopRequireDefault(__webpack_require__(/*! ./data-time-field-base */ "../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js"));
|
||||
class TimeField extends _dataTimeFieldBase.default {
|
||||
getFieldsSelector() {
|
||||
return '.elementor-time-field';
|
||||
}
|
||||
getPickerOptions() {
|
||||
return {
|
||||
noCalendar: true,
|
||||
enableTime: true,
|
||||
allowInput: true
|
||||
};
|
||||
}
|
||||
}
|
||||
exports["default"] = TimeField;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/forms/assets/js/frontend/handlers/form-redirect.js":
|
||||
/*!*********************************************************************!*\
|
||||
!*** ../modules/forms/assets/js/frontend/handlers/form-redirect.js ***!
|
||||
\*********************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _default = exports["default"] = elementorModules.frontend.handlers.Base.extend({
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
form: '.elementor-form'
|
||||
}
|
||||
};
|
||||
},
|
||||
getDefaultElements() {
|
||||
var selectors = this.getSettings('selectors'),
|
||||
elements = {};
|
||||
elements.$form = this.$element.find(selectors.form);
|
||||
return elements;
|
||||
},
|
||||
bindEvents() {
|
||||
this.elements.$form.on('form_destruct', this.handleSubmit);
|
||||
},
|
||||
handleSubmit(event, response) {
|
||||
if ('undefined' !== typeof response.data.redirect_url) {
|
||||
location.href = response.data.redirect_url;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/forms/assets/js/frontend/handlers/form-sender.js":
|
||||
/*!*******************************************************************!*\
|
||||
!*** ../modules/forms/assets/js/frontend/handlers/form-sender.js ***!
|
||||
\*******************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _default = exports["default"] = elementorModules.frontend.handlers.Base.extend({
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
form: '.elementor-form',
|
||||
submitButton: '[type="submit"]'
|
||||
},
|
||||
action: 'elementor_pro_forms_send_form',
|
||||
ajaxUrl: elementorProFrontend.config.ajaxurl
|
||||
};
|
||||
},
|
||||
getDefaultElements() {
|
||||
const selectors = this.getSettings('selectors'),
|
||||
elements = {};
|
||||
elements.$form = this.$element.find(selectors.form);
|
||||
elements.$submitButton = elements.$form.find(selectors.submitButton);
|
||||
return elements;
|
||||
},
|
||||
bindEvents() {
|
||||
this.elements.$form.on('submit', this.handleSubmit);
|
||||
const $fileInput = this.elements.$form.find('input[type=file]');
|
||||
if ($fileInput.length) {
|
||||
$fileInput.on('change', this.validateFileSize);
|
||||
}
|
||||
},
|
||||
validateFileSize(event) {
|
||||
const $field = jQuery(event.currentTarget),
|
||||
files = $field[0].files;
|
||||
if (!files.length) {
|
||||
return;
|
||||
}
|
||||
const maxSize = parseInt($field.attr('data-maxsize')) * 1024 * 1024,
|
||||
maxSizeMessage = $field.attr('data-maxsize-message');
|
||||
const filesArray = Array.prototype.slice.call(files);
|
||||
filesArray.forEach(file => {
|
||||
if (maxSize < file.size) {
|
||||
$field.parent().addClass('elementor-error').append('<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">' + maxSizeMessage + '</span>').find(':input').attr('aria-invalid', 'true');
|
||||
this.elements.$form.trigger('error');
|
||||
}
|
||||
});
|
||||
},
|
||||
beforeSend() {
|
||||
const $form = this.elements.$form;
|
||||
$form.animate({
|
||||
opacity: '0.45'
|
||||
}, 500).addClass('elementor-form-waiting');
|
||||
$form.find('.elementor-message').remove();
|
||||
$form.find('.elementor-error').removeClass('elementor-error');
|
||||
$form.find('div.elementor-field-group').removeClass('error').find('span.elementor-form-help-inline').remove().end().find(':input').attr('aria-invalid', 'false');
|
||||
this.elements.$submitButton.attr('disabled', 'disabled').find('> span').prepend('<span class="elementor-button-text elementor-form-spinner"><i class="fa fa-spinner fa-spin"></i> </span>');
|
||||
},
|
||||
getFormData() {
|
||||
const formData = new FormData(this.elements.$form[0]);
|
||||
formData.append('action', this.getSettings('action'));
|
||||
formData.append('referrer', location.toString());
|
||||
return formData;
|
||||
},
|
||||
onSuccess(response) {
|
||||
const $form = this.elements.$form;
|
||||
this.elements.$submitButton.removeAttr('disabled').find('.elementor-form-spinner').remove();
|
||||
$form.animate({
|
||||
opacity: '1'
|
||||
}, 100).removeClass('elementor-form-waiting');
|
||||
if (!response.success) {
|
||||
if (response.data.errors) {
|
||||
jQuery.each(response.data.errors, function (key, title) {
|
||||
$form.find('#form-field-' + key).parent().addClass('elementor-error').append('<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">' + title + '</span>').find(':input').attr('aria-invalid', 'true');
|
||||
});
|
||||
$form.trigger('error');
|
||||
}
|
||||
$form.append('<div class="elementor-message elementor-message-danger" role="alert">' + response.data.message + '</div>');
|
||||
} else {
|
||||
$form.trigger('submit_success', response.data);
|
||||
|
||||
// For actions like redirect page
|
||||
$form.trigger('form_destruct', response.data);
|
||||
$form.trigger('reset');
|
||||
if ('undefined' !== typeof response.data.message && '' !== response.data.message) {
|
||||
$form.append('<div class="elementor-message elementor-message-success" role="alert">' + response.data.message + '</div>');
|
||||
}
|
||||
}
|
||||
},
|
||||
onError(xhr, desc) {
|
||||
const $form = this.elements.$form;
|
||||
$form.append('<div class="elementor-message elementor-message-danger" role="alert">' + desc + '</div>');
|
||||
this.elements.$submitButton.html(this.elements.$submitButton.text()).removeAttr('disabled');
|
||||
$form.animate({
|
||||
opacity: '1'
|
||||
}, 100).removeClass('elementor-form-waiting');
|
||||
$form.trigger('error');
|
||||
},
|
||||
handleSubmit(event) {
|
||||
const self = this,
|
||||
$form = this.elements.$form;
|
||||
event.preventDefault();
|
||||
if ($form.hasClass('elementor-form-waiting')) {
|
||||
return false;
|
||||
}
|
||||
this.beforeSend();
|
||||
jQuery.ajax({
|
||||
url: self.getSettings('ajaxUrl'),
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
data: self.getFormData(),
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: self.onSuccess,
|
||||
error: self.onError
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/forms/assets/js/frontend/handlers/form-steps.js":
|
||||
/*!******************************************************************!*\
|
||||
!*** ../modules/forms/assets/js/frontend/handlers/form-steps.js ***!
|
||||
\******************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class FormSteps extends elementorModules.frontend.handlers.Base {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
form: '.elementor-form',
|
||||
fieldsWrapper: '.elementor-form-fields-wrapper',
|
||||
fieldGroup: '.elementor-field-group',
|
||||
stepWrapper: '.elementor-field-type-step',
|
||||
stepField: '.e-field-step',
|
||||
submitWrapper: '.elementor-field-type-submit',
|
||||
submitButton: '[type="submit"]',
|
||||
buttons: '.e-form__buttons',
|
||||
buttonWrapper: '.e-form__buttons__wrapper',
|
||||
button: '.e-form__buttons__wrapper__button',
|
||||
indicator: '.e-form__indicators__indicator',
|
||||
indicatorProgress: '.e-form__indicators__indicator__progress',
|
||||
indicatorProgressMeter: '.e-form__indicators__indicator__progress__meter',
|
||||
formHelpInline: '.elementor-form-help-inline'
|
||||
},
|
||||
classes: {
|
||||
hidden: 'elementor-hidden',
|
||||
column: 'elementor-column',
|
||||
fieldGroup: 'elementor-field-group',
|
||||
elementorButton: 'elementor-button',
|
||||
step: 'e-form__step',
|
||||
buttons: 'e-form__buttons',
|
||||
buttonWrapper: 'e-form__buttons__wrapper',
|
||||
button: 'e-form__buttons__wrapper__button',
|
||||
indicators: 'e-form__indicators',
|
||||
indicator: 'e-form__indicators__indicator',
|
||||
indicatorIcon: 'e-form__indicators__indicator__icon',
|
||||
indicatorNumber: 'e-form__indicators__indicator__number',
|
||||
indicatorLabel: 'e-form__indicators__indicator__label',
|
||||
indicatorProgress: 'e-form__indicators__indicator__progress',
|
||||
indicatorProgressMeter: 'e-form__indicators__indicator__progress__meter',
|
||||
indicatorSeparator: 'e-form__indicators__indicator__separator',
|
||||
indicatorInactive: 'e-form__indicators__indicator--state-inactive',
|
||||
indicatorActive: 'e-form__indicators__indicator--state-active',
|
||||
indicatorCompleted: 'e-form__indicators__indicator--state-completed',
|
||||
indicatorShapeCircle: 'e-form__indicators__indicator--shape-circle',
|
||||
indicatorShapeSquare: 'e-form__indicators__indicator--shape-square',
|
||||
indicatorShapeRounded: 'e-form__indicators__indicator--shape-rounded',
|
||||
indicatorShapeNone: 'e-form__indicators__indicator--shape-none'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const {
|
||||
selectors
|
||||
} = this.getSettings(),
|
||||
elements = {
|
||||
$form: this.$element.find(selectors.form)
|
||||
};
|
||||
elements.$fieldsWrapper = elements.$form.children(selectors.fieldsWrapper);
|
||||
elements.$stepWrapper = elements.$fieldsWrapper.children(selectors.stepWrapper);
|
||||
elements.$stepField = elements.$stepWrapper.children(selectors.stepField);
|
||||
elements.$fieldGroup = elements.$fieldsWrapper.children(selectors.fieldGroup);
|
||||
elements.$submitWrapper = elements.$fieldsWrapper.children(selectors.submitWrapper);
|
||||
elements.$submitButton = elements.$submitWrapper.children(selectors.submitButton);
|
||||
return elements;
|
||||
}
|
||||
onInit() {
|
||||
super.onInit(...arguments);
|
||||
if (!this.isStepsExist()) {
|
||||
return;
|
||||
}
|
||||
this.data = {
|
||||
steps: [],
|
||||
indicatorsWithObjectTags: []
|
||||
};
|
||||
this.state = {
|
||||
currentStep: 0,
|
||||
stepsType: '',
|
||||
stepsShape: ''
|
||||
};
|
||||
this.buildSteps();
|
||||
this.elements = {
|
||||
...this.elements,
|
||||
...this.createStepsIndicators(),
|
||||
...this.createStepsButtons()
|
||||
};
|
||||
this.initProgressBar();
|
||||
this.extractResponsiveSizeFromSubmitWrapper();
|
||||
}
|
||||
bindEvents() {
|
||||
if (!this.isStepsExist()) {
|
||||
return;
|
||||
}
|
||||
this.elements.$form.on({
|
||||
submit: () => this.resetForm(),
|
||||
keydown: e => {
|
||||
if (13 === e.keyCode && !this.isLastStep() && 'textarea' !== e.target.localName) {
|
||||
e.preventDefault();
|
||||
this.applyStep('next');
|
||||
}
|
||||
},
|
||||
error: () => this.onFormError()
|
||||
});
|
||||
}
|
||||
isStepsExist() {
|
||||
return this.elements.$stepWrapper.length;
|
||||
}
|
||||
initProgressBar() {
|
||||
const stepsSettings = this.getElementSettings();
|
||||
if ('progress_bar' === stepsSettings.step_type) {
|
||||
this.setProgressBar();
|
||||
}
|
||||
}
|
||||
buildSteps() {
|
||||
this.elements.$stepWrapper.each((index, el) => {
|
||||
const {
|
||||
selectors,
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
$currentStep = jQuery(el);
|
||||
$currentStep.addClass(classes.step).removeClass(classes.fieldGroup, classes.column);
|
||||
if (index) {
|
||||
$currentStep.addClass(classes.hidden);
|
||||
}
|
||||
this.setStepData($currentStep.children(selectors.stepField));
|
||||
$currentStep.append($currentStep.nextUntil(this.elements.$stepWrapper).not(this.elements.$submitWrapper));
|
||||
});
|
||||
}
|
||||
setStepData($stepElement) {
|
||||
const dataAttributes = ['label', 'previousButton', 'nextButton', 'iconUrl', 'iconLibrary', 'icon'],
|
||||
stepData = {};
|
||||
dataAttributes.forEach(attr => {
|
||||
const attrValue = $stepElement.attr('data-' + attr);
|
||||
if (attrValue) {
|
||||
stepData[attr] = attrValue;
|
||||
}
|
||||
});
|
||||
this.data.steps.push(stepData);
|
||||
}
|
||||
createStepsIndicators() {
|
||||
const stepsSettings = this.getElementSettings(),
|
||||
stepsElements = {};
|
||||
if ('none' !== stepsSettings.step_type) {
|
||||
const {
|
||||
selectors,
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
indicatorsTypeClass = classes.indicators + '--type-' + stepsSettings.step_type,
|
||||
indicatorsClasses = [classes.indicators, indicatorsTypeClass];
|
||||
stepsElements.$indicatorsWrapper = jQuery('<div>', {
|
||||
class: indicatorsClasses.join(' ')
|
||||
});
|
||||
stepsElements.$indicatorsWrapper.append(this.buildIndicators());
|
||||
this.elements.$fieldsWrapper.before(stepsElements.$indicatorsWrapper);
|
||||
if ('progress_bar' === stepsSettings.step_type) {
|
||||
stepsElements.$progressBar = stepsElements.$indicatorsWrapper.find(selectors.indicatorProgress);
|
||||
stepsElements.$progressBarMeter = stepsElements.$indicatorsWrapper.find(selectors.indicatorProgressMeter);
|
||||
} else {
|
||||
stepsElements.$indicators = stepsElements.$indicatorsWrapper.find(selectors.indicator);
|
||||
stepsElements.$currentIndicator = stepsElements.$indicators.eq(this.state.currentStep);
|
||||
}
|
||||
}
|
||||
this.saveIndicatorsState();
|
||||
return stepsElements;
|
||||
}
|
||||
buildIndicators() {
|
||||
const stepsSettings = this.getElementSettings();
|
||||
return 'progress_bar' === stepsSettings.step_type ? this.buildProgressBar() : this.buildIndicatorsFromStepsData();
|
||||
}
|
||||
buildProgressBar() {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
$progressBar = jQuery('<div>', {
|
||||
class: classes.indicatorProgress
|
||||
}),
|
||||
$progressBarMeter = jQuery('<div>', {
|
||||
class: classes.indicatorProgressMeter
|
||||
});
|
||||
$progressBar.append($progressBarMeter);
|
||||
return $progressBar;
|
||||
}
|
||||
getProgressBarValue() {
|
||||
const totalSteps = this.data.steps.length,
|
||||
currentStep = this.state.currentStep,
|
||||
percentage = currentStep ? (currentStep + 1) / totalSteps * 100 : 100 / totalSteps;
|
||||
return Math.floor(percentage) + '%';
|
||||
}
|
||||
setProgressBar() {
|
||||
const progressBarValue = this.getProgressBarValue();
|
||||
this.updateProgressMeterCSSVariable(progressBarValue);
|
||||
this.elements.$progressBarMeter.text(progressBarValue);
|
||||
}
|
||||
updateProgressMeterCSSVariable(value) {
|
||||
this.$element[0].style.setProperty('--e-form-steps-indicator-progress-meter-width', value);
|
||||
}
|
||||
saveIndicatorsState() {
|
||||
const stepsSettings = this.getElementSettings();
|
||||
this.state.stepsType = stepsSettings.step_type;
|
||||
if (!['none', 'text', 'progress_bar'].includes(stepsSettings.step_type)) {
|
||||
this.state.stepsShape = stepsSettings.step_icon_shape;
|
||||
}
|
||||
}
|
||||
buildIndicatorsFromStepsData() {
|
||||
const indicators = [];
|
||||
this.data.steps.forEach((stepObj, index) => {
|
||||
if (index) {
|
||||
indicators.push(this.getStepSeparator());
|
||||
}
|
||||
indicators.push(this.getStepIndicatorElement(stepObj, index));
|
||||
});
|
||||
return indicators;
|
||||
}
|
||||
getStepIndicatorElement(stepObj, index) {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
stepsSettings = this.getElementSettings(),
|
||||
indicatorStateClass = this.getIndicatorStateClass(index),
|
||||
indicatorClasses = [classes.indicator, indicatorStateClass],
|
||||
$stepIndicator = jQuery('<div>', {
|
||||
class: indicatorClasses.join(' ')
|
||||
});
|
||||
if (stepsSettings.step_type.includes('icon')) {
|
||||
$stepIndicator.append(this.getStepIconElement(stepObj));
|
||||
}
|
||||
if (stepsSettings.step_type.includes('number')) {
|
||||
$stepIndicator.append(this.getStepNumberElement(index));
|
||||
}
|
||||
if (stepsSettings.step_type.includes('text')) {
|
||||
$stepIndicator.append(this.getStepLabelElement(stepObj.label));
|
||||
}
|
||||
return $stepIndicator;
|
||||
}
|
||||
getIndicatorStateClass(index) {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings();
|
||||
if (index < this.state.currentStep) {
|
||||
return classes.indicatorCompleted;
|
||||
} else if (index > this.state.currentStep) {
|
||||
return classes.indicatorInactive;
|
||||
}
|
||||
return classes.indicatorActive;
|
||||
}
|
||||
getIndicatorShapeClass() {
|
||||
const stepsSettings = this.getElementSettings(),
|
||||
{
|
||||
classes
|
||||
} = this.getSettings();
|
||||
return classes['indicatorShape' + this.firstLetterToUppercase(stepsSettings.step_icon_shape)];
|
||||
}
|
||||
firstLetterToUppercase(str) {
|
||||
return str.charAt(0).toUpperCase() + str.slice(1);
|
||||
}
|
||||
getStepNumberElement(index) {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
numberClasses = [classes.indicatorNumber, this.getIndicatorShapeClass()];
|
||||
return jQuery('<div>', {
|
||||
class: numberClasses.join(' '),
|
||||
text: index + 1
|
||||
});
|
||||
}
|
||||
getStepIconElement(stepObj) {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
iconClasses = [classes.indicatorIcon, this.getIndicatorShapeClass()],
|
||||
$icon = jQuery('<div>', {
|
||||
class: iconClasses.join(' ')
|
||||
});
|
||||
if (stepObj.icon) {
|
||||
$icon.html(stepObj.icon);
|
||||
} else {
|
||||
let $iconElement;
|
||||
if (stepObj.iconLibrary) {
|
||||
$iconElement = jQuery('<i>', {
|
||||
class: stepObj.iconLibrary
|
||||
});
|
||||
} else {
|
||||
// Using the attributes inline when creating the object, otherwise the data attribute will not work.
|
||||
$iconElement = jQuery(`<object type="image/svg+xml" data="${stepObj.iconUrl}"></object>`);
|
||||
|
||||
// Updating an indicator svg fill color, when loaded inside an object tag with a separated scope.
|
||||
$iconElement.on('load', event => {
|
||||
event.target.contentDocument.querySelector('svg').style.fill = $iconElement.css('fill');
|
||||
});
|
||||
|
||||
// Storing the indicators elements that contain object tags in order to change their fill color on steps change.
|
||||
this.data.indicatorsWithObjectTags.push($iconElement);
|
||||
}
|
||||
$icon.append($iconElement);
|
||||
}
|
||||
return $icon;
|
||||
}
|
||||
getStepLabelElement(label) {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings();
|
||||
return jQuery('<label>', {
|
||||
class: classes.indicatorLabel,
|
||||
text: label
|
||||
});
|
||||
}
|
||||
getStepSeparator() {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings();
|
||||
return jQuery('<div>', {
|
||||
class: classes.indicatorSeparator
|
||||
});
|
||||
}
|
||||
createStepsButtons() {
|
||||
const {
|
||||
selectors
|
||||
} = this.getSettings(),
|
||||
stepsElements = {};
|
||||
this.injectButtonsToSteps(stepsElements);
|
||||
stepsElements.$buttonsContainer = this.elements.$stepWrapper.find(selectors.buttons);
|
||||
stepsElements.$buttonsWrappers = stepsElements.$buttonsContainer.children(selectors.buttonWrapper);
|
||||
return stepsElements;
|
||||
}
|
||||
injectButtonsToSteps() {
|
||||
const totalSteps = this.elements.$stepWrapper.length;
|
||||
this.elements.$stepWrapper.each((index, el) => {
|
||||
const $el = jQuery(el),
|
||||
$container = this.getButtonsContainer();
|
||||
let $nextButton;
|
||||
if (index) {
|
||||
$container.append(this.getStepButton('previous', index));
|
||||
$nextButton = index === totalSteps - 1 ? this.getSubmitButton() : this.getStepButton('next', index);
|
||||
} else {
|
||||
$nextButton = this.getStepButton('next', index);
|
||||
}
|
||||
$container.append($nextButton);
|
||||
$el.append($container);
|
||||
});
|
||||
}
|
||||
getButtonsContainer() {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
stepsSettings = this.getElementSettings(),
|
||||
buttonColumnWidthClasses = [classes.buttons, classes.column, 'elementor-col-' + stepsSettings.button_width];
|
||||
return jQuery('<div>', {
|
||||
class: buttonColumnWidthClasses.join(' ')
|
||||
});
|
||||
}
|
||||
extractResponsiveSizeFromSubmitWrapper() {
|
||||
let sizeClasses = [];
|
||||
this.elements.$submitWrapper.removeClass((index, className) => {
|
||||
sizeClasses = className.match(/elementor-(sm|md)-[0-9]+/g)?.join(' ');
|
||||
return sizeClasses;
|
||||
});
|
||||
this.elements.$buttonsContainer.addClass(sizeClasses);
|
||||
}
|
||||
getStepButton(buttonType, index) {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
$button = this.getButton(buttonType, index).on('click', () => this.applyStep(buttonType)),
|
||||
buttonWrapperClasses = [classes.fieldGroup, classes.buttonWrapper, 'elementor-field-type-' + buttonType];
|
||||
return jQuery('<div>', {
|
||||
class: buttonWrapperClasses.join(' ')
|
||||
}).append($button);
|
||||
}
|
||||
getSubmitButton() {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings();
|
||||
this.elements.$submitButton.addClass(classes.button);
|
||||
|
||||
// TODO: When a solution for the conditions will be found, check if can remove the elementor-col-x manipulation.
|
||||
return this.elements.$submitWrapper.attr('class', (index, className) => {
|
||||
return this.replaceClassNameColSize(className, '');
|
||||
}).removeClass(classes.column).removeClass(classes.buttons).addClass(classes.buttonWrapper);
|
||||
}
|
||||
replaceClassNameColSize(className, value) {
|
||||
return className.replace(/elementor-col-([0-9]+)/g, value);
|
||||
}
|
||||
getButton(buttonType, index) {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
submitSizeClass = this.elements.$submitButton.attr('class').match(/elementor-size-([^\W\d]+)/g),
|
||||
buttonClasses = [classes.elementorButton, submitSizeClass, classes.button, classes.button + '-' + buttonType];
|
||||
return jQuery('<button>', {
|
||||
type: 'button',
|
||||
text: this.getButtonLabel(buttonType, index),
|
||||
class: buttonClasses.join(' ')
|
||||
});
|
||||
}
|
||||
getButtonLabel(buttonType, index) {
|
||||
const stepsSettings = this.getElementSettings(),
|
||||
stepData = this.data.steps[index],
|
||||
buttonName = buttonType + 'Button',
|
||||
buttonSettingsProp = `step_${buttonType}_label`;
|
||||
return stepData[buttonName] || stepsSettings[buttonSettingsProp];
|
||||
}
|
||||
applyStep(direction) {
|
||||
const nextIndex = 'next' === direction ? this.state.currentStep + 1 : this.state.currentStep - 1;
|
||||
if ('next' === direction && !this.isFieldsValid(this.elements.$stepWrapper)) {
|
||||
return false;
|
||||
}
|
||||
this.goToStep(nextIndex);
|
||||
this.state.currentStep = nextIndex;
|
||||
if ('progress_bar' === this.state.stepsType) {
|
||||
this.setProgressBar();
|
||||
} else if ('none' !== this.state.stepsType) {
|
||||
this.updateIndicatorsState(direction);
|
||||
}
|
||||
}
|
||||
goToStep(index) {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings();
|
||||
this.elements.$stepWrapper.eq(this.state.currentStep).addClass(classes.hidden);
|
||||
this.elements.$stepWrapper.eq(index).removeClass(classes.hidden).children(this.getSettings('selectors.fieldGroup')).first().find(':input').first().trigger('focus');
|
||||
}
|
||||
isFieldsValid($stepWrapper) {
|
||||
let isValid = true;
|
||||
$stepWrapper.eq(this.state.currentStep).find('.elementor-field-group :input').each((index, el) => {
|
||||
if (!el.checkValidity()) {
|
||||
el.reportValidity();
|
||||
return isValid = false;
|
||||
}
|
||||
});
|
||||
return isValid;
|
||||
}
|
||||
isLastStep() {
|
||||
return this.state.currentStep === this.data.steps.length - 1;
|
||||
}
|
||||
resetForm() {
|
||||
this.state.currentStep = 0;
|
||||
this.resetSteps();
|
||||
if ('progress_bar' === this.state.stepsType) {
|
||||
this.setProgressBar();
|
||||
} else if ('none' !== this.state.stepsType) {
|
||||
this.elements.$currentIndicator = this.elements.$indicators.eq(this.state.currentStep);
|
||||
this.resetIndicators();
|
||||
}
|
||||
}
|
||||
resetSteps() {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings();
|
||||
this.elements.$stepWrapper.addClass(classes.hidden).eq(0).removeClass(classes.hidden);
|
||||
}
|
||||
resetIndicators() {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
stateTypes = ['inactive', 'active', 'completed'],
|
||||
stateClasses = stateTypes.map(state => classes.indicator + '--state-' + state);
|
||||
this.elements.$indicators.removeClass(stateClasses.join(' ')).not(this.elements.$indicators.eq(0)).addClass(classes.indicatorInactive);
|
||||
this.elements.$indicators.eq(0).addClass(classes.indicatorActive);
|
||||
}
|
||||
updateIndicatorsState(direction) {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
indicatorsClasses = {
|
||||
current: {
|
||||
remove: classes.indicatorActive,
|
||||
add: 'next' === direction ? classes.indicatorCompleted : classes.indicatorInactive
|
||||
},
|
||||
next: {
|
||||
remove: 'next' === direction ? classes.indicatorInactive : classes.indicatorCompleted,
|
||||
add: classes.indicatorActive
|
||||
}
|
||||
};
|
||||
this.elements.$currentIndicator.removeClass(indicatorsClasses.current.remove).addClass(indicatorsClasses.current.add);
|
||||
this.elements.$currentIndicator = this.elements.$indicators.eq(this.state.currentStep);
|
||||
this.elements.$currentIndicator.removeClass(indicatorsClasses.next.remove).addClass(indicatorsClasses.next.add);
|
||||
|
||||
// Updating an indicator svg fill color, if loaded inside an object tag.
|
||||
this.data.indicatorsWithObjectTags.forEach($element => {
|
||||
$element.contents().children('svg').css('fill', $element.css('fill'));
|
||||
});
|
||||
}
|
||||
updateValue(updatedValue) {
|
||||
const actionsMap = {
|
||||
step_type: () => this.updateStepsType(),
|
||||
step_icon_shape: () => this.updateStepsShape(),
|
||||
step_next_label: () => this.updateStepButtonsLabel('next'),
|
||||
step_previous_label: () => this.updateStepButtonsLabel('previous')
|
||||
};
|
||||
if (actionsMap[updatedValue]) {
|
||||
actionsMap[updatedValue]();
|
||||
}
|
||||
}
|
||||
updateStepsType() {
|
||||
const stepsSettings = this.getElementSettings();
|
||||
if (this.elements.$indicatorsWrapper) {
|
||||
this.elements.$indicatorsWrapper.remove();
|
||||
}
|
||||
if ('none' !== stepsSettings.step_type) {
|
||||
this.rebuildIndicators();
|
||||
}
|
||||
this.state.stepsType = stepsSettings.step_type;
|
||||
}
|
||||
rebuildIndicators() {
|
||||
this.elements = {
|
||||
...this.elements,
|
||||
...this.createStepsIndicators()
|
||||
};
|
||||
this.initProgressBar();
|
||||
}
|
||||
updateStepsShape() {
|
||||
const stepsSettings = this.getElementSettings(),
|
||||
{
|
||||
selectors,
|
||||
classes
|
||||
} = this.getSettings(),
|
||||
shapeClassStart = classes.indicator + '--shape-',
|
||||
currentShapeClass = shapeClassStart + this.state.stepsShape,
|
||||
newShapeClass = shapeClassStart + stepsSettings.step_icon_shape;
|
||||
let elementsTargetType = '';
|
||||
if (stepsSettings.step_type.includes('icon')) {
|
||||
elementsTargetType = 'icon';
|
||||
} else if (stepsSettings.step_type.includes('number')) {
|
||||
elementsTargetType = 'number';
|
||||
}
|
||||
this.elements.$indicators.children(selectors.indicator + '__' + elementsTargetType).removeClass(currentShapeClass).addClass(newShapeClass);
|
||||
this.state.stepsShape = stepsSettings.step_icon_shape;
|
||||
}
|
||||
updateStepButtonsLabel(buttonType) {
|
||||
const {
|
||||
selectors
|
||||
} = this.getSettings(),
|
||||
buttonSelector = {
|
||||
previous: selectors.button + '-previous',
|
||||
next: selectors.button + '-next'
|
||||
};
|
||||
this.elements.$stepWrapper.each((index, el) => {
|
||||
jQuery(el).find(buttonSelector[buttonType]).text(this.getButtonLabel(buttonType, index));
|
||||
});
|
||||
}
|
||||
onFormError() {
|
||||
const {
|
||||
selectors
|
||||
} = this.getSettings(),
|
||||
$errorStepElement = this.elements.$form.find(selectors.formHelpInline).closest(selectors.stepWrapper);
|
||||
if ($errorStepElement.length) {
|
||||
this.goToStep($errorStepElement.index());
|
||||
}
|
||||
}
|
||||
onElementChange(updatedValue) {
|
||||
if (!this.isStepsExist()) {
|
||||
return;
|
||||
}
|
||||
this.updateValue(updatedValue);
|
||||
}
|
||||
}
|
||||
exports["default"] = FormSteps;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/forms/assets/js/frontend/handlers/recaptcha.js":
|
||||
/*!*****************************************************************!*\
|
||||
!*** ../modules/forms/assets/js/frontend/handlers/recaptcha.js ***!
|
||||
\*****************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class Recaptcha extends elementorModules.frontend.handlers.Base {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
recaptcha: '.elementor-g-recaptcha:last',
|
||||
submit: 'button[type="submit"]',
|
||||
recaptchaResponse: '[name="g-recaptcha-response"]'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const {
|
||||
selectors
|
||||
} = this.getDefaultSettings(),
|
||||
elements = {
|
||||
$recaptcha: this.$element.find(selectors.recaptcha)
|
||||
};
|
||||
elements.$form = elements.$recaptcha.parents('form');
|
||||
elements.$submit = elements.$form.find(selectors.submit);
|
||||
return elements;
|
||||
}
|
||||
bindEvents() {
|
||||
this.onRecaptchaApiReady();
|
||||
}
|
||||
isActive(settings) {
|
||||
const {
|
||||
selectors
|
||||
} = this.getDefaultSettings();
|
||||
return settings.$element.find(selectors.recaptcha).length;
|
||||
}
|
||||
addRecaptcha() {
|
||||
const settings = this.elements.$recaptcha.data(),
|
||||
isV2 = 'v3' !== settings.type,
|
||||
captchaIds = [];
|
||||
captchaIds.forEach(id => window.grecaptcha.reset(id));
|
||||
const widgetId = window.grecaptcha.render(this.elements.$recaptcha[0], settings);
|
||||
this.elements.$form.on('reset error', () => {
|
||||
window.grecaptcha.reset(widgetId);
|
||||
});
|
||||
if (isV2) {
|
||||
this.elements.$recaptcha.data('widgetId', widgetId);
|
||||
} else {
|
||||
captchaIds.push(widgetId);
|
||||
this.elements.$submit.on('click', e => this.onV3FormSubmit(e, widgetId));
|
||||
}
|
||||
}
|
||||
onV3FormSubmit(e, widgetId) {
|
||||
e.preventDefault();
|
||||
window.grecaptcha.ready(() => {
|
||||
const $form = this.elements.$form;
|
||||
grecaptcha.execute(widgetId, {
|
||||
action: this.elements.$recaptcha.data('action')
|
||||
}).then(token => {
|
||||
if (this.elements.$recaptchaResponse) {
|
||||
this.elements.$recaptchaResponse.val(token);
|
||||
} else {
|
||||
this.elements.$recaptchaResponse = jQuery('<input>', {
|
||||
type: 'hidden',
|
||||
value: token,
|
||||
name: 'g-recaptcha-response'
|
||||
});
|
||||
$form.append(this.elements.$recaptchaResponse);
|
||||
}
|
||||
|
||||
// Support old browsers.
|
||||
const bcSupport = !$form[0].reportValidity || 'function' !== typeof $form[0].reportValidity;
|
||||
if (bcSupport || $form[0].reportValidity()) {
|
||||
$form.trigger('submit');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
onRecaptchaApiReady() {
|
||||
if (window.grecaptcha && window.grecaptcha.render) {
|
||||
this.addRecaptcha();
|
||||
} else {
|
||||
// If not ready check again by timeout..
|
||||
setTimeout(() => this.onRecaptchaApiReady(), 350);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports["default"] = Recaptcha;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=form.efd3434e4ecbe4dd5fc6.bundle.js.map
|
||||
1514
wp-content/plugins/elementor-pro/assets/js/frontend.js
Normal file
1514
wp-content/plugins/elementor-pro/assets/js/frontend.js
Normal file
File diff suppressed because it is too large
Load Diff
2
wp-content/plugins/elementor-pro/assets/js/frontend.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/frontend.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,229 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["gallery"],{
|
||||
|
||||
/***/ "../modules/gallery/assets/js/frontend/handler.js":
|
||||
/*!********************************************************!*\
|
||||
!*** ../modules/gallery/assets/js/frontend/handler.js ***!
|
||||
\********************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class galleryHandler extends elementorModules.frontend.handlers.Base {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
container: '.elementor-gallery__container',
|
||||
galleryTitles: '.elementor-gallery-title',
|
||||
galleryImages: '.e-gallery-image',
|
||||
galleryItemOverlay: '.elementor-gallery-item__overlay',
|
||||
galleryItemContent: '.elementor-gallery-item__content'
|
||||
},
|
||||
classes: {
|
||||
activeTitle: 'elementor-item-active'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const {
|
||||
selectors
|
||||
} = this.getSettings(),
|
||||
elements = {
|
||||
$container: this.$element.find(selectors.container),
|
||||
$titles: this.$element.find(selectors.galleryTitles)
|
||||
};
|
||||
elements.$items = elements.$container.children();
|
||||
elements.$images = elements.$items.children(selectors.galleryImages);
|
||||
elements.$itemsOverlay = elements.$items.children(selectors.galleryItemOverlay);
|
||||
elements.$itemsContent = elements.$items.children(selectors.galleryItemContent);
|
||||
elements.$itemsContentElements = elements.$itemsContent.children();
|
||||
return elements;
|
||||
}
|
||||
getGallerySettings() {
|
||||
const settings = this.getElementSettings(),
|
||||
activeBreakpoints = elementorFrontend.config.responsive.activeBreakpoints,
|
||||
activeBreakpointsKeys = Object.keys(activeBreakpoints),
|
||||
breakPointSettings = {},
|
||||
desktopIdealRowHeight = elementorFrontend.getDeviceSetting('desktop', settings, 'ideal_row_height');
|
||||
activeBreakpointsKeys.forEach(breakpoint => {
|
||||
// The Gallery widget currently does not support widescreen.
|
||||
if ('widescreen' !== breakpoint) {
|
||||
const idealRowHeight = elementorFrontend.getDeviceSetting(breakpoint, settings, 'ideal_row_height');
|
||||
breakPointSettings[activeBreakpoints[breakpoint].value] = {
|
||||
horizontalGap: elementorFrontend.getDeviceSetting(breakpoint, settings, 'gap').size,
|
||||
verticalGap: elementorFrontend.getDeviceSetting(breakpoint, settings, 'gap').size,
|
||||
columns: elementorFrontend.getDeviceSetting(breakpoint, settings, 'columns'),
|
||||
idealRowHeight: idealRowHeight?.size
|
||||
};
|
||||
}
|
||||
});
|
||||
return {
|
||||
type: settings.gallery_layout,
|
||||
idealRowHeight: desktopIdealRowHeight?.size,
|
||||
container: this.elements.$container,
|
||||
columns: settings.columns,
|
||||
aspectRatio: settings.aspect_ratio,
|
||||
lastRow: 'normal',
|
||||
horizontalGap: elementorFrontend.getDeviceSetting('desktop', settings, 'gap').size,
|
||||
verticalGap: elementorFrontend.getDeviceSetting('desktop', settings, 'gap').size,
|
||||
animationDuration: settings.content_animation_duration,
|
||||
breakpoints: breakPointSettings,
|
||||
rtl: elementorFrontend.config.is_rtl,
|
||||
lazyLoad: 'yes' === settings.lazyload
|
||||
};
|
||||
}
|
||||
initGallery() {
|
||||
this.gallery = new EGallery(this.getGallerySettings());
|
||||
this.toggleAllAnimationsClasses();
|
||||
}
|
||||
removeAnimationClasses($element) {
|
||||
$element.removeClass((index, className) => (className.match(/elementor-animated-item-\S+/g) || []).join(' '));
|
||||
}
|
||||
toggleOverlayHoverAnimation() {
|
||||
this.removeAnimationClasses(this.elements.$itemsOverlay);
|
||||
const hoverAnimation = this.getElementSettings('background_overlay_hover_animation');
|
||||
if (hoverAnimation) {
|
||||
this.elements.$itemsOverlay.addClass('elementor-animated-item--' + hoverAnimation);
|
||||
}
|
||||
}
|
||||
toggleOverlayContentAnimation() {
|
||||
this.removeAnimationClasses(this.elements.$itemsContentElements);
|
||||
const contentHoverAnimation = this.getElementSettings('content_hover_animation');
|
||||
if (contentHoverAnimation) {
|
||||
this.elements.$itemsContentElements.addClass('elementor-animated-item--' + contentHoverAnimation);
|
||||
}
|
||||
}
|
||||
toggleOverlayContentSequencedAnimation() {
|
||||
this.elements.$itemsContent.toggleClass('elementor-gallery--sequenced-animation', 'yes' === this.getElementSettings('content_sequenced_animation'));
|
||||
}
|
||||
toggleImageHoverAnimation() {
|
||||
const imageHoverAnimation = this.getElementSettings('image_hover_animation');
|
||||
this.removeAnimationClasses(this.elements.$images);
|
||||
if (imageHoverAnimation) {
|
||||
this.elements.$images.addClass('elementor-animated-item--' + imageHoverAnimation);
|
||||
}
|
||||
}
|
||||
toggleAllAnimationsClasses() {
|
||||
const elementSettings = this.getElementSettings(),
|
||||
animation = elementSettings.background_overlay_hover_animation || elementSettings.content_hover_animation || elementSettings.image_hover_animation;
|
||||
this.elements.$items.toggleClass('elementor-animated-content', !!animation);
|
||||
this.toggleImageHoverAnimation();
|
||||
this.toggleOverlayHoverAnimation();
|
||||
this.toggleOverlayContentAnimation();
|
||||
this.toggleOverlayContentSequencedAnimation();
|
||||
}
|
||||
toggleAnimationClasses(settingKey) {
|
||||
if ('content_sequenced_animation' === settingKey) {
|
||||
this.toggleOverlayContentSequencedAnimation();
|
||||
}
|
||||
if ('background_overlay_hover_animation' === settingKey) {
|
||||
this.toggleOverlayHoverAnimation();
|
||||
}
|
||||
if ('content_hover_animation' === settingKey) {
|
||||
this.toggleOverlayContentAnimation();
|
||||
}
|
||||
if ('image_hover_animation' === settingKey) {
|
||||
this.toggleImageHoverAnimation();
|
||||
}
|
||||
}
|
||||
setGalleryTags(id) {
|
||||
this.gallery.setSettings('tags', 'all' === id ? [] : ['' + id]);
|
||||
}
|
||||
bindEvents() {
|
||||
this.elements.$titles.on('click', this.galleriesNavigationListener.bind(this)).on('keyup', event => {
|
||||
const ENTER_KEY = 13,
|
||||
SPACE_KEY = 32;
|
||||
if (ENTER_KEY === event.keyCode || SPACE_KEY === event.keyCode) {
|
||||
event.currentTarget.click();
|
||||
}
|
||||
});
|
||||
}
|
||||
galleriesNavigationListener(event) {
|
||||
const classes = this.getSettings('classes'),
|
||||
clickedElement = jQuery(event.target);
|
||||
|
||||
// Make sure no other gallery title has an active class
|
||||
this.elements.$titles.removeClass(classes.activeTitle);
|
||||
|
||||
// Give the gallery being activated the active class
|
||||
clickedElement.addClass(classes.activeTitle);
|
||||
this.setGalleryTags(clickedElement.data('gallery-index'));
|
||||
const updateLightboxGroup = () => this.setLightboxGalleryIndex(clickedElement.data('gallery-index'));
|
||||
|
||||
// Wait for the gallery to filter before grouping items for the Light-box
|
||||
setTimeout(updateLightboxGroup, 1000);
|
||||
}
|
||||
setLightboxGalleryIndex() {
|
||||
let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all';
|
||||
if ('all' === index) {
|
||||
return this.elements.$items.attr('data-elementor-lightbox-slideshow', 'all_' + this.getID());
|
||||
}
|
||||
this.elements.$items.not('.e-gallery-item--hidden').attr('data-elementor-lightbox-slideshow', index + '_' + this.getID());
|
||||
}
|
||||
onInit() {
|
||||
super.onInit(...arguments);
|
||||
if (elementorFrontend.isEditMode() && 1 <= this.$element.find('.elementor-widget-empty-icon').length) {
|
||||
this.$element.addClass('elementor-widget-empty');
|
||||
}
|
||||
if (!this.elements.$container.length) {
|
||||
return;
|
||||
}
|
||||
this.initGallery();
|
||||
this.elements.$titles.first().trigger('click');
|
||||
}
|
||||
getSettingsDictionary() {
|
||||
if (this.settingsDictionary) {
|
||||
return this.settingsDictionary;
|
||||
}
|
||||
const activeBreakpoints = elementorFrontend.config.responsive.activeBreakpoints,
|
||||
activeBreakpointsKeys = Object.keys(activeBreakpoints);
|
||||
const settingsDictionary = {
|
||||
columns: ['columns'],
|
||||
gap: ['horizontalGap', 'verticalGap'],
|
||||
ideal_row_height: ['idealRowHeight']
|
||||
};
|
||||
activeBreakpointsKeys.forEach(breakpoint => {
|
||||
// The Gallery widget currently does not support widescreen.
|
||||
if ('widescreen' === breakpoint) {
|
||||
return;
|
||||
}
|
||||
settingsDictionary['columns_' + breakpoint] = ['breakpoints.' + activeBreakpoints[breakpoint].value + '.columns'];
|
||||
settingsDictionary['gap_' + breakpoint] = ['breakpoints.' + activeBreakpoints[breakpoint].value + '.horizontalGap', 'breakpoints.' + activeBreakpoints[breakpoint].value + '.verticalGap'];
|
||||
settingsDictionary['ideal_row_height_' + breakpoint] = ['breakpoints.' + activeBreakpoints[breakpoint].value + '.idealRowHeight'];
|
||||
});
|
||||
settingsDictionary.aspect_ratio = ['aspectRatio'];
|
||||
this.settingsDictionary = settingsDictionary;
|
||||
return this.settingsDictionary;
|
||||
}
|
||||
onElementChange(settingKey) {
|
||||
if (-1 !== ['background_overlay_hover_animation', 'content_hover_animation', 'image_hover_animation', 'content_sequenced_animation'].indexOf(settingKey)) {
|
||||
this.toggleAnimationClasses(settingKey);
|
||||
return;
|
||||
}
|
||||
const settingsDictionary = this.getSettingsDictionary();
|
||||
const settingsToUpdate = settingsDictionary[settingKey];
|
||||
if (settingsToUpdate) {
|
||||
const gallerySettings = this.getGallerySettings();
|
||||
settingsToUpdate.forEach(settingToUpdate => {
|
||||
this.gallery.setSettings(settingToUpdate, this.getItems(gallerySettings, settingToUpdate));
|
||||
});
|
||||
}
|
||||
}
|
||||
onDestroy() {
|
||||
super.onDestroy();
|
||||
if (this.gallery) {
|
||||
this.gallery.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
exports["default"] = galleryHandler;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=gallery.805130d33e18cb04635f.bundle.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/gallery.8ca9a354ce039d1ba641.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/gallery.8ca9a354ce039d1ba641.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
2
wp-content/plugins/elementor-pro/assets/js/gutenberg-woocommerce-notice.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/gutenberg-woocommerce-notice.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
wp-content/plugins/elementor-pro/assets/js/hotspot.6ab1751404c381bfe390.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/hotspot.6ab1751404c381bfe390.bundle.min.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[888],{1016:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;class Hotspot extends elementorModules.frontend.handlers.Base{getDefaultSettings(){return{selectors:{hotspot:".e-hotspot",tooltip:".e-hotspot__tooltip"}}}getDefaultElements(){const t=this.getSettings("selectors");return{$hotspot:this.$element.find(t.hotspot),$hotspotsExcludesLinks:this.$element.find(t.hotspot).filter(":not(.e-hotspot--no-tooltip)"),$tooltip:this.$element.find(t.tooltip)}}bindEvents(){const t=this.getCurrentDeviceSetting("tooltip_trigger"),e="mouseenter"===t?"mouseleave mouseenter":t;"none"!==e&&this.elements.$hotspotsExcludesLinks.on(e,(t=>this.onHotspotTriggerEvent(t)))}onDeviceModeChange(){this.elements.$hotspotsExcludesLinks.off(),this.bindEvents()}onHotspotTriggerEvent(t){const e=jQuery(t.target),o=e.closest(".e-hotspot__button").length,s="mouseleave"===t.type&&(e.is(".e-hotspot--tooltip-position")||e.parents(".e-hotspot--tooltip-position").length),n="mobile"===elementorFrontend.getCurrentDeviceMode();if(!(e.closest(".e-hotspot--link").length&&n&&("mouseleave"===t.type||"mouseenter"===t.type))&&(o||s)){const e=jQuery(t.currentTarget);this.elements.$hotspot.not(e).removeClass("e-hotspot--active"),e.toggleClass("e-hotspot--active")}}editorAddSequencedAnimation(){this.elements.$hotspot.toggleClass("e-hotspot--sequenced","yes"===this.getElementSettings("hotspot_sequenced_animation"))}hotspotSequencedAnimation(){const t=this.getElementSettings();if("no"===t.hotspot_sequenced_animation)return;const e=elementorModules.utils.Scroll.scrollObserver({callback:o=>{o.isInViewport&&(e.unobserve(this.$element[0]),this.elements.$hotspot.each(((e,o)=>{if(0===e)return;const s=t.hotspot_sequenced_animation_duration,n=e*((s?s.size:1e3)/this.elements.$hotspot.length);o.style.animationDelay=n+"ms"})))}});e.observe(this.$element[0])}setTooltipPositionControl(){const t=this.getElementSettings();void 0!==t.tooltip_animation&&t.tooltip_animation.match(/^e-hotspot--(slide|fade)-direction/)&&(this.elements.$tooltip.removeClass("e-hotspot--tooltip-animation-from-left e-hotspot--tooltip-animation-from-top e-hotspot--tooltip-animation-from-right e-hotspot--tooltip-animation-from-bottom"),this.elements.$tooltip.addClass("e-hotspot--tooltip-animation-from-"+t.tooltip_position))}onInit(){super.onInit(...arguments),this.hotspotSequencedAnimation(),this.setTooltipPositionControl(),window.elementor&&elementor.listenTo(elementor.channels.deviceMode,"change",(()=>this.onDeviceModeChange()))}onElementChange(t){t.startsWith("tooltip_position")&&this.setTooltipPositionControl(),t.startsWith("hotspot_sequenced_animation")&&this.editorAddSequencedAnimation()}}e.default=Hotspot}}]);
|
||||
@@ -0,0 +1,121 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["hotspot"],{
|
||||
|
||||
/***/ "../modules/hotspot/assets/js/frontend/handlers/hotspot.js":
|
||||
/*!*****************************************************************!*\
|
||||
!*** ../modules/hotspot/assets/js/frontend/handlers/hotspot.js ***!
|
||||
\*****************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class Hotspot extends elementorModules.frontend.handlers.Base {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
hotspot: '.e-hotspot',
|
||||
tooltip: '.e-hotspot__tooltip'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const selectors = this.getSettings('selectors');
|
||||
return {
|
||||
$hotspot: this.$element.find(selectors.hotspot),
|
||||
$hotspotsExcludesLinks: this.$element.find(selectors.hotspot).filter(':not(.e-hotspot--no-tooltip)'),
|
||||
$tooltip: this.$element.find(selectors.tooltip)
|
||||
};
|
||||
}
|
||||
bindEvents() {
|
||||
const tooltipTrigger = this.getCurrentDeviceSetting('tooltip_trigger'),
|
||||
tooltipTriggerEvent = 'mouseenter' === tooltipTrigger ? 'mouseleave mouseenter' : tooltipTrigger;
|
||||
if (tooltipTriggerEvent !== 'none') {
|
||||
this.elements.$hotspotsExcludesLinks.on(tooltipTriggerEvent, event => this.onHotspotTriggerEvent(event));
|
||||
}
|
||||
}
|
||||
onDeviceModeChange() {
|
||||
this.elements.$hotspotsExcludesLinks.off();
|
||||
this.bindEvents();
|
||||
}
|
||||
onHotspotTriggerEvent(event) {
|
||||
const elementTarget = jQuery(event.target),
|
||||
isHotspotButtonEvent = elementTarget.closest('.e-hotspot__button').length,
|
||||
isTooltipMouseLeave = 'mouseleave' === event.type && (elementTarget.is('.e-hotspot--tooltip-position') || elementTarget.parents('.e-hotspot--tooltip-position').length),
|
||||
isMobile = 'mobile' === elementorFrontend.getCurrentDeviceMode(),
|
||||
isHotspotLink = elementTarget.closest('.e-hotspot--link').length,
|
||||
triggerTooltip = !(isHotspotLink && isMobile && ('mouseleave' === event.type || 'mouseenter' === event.type));
|
||||
if (triggerTooltip && (isHotspotButtonEvent || isTooltipMouseLeave)) {
|
||||
const currentHotspot = jQuery(event.currentTarget);
|
||||
this.elements.$hotspot.not(currentHotspot).removeClass('e-hotspot--active');
|
||||
currentHotspot.toggleClass('e-hotspot--active');
|
||||
}
|
||||
}
|
||||
|
||||
// Fix bad UX of "Sequenced Animation" when editing other controls
|
||||
editorAddSequencedAnimation() {
|
||||
this.elements.$hotspot.toggleClass('e-hotspot--sequenced', 'yes' === this.getElementSettings('hotspot_sequenced_animation'));
|
||||
}
|
||||
hotspotSequencedAnimation() {
|
||||
const elementSettings = this.getElementSettings(),
|
||||
isSequencedAnimation = elementSettings.hotspot_sequenced_animation;
|
||||
if ('no' === isSequencedAnimation) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Start sequenced animation when element on viewport
|
||||
const hotspotObserver = elementorModules.utils.Scroll.scrollObserver({
|
||||
callback: event => {
|
||||
if (event.isInViewport) {
|
||||
hotspotObserver.unobserve(this.$element[0]);
|
||||
|
||||
// Add delay for each hotspot
|
||||
this.elements.$hotspot.each((index, element) => {
|
||||
if (0 === index) {
|
||||
return;
|
||||
}
|
||||
const sequencedAnimation = elementSettings.hotspot_sequenced_animation_duration,
|
||||
sequencedAnimationDuration = sequencedAnimation ? sequencedAnimation.size : 1000,
|
||||
animationDelay = index * (sequencedAnimationDuration / this.elements.$hotspot.length);
|
||||
element.style.animationDelay = animationDelay + 'ms';
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
hotspotObserver.observe(this.$element[0]);
|
||||
}
|
||||
setTooltipPositionControl() {
|
||||
const elementSettings = this.getElementSettings(),
|
||||
isDirectionAnimation = 'undefined' !== typeof elementSettings.tooltip_animation && elementSettings.tooltip_animation.match(/^e-hotspot--(slide|fade)-direction/);
|
||||
if (isDirectionAnimation) {
|
||||
this.elements.$tooltip.removeClass('e-hotspot--tooltip-animation-from-left e-hotspot--tooltip-animation-from-top e-hotspot--tooltip-animation-from-right e-hotspot--tooltip-animation-from-bottom');
|
||||
this.elements.$tooltip.addClass('e-hotspot--tooltip-animation-from-' + elementSettings.tooltip_position);
|
||||
}
|
||||
}
|
||||
onInit() {
|
||||
super.onInit(...arguments);
|
||||
this.hotspotSequencedAnimation();
|
||||
this.setTooltipPositionControl();
|
||||
if (window.elementor) {
|
||||
elementor.listenTo(elementor.channels.deviceMode, 'change', () => this.onDeviceModeChange());
|
||||
}
|
||||
}
|
||||
onElementChange(propertyName) {
|
||||
if (propertyName.startsWith('tooltip_position')) {
|
||||
this.setTooltipPositionControl();
|
||||
}
|
||||
if (propertyName.startsWith('hotspot_sequenced_animation')) {
|
||||
this.editorAddSequencedAnimation();
|
||||
}
|
||||
}
|
||||
}
|
||||
exports["default"] = Hotspot;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=hotspot.70886883c622dd8d5eb2.bundle.js.map
|
||||
3
wp-content/plugins/elementor-pro/assets/js/jszip.vendor.99a5b769619f50a6cb60.bundle.min.js
vendored
Normal file
3
wp-content/plugins/elementor-pro/assets/js/jszip.vendor.99a5b769619f50a6cb60.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
||||
/*!
|
||||
|
||||
JSZip v3.10.1 - A JavaScript class for generating and reading zip files
|
||||
<http://stuartk.com/jszip>
|
||||
|
||||
(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
|
||||
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.
|
||||
|
||||
JSZip uses the library pako released under the MIT license :
|
||||
https://github.com/nodeca/pako/blob/main/LICENSE
|
||||
*/
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,225 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["load-more"],{
|
||||
|
||||
/***/ "../modules/loop-builder/assets/js/frontend/handlers/load-more.js":
|
||||
/*!************************************************************************!*\
|
||||
!*** ../modules/loop-builder/assets/js/frontend/handlers/load-more.js ***!
|
||||
\************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _loadMore = _interopRequireDefault(__webpack_require__(/*! modules/posts/assets/js/frontend/handlers/load-more */ "../modules/posts/assets/js/frontend/handlers/load-more.js"));
|
||||
var _runElementHandlers = _interopRequireDefault(__webpack_require__(/*! elementor-pro/frontend/utils/run-element-handlers */ "../assets/dev/js/frontend/utils/run-element-handlers.js"));
|
||||
class LoopLoadMore extends _loadMore.default {
|
||||
getDefaultSettings() {
|
||||
const defaultSettings = super.getDefaultSettings();
|
||||
defaultSettings.selectors.postsContainer = '.elementor-loop-container';
|
||||
defaultSettings.selectors.postWrapperTag = '.e-loop-item';
|
||||
defaultSettings.selectors.loadMoreButton = '.e-loop__load-more .elementor-button';
|
||||
defaultSettings.selectors.dynamicStyleElement = 'style[id^="loop-dynamic"]';
|
||||
return defaultSettings;
|
||||
}
|
||||
afterInsertPosts(postsElements, result) {
|
||||
super.afterInsertPosts(postsElements);
|
||||
if (elementorFrontend.config.experimentalFeatures.e_lazyload) {
|
||||
document.dispatchEvent(new Event('elementor/lazyload/observe'));
|
||||
}
|
||||
this.handleDynamicStyleElements(result);
|
||||
(0, _runElementHandlers.default)(postsElements);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle Dynamic Style Elements.
|
||||
*
|
||||
* Adds the dynamic `<style>` block responsible for any styling that effects each individual loop-item
|
||||
* e.g. dynamic-tag background images
|
||||
*
|
||||
* @param {Object} result - Dom element after the remaining content `afterInsertPosts()` has run.
|
||||
*/
|
||||
handleDynamicStyleElements(result) {
|
||||
const selectors = this.getSettings('selectors'),
|
||||
dynamicStyleElements = result.querySelectorAll(`[data-id="${this.elementId}"] ${selectors.dynamicStyleElement}`);
|
||||
this.$element.append(dynamicStyleElements);
|
||||
}
|
||||
}
|
||||
exports["default"] = LoopLoadMore;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/posts/assets/js/frontend/handlers/load-more.js":
|
||||
/*!*****************************************************************!*\
|
||||
!*** ../modules/posts/assets/js/frontend/handlers/load-more.js ***!
|
||||
\*****************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class LoadMore extends elementorModules.frontend.handlers.Base {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
postsContainer: '.elementor-posts-container',
|
||||
postWrapperTag: 'article',
|
||||
loadMoreButton: '.elementor-button',
|
||||
loadMoreSpinnerWrapper: '.e-load-more-spinner',
|
||||
loadMoreSpinner: '.e-load-more-spinner i, .e-load-more-spinner svg',
|
||||
loadMoreAnchor: '.e-load-more-anchor'
|
||||
},
|
||||
classes: {
|
||||
loadMoreSpin: 'eicon-animation-spin',
|
||||
loadMoreIsLoading: 'e-load-more-pagination-loading',
|
||||
loadMorePaginationEnd: 'e-load-more-pagination-end',
|
||||
loadMoreNoSpinner: 'e-load-more-no-spinner'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const selectors = this.getSettings('selectors');
|
||||
return {
|
||||
postsWidgetWrapper: this.$element[0],
|
||||
postsContainer: this.$element[0].querySelector(selectors.postsContainer),
|
||||
loadMoreButton: this.$element[0].querySelector(selectors.loadMoreButton),
|
||||
loadMoreSpinnerWrapper: this.$element[0].querySelector(selectors.loadMoreSpinnerWrapper),
|
||||
loadMoreSpinner: this.$element[0].querySelector(selectors.loadMoreSpinner),
|
||||
loadMoreAnchor: this.$element[0].querySelector(selectors.loadMoreAnchor)
|
||||
};
|
||||
}
|
||||
bindEvents() {
|
||||
super.bindEvents();
|
||||
|
||||
// Handle load more functionality for on-click type.
|
||||
if (!this.elements.loadMoreButton) {
|
||||
return;
|
||||
}
|
||||
this.elements.loadMoreButton.addEventListener('click', event => {
|
||||
if (this.isLoading) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
this.handlePostsQuery();
|
||||
});
|
||||
}
|
||||
onInit() {
|
||||
super.onInit();
|
||||
this.classes = this.getSettings('classes');
|
||||
this.isLoading = false;
|
||||
const paginationType = this.getElementSettings('pagination_type');
|
||||
if ('load_more_on_click' !== paginationType && 'load_more_infinite_scroll' !== paginationType) {
|
||||
return;
|
||||
}
|
||||
this.isInfinteScroll = 'load_more_infinite_scroll' === paginationType;
|
||||
|
||||
// When spinner is not available, the button's text should not be hidden.
|
||||
this.isSpinnerAvailable = this.getElementSettings('load_more_spinner').value;
|
||||
if (!this.isSpinnerAvailable) {
|
||||
this.elements.postsWidgetWrapper.classList.add(this.classes.loadMoreNoSpinner);
|
||||
}
|
||||
if (this.isInfinteScroll) {
|
||||
this.handleInfiniteScroll();
|
||||
} else if (this.elements.loadMoreSpinnerWrapper && this.elements.loadMoreButton) {
|
||||
// Instead of creating 2 spinners for on-click and infinity-scroll, one spinner will be used so it should be appended to the button in on-click mode.
|
||||
this.elements.loadMoreButton.insertAdjacentElement('beforeEnd', this.elements.loadMoreSpinnerWrapper);
|
||||
}
|
||||
|
||||
// Set the post id and element id for the ajax request.
|
||||
this.elementId = this.getID();
|
||||
this.postId = elementorFrontendConfig.post.id;
|
||||
|
||||
// Set the current page and last page for handling the load more post and when no more posts to show.
|
||||
if (this.elements.loadMoreAnchor) {
|
||||
this.currentPage = parseInt(this.elements.loadMoreAnchor.getAttribute('data-page'));
|
||||
this.maxPage = parseInt(this.elements.loadMoreAnchor.getAttribute('data-max-page'));
|
||||
if (this.currentPage === this.maxPage || !this.currentPage) {
|
||||
this.handleUiWhenNoPosts();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle load more functionality for infinity-scroll type.
|
||||
handleInfiniteScroll() {
|
||||
if (this.isEdit) {
|
||||
return;
|
||||
}
|
||||
this.observer = elementorModules.utils.Scroll.scrollObserver({
|
||||
callback: event => {
|
||||
if (!event.isInViewport || this.isLoading) {
|
||||
return;
|
||||
}
|
||||
|
||||
// When the observer is triggered it won't be triggered without scrolling, but sometimes there will be no scrollbar to trigger it again.
|
||||
this.observer.unobserve(this.elements.loadMoreAnchor);
|
||||
this.handlePostsQuery().then(() => {
|
||||
if (this.currentPage !== this.maxPage) {
|
||||
this.observer.observe(this.elements.loadMoreAnchor);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
this.observer.observe(this.elements.loadMoreAnchor);
|
||||
}
|
||||
handleUiBeforeLoading() {
|
||||
this.isLoading = true;
|
||||
if (this.elements.loadMoreSpinner) {
|
||||
this.elements.loadMoreSpinner.classList.add(this.classes.loadMoreSpin);
|
||||
}
|
||||
this.elements.postsWidgetWrapper.classList.add(this.classes.loadMoreIsLoading);
|
||||
}
|
||||
handleUiAfterLoading() {
|
||||
this.isLoading = false;
|
||||
if (this.elements.loadMoreSpinner) {
|
||||
this.elements.loadMoreSpinner.classList.remove(this.classes.loadMoreSpin);
|
||||
}
|
||||
if (this.isInfinteScroll && this.elements.loadMoreSpinnerWrapper && this.elements.loadMoreAnchor) {
|
||||
// Since the spinner has to be shown after the new content (posts), it should be appended after the anchor element.
|
||||
this.elements.loadMoreAnchor.insertAdjacentElement('afterend', this.elements.loadMoreSpinnerWrapper);
|
||||
}
|
||||
this.elements.postsWidgetWrapper.classList.remove(this.classes.loadMoreIsLoading);
|
||||
}
|
||||
handleUiWhenNoPosts() {
|
||||
this.elements.postsWidgetWrapper.classList.add(this.classes.loadMorePaginationEnd);
|
||||
}
|
||||
afterInsertPosts() {}
|
||||
handleSuccessFetch(result) {
|
||||
this.handleUiAfterLoading();
|
||||
const selectors = this.getSettings('selectors');
|
||||
|
||||
// Grabbing only the new articles from the response without the existing ones (prevent posts duplication).
|
||||
const postsElements = result.querySelectorAll(`[data-id="${this.elementId}"] ${selectors.postsContainer} > ${selectors.postWrapperTag}`);
|
||||
const nextPageUrl = result.querySelector(`[data-id="${this.elementId}"] .e-load-more-anchor`).getAttribute('data-next-page');
|
||||
postsElements.forEach(element => this.elements.postsContainer.append(element));
|
||||
this.elements.loadMoreAnchor.setAttribute('data-page', this.currentPage);
|
||||
this.elements.loadMoreAnchor.setAttribute('data-next-page', nextPageUrl);
|
||||
if (this.currentPage === this.maxPage) {
|
||||
this.handleUiWhenNoPosts();
|
||||
}
|
||||
this.afterInsertPosts(postsElements, result);
|
||||
}
|
||||
handlePostsQuery() {
|
||||
this.handleUiBeforeLoading();
|
||||
this.currentPage++;
|
||||
const nextPageUrl = this.elements.loadMoreAnchor.getAttribute('data-next-page');
|
||||
return fetch(nextPageUrl).then(response => response.text()).then(html => {
|
||||
// Convert the HTML string into a document object
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString(html, 'text/html');
|
||||
this.handleSuccessFetch(doc);
|
||||
});
|
||||
}
|
||||
}
|
||||
exports["default"] = LoadMore;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=load-more.ad89e46f2f6bfd9c27e8.bundle.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/load-more.bc9573b5d1f73abd80b9.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/load-more.bc9573b5d1f73abd80b9.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
wp-content/plugins/elementor-pro/assets/js/loop-carousel.4e8fd6593adbba21698e.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/loop-carousel.4e8fd6593adbba21698e.bundle.min.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[153],{7188:(e,t,r)=>{var s=r(8003).__,n=r(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var l=n(r(6399));class LoopCarousel extends elementorModules.frontend.handlers.CarouselBase{getDefaultSettings(){const e=super.getDefaultSettings();return e.selectors.carousel=".elementor-loop-container",e}getSwiperSettings(){const e=super.getSwiperSettings(),t=this.getElementSettings(),r=elementorFrontend.config.is_rtl,s=`.elementor-element-${this.getID()}`;return"yes"===t.arrows&&(e.navigation={prevEl:r?`${s} .elementor-swiper-button-next`:`${s} .elementor-swiper-button-prev`,nextEl:r?`${s} .elementor-swiper-button-prev`:`${s} .elementor-swiper-button-next`}),e.on.beforeInit=()=>{this.a11ySetSlidesAriaLabels()},e}async onInit(){super.onInit(...arguments),this.ranElementHandlers=!1}handleElementHandlers(){if(this.ranElementHandlers||!this.swiper)return;const e=Array.from(this.swiper.slides).slice(this.swiper.activeIndex-1,this.swiper.slides.length);(0,l.default)(e),this.ranElementHandlers=!0}a11ySetSlidesAriaLabels(){const e=Array.from(this.elements.$slides);e.forEach(((t,r)=>{t.setAttribute("aria-label",`${parseInt(r+1)} ${s("of","elementor-pro")} ${e.length}`)}))}}t.default=LoopCarousel}}]);
|
||||
@@ -0,0 +1,66 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["loop-carousel"],{
|
||||
|
||||
/***/ "../modules/loop-builder/assets/js/frontend/handlers/loop-carousel.js":
|
||||
/*!****************************************************************************!*\
|
||||
!*** ../modules/loop-builder/assets/js/frontend/handlers/loop-carousel.js ***!
|
||||
\****************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
/* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _runElementHandlers = _interopRequireDefault(__webpack_require__(/*! elementor-pro/frontend/utils/run-element-handlers */ "../assets/dev/js/frontend/utils/run-element-handlers.js"));
|
||||
class LoopCarousel extends elementorModules.frontend.handlers.CarouselBase {
|
||||
getDefaultSettings() {
|
||||
const defaultSettings = super.getDefaultSettings();
|
||||
defaultSettings.selectors.carousel = '.elementor-loop-container';
|
||||
return defaultSettings;
|
||||
}
|
||||
getSwiperSettings() {
|
||||
const swiperOptions = super.getSwiperSettings(),
|
||||
elementSettings = this.getElementSettings(),
|
||||
isRtl = elementorFrontend.config.is_rtl,
|
||||
widgetSelector = `.elementor-element-${this.getID()}`;
|
||||
if ('yes' === elementSettings.arrows) {
|
||||
swiperOptions.navigation = {
|
||||
prevEl: isRtl ? `${widgetSelector} .elementor-swiper-button-next` : `${widgetSelector} .elementor-swiper-button-prev`,
|
||||
nextEl: isRtl ? `${widgetSelector} .elementor-swiper-button-prev` : `${widgetSelector} .elementor-swiper-button-next`
|
||||
};
|
||||
}
|
||||
swiperOptions.on.beforeInit = () => {
|
||||
this.a11ySetSlidesAriaLabels();
|
||||
};
|
||||
return swiperOptions;
|
||||
}
|
||||
async onInit() {
|
||||
super.onInit(...arguments);
|
||||
this.ranElementHandlers = false;
|
||||
}
|
||||
handleElementHandlers() {
|
||||
if (this.ranElementHandlers || !this.swiper) {
|
||||
return;
|
||||
}
|
||||
const newSlides = Array.from(this.swiper.slides).slice(this.swiper.activeIndex - 1, this.swiper.slides.length);
|
||||
(0, _runElementHandlers.default)(newSlides);
|
||||
this.ranElementHandlers = true;
|
||||
}
|
||||
a11ySetSlidesAriaLabels() {
|
||||
const slides = Array.from(this.elements.$slides);
|
||||
slides.forEach((slide, index) => {
|
||||
slide.setAttribute('aria-label', `${parseInt(index + 1)} ${__('of', 'elementor-pro')} ${slides.length}`);
|
||||
});
|
||||
}
|
||||
}
|
||||
exports["default"] = LoopCarousel;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=loop-carousel.827a11bd7f1b0343de42.bundle.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[253],{9999:(e,t,o)=>{var n=o(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=n(o(2463));class LoopFilter extends elementorModules.editor.utils.Module{onElementorInit(){this.taxonomyFilter=new r.default("taxonomy-filter")}}t.default=LoopFilter},2463:(e,t,o)=>{var n=o(8003).__;const r=o(8200);e.exports=r.extend({__construct(){this.cache={},r.prototype.__construct.apply(this,arguments)},onInit(){elementor.channels.editor.on("editor:widget:taxonomy-filter:section_taxonomy_filter:activated",this.onTaxonomyFilterSectionActive)},onTaxonomyFilterSectionActive(){this.updateSelectedElementOptions();const e=this.getEditorControlView("selected_element").getControlValue();e&&this.updateTaxonomyOptions(e)},updateSelectedElementOptions(){const e=this.getEditorControlView("selected_element"),t=e.getControlValue();(t?elementor.$previewContents[0].querySelector(`[data-elementor-id="${elementor.config.document.id}"] .elementor-element-${t}`):"")||e.setValue("");const o=elementor.$previewContents[0].querySelectorAll(`[data-elementor-id="${elementor.config.document.id}"] .elementor-widget-loop-grid`),r={"":n("Select a widget","elementor-pro")};o.length||(this.updateOptions("selected_element",r),e.setValue(""));let s=1;for(const e of o)r[e.dataset.id]=`${n("Loop Grid","elementor-pro")} ${s++}`;this.updateOptions("selected_element",r)},onElementChange(e,t){if("selected_element"!==e)return;const o=t.getControlValue();o?this.updateTaxonomyOptions(o):this.updateOptions("taxonomy",{"":n("Select a taxonomy","elementor-pro")})},getPostSourceQueryPostType(e){const t=e.settings.attributes.post_query_post_type;let o="";switch(t){case"current_query":o=elementorPro.config.loopFilter.mainQueryPostType;break;case"by_id":case"related":o="post";break;default:o=t}return o},getLoopQueryPostType(e){const t=elementor.getContainer(e);return"post"===t.settings.attributes._skin?this.getPostSourceQueryPostType(t):"product"},updateTaxonomyOptions(e){const t=this.getLoopQueryPostType(e);return this.getPostTypeTaxonomies(t).then((e=>e instanceof Response?!e.ok||400<=e.status?(this.displayErrorDialog(),{}):e.json():e)).catch((()=>(this.displayErrorDialog(),{}))).then((e=>{let o=e?.data||e;Object.keys(o).length?(o={"":n("Select a taxonomy","elementor-pro"),...o},this.cache[t]=o,this.updateOptions("taxonomy",o)):this.updateOptions("taxonomy",{"":n("No taxonomies found","elementor-pro")})}))},getPostTypeTaxonomies(e){return this.cache[e]&&Object.keys(this.cache[e]).length?Promise.resolve(this.cache[e]):this.fetchPostTypeTaxonomies(e)},fetchPostTypeTaxonomies:e=>fetch(`${elementorCommon.config.urls.rest}elementor-pro/v1/get-post-type-taxonomies`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":elementorWebCliConfig.nonce},body:JSON.stringify({post_type:e})}),displayErrorDialog(){elementorCommon.dialogsManager.createWidget("alert",{id:"e-filter-error-message",className:"e-filter__error-message",headerMessage:n("Something went wrong","elementor-pro"),message:n("We are experiencing technical difficulties on our end. Please try again to reconnect.","elementor-pro"),position:{my:"center center",at:"center center"},strings:{confirm:n("OK","elementor-pro")}}).show()}})}}]);
|
||||
@@ -0,0 +1,191 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["loop-filter-editor"],{
|
||||
|
||||
/***/ "../modules/loop-filter/assets/js/editor/module.js":
|
||||
/*!*********************************************************!*\
|
||||
!*** ../modules/loop-filter/assets/js/editor/module.js ***!
|
||||
\*********************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _taxonomyFilter = _interopRequireDefault(__webpack_require__(/*! ./taxonomy-filter */ "../modules/loop-filter/assets/js/editor/taxonomy-filter.js"));
|
||||
class LoopFilter extends elementorModules.editor.utils.Module {
|
||||
onElementorInit() {
|
||||
this.taxonomyFilter = new _taxonomyFilter.default('taxonomy-filter');
|
||||
}
|
||||
}
|
||||
exports["default"] = LoopFilter;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/loop-filter/assets/js/editor/taxonomy-filter.js":
|
||||
/*!******************************************************************!*\
|
||||
!*** ../modules/loop-filter/assets/js/editor/taxonomy-filter.js ***!
|
||||
\******************************************************************/
|
||||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||||
|
||||
/* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
|
||||
|
||||
|
||||
const ElementEditorModule = __webpack_require__(/*! elementor-pro/editor/element-editor-module */ "../assets/dev/js/editor/element-editor-module.js");
|
||||
module.exports = ElementEditorModule.extend({
|
||||
__construct() {
|
||||
this.cache = {};
|
||||
ElementEditorModule.prototype.__construct.apply(this, arguments);
|
||||
},
|
||||
onInit() {
|
||||
elementor.channels.editor.on('editor:widget:taxonomy-filter:section_taxonomy_filter:activated', this.onTaxonomyFilterSectionActive);
|
||||
},
|
||||
onTaxonomyFilterSectionActive() {
|
||||
this.updateSelectedElementOptions();
|
||||
const selectedElementControlView = this.getEditorControlView('selected_element'),
|
||||
selectedElementControlValue = selectedElementControlView.getControlValue();
|
||||
if (selectedElementControlValue) {
|
||||
this.updateTaxonomyOptions(selectedElementControlValue);
|
||||
}
|
||||
},
|
||||
updateSelectedElementOptions() {
|
||||
const selectedElementControlView = this.getEditorControlView('selected_element'),
|
||||
selectedElementControlValue = selectedElementControlView.getControlValue(),
|
||||
selectedElement = !!selectedElementControlValue ? elementor.$previewContents[0].querySelector(`[data-elementor-id="${elementor.config.document.id}"] .elementor-element-${selectedElementControlValue}`) : '';
|
||||
if (!selectedElement) {
|
||||
selectedElementControlView.setValue('');
|
||||
}
|
||||
const loopWidgets = elementor.$previewContents[0].querySelectorAll(`[data-elementor-id="${elementor.config.document.id}"] .elementor-widget-loop-grid`),
|
||||
selectedElementControlOptions = {
|
||||
'': __('Select a widget', 'elementor-pro')
|
||||
};
|
||||
if (!loopWidgets.length) {
|
||||
this.updateOptions('selected_element', selectedElementControlOptions);
|
||||
selectedElementControlView.setValue('');
|
||||
}
|
||||
let index = 1;
|
||||
for (const loopWidget of loopWidgets) {
|
||||
selectedElementControlOptions[loopWidget.dataset.id] = `${__('Loop Grid', 'elementor-pro')} ${index++}`;
|
||||
}
|
||||
this.updateOptions('selected_element', selectedElementControlOptions);
|
||||
},
|
||||
onElementChange(setting, controlView) {
|
||||
if ('selected_element' !== setting) {
|
||||
return;
|
||||
}
|
||||
const controlValue = controlView.getControlValue();
|
||||
if (controlValue) {
|
||||
this.updateTaxonomyOptions(controlValue);
|
||||
} else {
|
||||
this.updateOptions('taxonomy', {
|
||||
'': __('Select a taxonomy', 'elementor-pro')
|
||||
});
|
||||
}
|
||||
},
|
||||
getPostSourceQueryPostType(loopWidgetContainer) {
|
||||
const querySource = loopWidgetContainer.settings.attributes.post_query_post_type;
|
||||
let queryPostType = '';
|
||||
switch (querySource) {
|
||||
case 'current_query':
|
||||
queryPostType = elementorPro.config.loopFilter.mainQueryPostType;
|
||||
break;
|
||||
case 'by_id':
|
||||
// Currently 'by ID' is not supported since it can include multiple post types.
|
||||
queryPostType = 'post';
|
||||
break;
|
||||
case 'related':
|
||||
queryPostType = 'post';
|
||||
break;
|
||||
default:
|
||||
queryPostType = querySource;
|
||||
}
|
||||
return queryPostType;
|
||||
},
|
||||
getLoopQueryPostType(loopWidgetId) {
|
||||
const loopWidgetContainer = elementor.getContainer(loopWidgetId);
|
||||
const loopSource = loopWidgetContainer.settings.attributes._skin;
|
||||
if ('post' === loopSource) {
|
||||
return this.getPostSourceQueryPostType(loopWidgetContainer);
|
||||
}
|
||||
return 'product';
|
||||
},
|
||||
updateTaxonomyOptions(loopWidgetId) {
|
||||
// TODO: Add control spinner.
|
||||
const postType = this.getLoopQueryPostType(loopWidgetId);
|
||||
const postTypeTaxonomies = this.getPostTypeTaxonomies(postType).then(response => {
|
||||
if (!(response instanceof Response)) {
|
||||
return response;
|
||||
} else if (!response.ok || 400 <= response.status) {
|
||||
this.displayErrorDialog();
|
||||
return {};
|
||||
}
|
||||
return response.json();
|
||||
}).catch(() => {
|
||||
this.displayErrorDialog();
|
||||
return {};
|
||||
}).then(response => {
|
||||
let data = response?.data || response;
|
||||
if (!Object.keys(data).length) {
|
||||
this.updateOptions('taxonomy', {
|
||||
'': __('No taxonomies found', 'elementor-pro')
|
||||
});
|
||||
return;
|
||||
}
|
||||
data = {
|
||||
...{
|
||||
'': __('Select a taxonomy', 'elementor-pro')
|
||||
},
|
||||
...data
|
||||
};
|
||||
this.cache[postType] = data;
|
||||
this.updateOptions('taxonomy', data);
|
||||
});
|
||||
return postTypeTaxonomies;
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {string} postType
|
||||
* @return {Promise} Promise that should resolve with taxonomies data.
|
||||
*/
|
||||
getPostTypeTaxonomies(postType) {
|
||||
if (this.cache[postType] && Object.keys(this.cache[postType]).length) {
|
||||
return Promise.resolve(this.cache[postType]);
|
||||
}
|
||||
return this.fetchPostTypeTaxonomies(postType);
|
||||
},
|
||||
fetchPostTypeTaxonomies(postType) {
|
||||
return fetch(`${elementorCommon.config.urls.rest}elementor-pro/v1/get-post-type-taxonomies`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-WP-Nonce': elementorWebCliConfig.nonce
|
||||
},
|
||||
body: JSON.stringify({
|
||||
post_type: postType
|
||||
})
|
||||
});
|
||||
},
|
||||
displayErrorDialog() {
|
||||
elementorCommon.dialogsManager.createWidget('alert', {
|
||||
id: 'e-filter-error-message',
|
||||
className: 'e-filter__error-message',
|
||||
headerMessage: __('Something went wrong', 'elementor-pro'),
|
||||
message: __('We are experiencing technical difficulties on our end. Please try again to reconnect.', 'elementor-pro'),
|
||||
position: {
|
||||
my: 'center center',
|
||||
at: 'center center'
|
||||
},
|
||||
strings: {
|
||||
confirm: __('OK', 'elementor-pro')
|
||||
}
|
||||
}).show();
|
||||
}
|
||||
});
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=loop-filter-editor.d1bae86a5ed21c0e9981.bundle.js.map
|
||||
@@ -0,0 +1,456 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["loop"],{
|
||||
|
||||
/***/ "../assets/dev/js/preview/utils/document-handle.js":
|
||||
/*!*********************************************************!*\
|
||||
!*** ../assets/dev/js/preview/utils/document-handle.js ***!
|
||||
\*********************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
/* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports.SAVE_CONTEXT = exports.EDIT_CONTEXT = void 0;
|
||||
exports.createElement = createElement;
|
||||
exports["default"] = addDocumentHandle;
|
||||
const EDIT_HANDLE_CLASS_NAME = 'elementor-document-handle';
|
||||
const EDIT_MODE_CLASS_NAME = 'elementor-edit-mode';
|
||||
const EDIT_CONTEXT = exports.EDIT_CONTEXT = 'edit';
|
||||
const SAVE_HANDLE_CLASS_NAME = 'elementor-document-save-back-handle';
|
||||
const SAVE_CONTEXT = exports.SAVE_CONTEXT = 'save';
|
||||
|
||||
/**
|
||||
* @param {Object} handleTarget
|
||||
* @param {HTMLElement} handleTarget.element
|
||||
* @param {string|number} handleTarget.id - Document ID.
|
||||
* @param {string} handleTarget.title
|
||||
* @param {string} context - Edit/Save
|
||||
* @param {Function|null} onCloseDocument - Callback to run when outgoing document is closed.
|
||||
* @param {string} selector
|
||||
*/
|
||||
function addDocumentHandle(_ref) {
|
||||
let {
|
||||
element,
|
||||
id,
|
||||
title = __('Template', 'elementor-pro')
|
||||
} = _ref;
|
||||
let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EDIT_CONTEXT;
|
||||
let onCloseDocument = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
||||
let selector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
||||
if (EDIT_CONTEXT === context) {
|
||||
if (!id || !element) {
|
||||
throw Error('`id` and `element` are required.');
|
||||
}
|
||||
if (isCurrentlyEditing(element) || hasHandle(element)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
const handleElement = createHandleElement({
|
||||
title,
|
||||
onClick: () => onDocumentClick(id, context, onCloseDocument, selector)
|
||||
}, context, element);
|
||||
element.prepend(handleElement);
|
||||
if (EDIT_CONTEXT === context) {
|
||||
element.dataset.editableElementorDocument = id;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {HTMLElement} element
|
||||
*
|
||||
* @return {boolean} Whether the element is currently being edited.
|
||||
*/
|
||||
function isCurrentlyEditing(element) {
|
||||
return element.classList.contains(EDIT_MODE_CLASS_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {HTMLElement} element
|
||||
*
|
||||
* @return {boolean} Whether the element has a handle.
|
||||
*/
|
||||
function hasHandle(element) {
|
||||
return !!element.querySelector(`:scope > .${EDIT_HANDLE_CLASS_NAME}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object} handleProperties
|
||||
* @param {string} handleProperties.title
|
||||
* @param {Function} handleProperties.onClick
|
||||
* @param {string} context
|
||||
* @param {HTMLElement} element
|
||||
*
|
||||
* @return {HTMLElement} The newly generated Handle element
|
||||
*/
|
||||
function createHandleElement(_ref2, context) {
|
||||
let {
|
||||
title,
|
||||
onClick
|
||||
} = _ref2;
|
||||
let element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
||||
const handleTitle = ['header', 'footer'].includes(element?.dataset.elementorType) ? '%s' : __('Edit %s', 'elementor-pro');
|
||||
const innerElement = createElement({
|
||||
tag: 'div',
|
||||
classNames: [`${EDIT_HANDLE_CLASS_NAME}__inner`],
|
||||
children: [createElement({
|
||||
tag: 'i',
|
||||
classNames: [getHandleIcon(context)]
|
||||
}), createElement({
|
||||
tag: 'div',
|
||||
classNames: [`${EDIT_CONTEXT === context ? EDIT_HANDLE_CLASS_NAME : SAVE_HANDLE_CLASS_NAME}__title`],
|
||||
children: [document.createTextNode(EDIT_CONTEXT === context ? handleTitle.replace('%s', title) : __('Save %s', 'elementor-pro').replace('%s', title))]
|
||||
})]
|
||||
});
|
||||
const classNames = [EDIT_HANDLE_CLASS_NAME];
|
||||
if (EDIT_CONTEXT !== context) {
|
||||
classNames.push(SAVE_HANDLE_CLASS_NAME);
|
||||
}
|
||||
const containerElement = createElement({
|
||||
tag: 'div',
|
||||
classNames,
|
||||
children: [innerElement]
|
||||
});
|
||||
containerElement.addEventListener('click', onClick);
|
||||
return containerElement;
|
||||
}
|
||||
function getHandleIcon(context) {
|
||||
let icon = 'eicon-edit';
|
||||
if (SAVE_CONTEXT === context) {
|
||||
icon = elementorFrontend.config.is_rtl ? 'eicon-arrow-right' : 'eicon-arrow-left';
|
||||
}
|
||||
return icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Util for creating HTML element.
|
||||
*
|
||||
* @param {Object} elementProperties
|
||||
* @param {string} elementProperties.tag
|
||||
* @param {string[]} elementProperties.classNames
|
||||
* @param {HTMLElement[]} elementProperties.children
|
||||
*
|
||||
* @return {HTMLElement} Generated Element
|
||||
*/
|
||||
function createElement(_ref3) {
|
||||
let {
|
||||
tag,
|
||||
classNames = [],
|
||||
children = []
|
||||
} = _ref3;
|
||||
const element = document.createElement(tag);
|
||||
element.classList.add(...classNames);
|
||||
children.forEach(child => element.appendChild(child));
|
||||
return element;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string|number} id
|
||||
* @param {string} context
|
||||
* @param {Function|null} onCloseDocument
|
||||
* @param {string} selector
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
async function onDocumentClick(id, context) {
|
||||
let onCloseDocument = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
||||
let selector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
||||
if (EDIT_CONTEXT === context) {
|
||||
window.top.$e.internal('panel/state-loading');
|
||||
await window.top.$e.run('editor/documents/switch', {
|
||||
id: parseInt(id),
|
||||
onClose: onCloseDocument,
|
||||
selector
|
||||
});
|
||||
window.top.$e.internal('panel/state-ready');
|
||||
} else {
|
||||
elementorCommon.api.internal('panel/state-loading');
|
||||
elementorCommon.api.run('editor/documents/switch', {
|
||||
id: elementor.config.initial_document.id,
|
||||
mode: 'save',
|
||||
shouldScroll: false,
|
||||
selector
|
||||
}).finally(() => elementorCommon.api.internal('panel/state-ready'));
|
||||
}
|
||||
}
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/loop-builder/assets/js/frontend/handlers/loop.js":
|
||||
/*!*******************************************************************!*\
|
||||
!*** ../modules/loop-builder/assets/js/frontend/handlers/loop.js ***!
|
||||
\*******************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
/* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _posts = _interopRequireDefault(__webpack_require__(/*! modules/posts/assets/js/frontend/handlers/posts */ "../modules/posts/assets/js/frontend/handlers/posts.js"));
|
||||
var _documentHandle = _interopRequireWildcard(__webpack_require__(/*! elementor-pro/preview/utils/document-handle */ "../assets/dev/js/preview/utils/document-handle.js"));
|
||||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
||||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
||||
class Loop extends _posts.default {
|
||||
getSkinPrefix() {
|
||||
return '';
|
||||
}
|
||||
getDefaultSettings() {
|
||||
const defaultSettings = super.getDefaultSettings();
|
||||
defaultSettings.selectors.post = '.elementor-loop-container .elementor';
|
||||
defaultSettings.selectors.postsContainer = '.elementor-loop-container';
|
||||
defaultSettings.classes.inPlaceTemplateEditable = 'elementor-in-place-template-editable';
|
||||
return defaultSettings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fit Images is used in the extended Posts widget handler to apply the "Image Size", "Image Ratio" and
|
||||
* "Image Width" controls. These controls don't exist in the Loop Grid widget, so we override `fitImages()`
|
||||
* to disable it's functionality.
|
||||
*/
|
||||
fitImages() {}
|
||||
getVerticalSpaceBetween() {
|
||||
return elementorProFrontend.utils.controls.getResponsiveControlValue(this.getElementSettings(), 'row_gap', 'size');
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a callback that runs when the "Edit Template" document handle is clicked in the Editor.
|
||||
*/
|
||||
onInPlaceEditTemplate() {
|
||||
this.$element.addClass(this.getDefaultSettings().classes.inPlaceTemplateEditable);
|
||||
this.elementsToRemove = [];
|
||||
this.handleSwiper();
|
||||
const templateID = this.getElementSettings('template_id');
|
||||
this.elementsToRemove = [...this.elementsToRemove, 'style#loop-' + templateID, 'link#font-loop-' + templateID, 'style#loop-dynamic-' + templateID];
|
||||
this.elementsToRemove.forEach(elementToRemove => {
|
||||
this.$element.find(elementToRemove).remove();
|
||||
});
|
||||
}
|
||||
handleSwiper() {
|
||||
const swiper = this.elements.$postsContainer.data('swiper');
|
||||
if (!swiper) {
|
||||
return;
|
||||
}
|
||||
swiper.slideTo(0);
|
||||
swiper.autoplay.pause();
|
||||
swiper.allowTouchMove = false;
|
||||
swiper.params.autoplay.delay = 1000000; // Add a long delay so that the Swiper does not move while editing the Template. Even though it was paused, it will start again on mouse leave.
|
||||
swiper.update();
|
||||
this.elementsToRemove = [...this.elementsToRemove, '.swiper-pagination', '.elementor-swiper-button', '.elementor-document-handle'];
|
||||
}
|
||||
attachEditDocumentHandle() {
|
||||
const templateId = this.getElementSettings('template_id');
|
||||
if (!templateId) {
|
||||
return;
|
||||
}
|
||||
const elementSettings = this.getElementSettings(),
|
||||
widgetSelector = `.elementor-element-${this.getID()}`,
|
||||
editHandleSelector = elementSettings?.edit_handle_selector + ('[data-elementor-type="loop-item"]' === elementSettings?.edit_handle_selector ? `.elementor-${templateId}` : ''),
|
||||
editHandleElement = this.$element.find(editHandleSelector).first()[0];
|
||||
if (!editHandleElement) {
|
||||
return;
|
||||
}
|
||||
if (this.isFirstEdit()) {
|
||||
// TODO: refactor when CSS :has() is fully supported.
|
||||
this.$element.find('.elementor-swiper-button').remove();
|
||||
return;
|
||||
}
|
||||
(0, _documentHandle.default)({
|
||||
element: editHandleElement,
|
||||
title: __('Template', 'elementor-pro'),
|
||||
id: templateId
|
||||
}, _documentHandle.EDIT_CONTEXT, () => this.onInPlaceEditTemplate(), `${widgetSelector} .elementor-${templateId}`);
|
||||
}
|
||||
isFirstEdit() {
|
||||
return this.$element.has('.e-loop-first-edit').length;
|
||||
}
|
||||
handleCTA() {
|
||||
const emptyViewContainer = document.querySelector(`[data-id="${this.getID()}"] .e-loop-empty-view__wrapper`);
|
||||
if (!emptyViewContainer) {
|
||||
return;
|
||||
}
|
||||
const shadowRoot = emptyViewContainer.attachShadow({
|
||||
mode: 'open'
|
||||
});
|
||||
shadowRoot.appendChild(elementorPro.modules.loopBuilder.getCtaStyles());
|
||||
shadowRoot.appendChild(elementorPro.modules.loopBuilder.getCtaContent(this.getWidgetType()));
|
||||
const ctaButton = shadowRoot.querySelector('.e-loop-empty-view__box-cta');
|
||||
ctaButton.addEventListener('click', () => {
|
||||
elementorPro.modules.loopBuilder.createTemplate();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows 3rd party add-ons to run code on the Loop Grid handler when the handler is initialized in the Editor.
|
||||
*/
|
||||
doEditorInitAction() {
|
||||
elementor.hooks.doAction('editor/widgets/loop-grid/on-init', this);
|
||||
}
|
||||
onElementChange(control) {
|
||||
if ('_skin' === control) {
|
||||
elementorPro.modules.loopBuilder.onApplySkinChange();
|
||||
}
|
||||
_posts.default.prototype.onElementChange.apply(this);
|
||||
}
|
||||
onInit() {
|
||||
super.onInit(...arguments);
|
||||
if (elementorFrontend.isEditMode()) {
|
||||
this.doEditorInitAction();
|
||||
this.attachEditDocumentHandle();
|
||||
this.handleCTA();
|
||||
}
|
||||
}
|
||||
}
|
||||
exports["default"] = Loop;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/posts/assets/js/frontend/handlers/posts.js":
|
||||
/*!*************************************************************!*\
|
||||
!*** ../modules/posts/assets/js/frontend/handlers/posts.js ***!
|
||||
\*************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _default = exports["default"] = elementorModules.frontend.handlers.Base.extend({
|
||||
getSkinPrefix() {
|
||||
return 'classic_';
|
||||
},
|
||||
bindEvents() {
|
||||
elementorFrontend.addListenerOnce(this.getModelCID(), 'resize', this.onWindowResize);
|
||||
},
|
||||
unbindEvents() {
|
||||
elementorFrontend.removeListeners(this.getModelCID(), 'resize', this.onWindowResize);
|
||||
},
|
||||
getClosureMethodsNames() {
|
||||
return elementorModules.frontend.handlers.Base.prototype.getClosureMethodsNames.apply(this, arguments).concat(['fitImages', 'onWindowResize', 'runMasonry']);
|
||||
},
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
classes: {
|
||||
fitHeight: 'elementor-fit-height',
|
||||
hasItemRatio: 'elementor-has-item-ratio'
|
||||
},
|
||||
selectors: {
|
||||
postsContainer: '.elementor-posts-container',
|
||||
post: '.elementor-post',
|
||||
postThumbnail: '.elementor-post__thumbnail',
|
||||
postThumbnailImage: '.elementor-post__thumbnail img'
|
||||
}
|
||||
};
|
||||
},
|
||||
getDefaultElements() {
|
||||
var selectors = this.getSettings('selectors');
|
||||
return {
|
||||
$postsContainer: this.$element.find(selectors.postsContainer),
|
||||
$posts: this.$element.find(selectors.post)
|
||||
};
|
||||
},
|
||||
fitImage($post) {
|
||||
var settings = this.getSettings(),
|
||||
$imageParent = $post.find(settings.selectors.postThumbnail),
|
||||
$image = $imageParent.find('img'),
|
||||
image = $image[0];
|
||||
if (!image) {
|
||||
return;
|
||||
}
|
||||
var imageParentRatio = $imageParent.outerHeight() / $imageParent.outerWidth(),
|
||||
imageRatio = image.naturalHeight / image.naturalWidth;
|
||||
$imageParent.toggleClass(settings.classes.fitHeight, imageRatio < imageParentRatio);
|
||||
},
|
||||
fitImages() {
|
||||
var $ = jQuery,
|
||||
self = this,
|
||||
itemRatio = getComputedStyle(this.$element[0], ':after').content,
|
||||
settings = this.getSettings();
|
||||
if (self.isMasonryEnabled()) {
|
||||
this.elements.$postsContainer.removeClass(settings.classes.hasItemRatio);
|
||||
return;
|
||||
}
|
||||
this.elements.$postsContainer.toggleClass(settings.classes.hasItemRatio, !!itemRatio.match(/\d/));
|
||||
this.elements.$posts.each(function () {
|
||||
var $post = $(this),
|
||||
$image = $post.find(settings.selectors.postThumbnailImage);
|
||||
self.fitImage($post);
|
||||
$image.on('load', function () {
|
||||
self.fitImage($post);
|
||||
});
|
||||
});
|
||||
},
|
||||
setColsCountSettings() {
|
||||
const settings = this.getElementSettings(),
|
||||
skinPrefix = this.getSkinPrefix(),
|
||||
colsCount = elementorProFrontend.utils.controls.getResponsiveControlValue(settings, `${skinPrefix}columns`);
|
||||
this.setSettings('colsCount', colsCount);
|
||||
},
|
||||
isMasonryEnabled() {
|
||||
return !!this.getElementSettings(this.getSkinPrefix() + 'masonry');
|
||||
},
|
||||
initMasonry() {
|
||||
imagesLoaded(this.elements.$posts, this.runMasonry);
|
||||
},
|
||||
getVerticalSpaceBetween() {
|
||||
/* The `verticalSpaceBetween` variable is set up in a way that supports older versions of the portfolio widget */
|
||||
let verticalSpaceBetween = elementorProFrontend.utils.controls.getResponsiveControlValue(this.getElementSettings(), `${this.getSkinPrefix()}row_gap`, 'size');
|
||||
if ('' === this.getSkinPrefix() && '' === verticalSpaceBetween) {
|
||||
verticalSpaceBetween = this.getElementSettings('item_gap.size');
|
||||
}
|
||||
return verticalSpaceBetween;
|
||||
},
|
||||
runMasonry() {
|
||||
var elements = this.elements;
|
||||
elements.$posts.css({
|
||||
marginTop: '',
|
||||
transitionDuration: ''
|
||||
});
|
||||
this.setColsCountSettings();
|
||||
var colsCount = this.getSettings('colsCount'),
|
||||
hasMasonry = this.isMasonryEnabled() && colsCount >= 2;
|
||||
elements.$postsContainer.toggleClass('elementor-posts-masonry', hasMasonry);
|
||||
if (!hasMasonry) {
|
||||
elements.$postsContainer.height('');
|
||||
return;
|
||||
}
|
||||
const verticalSpaceBetween = this.getVerticalSpaceBetween();
|
||||
var masonry = new elementorModules.utils.Masonry({
|
||||
container: elements.$postsContainer,
|
||||
items: elements.$posts.filter(':visible'),
|
||||
columnsCount: this.getSettings('colsCount'),
|
||||
verticalSpaceBetween: verticalSpaceBetween || 0
|
||||
});
|
||||
masonry.run();
|
||||
},
|
||||
run() {
|
||||
// For slow browsers
|
||||
setTimeout(this.fitImages, 0);
|
||||
this.initMasonry();
|
||||
},
|
||||
onInit() {
|
||||
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
|
||||
this.bindEvents();
|
||||
this.run();
|
||||
},
|
||||
onWindowResize() {
|
||||
this.fitImages();
|
||||
this.runMasonry();
|
||||
},
|
||||
onElementChange() {
|
||||
this.fitImages();
|
||||
setTimeout(this.runMasonry);
|
||||
}
|
||||
});
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=loop.27d8ba43536f8b76ca41.bundle.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/loop.4f538ab2476dd2d124e6.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/loop.4f538ab2476dd2d124e6.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
wp-content/plugins/elementor-pro/assets/js/lottie.565b778d23c04461c4ea.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/lottie.565b778d23c04461c4ea.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,662 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["lottie"],{
|
||||
|
||||
/***/ "../modules/lottie/assets/js/frontend/handler.js":
|
||||
/*!*******************************************************!*\
|
||||
!*** ../modules/lottie/assets/js/frontend/handler.js ***!
|
||||
\*******************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class lottieHandler extends elementorModules.frontend.handlers.Base {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
container: '.e-lottie__container',
|
||||
containerLink: '.e-lottie__container__link',
|
||||
animation: '.e-lottie__animation',
|
||||
caption: '.e-lottie__caption'
|
||||
},
|
||||
classes: {
|
||||
caption: 'e-lottie__caption'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const {
|
||||
selectors
|
||||
} = this.getSettings();
|
||||
return {
|
||||
$widgetWrapper: this.$element,
|
||||
$container: this.$element.find(selectors.container),
|
||||
$containerLink: this.$element.find(selectors.containerLink),
|
||||
$animation: this.$element.find(selectors.animation),
|
||||
$caption: this.$element.find(selectors.caption),
|
||||
$sectionParent: this.$element.closest('.elementor-section'),
|
||||
$columnParent: this.$element.closest('.elementor-column'),
|
||||
$containerParent: this.$element.closest('.e-con')
|
||||
};
|
||||
}
|
||||
onInit() {
|
||||
super.onInit(...arguments);
|
||||
this.lottie = null;
|
||||
this.state = {
|
||||
isAnimationScrollUpdateNeededOnFirstLoad: true,
|
||||
isNewLoopCycle: false,
|
||||
isInViewport: false,
|
||||
loop: false,
|
||||
animationDirection: 'forward',
|
||||
currentAnimationTrigger: '',
|
||||
effectsRelativeTo: '',
|
||||
hoverOutMode: '',
|
||||
hoverArea: '',
|
||||
caption: '',
|
||||
playAnimationCount: 0,
|
||||
animationSpeed: 0,
|
||||
linkTimeout: 0,
|
||||
viewportOffset: {
|
||||
start: 0,
|
||||
end: 100
|
||||
}
|
||||
};
|
||||
this.intersectionObservers = {
|
||||
animation: {
|
||||
observer: null,
|
||||
element: null
|
||||
},
|
||||
lazyload: {
|
||||
observer: null,
|
||||
element: null
|
||||
}
|
||||
};
|
||||
this.animationFrameRequest = {
|
||||
timer: null,
|
||||
lastScrollY: 0
|
||||
};
|
||||
this.listeners = {
|
||||
collection: [],
|
||||
elements: {
|
||||
$widgetArea: {
|
||||
triggerAnimationHoverIn: null,
|
||||
triggerAnimationHoverOut: null
|
||||
},
|
||||
$container: {
|
||||
triggerAnimationClick: null
|
||||
}
|
||||
}
|
||||
};
|
||||
this.initLottie();
|
||||
}
|
||||
initLottie() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
if (lottieSettings.lazyload) {
|
||||
this.lazyloadLottie();
|
||||
} else {
|
||||
this.generateLottie();
|
||||
}
|
||||
}
|
||||
lazyloadLottie() {
|
||||
const bufferHeightBeforeTriggerLottie = 200;
|
||||
this.intersectionObservers.lazyload.observer = elementorModules.utils.Scroll.scrollObserver({
|
||||
offset: `0px 0px ${bufferHeightBeforeTriggerLottie}px`,
|
||||
callback: event => {
|
||||
if (event.isInViewport) {
|
||||
this.generateLottie();
|
||||
this.intersectionObservers.lazyload.observer.unobserve(this.intersectionObservers.lazyload.element);
|
||||
}
|
||||
}
|
||||
});
|
||||
this.intersectionObservers.lazyload.element = this.elements.$container[0];
|
||||
this.intersectionObservers.lazyload.observer.observe(this.intersectionObservers.lazyload.element);
|
||||
}
|
||||
generateLottie() {
|
||||
this.createLottieInstance();
|
||||
this.setLottieEvents();
|
||||
}
|
||||
createLottieInstance() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
this.lottie = bodymovin.loadAnimation({
|
||||
container: this.elements.$animation[0],
|
||||
path: this.getAnimationPath(),
|
||||
renderer: lottieSettings.renderer,
|
||||
autoplay: false,
|
||||
// We always want to trigger the animation manually for considering start/end frame.
|
||||
name: 'lottie-widget'
|
||||
});
|
||||
|
||||
// Expose the lottie instance in the frontend.
|
||||
this.elements.$animation.data('lottie', this.lottie);
|
||||
}
|
||||
getAnimationPath() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
if (lottieSettings.source_json?.url && 'json' === lottieSettings.source_json.url.toLowerCase().substr(-4)) {
|
||||
return lottieSettings.source_json.url;
|
||||
} else if (lottieSettings.source_external_url?.url) {
|
||||
return lottieSettings.source_external_url.url;
|
||||
}
|
||||
|
||||
// Default animation path.
|
||||
return elementorProFrontend.config.lottie.defaultAnimationUrl;
|
||||
}
|
||||
setCaption() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
if ('external_url' === lottieSettings.source || 'media_file' === lottieSettings.source && 'custom' === lottieSettings.caption_source) {
|
||||
const $captionElement = this.getCaptionElement();
|
||||
$captionElement.text(lottieSettings.caption);
|
||||
}
|
||||
}
|
||||
getCaptionElement() {
|
||||
if (!this.elements.$caption.length) {
|
||||
const {
|
||||
classes
|
||||
} = this.getSettings();
|
||||
this.elements.$caption = jQuery('<p>', {
|
||||
class: classes.caption
|
||||
});
|
||||
this.elements.$container.append(this.elements.$caption);
|
||||
return this.elements.$caption;
|
||||
}
|
||||
return this.elements.$caption;
|
||||
}
|
||||
setLottieEvents() {
|
||||
this.lottie.addEventListener('DOMLoaded', () => this.onLottieDomLoaded());
|
||||
this.lottie.addEventListener('complete', () => this.onComplete());
|
||||
}
|
||||
saveInitialValues() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
|
||||
/*
|
||||
These values of the animation are being changed during the animation runtime
|
||||
and saved in the lottie instance (and not in the state) for the instance expose in the frontend.
|
||||
*/
|
||||
this.lottie.__initialTotalFrames = this.lottie.totalFrames;
|
||||
this.lottie.__initialFirstFrame = this.lottie.firstFrame;
|
||||
this.state.currentAnimationTrigger = lottieSettings.trigger;
|
||||
this.state.effectsRelativeTo = lottieSettings.effects_relative_to;
|
||||
this.state.viewportOffset.start = lottieSettings.viewport ? lottieSettings.viewport.sizes.start : 0;
|
||||
this.state.viewportOffset.end = lottieSettings.viewport ? lottieSettings.viewport.sizes.end : 100;
|
||||
this.state.animationSpeed = lottieSettings.play_speed?.size;
|
||||
this.state.linkTimeout = lottieSettings.link_timeout;
|
||||
this.state.caption = lottieSettings.caption;
|
||||
this.state.loop = lottieSettings.loop;
|
||||
}
|
||||
setAnimationFirstFrame() {
|
||||
const frame = this.getAnimationFrames();
|
||||
|
||||
/*
|
||||
We need to subtract the initial first frame from the first frame for handling scenarios
|
||||
when the animation first frame is not 0, this way we always get the relevant first frame.
|
||||
example: when start point is 70 and initial first frame is 60, the animation should start at 10.
|
||||
*/
|
||||
frame.first = frame.first - this.lottie.__initialFirstFrame;
|
||||
this.lottie.goToAndStop(frame.first, true);
|
||||
}
|
||||
initAnimationTrigger() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
switch (lottieSettings.trigger) {
|
||||
case 'none':
|
||||
this.playLottie();
|
||||
break;
|
||||
case 'arriving_to_viewport':
|
||||
this.playAnimationWhenArrivingToViewport();
|
||||
break;
|
||||
case 'bind_to_scroll':
|
||||
this.playAnimationWhenBindToScroll();
|
||||
break;
|
||||
case 'on_click':
|
||||
this.bindAnimationClickEvents();
|
||||
break;
|
||||
case 'on_hover':
|
||||
this.bindAnimationHoverEvents();
|
||||
break;
|
||||
}
|
||||
}
|
||||
playAnimationWhenArrivingToViewport() {
|
||||
const offset = this.getOffset();
|
||||
this.intersectionObservers.animation.observer = elementorModules.utils.Scroll.scrollObserver({
|
||||
offset: `${offset.end}% 0% ${offset.start}%`,
|
||||
callback: event => {
|
||||
if (event.isInViewport) {
|
||||
this.state.isInViewport = true;
|
||||
this.playLottie();
|
||||
} else {
|
||||
this.state.isInViewport = false;
|
||||
this.lottie.pause();
|
||||
}
|
||||
}
|
||||
});
|
||||
this.intersectionObservers.animation.element = this.elements.$widgetWrapper[0];
|
||||
this.intersectionObservers.animation.observer.observe(this.intersectionObservers.animation.element);
|
||||
}
|
||||
getOffset() {
|
||||
const lottieSettings = this.getLottieSettings(),
|
||||
start = -lottieSettings.viewport.sizes.start || 0,
|
||||
end = -(100 - lottieSettings.viewport.sizes.end) || 0;
|
||||
return {
|
||||
start,
|
||||
end
|
||||
};
|
||||
}
|
||||
playAnimationWhenBindToScroll() {
|
||||
const lottieSettings = this.getLottieSettings(),
|
||||
offset = this.getOffset();
|
||||
|
||||
// Generate scroll detection by Intersection Observer API
|
||||
this.intersectionObservers.animation.observer = elementorModules.utils.Scroll.scrollObserver({
|
||||
offset: `${offset.end}% 0% ${offset.start}%`,
|
||||
callback: event => this.onLottieIntersection(event)
|
||||
});
|
||||
this.intersectionObservers.animation.element = 'viewport' === lottieSettings.effects_relative_to ? this.elements.$widgetWrapper[0] : document.documentElement;
|
||||
this.intersectionObservers.animation.observer.observe(this.intersectionObservers.animation.element);
|
||||
}
|
||||
updateAnimationByScrollPosition() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
let percentage;
|
||||
if ('page' === lottieSettings.effects_relative_to) {
|
||||
percentage = this.getLottiePagePercentage();
|
||||
} else if ('fixed' === this.getCurrentDeviceSetting('_position')) {
|
||||
percentage = this.getLottieViewportHeightPercentage();
|
||||
} else {
|
||||
percentage = this.getLottieViewportPercentage();
|
||||
}
|
||||
let nextFrameToPlay = this.getFrameNumberByPercent(percentage);
|
||||
nextFrameToPlay = nextFrameToPlay - this.lottie.__initialFirstFrame;
|
||||
this.lottie.goToAndStop(nextFrameToPlay, true);
|
||||
}
|
||||
getLottieViewportPercentage() {
|
||||
return elementorModules.utils.Scroll.getElementViewportPercentage(this.elements.$widgetWrapper, this.getOffset());
|
||||
}
|
||||
getLottiePagePercentage() {
|
||||
return elementorModules.utils.Scroll.getPageScrollPercentage(this.getOffset());
|
||||
}
|
||||
getLottieViewportHeightPercentage() {
|
||||
return elementorModules.utils.Scroll.getPageScrollPercentage(this.getOffset(), window.innerHeight);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} percent - Percent value between 0-100
|
||||
*/
|
||||
getFrameNumberByPercent(percent) {
|
||||
const frame = this.getAnimationFrames();
|
||||
|
||||
/*
|
||||
In mobile devices the document height can be 'stretched' at the top and bottom points of the document,
|
||||
this 'stretched' will make percent to be either negative or larger than 100, therefore we need to limit percent between 0-100.
|
||||
*/
|
||||
percent = Math.min(100, Math.max(0, percent));
|
||||
|
||||
// Getting frame number by percent of range, considering start/end frame values if exist.
|
||||
return frame.first + (frame.last - frame.first) * percent / 100;
|
||||
}
|
||||
getAnimationFrames() {
|
||||
const lottieSettings = this.getLottieSettings(),
|
||||
currentFrame = this.getAnimationCurrentFrame(),
|
||||
startPoint = this.getAnimationRange().start,
|
||||
endPoint = this.getAnimationRange().end;
|
||||
let firstFrame = this.lottie.__initialFirstFrame,
|
||||
lastFrame = 0 === this.lottie.__initialFirstFrame ? this.lottie.__initialTotalFrames : this.lottie.__initialFirstFrame + this.lottie.__initialTotalFrames;
|
||||
|
||||
// Limiting min start point to animation first frame.
|
||||
if (startPoint && startPoint > firstFrame) {
|
||||
firstFrame = startPoint;
|
||||
}
|
||||
|
||||
// Limiting max end point to animation last frame.
|
||||
if (endPoint && endPoint < lastFrame) {
|
||||
lastFrame = endPoint;
|
||||
}
|
||||
|
||||
/*
|
||||
Getting the relevant first frame after loop complete and when not bind to scroll.
|
||||
when the animation is in progress (no when a new loop start), the first frame should be the current frame.
|
||||
when the trigger is bind_to_scroll we DON'T need to get this functionality.
|
||||
*/
|
||||
if (!this.state.isNewLoopCycle && 'bind_to_scroll' !== lottieSettings.trigger) {
|
||||
// When we have a custom start point, we need to check if the start point is larger than the last pause stop of the animation.
|
||||
firstFrame = startPoint && startPoint > currentFrame ? startPoint : currentFrame;
|
||||
}
|
||||
|
||||
// Reverse Mode.
|
||||
if ('backward' === this.state.animationDirection && this.isReverseMode()) {
|
||||
firstFrame = currentFrame;
|
||||
lastFrame = startPoint && startPoint > this.lottie.__initialFirstFrame ? startPoint : this.lottie.__initialFirstFrame;
|
||||
}
|
||||
return {
|
||||
first: firstFrame,
|
||||
last: lastFrame,
|
||||
current: currentFrame,
|
||||
total: this.lottie.__initialTotalFrames
|
||||
};
|
||||
}
|
||||
getAnimationRange() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
return {
|
||||
start: this.getInitialFrameNumberByPercent(lottieSettings.start_point.size),
|
||||
end: this.getInitialFrameNumberByPercent(lottieSettings.end_point.size)
|
||||
};
|
||||
}
|
||||
getInitialFrameNumberByPercent(percent) {
|
||||
percent = Math.min(100, Math.max(0, percent));
|
||||
return this.lottie.__initialFirstFrame + (this.lottie.__initialTotalFrames - this.lottie.__initialFirstFrame) * percent / 100;
|
||||
}
|
||||
getAnimationCurrentFrame() {
|
||||
// When pausing the animation (when out of viewport) the first frame of the animation changes.
|
||||
return 0 === this.lottie.firstFrame ? this.lottie.currentFrame : this.lottie.firstFrame + this.lottie.currentFrame;
|
||||
}
|
||||
setLinkTimeout() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
if ('on_click' === lottieSettings.trigger && lottieSettings.custom_link?.url && lottieSettings.link_timeout) {
|
||||
this.elements.$containerLink.on('click', event => {
|
||||
event.preventDefault();
|
||||
if (!this.isEdit) {
|
||||
setTimeout(() => {
|
||||
const tabTarget = 'on' === lottieSettings.custom_link.is_external ? '_blank' : '_self';
|
||||
window.open(lottieSettings.custom_link.url, tabTarget);
|
||||
}, lottieSettings.link_timeout);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
bindAnimationClickEvents() {
|
||||
this.listeners.elements.$container.triggerAnimationClick = () => {
|
||||
this.playLottie();
|
||||
};
|
||||
this.addSessionEventListener(this.elements.$container, 'click', this.listeners.elements.$container.triggerAnimationClick);
|
||||
}
|
||||
getLottieSettings() {
|
||||
const lottieSettings = this.getElementSettings();
|
||||
return {
|
||||
...lottieSettings,
|
||||
lazyload: 'yes' === lottieSettings.lazyload,
|
||||
loop: 'yes' === lottieSettings.loop
|
||||
};
|
||||
}
|
||||
playLottie() {
|
||||
const frame = this.getAnimationFrames();
|
||||
this.lottie.stop();
|
||||
this.lottie.playSegments([frame.first, frame.last], true);
|
||||
|
||||
// We reset the loop cycle state after playing the animation.
|
||||
this.state.isNewLoopCycle = false;
|
||||
}
|
||||
bindAnimationHoverEvents() {
|
||||
this.createAnimationHoverInEvents();
|
||||
this.createAnimationHoverOutEvents();
|
||||
}
|
||||
createAnimationHoverInEvents() {
|
||||
const lottieSettings = this.getLottieSettings(),
|
||||
$widgetArea = this.getHoverAreaElement();
|
||||
this.state.hoverArea = lottieSettings.hover_area;
|
||||
this.listeners.elements.$widgetArea.triggerAnimationHoverIn = () => {
|
||||
this.state.animationDirection = 'forward';
|
||||
this.playLottie();
|
||||
};
|
||||
this.addSessionEventListener($widgetArea, 'mouseenter', this.listeners.elements.$widgetArea.triggerAnimationHoverIn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {jQuery} $el
|
||||
* @param {string} event - event type
|
||||
* @param {Function} callback
|
||||
*/
|
||||
addSessionEventListener($el, event, callback) {
|
||||
$el.on(event, callback);
|
||||
this.listeners.collection.push({
|
||||
$el,
|
||||
event,
|
||||
callback
|
||||
});
|
||||
}
|
||||
createAnimationHoverOutEvents() {
|
||||
const lottieSettings = this.getLottieSettings(),
|
||||
$widgetArea = this.getHoverAreaElement();
|
||||
if ('pause' === lottieSettings.on_hover_out || 'reverse' === lottieSettings.on_hover_out) {
|
||||
this.state.hoverOutMode = lottieSettings.on_hover_out;
|
||||
this.listeners.elements.$widgetArea.triggerAnimationHoverOut = () => {
|
||||
if ('pause' === lottieSettings.on_hover_out) {
|
||||
this.lottie.pause();
|
||||
} else {
|
||||
this.state.animationDirection = 'backward';
|
||||
this.playLottie();
|
||||
}
|
||||
};
|
||||
this.addSessionEventListener($widgetArea, 'mouseleave', this.listeners.elements.$widgetArea.triggerAnimationHoverOut);
|
||||
}
|
||||
}
|
||||
getHoverAreaElement() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
switch (lottieSettings.hover_area) {
|
||||
case 'section':
|
||||
return this.elements.$sectionParent;
|
||||
case 'column':
|
||||
return this.elements.$columnParent;
|
||||
case 'container':
|
||||
return this.elements.$containerParent;
|
||||
}
|
||||
return this.elements.$container;
|
||||
}
|
||||
setLoopOnAnimationComplete() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
this.state.isNewLoopCycle = true;
|
||||
if (lottieSettings.loop && !this.isReverseMode()) {
|
||||
this.setLoopWhenNotReverse();
|
||||
} else if (lottieSettings.loop && this.isReverseMode()) {
|
||||
this.setReverseAnimationOnLoop();
|
||||
} else if (!lottieSettings.loop && this.isReverseMode()) {
|
||||
this.setReverseAnimationOnSingleTrigger();
|
||||
}
|
||||
}
|
||||
isReverseMode() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
return 'yes' === lottieSettings.reverse_animation || 'reverse' === lottieSettings.on_hover_out && 'backward' === this.state.animationDirection;
|
||||
}
|
||||
setLoopWhenNotReverse() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
if (lottieSettings.number_of_times > 0) {
|
||||
this.state.playAnimationCount++;
|
||||
if (this.state.playAnimationCount < lottieSettings.number_of_times) {
|
||||
this.playLottie();
|
||||
} else {
|
||||
this.state.playAnimationCount = 0;
|
||||
}
|
||||
} else {
|
||||
this.playLottie();
|
||||
}
|
||||
}
|
||||
setReverseAnimationOnLoop() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
|
||||
/*
|
||||
We trigger the reverse animation:
|
||||
either when we don't have any value in the 'Number of Times" field, and then it will be an infinite forward/backward loop,
|
||||
or, when we have a value in the 'Number of Times" field and then we need to limit the number of times of the loop cycles.
|
||||
*/
|
||||
if (!lottieSettings.number_of_times || this.state.playAnimationCount < lottieSettings.number_of_times) {
|
||||
this.state.animationDirection = 'forward' === this.state.animationDirection ? 'backward' : 'forward';
|
||||
this.playLottie();
|
||||
|
||||
/*
|
||||
We need to increment the count only on the backward movements,
|
||||
because forward movement + backward movement are equal together to one full movement count.
|
||||
*/
|
||||
if ('backward' === this.state.animationDirection) {
|
||||
this.state.playAnimationCount++;
|
||||
}
|
||||
} else {
|
||||
// Reset the values for the loop counting for the next trigger.
|
||||
this.state.playAnimationCount = 0;
|
||||
this.state.animationDirection = 'forward';
|
||||
}
|
||||
}
|
||||
setReverseAnimationOnSingleTrigger() {
|
||||
if (this.state.playAnimationCount < 1) {
|
||||
this.state.playAnimationCount++;
|
||||
this.state.animationDirection = 'backward';
|
||||
this.playLottie();
|
||||
} else if (this.state.playAnimationCount >= 1 && 'forward' === this.state.animationDirection) {
|
||||
this.state.animationDirection = 'backward';
|
||||
this.playLottie();
|
||||
} else {
|
||||
this.state.playAnimationCount = 0;
|
||||
this.state.animationDirection = 'forward';
|
||||
}
|
||||
}
|
||||
setAnimationSpeed() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
if (lottieSettings.play_speed) {
|
||||
this.lottie.setSpeed(lottieSettings.play_speed.size);
|
||||
}
|
||||
}
|
||||
onElementChange() {
|
||||
this.updateLottieValues();
|
||||
this.resetAnimationTrigger();
|
||||
}
|
||||
updateLottieValues() {
|
||||
const lottieSettings = this.getLottieSettings(),
|
||||
valuesComparison = [{
|
||||
sourceVal: lottieSettings.play_speed?.size,
|
||||
stateProp: 'animationSpeed',
|
||||
callback: () => this.setAnimationSpeed()
|
||||
}, {
|
||||
sourceVal: lottieSettings.link_timeout,
|
||||
stateProp: 'linkTimeout',
|
||||
callback: () => this.setLinkTimeout()
|
||||
}, {
|
||||
sourceVal: lottieSettings.caption,
|
||||
stateProp: 'caption',
|
||||
callback: () => this.setCaption()
|
||||
}, {
|
||||
sourceVal: lottieSettings.effects_relative_to,
|
||||
stateProp: 'effectsRelativeTo',
|
||||
callback: () => this.updateAnimationByScrollPosition()
|
||||
}, {
|
||||
sourceVal: lottieSettings.loop,
|
||||
stateProp: 'loop',
|
||||
callback: () => this.onLoopStateChange()
|
||||
}];
|
||||
valuesComparison.forEach(item => {
|
||||
if ('undefined' !== typeof item.sourceVal && item.sourceVal !== this.state[item.stateProp]) {
|
||||
this.state[item.stateProp] = item.sourceVal;
|
||||
item.callback();
|
||||
}
|
||||
});
|
||||
}
|
||||
onLoopStateChange() {
|
||||
const isInActiveViewportMode = 'arriving_to_viewport' === this.state.currentAnimationTrigger && this.state.isInViewport;
|
||||
if (this.state.loop && (isInActiveViewportMode || 'none' === this.state.currentAnimationTrigger)) {
|
||||
this.playLottie();
|
||||
}
|
||||
}
|
||||
resetAnimationTrigger() {
|
||||
const lottieSettings = this.getLottieSettings(),
|
||||
isTriggerChange = lottieSettings.trigger !== this.state.currentAnimationTrigger,
|
||||
isViewportOffsetChange = lottieSettings.viewport ? this.isViewportOffsetChange() : false,
|
||||
isHoverOutModeChange = lottieSettings.on_hover_out ? this.isHoverOutModeChange() : false,
|
||||
isHoverAreaChange = lottieSettings.hover_area ? this.isHoverAreaChange() : false;
|
||||
if (isTriggerChange || isViewportOffsetChange || isHoverOutModeChange || isHoverAreaChange) {
|
||||
this.removeAnimationFrameRequests();
|
||||
this.removeObservers();
|
||||
this.removeEventListeners();
|
||||
this.initAnimationTrigger();
|
||||
}
|
||||
}
|
||||
isViewportOffsetChange() {
|
||||
const lottieSettings = this.getLottieSettings(),
|
||||
isStartOffsetChange = lottieSettings.viewport.sizes.start !== this.state.viewportOffset.start,
|
||||
isEndOffsetChange = lottieSettings.viewport.sizes.end !== this.state.viewportOffset.end;
|
||||
return isStartOffsetChange || isEndOffsetChange;
|
||||
}
|
||||
isHoverOutModeChange() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
return lottieSettings.on_hover_out !== this.state.hoverOutMode;
|
||||
}
|
||||
isHoverAreaChange() {
|
||||
const lottieSettings = this.getLottieSettings();
|
||||
return lottieSettings.hover_area !== this.state.hoverArea;
|
||||
}
|
||||
removeEventListeners() {
|
||||
this.listeners.collection.forEach(listener => {
|
||||
listener.$el.off(listener.event, null, listener.callback);
|
||||
});
|
||||
}
|
||||
removeObservers() {
|
||||
// Removing all observers.
|
||||
for (const type in this.intersectionObservers) {
|
||||
if (this.intersectionObservers[type].observer && this.intersectionObservers[type].element) {
|
||||
this.intersectionObservers[type].observer.unobserve(this.intersectionObservers[type].element);
|
||||
}
|
||||
}
|
||||
}
|
||||
removeAnimationFrameRequests() {
|
||||
cancelAnimationFrame(this.animationFrameRequest.timer);
|
||||
}
|
||||
onDestroy() {
|
||||
super.onDestroy();
|
||||
this.destroyLottie();
|
||||
}
|
||||
destroyLottie() {
|
||||
this.removeAnimationFrameRequests();
|
||||
this.removeObservers();
|
||||
this.removeEventListeners();
|
||||
this.elements.$animation.removeData('lottie');
|
||||
if (this.lottie) {
|
||||
this.lottie.destroy();
|
||||
}
|
||||
}
|
||||
onLottieDomLoaded() {
|
||||
this.saveInitialValues();
|
||||
this.setAnimationSpeed();
|
||||
this.setLinkTimeout();
|
||||
this.setCaption();
|
||||
this.setAnimationFirstFrame();
|
||||
this.initAnimationTrigger();
|
||||
}
|
||||
onComplete() {
|
||||
this.setLoopOnAnimationComplete();
|
||||
}
|
||||
onLottieIntersection(event) {
|
||||
if (event.isInViewport) {
|
||||
/*
|
||||
It's required to update the animation progress on first load when lottie is inside the viewport on load
|
||||
but, there is a problem when the browser is refreshed when the scroll bar is not in 0 position,
|
||||
in this scenario, after the refresh the browser will trigger 2 scroll events
|
||||
one trigger on immediate load and second after a f ew ms to move the scroll bar to previous position (before refresh)
|
||||
therefore, we use the this.state.isAnimationScrollUpdateNeededOnFirstLoad flag
|
||||
to make sure that this.updateAnimationByScrollPosition() function will be triggered only once.
|
||||
*/
|
||||
if (this.state.isAnimationScrollUpdateNeededOnFirstLoad) {
|
||||
this.state.isAnimationScrollUpdateNeededOnFirstLoad = false;
|
||||
this.updateAnimationByScrollPosition();
|
||||
}
|
||||
this.animationFrameRequest.timer = requestAnimationFrame(() => this.onAnimationFrameRequest());
|
||||
} else {
|
||||
const frame = this.getAnimationFrames(),
|
||||
finalFrame = 'up' === event.intersectionScrollDirection ? frame.first : frame.last;
|
||||
this.state.isAnimationScrollUpdateNeededOnFirstLoad = false;
|
||||
cancelAnimationFrame(this.animationFrameRequest.timer);
|
||||
|
||||
// Set the animation values to min/max when out of viewport.
|
||||
this.lottie.goToAndStop(finalFrame, true);
|
||||
}
|
||||
}
|
||||
onAnimationFrameRequest() {
|
||||
// Making calculation only when there is a change with the scroll position.
|
||||
if (window.scrollY !== this.animationFrameRequest.lastScrollY) {
|
||||
this.updateAnimationByScrollPosition();
|
||||
this.animationFrameRequest.lastScrollY = window.scrollY;
|
||||
}
|
||||
this.animationFrameRequest.timer = requestAnimationFrame(() => this.onAnimationFrameRequest());
|
||||
}
|
||||
}
|
||||
exports["default"] = lottieHandler;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=lottie.a00fda0bbf10f9b99eae.bundle.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/media-carousel.aca2224ef13e6f999011.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/media-carousel.aca2224ef13e6f999011.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,386 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["media-carousel"],{
|
||||
|
||||
/***/ "../modules/carousel/assets/js/frontend/handlers/base.js":
|
||||
/*!***************************************************************!*\
|
||||
!*** ../modules/carousel/assets/js/frontend/handlers/base.js ***!
|
||||
\***************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class CarouselBase extends elementorModules.frontend.handlers.SwiperBase {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
swiperContainer: '.elementor-main-swiper',
|
||||
swiperSlide: '.swiper-slide'
|
||||
},
|
||||
slidesPerView: {
|
||||
widescreen: 3,
|
||||
desktop: 3,
|
||||
laptop: 3,
|
||||
tablet_extra: 3,
|
||||
tablet: 2,
|
||||
mobile_extra: 2,
|
||||
mobile: 1
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const selectors = this.getSettings('selectors'),
|
||||
elements = {
|
||||
$swiperContainer: this.$element.find(selectors.swiperContainer)
|
||||
};
|
||||
elements.$slides = elements.$swiperContainer.find(selectors.swiperSlide);
|
||||
return elements;
|
||||
}
|
||||
getEffect() {
|
||||
return this.getElementSettings('effect');
|
||||
}
|
||||
getDeviceSlidesPerView(device) {
|
||||
const slidesPerViewKey = 'slides_per_view' + ('desktop' === device ? '' : '_' + device);
|
||||
return Math.min(this.getSlidesCount(), +this.getElementSettings(slidesPerViewKey) || this.getSettings('slidesPerView')[device]);
|
||||
}
|
||||
getSlidesPerView(device) {
|
||||
if ('slide' === this.getEffect()) {
|
||||
return this.getDeviceSlidesPerView(device);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
getDeviceSlidesToScroll(device) {
|
||||
const slidesToScrollKey = 'slides_to_scroll' + ('desktop' === device ? '' : '_' + device);
|
||||
return Math.min(this.getSlidesCount(), +this.getElementSettings(slidesToScrollKey) || 1);
|
||||
}
|
||||
getSlidesToScroll(device) {
|
||||
if ('slide' === this.getEffect()) {
|
||||
return this.getDeviceSlidesToScroll(device);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
getSpaceBetween(device) {
|
||||
let propertyName = 'space_between';
|
||||
if (device && 'desktop' !== device) {
|
||||
propertyName += '_' + device;
|
||||
}
|
||||
return this.getElementSettings(propertyName).size || 0;
|
||||
}
|
||||
getSwiperOptions() {
|
||||
const elementSettings = this.getElementSettings();
|
||||
const swiperOptions = {
|
||||
grabCursor: true,
|
||||
initialSlide: this.getInitialSlide(),
|
||||
slidesPerView: this.getSlidesPerView('desktop'),
|
||||
slidesPerGroup: this.getSlidesToScroll('desktop'),
|
||||
spaceBetween: this.getSpaceBetween(),
|
||||
loop: 'yes' === elementSettings.loop,
|
||||
speed: elementSettings.speed,
|
||||
effect: this.getEffect(),
|
||||
preventClicksPropagation: false,
|
||||
slideToClickedSlide: true,
|
||||
handleElementorBreakpoints: true
|
||||
};
|
||||
if ('yes' === elementSettings.lazyload) {
|
||||
swiperOptions.lazy = {
|
||||
loadPrevNext: true,
|
||||
loadPrevNextAmount: 1
|
||||
};
|
||||
}
|
||||
if (elementSettings.show_arrows) {
|
||||
swiperOptions.navigation = {
|
||||
prevEl: '.elementor-swiper-button-prev',
|
||||
nextEl: '.elementor-swiper-button-next'
|
||||
};
|
||||
}
|
||||
if (elementSettings.pagination) {
|
||||
swiperOptions.pagination = {
|
||||
el: '.swiper-pagination',
|
||||
type: elementSettings.pagination,
|
||||
clickable: true
|
||||
};
|
||||
}
|
||||
if ('cube' !== this.getEffect()) {
|
||||
const breakpointsSettings = {},
|
||||
breakpoints = elementorFrontend.config.responsive.activeBreakpoints;
|
||||
Object.keys(breakpoints).forEach(breakpointName => {
|
||||
breakpointsSettings[breakpoints[breakpointName].value] = {
|
||||
slidesPerView: this.getSlidesPerView(breakpointName),
|
||||
slidesPerGroup: this.getSlidesToScroll(breakpointName),
|
||||
spaceBetween: this.getSpaceBetween(breakpointName)
|
||||
};
|
||||
});
|
||||
swiperOptions.breakpoints = breakpointsSettings;
|
||||
}
|
||||
if (!this.isEdit && elementSettings.autoplay) {
|
||||
swiperOptions.autoplay = {
|
||||
delay: elementSettings.autoplay_speed,
|
||||
disableOnInteraction: !!elementSettings.pause_on_interaction
|
||||
};
|
||||
}
|
||||
return swiperOptions;
|
||||
}
|
||||
getDeviceBreakpointValue(device) {
|
||||
if (!this.breakpointsDictionary) {
|
||||
const breakpoints = elementorFrontend.config.responsive.activeBreakpoints;
|
||||
this.breakpointsDictionary = {};
|
||||
Object.keys(breakpoints).forEach(breakpointName => {
|
||||
this.breakpointsDictionary[breakpointName] = breakpoints[breakpointName].value;
|
||||
});
|
||||
}
|
||||
return this.breakpointsDictionary[device];
|
||||
}
|
||||
updateSpaceBetween(propertyName) {
|
||||
const deviceMatch = propertyName.match('space_between_(.*)'),
|
||||
device = deviceMatch ? deviceMatch[1] : 'desktop',
|
||||
newSpaceBetween = this.getSpaceBetween(device);
|
||||
if ('desktop' !== device) {
|
||||
this.swiper.params.breakpoints[this.getDeviceBreakpointValue(device)].spaceBetween = newSpaceBetween;
|
||||
} else {
|
||||
this.swiper.params.spaceBetween = newSpaceBetween;
|
||||
}
|
||||
this.swiper.params.spaceBetween = newSpaceBetween;
|
||||
this.swiper.update();
|
||||
}
|
||||
async onInit() {
|
||||
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
|
||||
if (1 >= this.getSlidesCount()) {
|
||||
return;
|
||||
}
|
||||
const Swiper = elementorFrontend.utils.swiper;
|
||||
this.swiper = await new Swiper(this.elements.$swiperContainer, this.getSwiperOptions());
|
||||
const elementSettings = this.getElementSettings();
|
||||
if ('yes' === elementSettings.pause_on_hover) {
|
||||
this.togglePauseOnHover(true);
|
||||
}
|
||||
|
||||
// Expose the swiper instance in the frontend
|
||||
this.elements.$swiperContainer.data('swiper', this.swiper);
|
||||
}
|
||||
getChangeableProperties() {
|
||||
return {
|
||||
autoplay: 'autoplay',
|
||||
pause_on_hover: 'pauseOnHover',
|
||||
pause_on_interaction: 'disableOnInteraction',
|
||||
autoplay_speed: 'delay',
|
||||
speed: 'speed',
|
||||
width: 'width'
|
||||
};
|
||||
}
|
||||
updateSwiperOption(propertyName) {
|
||||
if (0 === propertyName.indexOf('width')) {
|
||||
this.swiper.update();
|
||||
return;
|
||||
}
|
||||
const elementSettings = this.getElementSettings(),
|
||||
newSettingValue = elementSettings[propertyName],
|
||||
changeableProperties = this.getChangeableProperties();
|
||||
let propertyToUpdate = changeableProperties[propertyName],
|
||||
valueToUpdate = newSettingValue;
|
||||
|
||||
// Handle special cases where the value to update is not the value that the Swiper library accepts
|
||||
switch (propertyName) {
|
||||
case 'autoplay':
|
||||
if (newSettingValue) {
|
||||
valueToUpdate = {
|
||||
delay: elementSettings.autoplay_speed,
|
||||
disableOnInteraction: 'yes' === elementSettings.pause_on_interaction
|
||||
};
|
||||
} else {
|
||||
valueToUpdate = false;
|
||||
}
|
||||
break;
|
||||
case 'autoplay_speed':
|
||||
propertyToUpdate = 'autoplay';
|
||||
valueToUpdate = {
|
||||
delay: newSettingValue,
|
||||
disableOnInteraction: 'yes' === elementSettings.pause_on_interaction
|
||||
};
|
||||
break;
|
||||
case 'pause_on_hover':
|
||||
this.togglePauseOnHover('yes' === newSettingValue);
|
||||
break;
|
||||
case 'pause_on_interaction':
|
||||
valueToUpdate = 'yes' === newSettingValue;
|
||||
break;
|
||||
}
|
||||
|
||||
// 'pause_on_hover' is implemented by the handler with event listeners, not the Swiper library
|
||||
if ('pause_on_hover' !== propertyName) {
|
||||
this.swiper.params[propertyToUpdate] = valueToUpdate;
|
||||
}
|
||||
this.swiper.update();
|
||||
}
|
||||
onElementChange(propertyName) {
|
||||
if (1 >= this.getSlidesCount()) {
|
||||
return;
|
||||
}
|
||||
if (0 === propertyName.indexOf('width')) {
|
||||
this.swiper.update();
|
||||
|
||||
// If there is another thumbs slider, like in the Media Carousel widget.
|
||||
if (this.thumbsSwiper) {
|
||||
this.thumbsSwiper.update();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// This is for handling the responsive control 'space_between'.
|
||||
// Responsive controls require a separate way of handling, and some currently don't work
|
||||
// (Swiper bug, currently exists in v5.3.6) TODO: update Swiper when bug is fixed and handle responsive controls
|
||||
if (0 === propertyName.indexOf('space_between')) {
|
||||
this.updateSpaceBetween(propertyName);
|
||||
return;
|
||||
}
|
||||
const changeableProperties = this.getChangeableProperties();
|
||||
if (Object.prototype.hasOwnProperty.call(changeableProperties, propertyName)) {
|
||||
this.updateSwiperOption(propertyName);
|
||||
}
|
||||
}
|
||||
onEditSettingsChange(propertyName) {
|
||||
if (1 >= this.getSlidesCount()) {
|
||||
return;
|
||||
}
|
||||
if ('activeItemIndex' === propertyName) {
|
||||
this.swiper.slideToLoop(this.getEditSettings('activeItemIndex') - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports["default"] = CarouselBase;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/carousel/assets/js/frontend/handlers/media-carousel.js":
|
||||
/*!*************************************************************************!*\
|
||||
!*** ../modules/carousel/assets/js/frontend/handlers/media-carousel.js ***!
|
||||
\*************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../modules/carousel/assets/js/frontend/handlers/base.js"));
|
||||
class MediaCarousel extends _base.default {
|
||||
isSlideshow() {
|
||||
return 'slideshow' === this.getElementSettings('skin');
|
||||
}
|
||||
getDefaultSettings() {
|
||||
const defaultSettings = super.getDefaultSettings(...arguments);
|
||||
if (this.isSlideshow()) {
|
||||
defaultSettings.selectors.thumbsSwiper = '.elementor-thumbnails-swiper';
|
||||
defaultSettings.slidesPerView = {
|
||||
widescreen: 5,
|
||||
desktop: 5,
|
||||
laptop: 5,
|
||||
tablet_extra: 5,
|
||||
tablet: 4,
|
||||
mobile_extra: 4,
|
||||
mobile: 3
|
||||
};
|
||||
}
|
||||
return defaultSettings;
|
||||
}
|
||||
getSlidesPerViewSettingNames() {
|
||||
if (!this.slideshowElementSettings) {
|
||||
this.slideshowElementSettings = ['slides_per_view'];
|
||||
const activeBreakpoints = elementorFrontend.config.responsive.activeBreakpoints;
|
||||
Object.keys(activeBreakpoints).forEach(breakpointName => {
|
||||
this.slideshowElementSettings.push('slides_per_view_' + breakpointName);
|
||||
});
|
||||
}
|
||||
return this.slideshowElementSettings;
|
||||
}
|
||||
getElementSettings(setting) {
|
||||
if (-1 !== this.getSlidesPerViewSettingNames().indexOf(setting) && this.isSlideshow()) {
|
||||
setting = 'slideshow_' + setting;
|
||||
}
|
||||
return super.getElementSettings(setting);
|
||||
}
|
||||
getDefaultElements() {
|
||||
const selectors = this.getSettings('selectors'),
|
||||
defaultElements = super.getDefaultElements(...arguments);
|
||||
if (this.isSlideshow()) {
|
||||
defaultElements.$thumbsSwiper = this.$element.find(selectors.thumbsSwiper);
|
||||
}
|
||||
return defaultElements;
|
||||
}
|
||||
getEffect() {
|
||||
if ('coverflow' === this.getElementSettings('skin')) {
|
||||
return 'coverflow';
|
||||
}
|
||||
return super.getEffect();
|
||||
}
|
||||
getSlidesPerView(device) {
|
||||
if (this.isSlideshow()) {
|
||||
return 1;
|
||||
}
|
||||
if ('coverflow' === this.getElementSettings('skin')) {
|
||||
return this.getDeviceSlidesPerView(device);
|
||||
}
|
||||
return super.getSlidesPerView(device);
|
||||
}
|
||||
getSwiperOptions() {
|
||||
const options = super.getSwiperOptions();
|
||||
if (this.isSlideshow()) {
|
||||
options.loopedSlides = this.getSlidesCount();
|
||||
delete options.pagination;
|
||||
delete options.breakpoints;
|
||||
}
|
||||
return options;
|
||||
}
|
||||
async onInit() {
|
||||
await super.onInit();
|
||||
const slidesCount = this.getSlidesCount();
|
||||
if (!this.isSlideshow() || 1 >= slidesCount) {
|
||||
return;
|
||||
}
|
||||
const elementSettings = this.getElementSettings(),
|
||||
loop = 'yes' === elementSettings.loop,
|
||||
breakpointsSettings = {},
|
||||
breakpoints = elementorFrontend.config.responsive.activeBreakpoints,
|
||||
desktopSlidesPerView = this.getDeviceSlidesPerView('desktop');
|
||||
Object.keys(breakpoints).forEach(breakpointName => {
|
||||
breakpointsSettings[breakpoints[breakpointName].value] = {
|
||||
slidesPerView: this.getDeviceSlidesPerView(breakpointName),
|
||||
spaceBetween: this.getSpaceBetween(breakpointName)
|
||||
};
|
||||
});
|
||||
const thumbsSliderOptions = {
|
||||
slidesPerView: desktopSlidesPerView,
|
||||
initialSlide: this.getInitialSlide(),
|
||||
centeredSlides: elementSettings.centered_slides,
|
||||
slideToClickedSlide: true,
|
||||
spaceBetween: this.getSpaceBetween(),
|
||||
loopedSlides: slidesCount,
|
||||
loop,
|
||||
breakpoints: breakpointsSettings,
|
||||
handleElementorBreakpoints: true
|
||||
};
|
||||
if ('yes' === elementSettings.lazyload) {
|
||||
thumbsSliderOptions.lazy = {
|
||||
loadPrevNext: true,
|
||||
loadPrevNextAmount: 1
|
||||
};
|
||||
}
|
||||
const Swiper = elementorFrontend.utils.swiper;
|
||||
this.swiper.controller.control = this.thumbsSwiper = await new Swiper(this.elements.$thumbsSwiper, thumbsSliderOptions);
|
||||
|
||||
// Expose the swiper instance in the frontend
|
||||
this.elements.$thumbsSwiper.data('swiper', this.thumbsSwiper);
|
||||
this.thumbsSwiper.controller.control = this.swiper;
|
||||
}
|
||||
}
|
||||
exports["default"] = MediaCarousel;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=media-carousel.d8417210e0b731dd32b8.bundle.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[733],{1942:(e,t,r)=>{var l=r(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.MegaMenu=void 0;var n=l(r(3318));class MegaMenu extends elementor.modules.elements.types.NestedElementBase{getType(){return"mega-menu"}getView(){return n.default}}t.MegaMenu=MegaMenu;t.default=MegaMenu},2133:(e,t,r)=>{var l=r(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=l(r(1942)),a=l(r(6554));class Module extends elementorModules.editor.utils.Module{constructor(){super(),elementor.elementsManager.registerElementType(new n.default),this.urlHelper=new a.default}getCurrentMenuItemClass(e,t){if(e=e?.trim(e),!e||!t)return"";const r=this.urlHelper.parse_url(t),l=this.urlHelper.parse_url(e);return _.isEqual(r,l)?"e-current":""}onElementorFrontendInit(){elementor.on("document:loaded",this.closeAllMegaMenus.bind(this))}closeAllMegaMenus(){const e=elementor.$previewContents[0].querySelectorAll(".elementor-widget-n-menu");e.length&&Array.from(e).forEach((e=>{const t=e.getAttribute("data-id");window.jQuery(window).trigger("elementor/mega-menu/dropdown-toggle-by-keyboard",{widgetId:t,show:!1})}))}}t.default=Module},6554:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.UrlHelper=void 0;class UrlHelper{parse_url(e){try{const{hostname:t,pathname:r,search:l}=new URL(e),n=t.replace("www.",""),a=/^\/+|\/+$/g;return[n,r.replace(a,""),l]}catch(e){return!1}}}t.UrlHelper=UrlHelper;t.default=UrlHelper},3318:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class View extends $e.components.get("nested-elements").exports.NestedView{filter(e,t){return e.attributes.dataIndex=t+1,e.attributes.widgetId=e.id,!0}onAddChild(e){const t=e._parent.$el.find(".e-n-menu")[0]?.dataset.widgetNumber||e.model.attributes.widgetId,r=e.model.attributes.dataIndex,l=e._parent.$el.find(`.e-n-menu-item-title[data-tab-index="${r}"]`)?.attr("id")||e.model.attributes.widgetId+" "+r;e.$el.attr({id:"e-n-menu-content-"+t+r,role:"menu","aria-labelledby":l,"data-tab-index":r,style:"--n-menu-title-order: "+r+";"})}}t.default=View}}]);
|
||||
@@ -0,0 +1,153 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["mega-menu-editor"],{
|
||||
|
||||
/***/ "../modules/mega-menu/assets/js/editor/mega-menu.js":
|
||||
/*!**********************************************************!*\
|
||||
!*** ../modules/mega-menu/assets/js/editor/mega-menu.js ***!
|
||||
\**********************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = exports.MegaMenu = void 0;
|
||||
var _view = _interopRequireDefault(__webpack_require__(/*! ./views/view */ "../modules/mega-menu/assets/js/editor/views/view.js"));
|
||||
class MegaMenu extends elementor.modules.elements.types.NestedElementBase {
|
||||
getType() {
|
||||
return 'mega-menu';
|
||||
}
|
||||
getView() {
|
||||
return _view.default;
|
||||
}
|
||||
}
|
||||
exports.MegaMenu = MegaMenu;
|
||||
var _default = exports["default"] = MegaMenu;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/mega-menu/assets/js/editor/module.js":
|
||||
/*!*******************************************************!*\
|
||||
!*** ../modules/mega-menu/assets/js/editor/module.js ***!
|
||||
\*******************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _megaMenu = _interopRequireDefault(__webpack_require__(/*! ./mega-menu */ "../modules/mega-menu/assets/js/editor/mega-menu.js"));
|
||||
var _urlHelper = _interopRequireDefault(__webpack_require__(/*! ./utils/url-helper */ "../modules/mega-menu/assets/js/editor/utils/url-helper.js"));
|
||||
class Module extends elementorModules.editor.utils.Module {
|
||||
constructor() {
|
||||
super();
|
||||
elementor.elementsManager.registerElementType(new _megaMenu.default());
|
||||
this.urlHelper = new _urlHelper.default();
|
||||
}
|
||||
getCurrentMenuItemClass(menuLinkUrl, permalinkUrl) {
|
||||
menuLinkUrl = menuLinkUrl?.trim(menuLinkUrl);
|
||||
if (!menuLinkUrl || !permalinkUrl) {
|
||||
return '';
|
||||
}
|
||||
const permalinkArray = this.urlHelper.parse_url(permalinkUrl),
|
||||
menuItemUrlArray = this.urlHelper.parse_url(menuLinkUrl),
|
||||
hasEqualUrls = _.isEqual(permalinkArray, menuItemUrlArray);
|
||||
return hasEqualUrls ? 'e-current' : '';
|
||||
}
|
||||
onElementorFrontendInit() {
|
||||
elementor.on('document:loaded', this.closeAllMegaMenus.bind(this));
|
||||
}
|
||||
closeAllMegaMenus() {
|
||||
const megaMenus = elementor.$previewContents[0].querySelectorAll('.elementor-widget-n-menu');
|
||||
if (megaMenus.length) {
|
||||
Array.from(megaMenus).forEach(node => {
|
||||
const id = node.getAttribute('data-id');
|
||||
window.jQuery(window).trigger('elementor/mega-menu/dropdown-toggle-by-keyboard', {
|
||||
widgetId: id,
|
||||
show: false
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
exports["default"] = Module;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/mega-menu/assets/js/editor/utils/url-helper.js":
|
||||
/*!*****************************************************************!*\
|
||||
!*** ../modules/mega-menu/assets/js/editor/utils/url-helper.js ***!
|
||||
\*****************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = exports.UrlHelper = void 0;
|
||||
class UrlHelper {
|
||||
parse_url(url) {
|
||||
try {
|
||||
const {
|
||||
hostname,
|
||||
pathname,
|
||||
search
|
||||
} = new URL(url),
|
||||
host = hostname.replace('www.', ''),
|
||||
trailingSlashesRegex = /^\/+|\/+$/g,
|
||||
path = pathname.replace(trailingSlashesRegex, '');
|
||||
return [host, path, search];
|
||||
} catch (err) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.UrlHelper = UrlHelper;
|
||||
var _default = exports["default"] = UrlHelper;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/mega-menu/assets/js/editor/views/view.js":
|
||||
/*!***********************************************************!*\
|
||||
!*** ../modules/mega-menu/assets/js/editor/views/view.js ***!
|
||||
\***********************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class View extends $e.components.get('nested-elements').exports.NestedView {
|
||||
filter(child, index) {
|
||||
child.attributes.dataIndex = index + 1;
|
||||
child.attributes.widgetId = child.id;
|
||||
return true;
|
||||
}
|
||||
onAddChild(childView) {
|
||||
const widgetNumber = childView._parent.$el.find('.e-n-menu')[0]?.dataset.widgetNumber || childView.model.attributes.widgetId,
|
||||
index = childView.model.attributes.dataIndex,
|
||||
tabId = childView._parent.$el.find(`.e-n-menu-item-title[data-tab-index="${index}"]`)?.attr('id') || childView.model.attributes.widgetId + ' ' + index;
|
||||
childView.$el.attr({
|
||||
id: 'e-n-menu-content-' + widgetNumber + '' + index,
|
||||
role: 'menu',
|
||||
'aria-labelledby': tabId,
|
||||
'data-tab-index': index,
|
||||
style: '--n-menu-title-order: ' + index + ';'
|
||||
});
|
||||
}
|
||||
}
|
||||
exports["default"] = View;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=mega-menu-editor.bbef3f7412481cbce555.bundle.js.map
|
||||
@@ -0,0 +1,51 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["mega-menu-stretch-content"],{
|
||||
|
||||
/***/ "../modules/mega-menu/assets/js/frontend/handlers/stretch-menu-item-content.js":
|
||||
/*!*************************************************************************************!*\
|
||||
!*** ../modules/mega-menu/assets/js/frontend/handlers/stretch-menu-item-content.js ***!
|
||||
\*************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class StretchedMenuItemContent extends elementorModules.frontend.handlers.StretchedElement {
|
||||
getStretchedClass() {
|
||||
return 'elementor-widget-n-menu';
|
||||
}
|
||||
getStretchElementForConfig() {
|
||||
return this.$element.find('.e-n-menu-wrapper');
|
||||
}
|
||||
getStretchElementConfig() {
|
||||
const elementConfig = super.getStretchElementConfig();
|
||||
elementConfig.cssOutput = 'variables';
|
||||
return elementConfig;
|
||||
}
|
||||
bindEvents() {
|
||||
super.bindEvents();
|
||||
elementorFrontend.addListenerOnce(this.getUniqueHandlerID(), 'elementor-pro/mega-menu/dropdown-open', this.stretch);
|
||||
elementorFrontend.elements.$window.on('elementor-pro/mega-menu/heading-mouse-event', this.stretch);
|
||||
}
|
||||
unbindEvents() {
|
||||
super.unbindEvents();
|
||||
elementorFrontend.removeListeners(this.getUniqueHandlerID(), 'elementor-pro/mega-menu/dropdown-open', this.stretch);
|
||||
elementorFrontend.elements.$window.off('elementor-pro/mega-menu/heading-mouse-event', this.stretch);
|
||||
}
|
||||
isStretchSettingEnabled() {
|
||||
return true;
|
||||
}
|
||||
isActive() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
exports["default"] = StretchedMenuItemContent;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=mega-menu-stretch-content.4648b25d00c1f94cec4e.bundle.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[157],{9638:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class StretchedMenuItemContent extends elementorModules.frontend.handlers.StretchedElement{getStretchedClass(){return"elementor-widget-n-menu"}getStretchElementForConfig(){return this.$element.find(".e-n-menu-wrapper")}getStretchElementConfig(){const e=super.getStretchElementConfig();return e.cssOutput="variables",e}bindEvents(){super.bindEvents(),elementorFrontend.addListenerOnce(this.getUniqueHandlerID(),"elementor-pro/mega-menu/dropdown-open",this.stretch),elementorFrontend.elements.$window.on("elementor-pro/mega-menu/heading-mouse-event",this.stretch)}unbindEvents(){super.unbindEvents(),elementorFrontend.removeListeners(this.getUniqueHandlerID(),"elementor-pro/mega-menu/dropdown-open",this.stretch),elementorFrontend.elements.$window.off("elementor-pro/mega-menu/heading-mouse-event",this.stretch)}isStretchSettingEnabled(){return!0}isActive(){return!0}}t.default=StretchedMenuItemContent}}]);
|
||||
@@ -0,0 +1,957 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["mega-menu"],{
|
||||
|
||||
/***/ "../assets/dev/js/frontend/utils/anchor-link.js":
|
||||
/*!******************************************************!*\
|
||||
!*** ../assets/dev/js/frontend/utils/anchor-link.js ***!
|
||||
\******************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class AnchorLinks {
|
||||
followMenuAnchors($anchorLinks, classes) {
|
||||
$anchorLinks.each((index, anchorLink) => {
|
||||
if (location.pathname === anchorLink.pathname && '' !== anchorLink.hash) {
|
||||
this.followMenuAnchor(jQuery(anchorLink), classes);
|
||||
}
|
||||
});
|
||||
}
|
||||
followMenuAnchor($element, classes) {
|
||||
const anchorSelector = $element[0].hash,
|
||||
activeAnchorClass = classes.activeAnchorItem,
|
||||
anchorClass = classes.anchorItem,
|
||||
$targetElement = $element.hasClass(anchorClass) ? $element : $element.closest(`.${anchorClass}`);
|
||||
let offset = -300,
|
||||
$anchor;
|
||||
try {
|
||||
// `decodeURIComponent` for UTF8 characters in the hash.
|
||||
$anchor = jQuery(decodeURIComponent(anchorSelector));
|
||||
} catch (e) {
|
||||
return;
|
||||
}
|
||||
if (!$anchor.length) {
|
||||
return;
|
||||
}
|
||||
if (!$anchor.hasClass('elementor-menu-anchor')) {
|
||||
const halfViewport = jQuery(window).height() / 2;
|
||||
offset = -$anchor.outerHeight() + halfViewport;
|
||||
}
|
||||
elementorFrontend.waypoint($anchor, direction => {
|
||||
if ('down' === direction) {
|
||||
$targetElement.addClass(activeAnchorClass);
|
||||
$element.attr('aria-current', 'location');
|
||||
} else {
|
||||
$targetElement.removeClass(activeAnchorClass);
|
||||
$element.attr('aria-current', '');
|
||||
}
|
||||
}, {
|
||||
offset: '50%',
|
||||
triggerOnce: false
|
||||
});
|
||||
elementorFrontend.waypoint($anchor, direction => {
|
||||
if ('down' === direction) {
|
||||
$targetElement.removeClass(activeAnchorClass);
|
||||
$element.attr('aria-current', '');
|
||||
} else {
|
||||
$targetElement.addClass(activeAnchorClass);
|
||||
$element.attr('aria-current', 'location');
|
||||
}
|
||||
}, {
|
||||
offset,
|
||||
triggerOnce: false
|
||||
});
|
||||
}
|
||||
}
|
||||
exports["default"] = AnchorLinks;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../assets/dev/js/frontend/utils/flex-horizontal-scroll.js":
|
||||
/*!*****************************************************************!*\
|
||||
!*** ../assets/dev/js/frontend/utils/flex-horizontal-scroll.js ***!
|
||||
\*****************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports.changeScrollStatus = changeScrollStatus;
|
||||
exports.setHorizontalScrollAlignment = setHorizontalScrollAlignment;
|
||||
exports.setHorizontalTitleScrollValues = setHorizontalTitleScrollValues;
|
||||
function changeScrollStatus(element, event) {
|
||||
if ('mousedown' === event.type) {
|
||||
element.classList.add('e-scroll');
|
||||
element.dataset.pageX = event.pageX;
|
||||
} else {
|
||||
element.classList.remove('e-scroll', 'e-scroll-active');
|
||||
element.dataset.pageX = '';
|
||||
}
|
||||
}
|
||||
|
||||
// This function was written using this example https://codepen.io/thenutz/pen/VwYeYEE.
|
||||
function setHorizontalTitleScrollValues(element, horizontalScrollStatus, event) {
|
||||
const isActiveScroll = element.classList.contains('e-scroll'),
|
||||
isHorizontalScrollActive = 'enable' === horizontalScrollStatus,
|
||||
headingContentIsWiderThanWrapper = element.scrollWidth > element.clientWidth;
|
||||
if (!isActiveScroll || !isHorizontalScrollActive || !headingContentIsWiderThanWrapper) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
const previousPositionX = parseFloat(element.dataset.pageX),
|
||||
mouseMoveX = event.pageX - previousPositionX,
|
||||
maximumScrollValue = 5,
|
||||
stepLimit = 20;
|
||||
let toScrollDistanceX = 0;
|
||||
if (stepLimit < mouseMoveX) {
|
||||
toScrollDistanceX = maximumScrollValue;
|
||||
} else if (stepLimit * -1 > mouseMoveX) {
|
||||
toScrollDistanceX = -1 * maximumScrollValue;
|
||||
} else {
|
||||
toScrollDistanceX = mouseMoveX;
|
||||
}
|
||||
element.scrollLeft = element.scrollLeft - toScrollDistanceX;
|
||||
element.classList.add('e-scroll-active');
|
||||
}
|
||||
function setHorizontalScrollAlignment(_ref) {
|
||||
let {
|
||||
element,
|
||||
direction,
|
||||
justifyCSSVariable,
|
||||
horizontalScrollStatus
|
||||
} = _ref;
|
||||
if (!element) {
|
||||
return;
|
||||
}
|
||||
if (isHorizontalScroll(element, horizontalScrollStatus)) {
|
||||
initialScrollPosition(element, direction, justifyCSSVariable);
|
||||
} else {
|
||||
element.style.setProperty(justifyCSSVariable, '');
|
||||
}
|
||||
}
|
||||
function isHorizontalScroll(element, horizontalScrollStatus) {
|
||||
return element.clientWidth < getChildrenWidth(element.children) && 'enable' === horizontalScrollStatus;
|
||||
}
|
||||
function getChildrenWidth(children) {
|
||||
let totalWidth = 0;
|
||||
const parentContainer = children[0].parentNode,
|
||||
computedStyles = getComputedStyle(parentContainer),
|
||||
gap = parseFloat(computedStyles.gap) || 0; // Get the gap value or default to 0 if it's not specified
|
||||
|
||||
for (let i = 0; i < children.length; i++) {
|
||||
totalWidth += children[i].offsetWidth + gap;
|
||||
}
|
||||
return totalWidth;
|
||||
}
|
||||
function initialScrollPosition(element, direction, justifyCSSVariable) {
|
||||
const isRTL = elementorFrontend.config.is_rtl;
|
||||
switch (direction) {
|
||||
case 'end':
|
||||
element.style.setProperty(justifyCSSVariable, 'start');
|
||||
element.scrollLeft = isRTL ? -1 * getChildrenWidth(element.children) : getChildrenWidth(element.children);
|
||||
break;
|
||||
default:
|
||||
element.style.setProperty(justifyCSSVariable, 'start');
|
||||
element.scrollLeft = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/mega-menu/assets/js/frontend/handlers/mega-menu.js":
|
||||
/*!*********************************************************************!*\
|
||||
!*** ../modules/mega-menu/assets/js/frontend/handlers/mega-menu.js ***!
|
||||
\*********************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _utils = __webpack_require__(/*! ../utils */ "../modules/mega-menu/assets/js/frontend/utils.js");
|
||||
var _anchorLink = _interopRequireDefault(__webpack_require__(/*! ../../../../../../assets/dev/js/frontend/utils/anchor-link */ "../assets/dev/js/frontend/utils/anchor-link.js"));
|
||||
var _flexHorizontalScroll = __webpack_require__(/*! elementor-pro/frontend/utils/flex-horizontal-scroll */ "../assets/dev/js/frontend/utils/flex-horizontal-scroll.js");
|
||||
class MegaMenu extends elementorModules.frontend.handlers.NestedTabs {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
if (elementorFrontend.isEditMode()) {
|
||||
this.lifecycleChangeListener = null;
|
||||
}
|
||||
this.resizeListener = null;
|
||||
this.prevMouseY = null;
|
||||
this.isKeyboardNavigation = false;
|
||||
}
|
||||
getDefaultSettings() {
|
||||
const settings = super.getDefaultSettings();
|
||||
settings.selectors.widgetContainer = '.e-n-menu';
|
||||
settings.selectors.dropdownMenuToggle = '.e-n-menu-toggle';
|
||||
settings.selectors.menuWrapper = '.e-n-menu-wrapper';
|
||||
settings.selectors.headingContainer = '.e-n-menu-heading';
|
||||
settings.selectors.tabTitle = '.e-n-menu-title';
|
||||
settings.selectors.directTabTitle = ':scope > .elementor-widget-container > .e-n-menu > .e-n-menu-wrapper > .e-n-menu-heading > .e-n-menu-title';
|
||||
settings.selectors.tabClickableTitle = '.e-n-menu-title.e-click';
|
||||
settings.selectors.tabDropdown = '.e-n-menu-dropdown-icon';
|
||||
settings.selectors.menuContent = '.e-n-menu-content';
|
||||
settings.selectors.tabContent = '.e-n-menu-content > .e-con';
|
||||
settings.selectors.directTabContent = ':scope > .elementor-widget-container > .e-n-menu > .e-n-menu-wrapper > .e-n-menu-content > .e-con';
|
||||
settings.selectors.anchorLink = '.e-anchor a';
|
||||
settings.classes.anchorItem = 'e-anchor';
|
||||
settings.classes.activeAnchorItem = 'e-current';
|
||||
settings.autoExpand = false;
|
||||
settings.autoFocus = false;
|
||||
settings.ariaAttributes.titleStateAttribute = 'aria-expanded';
|
||||
settings.ariaAttributes.activeTitleSelector = '[aria-expanded="true"]';
|
||||
return settings;
|
||||
}
|
||||
getDefaultElements() {
|
||||
const elements = super.getDefaultElements(),
|
||||
selectors = this.getSettings('selectors');
|
||||
elements.$widgetContainer = this.$element.find(selectors.widgetContainer);
|
||||
elements.$dropdownMenuToggle = this.$element.find(selectors.dropdownMenuToggle);
|
||||
elements.$menuWrapper = this.$element.find(selectors.menuWrapper);
|
||||
elements.$menuContent = this.$element.find(selectors.menuContent);
|
||||
elements.$headingContainer = this.$element.find(selectors.headingContainer);
|
||||
elements.$tabTitles = this.$element.find(selectors.tabTitle);
|
||||
elements.$tabDropdowns = this.$element.find(selectors.tabDropdown);
|
||||
elements.$anchorLink = this.$element.find(selectors.anchorLink);
|
||||
return elements;
|
||||
}
|
||||
setKeyboardNavigation(event) {
|
||||
if ('Tab' === event.key) {
|
||||
this.isKeyboardNavigation = true;
|
||||
}
|
||||
}
|
||||
dropdownMenuHeightControllerConfig() {
|
||||
const selectors = this.getSettings('selectors');
|
||||
return {
|
||||
elements: {
|
||||
$element: this.$element,
|
||||
$dropdownMenuContainer: this.$element.find(selectors.menuWrapper),
|
||||
$menuToggle: this.$element.find(selectors.dropdownMenuToggle)
|
||||
},
|
||||
attributes: {
|
||||
menuToggleState: 'aria-expanded'
|
||||
},
|
||||
settings: {
|
||||
dropdownMenuContainerMaxHeight: 'auto',
|
||||
menuHeightCssVarName: '--n-menu-dropdown-content-box-height'
|
||||
}
|
||||
};
|
||||
}
|
||||
handleContentContainerPosition() {
|
||||
let $contentContainer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
||||
this.resetContentContainersPosition();
|
||||
|
||||
// If no container is passed as an argument, check if there is an active container.
|
||||
const activeTitleSelector = this.getSettings('ariaAttributes').activeTitleSelector,
|
||||
tabIndex = this.elements.$tabDropdowns.filter(activeTitleSelector).attr('data-tab-index');
|
||||
$contentContainer = $contentContainer || this.elements.$tabContents.filter(this.getTabContentFilterSelector(tabIndex));
|
||||
if (!$contentContainer.length) {
|
||||
return;
|
||||
}
|
||||
this.setContentContainerAbsolutePosition($contentContainer);
|
||||
}
|
||||
setContentContainerAbsolutePosition($contentContainer) {
|
||||
const elementSettings = this.getElementSettings(),
|
||||
isFitToContent = 'fit_to_content' === elementSettings.content_width;
|
||||
if ((0, _utils.isMenuInDropdownMode)(elementSettings)) {
|
||||
return;
|
||||
}
|
||||
if (isFitToContent) {
|
||||
const direction = elementorFrontend.config.is_rtl ? 'right' : 'left',
|
||||
menuItemContainerOffset = 0 < this.getMenuItemContainerAbsolutePosition($contentContainer) ? this.getMenuItemContainerAbsolutePosition($contentContainer) : 0;
|
||||
$contentContainer.css(direction, menuItemContainerOffset);
|
||||
}
|
||||
const headingsHeight = this.elements.$headingContainer[0].getBoundingClientRect().height;
|
||||
if (this.shouldPositionContentAbove($contentContainer, headingsHeight)) {
|
||||
const contentContainerBoundingBox = $contentContainer[0].getBoundingClientRect();
|
||||
$contentContainer.css({
|
||||
width: isFitToContent ? 'max-content' : '',
|
||||
'max-width': contentContainerBoundingBox.width
|
||||
});
|
||||
this.elements.$widgetContainer.addClass('content-above');
|
||||
}
|
||||
}
|
||||
getMenuItemContainerAbsolutePosition($contentContainer) {
|
||||
const tabIndex = $contentContainer.data('tab-index'),
|
||||
$activeDropdown = this.elements.$tabDropdowns.filter(this.getTabTitleFilterSelector(tabIndex))[0],
|
||||
$titleElement = $activeDropdown.closest(this.getSettings('selectors').tabTitle),
|
||||
titleBoundingBox = $titleElement.getBoundingClientRect(),
|
||||
contentContainerWidth = $contentContainer[0].clientWidth;
|
||||
let menuItemContainerOffset = null;
|
||||
switch (this.getElementSettings('content_horizontal_position')) {
|
||||
case 'left':
|
||||
menuItemContainerOffset = this.getLeftDirectionContainerOffset(contentContainerWidth, titleBoundingBox);
|
||||
break;
|
||||
case 'right':
|
||||
menuItemContainerOffset = this.getRightDirectionContainerOffset(contentContainerWidth, titleBoundingBox);
|
||||
break;
|
||||
default:
|
||||
menuItemContainerOffset = this.getCenteredContainerOffset(contentContainerWidth, titleBoundingBox);
|
||||
}
|
||||
return menuItemContainerOffset;
|
||||
}
|
||||
getCenteredContainerOffset(contentContainerWidth, titleBoundingBox) {
|
||||
const menuItemContentContainerHalfWidth = contentContainerWidth / 2,
|
||||
bodyWidth = elementorFrontend.elements.$body[0].clientWidth;
|
||||
let titleMiddleOffset = this.adjustForScrollbarIfNeeded(titleBoundingBox.left + titleBoundingBox.width / 2);
|
||||
if (elementorFrontend.config.is_rtl) {
|
||||
titleMiddleOffset = bodyWidth - titleMiddleOffset;
|
||||
}
|
||||
let offset = titleMiddleOffset - menuItemContentContainerHalfWidth;
|
||||
if (titleMiddleOffset + menuItemContentContainerHalfWidth > bodyWidth) {
|
||||
offset = bodyWidth - contentContainerWidth;
|
||||
} else if (menuItemContentContainerHalfWidth > titleMiddleOffset) {
|
||||
offset = 0;
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
getLeftDirectionContainerOffset(contentContainerWidth, titleBoundingBox) {
|
||||
return elementorFrontend.config.is_rtl ? this.getRtlLeftDirectionContainerOffset(contentContainerWidth, titleBoundingBox) : this.getLtrLeftDirectionContainerOffset(contentContainerWidth, titleBoundingBox);
|
||||
}
|
||||
getRtlLeftDirectionContainerOffset(contentContainerWidth, titleBoundingBox) {
|
||||
const bodyWidth = elementorFrontend.elements.$body[0].clientWidth,
|
||||
titleLeftOffset = this.adjustForScrollbarIfNeeded(titleBoundingBox.left);
|
||||
let offset = bodyWidth - titleLeftOffset - contentContainerWidth;
|
||||
|
||||
// If the content container doesn't fit in the viewport, align its right edge with the viewport's right edge.
|
||||
if (-offset + contentContainerWidth > bodyWidth) {
|
||||
offset = 0;
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
getLtrLeftDirectionContainerOffset(contentContainerWidth, titleBoundingBox) {
|
||||
let offset = this.adjustForScrollbarIfNeeded(titleBoundingBox.left);
|
||||
offset = this.adjustStartOffsetToViewport(offset, contentContainerWidth);
|
||||
return offset;
|
||||
}
|
||||
getRightDirectionContainerOffset(contentContainerWidth, titleBoundingBox) {
|
||||
return elementorFrontend.config.is_rtl ? this.getRtlRightDirectionContainerOffset(contentContainerWidth, titleBoundingBox) : this.getLtrRightDirectionContainerOffset(contentContainerWidth, titleBoundingBox);
|
||||
}
|
||||
getRtlRightDirectionContainerOffset(contentContainerWidth, titleBoundingBox) {
|
||||
const bodyWidth = elementorFrontend.elements.$body[0].clientWidth;
|
||||
let offset = bodyWidth - this.adjustForScrollbarIfNeeded(titleBoundingBox.right);
|
||||
offset = this.adjustStartOffsetToViewport(offset, contentContainerWidth);
|
||||
return offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the content container doesn't fit in the viewport, align its right edge with the viewport's right edge.
|
||||
*
|
||||
* @param {number} offset
|
||||
* @param {number} contentContainerWidth
|
||||
*/
|
||||
adjustStartOffsetToViewport(offset, contentContainerWidth) {
|
||||
const bodyWidth = elementorFrontend.elements.$body[0].clientWidth;
|
||||
if (offset + contentContainerWidth > bodyWidth) {
|
||||
offset = bodyWidth - contentContainerWidth;
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
getLtrRightDirectionContainerOffset(contentContainerWidth, titleBoundingBox) {
|
||||
return contentContainerWidth > titleBoundingBox.right ? 0 : titleBoundingBox.right - contentContainerWidth;
|
||||
}
|
||||
adjustForScrollbarIfNeeded(offset) {
|
||||
if (elementorFrontend.config.is_rtl && elementorFrontend.isEditMode()) {
|
||||
const scrollbarWidth = window.innerWidth - elementorFrontend.elements.$body[0].clientWidth;
|
||||
offset -= scrollbarWidth;
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
getMenuContainerOffset() {
|
||||
const menuContainerBoundingBox = this.elements.$widgetContainer[0].getBoundingClientRect();
|
||||
return elementorFrontend.config.is_rtl ? this.getMenuContainerOffsetRtl(menuContainerBoundingBox) : menuContainerBoundingBox.left;
|
||||
}
|
||||
getMenuContainerOffsetRtl(menuContainerBoundingBox) {
|
||||
const bodyWidth = elementorFrontend.elements.$body[0].clientWidth;
|
||||
let menuContainerOffset = bodyWidth - menuContainerBoundingBox.right;
|
||||
if (elementorFrontend.isEditMode()) {
|
||||
// In RTL mode, the editor's scrollbar is on the left side, so we need to add its width to the offset.
|
||||
const scrollbarWidth = window.innerWidth - bodyWidth;
|
||||
menuContainerOffset += scrollbarWidth;
|
||||
}
|
||||
return menuContainerOffset;
|
||||
}
|
||||
resetContentContainersPosition() {
|
||||
this.elements.$tabContents.css({
|
||||
left: '',
|
||||
right: '',
|
||||
bottom: '',
|
||||
position: 'var(--position)',
|
||||
'max-width': '',
|
||||
width: 'var(--width)'
|
||||
});
|
||||
this.elements.$widgetContainer.removeClass('content-above');
|
||||
}
|
||||
getTabContentFilterSelector(tabIndex) {
|
||||
return `[data-tab-index="${tabIndex}"]`;
|
||||
}
|
||||
isActiveTab(tabIndex) {
|
||||
return 'true' === this.elements.$tabDropdowns.filter('[data-tab-index="' + tabIndex + '"]').attr(this.getSettings('ariaAttributes').titleStateAttribute);
|
||||
}
|
||||
activateTab(tabIndex) {
|
||||
const settings = this.getSettings(),
|
||||
activeClass = settings.classes.active,
|
||||
childMenuDropdownSelector = `.elementor-element-${this.getID()} .e-n-menu .e-n-menu .e-n-menu-dropdown-icon`,
|
||||
childMenuContentSelector = `.elementor-element-${this.getID()} .e-n-menu .e-n-menu .e-n-menu-content > .e-con`,
|
||||
$requestedTitle = this.elements.$tabDropdowns.filter(this.getTabTitleFilterSelector(tabIndex)).not(childMenuDropdownSelector),
|
||||
animationDuration = 'show' === settings.showTabFn ? 0 : 400,
|
||||
$requestedContent = this.elements.$tabContents.filter(this.getTabContentFilterSelector(tabIndex)).not(childMenuContentSelector),
|
||||
$menuContent = this.elements.$menuContent;
|
||||
this.addAnimationToContentIfNeeded(tabIndex);
|
||||
$requestedContent[settings.showTabFn](animationDuration, () => this.onShowTabContent($requestedContent));
|
||||
$requestedTitle.attr(this.getTitleActivationAttributes());
|
||||
$requestedTitle.prev('.e-n-menu-title-container').find('a').attr(this.getTitleActivationAttributes('link'));
|
||||
$requestedContent.addClass(activeClass);
|
||||
$requestedContent.css({
|
||||
display: 'var(--display)'
|
||||
});
|
||||
$requestedContent.removeAttr('display');
|
||||
$menuContent.addClass(activeClass);
|
||||
if (elementorFrontend.isEditMode() && !!$requestedContent.length) {
|
||||
this.activeContainerWidthListener($requestedContent);
|
||||
}
|
||||
this.menuHeightController.reassignMenuHeight($requestedContent);
|
||||
}
|
||||
deactivateActiveTab() {
|
||||
const settings = this.getSettings(),
|
||||
activeClass = settings.classes.active,
|
||||
activeTitleFilter = settings.ariaAttributes.activeTitleSelector,
|
||||
activeContentFilter = '.' + activeClass,
|
||||
$activeTitle = this.elements.$tabDropdowns.filter(activeTitleFilter),
|
||||
$activeContent = this.elements.$tabContents.filter(activeContentFilter),
|
||||
$menuContent = this.elements.$menuContent;
|
||||
this.setTabDeactivationAttributes($activeTitle);
|
||||
$activeContent.removeClass(activeClass);
|
||||
$activeContent[settings.hideTabFn](0, () => this.onHideTabContent($activeContent));
|
||||
this.removeAnimationFromContentIfNeeded();
|
||||
$menuContent.removeClass(activeClass);
|
||||
if (elementorFrontend.isEditMode() && !!$activeContent.length) {
|
||||
this.observedContainer?.unobserve($activeContent[0]);
|
||||
}
|
||||
this.menuHeightController.resetMenuHeight($activeContent);
|
||||
this.clickInProgress = true;
|
||||
}
|
||||
getTitleActivationAttributes() {
|
||||
let elementType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'tab';
|
||||
const titleAttributes = {};
|
||||
if ('tab' === elementType) {
|
||||
titleAttributes['aria-expanded'] = 'true';
|
||||
}
|
||||
return titleAttributes;
|
||||
}
|
||||
setTabDeactivationAttributes($activeTitle) {
|
||||
const titleStateAttribute = this.getSettings('ariaAttributes').titleStateAttribute;
|
||||
$activeTitle.attr(`${titleStateAttribute}`, 'false');
|
||||
}
|
||||
shouldPositionContentAbove($contentContainer) {
|
||||
let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
||||
const contentDimensions = $contentContainer[0].getBoundingClientRect();
|
||||
return this.isContentShorterThanItsTopOffset(contentDimensions, offset) && this.isContentTallerThanItsBottomOffset(contentDimensions);
|
||||
}
|
||||
isContentShorterThanItsTopOffset(contentDimensions, offset) {
|
||||
return contentDimensions.height < contentDimensions.top - offset;
|
||||
}
|
||||
isContentTallerThanItsBottomOffset(contentDimensions) {
|
||||
return window.innerHeight - contentDimensions.top < contentDimensions.height;
|
||||
}
|
||||
onShowTabContent($requestedContent) {
|
||||
this.handleContentContainerPosition($requestedContent);
|
||||
super.onShowTabContent($requestedContent);
|
||||
}
|
||||
onHideTabContent() {
|
||||
if (this.elements.$widgetContainer.hasClass('content-above')) {
|
||||
this.resetContentContainersPosition();
|
||||
}
|
||||
}
|
||||
changeActiveTab(tabIndex) {
|
||||
let fromUser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
||||
if (this.clickInProgress && elementorFrontend.isEditMode()) {
|
||||
return;
|
||||
}
|
||||
const isActiveTab = this.isActiveTab(tabIndex);
|
||||
this.deactivateActiveTab();
|
||||
if (!isActiveTab || isActiveTab && !fromUser) {
|
||||
this.clickInProgress = true;
|
||||
this.activateTab(tabIndex);
|
||||
}
|
||||
setTimeout(() => {
|
||||
this.clickInProgress = false;
|
||||
});
|
||||
}
|
||||
changeActiveTabByKeyboard(event, settings) {
|
||||
if (settings.widgetId.toString() !== this.getID().toString()) {
|
||||
return;
|
||||
}
|
||||
if (!settings.titleIndex) {
|
||||
this.changeActiveTab('', true);
|
||||
return;
|
||||
}
|
||||
const $focusableElement = this.$element.find(`[data-focus-index="${settings.titleIndex}"]`),
|
||||
isLinkElement = 'a' === $focusableElement[0].tagName.toLowerCase(),
|
||||
dropdownSelector = this.getSettings('selectors.tabDropdown'),
|
||||
$tabDropdown = isLinkElement ? $focusableElement.next(dropdownSelector) : $focusableElement,
|
||||
tabIndex = this.getTabIndex($tabDropdown[0]);
|
||||
this.changeActiveTab(tabIndex, true);
|
||||
event.stopPropagation();
|
||||
}
|
||||
onTabClick(event) {
|
||||
if (elementorFrontend.isEditMode()) {
|
||||
event.preventDefault();
|
||||
}
|
||||
const hasNoDropdown = event?.currentTarget?.classList?.contains('link-only');
|
||||
|
||||
// Tweak for NVDA screen reader with Windows Edge.
|
||||
// Ref: https://github.com/nvaccess/nvda/issues/7898
|
||||
const dropdownOpensWithHover = !this.isNeedToOpenOnClick(),
|
||||
blockMouseClickEvents = dropdownOpensWithHover && !this.isKeyboardNavigation;
|
||||
if (hasNoDropdown || blockMouseClickEvents) {
|
||||
return;
|
||||
}
|
||||
const getClickedMenuId = event?.target?.closest('.elementor-widget-n-menu')?.getAttribute('data-id'),
|
||||
getWidgetId = this.getID().toString();
|
||||
if (getClickedMenuId !== getWidgetId) {
|
||||
return;
|
||||
}
|
||||
const selectors = this.getSettings('selectors'),
|
||||
clickedElement = event?.currentTarget,
|
||||
dropdownElement = clickedElement?.querySelector(selectors.tabDropdown),
|
||||
tabIndex = this.getTabIndex(dropdownElement);
|
||||
this.changeActiveTab(tabIndex, true);
|
||||
}
|
||||
bindEvents() {
|
||||
this.elements.$tabTitles.on(this.getTabEvents());
|
||||
this.elements.$dropdownMenuToggle.on('click', this.onClickToggleDropdownMenu.bind(this));
|
||||
this.elements.$tabContents.on(this.getContentEvents());
|
||||
this.elements.$menuContent.on(this.getContentEvents());
|
||||
this.elements.$headingContainer.on(this.getHeadingEvents());
|
||||
elementorFrontend.addListenerOnce(this.getModelCID(), 'scroll', elementorFrontend.debounce(this.menuHeightController.reassignMobileMenuHeight.bind(this.menuHeightController), 250));
|
||||
elementorFrontend.elements.$window.on('elementor/nested-tabs/activate', this.reInitSwipers);
|
||||
elementorFrontend.elements.$window.on('elementor/nested-elements/activate-by-keyboard', this.changeActiveTabByKeyboard.bind(this));
|
||||
elementorFrontend.elements.$window.on('elementor/mega-menu/dropdown-toggle-by-keyboard', this.onClickToggleDropdownMenuByKeyboard.bind(this));
|
||||
elementorFrontend.elements.$window.on('resize', this.resizeEventHandler.bind(this));
|
||||
if (elementorFrontend.isEditMode()) {
|
||||
this.addChildLifeCycleEventListeners();
|
||||
}
|
||||
elementorFrontend.elements.$window.on('elementor/nested-container/atomic-repeater', this.linkContainer.bind(this));
|
||||
}
|
||||
unbindEvents() {
|
||||
this.elements.$tabTitles.off();
|
||||
this.elements.$menuContent.off();
|
||||
this.elements.$tabContents.off();
|
||||
this.elements.$headingContainer.off();
|
||||
elementorFrontend.elements.$window.off('resize');
|
||||
if (elementorFrontend.isEditMode()) {
|
||||
this.removeChildLifeCycleEventListeners();
|
||||
}
|
||||
elementorFrontend.elements.$window.off('elementor/nested-tabs/activate');
|
||||
elementorFrontend.elements.$window.off('elementor/nested-elements/activate-by-keyboard');
|
||||
elementorFrontend.elements.$window.off('elementor/mega-menu/dropdown-toggle-by-keyboard');
|
||||
}
|
||||
resizeEventHandler() {
|
||||
this.resizeListener = this.handleContentContainerPosition();
|
||||
this.setLayoutType();
|
||||
this.setTouchMode();
|
||||
this.menuHeightController.reassignMobileMenuHeight();
|
||||
this.setScrollPosition();
|
||||
const activeTitleSelector = this.getSettings('ariaAttributes').activeTitleSelector,
|
||||
tabIndex = this.elements.$tabDropdowns.filter(activeTitleSelector).attr('data-tab-index'),
|
||||
childMenuContentSelector = `.elementor-element-${this.getID()} .e-n-menu .e-n-menu .e-n-menu-content > .e-con`,
|
||||
$requestedContent = this.elements.$tabContents.filter(this.getTabContentFilterSelector(tabIndex)).not(childMenuContentSelector);
|
||||
this.menuHeightController.resetMenuHeight($requestedContent);
|
||||
this.menuHeightController.reassignMenuHeight($requestedContent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Child Lifecycle Event Listeners
|
||||
*
|
||||
* This method adds event listeners for the elementor/editor/element-rendered and elementor/editor/element-destroyed
|
||||
* events. These events are fired when an element is rendered or destroyed in the editor. The callback functions
|
||||
* check if the rendered/destroyed element is nested in this mega-menu instance, and if it is, triggers the
|
||||
* recalculation of the mega-menu's content containers position.
|
||||
*/
|
||||
addChildLifeCycleEventListeners() {
|
||||
this.lifecycleChangeListener = this.handleContentContainerChildrenChanges.bind(this);
|
||||
window.addEventListener('elementor/editor/element-rendered', this.lifecycleChangeListener);
|
||||
window.addEventListener('elementor/editor/element-destroyed', this.lifecycleChangeListener);
|
||||
}
|
||||
removeChildLifeCycleEventListeners() {
|
||||
window.removeEventListener('elementor/editor/element-rendered', this.lifecycleChangeListener);
|
||||
window.removeEventListener('elementor/editor/element-destroyed', this.lifecycleChangeListener);
|
||||
}
|
||||
handleContentContainerChildrenChanges(event) {
|
||||
if (!this.isNestedElementRenderedInContentContainer(event.detail.elementView)) {
|
||||
return;
|
||||
}
|
||||
this.handleContentContainerPosition();
|
||||
}
|
||||
isNestedElementRenderedInContentContainer(elementView) {
|
||||
const elementContainer = elementView?.getContainer();
|
||||
if (!elementContainer) {
|
||||
return false;
|
||||
}
|
||||
const elementAncestors = elementContainer.getParentAncestry();
|
||||
return elementAncestors.some(parent => this.getID().toString() === parent.model.get('id').toString());
|
||||
}
|
||||
getTabEvents() {
|
||||
const tabEvents = super.getTabEvents();
|
||||
return this.isNeedToOpenOnClick() ? tabEvents : this.replaceClickWithHover(tabEvents);
|
||||
}
|
||||
getContentEvents() {
|
||||
return this.isNeedToOpenOnClick() ? {} : {
|
||||
mouseleave: this.onMouseLeave.bind(this),
|
||||
mousemove: this.trackMousePosition.bind(this)
|
||||
};
|
||||
}
|
||||
isNeedToOpenOnClick() {
|
||||
const elementSettings = this.getElementSettings();
|
||||
return this.isEdit || this.isMobileDevice() || 'hover' !== elementSettings.open_on || 'dropdown' === elementSettings.item_layout;
|
||||
}
|
||||
isMobileDevice() {
|
||||
const mobileDevices = ['mobile', 'mobile_extra', 'tablet', 'tablet_extra'];
|
||||
return mobileDevices.includes(elementorFrontend.getCurrentDeviceMode());
|
||||
}
|
||||
replaceClickWithHover(tabEvents) {
|
||||
tabEvents.mouseenter = this.onMouseTitleEnter.bind(this);
|
||||
tabEvents.mouseleave = this.onMouseLeave.bind(this);
|
||||
tabEvents.keyup = this.setKeyboardNavigation.bind(this);
|
||||
return tabEvents;
|
||||
}
|
||||
onMouseTitleEnter(event) {
|
||||
event.preventDefault();
|
||||
const settings = this.getSettings(),
|
||||
titleStateAttribute = settings.ariaAttributes.titleStateAttribute,
|
||||
dropdownSelector = settings.selectors.tabDropdown,
|
||||
activeDropdownElement = event?.currentTarget?.querySelector(dropdownSelector),
|
||||
isActiveTabTitle = 'true' === activeDropdownElement?.getAttribute(titleStateAttribute);
|
||||
if (isActiveTabTitle) {
|
||||
return;
|
||||
}
|
||||
const tabIndex = activeDropdownElement?.getAttribute('data-tab-index');
|
||||
this.changeActiveTab(tabIndex, true);
|
||||
}
|
||||
onClickToggleDropdownMenu(show) {
|
||||
this.elements.$widgetContainer.attr('data-layout', 'dropdown');
|
||||
const settings = this.getSettings(),
|
||||
activeClass = settings.classes.active,
|
||||
titleStateAttribute = this.getSettings('ariaAttributes').titleStateAttribute,
|
||||
isDropdownVisible = 'true' === this.elements.$dropdownMenuToggle.attr(titleStateAttribute);
|
||||
if ('boolean' !== typeof show) {
|
||||
show = !isDropdownVisible;
|
||||
}
|
||||
const activeTabTitleValue = show ? 'true' : 'false';
|
||||
this.elements.$dropdownMenuToggle.attr(titleStateAttribute, activeTabTitleValue);
|
||||
this.elements.$menuContent.toggleClass(activeClass, show);
|
||||
elementorFrontend.utils.events.dispatch(window, 'elementor-pro/mega-menu/dropdown-open');
|
||||
this.menuHeightController.reassignMobileMenuHeight();
|
||||
}
|
||||
onClickOutsideDropdownMenu(event) {
|
||||
if (!this.isNeedToOpenOnClick()) {
|
||||
return;
|
||||
}
|
||||
const settings = this.getSettings(),
|
||||
selectors = settings.selectors,
|
||||
widgetWrapper = `.elementor-element-${this.getID()}`,
|
||||
activeClass = settings.classes.active,
|
||||
activeContentFilter = `> .e-con.${activeClass}`,
|
||||
$activeContent = this.elements.$menuContent.find(activeContentFilter),
|
||||
isMenuDropdownsClosed = 0 === $activeContent.length,
|
||||
isElementRemovedFromDOM = elementorFrontend.isEditMode() && !document.body.contains(event?.target),
|
||||
isClickedInsideCurrentMenu = !!event?.target?.closest(`${widgetWrapper} ${selectors.widgetContainer}`),
|
||||
isMenuContentWrapperClicked = event?.target?.classList?.contains(selectors.menuContent.replace('.', ''));
|
||||
if (isMenuContentWrapperClicked) {
|
||||
this.deactivateActiveTab();
|
||||
return;
|
||||
}
|
||||
if (isMenuDropdownsClosed || isClickedInsideCurrentMenu || isElementRemovedFromDOM) {
|
||||
return;
|
||||
}
|
||||
this.deactivateActiveTab();
|
||||
}
|
||||
onClickToggleDropdownMenuByKeyboard(event, settings) {
|
||||
if (settings.widgetId.toString() !== this.getID().toString()) {
|
||||
return;
|
||||
}
|
||||
this.onClickToggleDropdownMenu(settings.show);
|
||||
}
|
||||
addAnimationToContentIfNeeded(tabIndex) {
|
||||
const openAnimation = this.getElementSettings('open_animation');
|
||||
if ('none' === openAnimation) {
|
||||
return;
|
||||
}
|
||||
const $requestedContent = this.elements.$tabContents.filter(this.getTabContentFilterSelector(tabIndex));
|
||||
$requestedContent.addClass(`animated ${openAnimation}`);
|
||||
}
|
||||
removeAnimationFromContentIfNeeded() {
|
||||
const openAnimation = this.getElementSettings('open_animation');
|
||||
if ('none' === openAnimation) {
|
||||
return;
|
||||
}
|
||||
this.elements.$tabContents.removeClass(`animated ${openAnimation}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the current Y-coordinate of the mouse cursor.
|
||||
*
|
||||
* @param {Event} event - The mouse event object.
|
||||
*/
|
||||
trackMousePosition(event) {
|
||||
this.prevMouseY = event?.clientY;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the menu content is currently hovered.
|
||||
*
|
||||
* @return {boolean} - True if menu content is hovered, otherwise false.
|
||||
*/
|
||||
isMenuContentHovered() {
|
||||
const settings = this.getSettings(),
|
||||
$widget = this.$element;
|
||||
return $widget.find(`${settings.selectors.menuContent}:hover`).length > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the cursor moved sideways or downwards.
|
||||
*
|
||||
* @param {Event} event - The mouse event object.
|
||||
* @return {boolean} - True if the cursor moved sideways or downwards, otherwise false.
|
||||
*/
|
||||
didCursorMoveSidewaysOrDown(event) {
|
||||
// Detects if the Y-coordinate of the mouse has not decreased (i.e., either remained the same or increased).
|
||||
return this.prevMouseY !== null && event?.clientY >= this.prevMouseY;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the dropdown menu should remain open based on hover and cursor movement.
|
||||
*
|
||||
* @param {boolean} isMouseLeavingTabContent - True if the mouse is leaving the tab content.
|
||||
* @param {Event} event - The mouse event object.
|
||||
* @return {boolean} - True if dropdown should be considered as hovered, otherwise false.
|
||||
*/
|
||||
isHoveredDropdownMenu(isMouseLeavingTabContent, event) {
|
||||
// If the mouse is leaving the tab content and it moved sideways or downwards, close the dropdown.
|
||||
if (isMouseLeavingTabContent && this.didCursorMoveSidewaysOrDown(event)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Otherwise, return true if the menu content is hovered.
|
||||
return this.isMenuContentHovered();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the event when the mouse leaves the dropdown.
|
||||
*
|
||||
* @param {Event} event - The mouse event object.
|
||||
*/
|
||||
onMouseLeave(event) {
|
||||
event.preventDefault();
|
||||
const isMouseLeavingTabContent = event?.currentTarget?.classList?.contains('e-con');
|
||||
if (!this.isHoveredDropdownMenu(isMouseLeavingTabContent, event)) {
|
||||
this.deactivateActiveTab();
|
||||
}
|
||||
}
|
||||
onInit() {
|
||||
this.menuHeightController = new elementorProFrontend.utils.DropdownMenuHeightController(this.dropdownMenuHeightControllerConfig());
|
||||
super.onInit(...arguments);
|
||||
if (!elementorFrontend.isEditMode()) {
|
||||
const classes = this.getSettings('classes');
|
||||
this.anchorLinks = new _anchorLink.default();
|
||||
this.anchorLinks.followMenuAnchors(this.elements.$anchorLink, classes);
|
||||
}
|
||||
this.menuToggleVisibilityListener(this.elements.$dropdownMenuToggle);
|
||||
this.setScrollPosition();
|
||||
this.onClickOutsideDropdownMenu = this.onClickOutsideDropdownMenu.bind(this);
|
||||
document.addEventListener('click', this.onClickOutsideDropdownMenu);
|
||||
this.clickInProgress = false;
|
||||
}
|
||||
onDestroy() {
|
||||
document.removeEventListener('click', this.onClickOutsideDropdownMenu);
|
||||
}
|
||||
setScrollPosition() {
|
||||
const settingsObject = {
|
||||
element: this.elements.$headingContainer[0],
|
||||
direction: this.getItemPosition(),
|
||||
justifyCSSVariable: '--n-menu-heading-justify-content',
|
||||
horizontalScrollStatus: this.getHorizontalScrollSetting()
|
||||
};
|
||||
(0, _flexHorizontalScroll.setHorizontalScrollAlignment)(settingsObject);
|
||||
}
|
||||
getPropsThatTriggerContentPositionCalculations() {
|
||||
return ['content_horizontal_position', 'content_position', 'item_position_horizontal', 'content_width', 'item_layout'];
|
||||
}
|
||||
activeContainerWidthListener($activeContainer) {
|
||||
let previousWidth = 0;
|
||||
this.observedContainer = new ResizeObserver(activeContainer => {
|
||||
const currentWidth = activeContainer[0].borderBoxSize?.[0].inlineSize;
|
||||
if (!!currentWidth && currentWidth !== previousWidth) {
|
||||
previousWidth = currentWidth;
|
||||
if (0 !== previousWidth) {
|
||||
this.handleContentContainerPosition();
|
||||
}
|
||||
}
|
||||
});
|
||||
this.observedContainer.observe($activeContainer[0]);
|
||||
}
|
||||
menuToggleVisibilityListener($menuToggle) {
|
||||
let previousWidth;
|
||||
this.observedContainer = new ResizeObserver(menuToggle => {
|
||||
const currentWidth = menuToggle[0].borderBoxSize?.[0].inlineSize;
|
||||
if (currentWidth !== previousWidth) {
|
||||
previousWidth = currentWidth;
|
||||
this.setLayoutType();
|
||||
}
|
||||
});
|
||||
this.observedContainer.observe($menuToggle[0]);
|
||||
}
|
||||
onElementChange(propertyName) {
|
||||
if (this.getPropsThatTriggerContentPositionCalculations().includes(propertyName)) {
|
||||
this.handleContentContainerPosition();
|
||||
}
|
||||
this.setLayoutType();
|
||||
}
|
||||
onEditSettingsChange(propertyName, value) {
|
||||
const settings = this.getSettings();
|
||||
if (settings.autoFocus) {
|
||||
super.onEditSettingsChange(propertyName, value);
|
||||
}
|
||||
this.setLayoutType();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the layout type as a data attribute, so that it can be use for the responsive or dropdown menu styling.
|
||||
*
|
||||
* Originally this styling was handled by the distinction between the heading and the content styling elements.
|
||||
* Since we removed the title duplication, we needed another way to distinguish between the horizontal and the dropdown styling.
|
||||
*/
|
||||
setLayoutType() {
|
||||
const layoutType = 'flex' === this.elements.$headingContainer.css('display') ? 'horizontal' : 'dropdown';
|
||||
this.elements.$widgetContainer.attr('data-layout', layoutType);
|
||||
}
|
||||
getHeadingEvents() {
|
||||
const navigationWrapper = this.elements.$headingContainer[0];
|
||||
return {
|
||||
mousedown: this.changeScrollStatusAndDispatch.bind(this, navigationWrapper),
|
||||
mouseup: this.changeScrollStatusAndDispatch.bind(this, navigationWrapper),
|
||||
mouseleave: this.changeScrollStatusAndDispatch.bind(this, navigationWrapper),
|
||||
mousemove: this.setHorizontalTitleScrollValuesAndDispatch.bind(this, navigationWrapper)
|
||||
};
|
||||
}
|
||||
getHorizontalScrollSetting() {
|
||||
const currentDevice = elementorFrontend.getCurrentDeviceMode();
|
||||
return elementorFrontend.utils.controls.getResponsiveControlValue(this.getElementSettings(), 'horizontal_scroll', '', currentDevice);
|
||||
}
|
||||
getItemPosition() {
|
||||
const currentDevice = elementorFrontend.getCurrentDeviceMode();
|
||||
return elementorFrontend.utils.controls.getResponsiveControlValue(this.getElementSettings(), 'item_position_horizontal', '', currentDevice);
|
||||
}
|
||||
changeScrollStatusAndDispatch(navigationWrapper, event) {
|
||||
(0, _flexHorizontalScroll.changeScrollStatus)(navigationWrapper, event);
|
||||
elementorFrontend.elements.$window.trigger('elementor-pro/mega-menu/heading-mouse-event');
|
||||
}
|
||||
setHorizontalTitleScrollValuesAndDispatch(navigationWrapper, event) {
|
||||
(0, _flexHorizontalScroll.setHorizontalTitleScrollValues)(navigationWrapper, this.getHorizontalScrollSetting(), event);
|
||||
elementorFrontend.elements.$window.trigger('elementor-pro/mega-menu/heading-mouse-event');
|
||||
}
|
||||
linkContainer(event) {
|
||||
const {
|
||||
container
|
||||
} = event.detail,
|
||||
id = container.model.get('id'),
|
||||
currentId = String(this.$element.data('id')),
|
||||
view = container.view.$el;
|
||||
if (id === currentId) {
|
||||
this.updateIndexValues(view);
|
||||
this.updateListeners(view);
|
||||
}
|
||||
}
|
||||
updateIndexValues(view) {
|
||||
const {
|
||||
selectors: {
|
||||
directTabTitle,
|
||||
directTabContent
|
||||
}
|
||||
} = this.getDefaultSettings(),
|
||||
currentMenu = view[0],
|
||||
tabsContents = currentMenu.querySelectorAll(directTabContent),
|
||||
tabTitles = currentMenu.querySelectorAll(directTabTitle),
|
||||
settings = this.getSettings(),
|
||||
itemIdBase = tabTitles[0].getAttribute('id').slice(0, -1),
|
||||
containerIdBase = tabsContents[0].getAttribute('id').slice(0, -1);
|
||||
tabTitles.forEach((element, index) => {
|
||||
const newIndex = index + 1,
|
||||
updatedTabID = itemIdBase + newIndex,
|
||||
updatedContainerID = containerIdBase + newIndex;
|
||||
element.setAttribute('id', updatedTabID);
|
||||
element.setAttribute('style', `--n-menu-title-order: ${newIndex};`);
|
||||
element.querySelector(settings.selectors.tabDropdown)?.setAttribute('data-tab-index', newIndex);
|
||||
element.querySelector(settings.selectors.tabDropdown)?.setAttribute('data-focus-index', newIndex);
|
||||
element.querySelector(settings.selectors.tabDropdown)?.setAttribute('id', 'e-n-menu-dropdown-icon-' + newIndex);
|
||||
element.querySelector(settings.selectors.tabTitleText)?.setAttribute('data-binding-index', newIndex);
|
||||
element.querySelector(settings.selectors.tabTitleText)?.setAttribute('aria-controls', updatedTabID);
|
||||
tabsContents[index].setAttribute('aria-labelledby', updatedTabID);
|
||||
tabsContents[index].setAttribute('data-tab-index', newIndex);
|
||||
tabsContents[index].setAttribute('id', updatedContainerID);
|
||||
tabsContents[index].setAttribute('style', `--n-menu-title-order: ${newIndex}; position: var(--position); width: var(--width);`);
|
||||
});
|
||||
}
|
||||
updateListeners(view) {
|
||||
const {
|
||||
selectors: {
|
||||
tabClickableTitle,
|
||||
tabDropdown,
|
||||
tabContent,
|
||||
tabTitle
|
||||
}
|
||||
} = this.getSettings(),
|
||||
$tabTitles = view.find(tabTitle),
|
||||
$tabClickableTitle = view.find(tabClickableTitle);
|
||||
this.elements.$tabTitles = view.find(tabClickableTitle);
|
||||
this.elements.$tabDropdowns = view.find(tabDropdown);
|
||||
this.elements.$tabContents = view.find(tabContent);
|
||||
$tabTitles.off();
|
||||
$tabClickableTitle.on(this.getTabEvents());
|
||||
this.clickInProgress = false;
|
||||
}
|
||||
}
|
||||
exports["default"] = MegaMenu;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/mega-menu/assets/js/frontend/utils.js":
|
||||
/*!********************************************************!*\
|
||||
!*** ../modules/mega-menu/assets/js/frontend/utils.js ***!
|
||||
\********************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports.isMenuInDropdownMode = isMenuInDropdownMode;
|
||||
function isMenuInDropdownMode(elementSettings) {
|
||||
if ('dropdown' === elementSettings.item_layout) {
|
||||
return true;
|
||||
}
|
||||
const activeBreakpointsList = elementorFrontend.breakpoints.getActiveBreakpointsList({
|
||||
withDesktop: true
|
||||
}),
|
||||
breakpointIndex = activeBreakpointsList.indexOf(elementSettings.breakpoint_selector),
|
||||
currentDeviceModeIndex = activeBreakpointsList.indexOf(elementorFrontend.getCurrentDeviceMode());
|
||||
return currentDeviceModeIndex <= breakpointIndex;
|
||||
}
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=mega-menu.5eea2dda8d43e4430297.bundle.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/mega-menu.611dbb6e55a2c14924ad.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/mega-menu.611dbb6e55a2c14924ad.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,280 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["menu-title-keyboard-handler"],{
|
||||
|
||||
/***/ "../modules/mega-menu/assets/js/frontend/handlers/menu-title-keyboard-handler.js":
|
||||
/*!***************************************************************************************!*\
|
||||
!*** ../modules/mega-menu/assets/js/frontend/handlers/menu-title-keyboard-handler.js ***!
|
||||
\***************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class MenuTitleKeyboardHandler extends elementorModules.frontend.handlers.Base {
|
||||
__construct() {
|
||||
super.__construct(...arguments);
|
||||
this.focusableElementSelector = 'audio, button, canvas, details, iframe, input, select, summary, textarea, video, [accesskey], [contenteditable], a[href], area[href], [tabindex]';
|
||||
this.handleMenuToggleKeydown = this.handleMenuToggleKeydown.bind(this);
|
||||
}
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
widgetInnerWrapper: '.e-n-menu',
|
||||
menuItemWrapper: '.e-n-menu-title',
|
||||
menuItemElement: '.e-focus',
|
||||
itemContainer: '.e-n-menu-content > .e-con',
|
||||
menuToggle: '.e-n-menu-toggle'
|
||||
},
|
||||
ariaAttributes: {
|
||||
titleStateAttribute: 'aria-expanded',
|
||||
activeTitleSelector: '[aria-expanded="true"]',
|
||||
titleControlAttribute: 'aria-controls'
|
||||
},
|
||||
datasets: {
|
||||
titleIndex: 'data-focus-index'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const selectors = this.getSettings('selectors');
|
||||
return {
|
||||
$menuItemWrappers: this.findElement(selectors.menuItemWrapper),
|
||||
$menuItemElements: this.findElement(selectors.menuItemElement),
|
||||
$itemContainers: this.findElement(selectors.itemContainer),
|
||||
$focusableContainerElements: this.getFocusableElements(this.findElement(selectors.itemContainer)),
|
||||
$menuToggle: this.findElement(selectors.menuToggle)
|
||||
};
|
||||
}
|
||||
getFocusableElements($elements) {
|
||||
return $elements.find(this.focusableElementSelector).not('[disabled], [inert], [tabindex="-1"]');
|
||||
}
|
||||
getTitleIndex(menuItemElement) {
|
||||
const {
|
||||
titleIndex: indexAttribute
|
||||
} = this.getSettings('datasets');
|
||||
return parseInt(menuItemElement?.getAttribute(indexAttribute));
|
||||
}
|
||||
getTitleFilterSelector(titleIndex) {
|
||||
const {
|
||||
titleIndex: indexAttribute
|
||||
} = this.getSettings('datasets');
|
||||
return `[${indexAttribute}="${titleIndex}"]`;
|
||||
}
|
||||
getActiveTitleElement() {
|
||||
const activeTitleFilter = this.getSettings('ariaAttributes').activeTitleSelector;
|
||||
return this.elements.$menuItemElements.filter(activeTitleFilter);
|
||||
}
|
||||
onInit() {
|
||||
super.onInit(...arguments);
|
||||
let focusTitleCount = 1;
|
||||
this.elements.$menuItemElements.each((index, title) => {
|
||||
title.setAttribute(this.getSettings('datasets').titleIndex, focusTitleCount++);
|
||||
});
|
||||
}
|
||||
getTitleEvents() {
|
||||
return {
|
||||
keydown: this.handleTitleKeyboardNavigation.bind(this)
|
||||
};
|
||||
}
|
||||
getContentElementEvents() {
|
||||
return {
|
||||
keydown: this.handleContentElementKeyboardNavigation.bind(this)
|
||||
};
|
||||
}
|
||||
bindEvents() {
|
||||
this.elements.$menuItemElements.on(this.getTitleEvents());
|
||||
this.elements.$focusableContainerElements.on(this.getContentElementEvents());
|
||||
this.elements.$menuToggle.on('keydown', this.handleMenuToggleKeydown);
|
||||
}
|
||||
unbindEvents() {
|
||||
this.elements.$menuItemElements.off();
|
||||
this.elements.$focusableContainerElements.off(this.getContentElementEvents());
|
||||
this.elements.$menuToggle.off('keydown', this.handleMenuToggleKeydown);
|
||||
}
|
||||
handleMenuToggleKeydown(event) {
|
||||
if ('Escape' !== event.key) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this.closeMenuDropdown();
|
||||
}
|
||||
handleTitleKeyboardNavigation(event) {
|
||||
switch (event.key) {
|
||||
case 'Tab':
|
||||
if (event.shiftKey) {
|
||||
this.closeActiveContentElements();
|
||||
} else {
|
||||
this.handleTitleTab(event);
|
||||
}
|
||||
break;
|
||||
case 'Home':
|
||||
case 'End':
|
||||
this.handleTitleHomeOrEndKey(event);
|
||||
break;
|
||||
case 'Enter':
|
||||
case ' ':
|
||||
this.handleTitleActivationKey(event);
|
||||
break;
|
||||
case 'Escape':
|
||||
this.handleTitleEscapeKey(event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
handleTitleTab(event) {
|
||||
const currentTitleIndex = this.getTitleIndex(event.currentTarget);
|
||||
this.maybeFocusMenuToggle(event, currentTitleIndex);
|
||||
const $activeTitle = this.getActiveTitleElement(),
|
||||
activeTitleIndex = this.getTitleIndex($activeTitle[0]) || false,
|
||||
isActiveTitle = currentTitleIndex === activeTitleIndex,
|
||||
activeTitleControl = $activeTitle.attr(this.getSettings('ariaAttributes').titleControlAttribute),
|
||||
$activeContainer = this.elements.$itemContainers.filter(`#${activeTitleControl}`),
|
||||
activeContainerHasFocusableItems = 0 !== this.getFocusableElements($activeContainer).length;
|
||||
if (!isActiveTitle || !activeContainerHasFocusableItems) {
|
||||
this.closeActiveContentElements();
|
||||
return;
|
||||
}
|
||||
this.focusFirstFocusableContainerElement(event, activeTitleControl);
|
||||
}
|
||||
maybeFocusMenuToggle(event, titleIndex) {
|
||||
const isLastTitle = this.isLastTitle(titleIndex);
|
||||
if (!isLastTitle || !this.isDropdownLayout()) {
|
||||
return;
|
||||
}
|
||||
const activeStateAttribute = this.getSettings('ariaAttributes').titleStateAttribute,
|
||||
currentTitle = event.currentTarget,
|
||||
isContainerOpen = 'true' === currentTitle.getAttribute(activeStateAttribute),
|
||||
containerHasFocusableItems = 0 !== this.getFocusableElements(this.elements.$itemContainers.last()).length;
|
||||
if (isContainerOpen && containerHasFocusableItems) {
|
||||
return;
|
||||
}
|
||||
this.setFocusToMenuToggle();
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
setFocusToMenuToggle() {
|
||||
const selectors = this.getSettings('selectors');
|
||||
this.$element.find(selectors.menuToggle).trigger('focus');
|
||||
}
|
||||
isDropdownLayout() {
|
||||
const selectors = this.getSettings('selectors');
|
||||
return 'dropdown' === this.$element.find(selectors.widgetInnerWrapper).attr('data-layout');
|
||||
}
|
||||
closeMenuDropdown() {
|
||||
elementorFrontend.elements.$window.trigger('elementor/mega-menu/dropdown-toggle-by-keyboard', {
|
||||
widgetId: this.getID(),
|
||||
show: false
|
||||
});
|
||||
}
|
||||
handleTitleHomeOrEndKey(event) {
|
||||
event.preventDefault();
|
||||
const currentTitleIndex = this.getTitleIndex(event.currentTarget) || 1,
|
||||
numberOfTitles = this.elements.$menuItemElements.length,
|
||||
titleIndexUpdated = this.getTitleIndexFocusUpdated(event, currentTitleIndex, numberOfTitles);
|
||||
this.setTitleFocus(titleIndexUpdated);
|
||||
event.stopPropagation();
|
||||
}
|
||||
handleTitleActivationKey(event) {
|
||||
event.preventDefault();
|
||||
if (this.handleTitleLinkEnterOrSpaceEvent(event)) {
|
||||
return;
|
||||
}
|
||||
const titleIndex = this.getTitleIndex(event.currentTarget);
|
||||
elementorFrontend.elements.$window.trigger('elementor/nested-elements/activate-by-keyboard', {
|
||||
widgetId: this.getID(),
|
||||
titleIndex
|
||||
});
|
||||
}
|
||||
setTitleFocus(titleIndexUpdated) {
|
||||
const $newTitle = this.elements.$menuItemElements.filter(this.getTitleFilterSelector(titleIndexUpdated));
|
||||
$newTitle.trigger('focus');
|
||||
}
|
||||
isLastTitle(titleIndex) {
|
||||
return this.elements.$menuItemElements.length === titleIndex;
|
||||
}
|
||||
handleTitleLinkEnterOrSpaceEvent(event) {
|
||||
const isLinkElement = 'a' === event?.currentTarget?.tagName?.toLowerCase();
|
||||
if (!elementorFrontend.isEditMode() && isLinkElement) {
|
||||
event?.currentTarget?.click();
|
||||
event.stopPropagation();
|
||||
}
|
||||
return isLinkElement;
|
||||
}
|
||||
handleTitleEscapeKey(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
if (this.isDropdownLayout()) {
|
||||
elementorFrontend.elements.$window.trigger('elementor/mega-menu/dropdown-toggle-by-keyboard', {
|
||||
widgetId: this.getID()
|
||||
});
|
||||
this.setFocusToMenuToggle();
|
||||
}
|
||||
elementorFrontend.elements.$window.trigger('elementor/nested-elements/activate-by-keyboard', {
|
||||
widgetId: this.getID()
|
||||
});
|
||||
}
|
||||
handleContentElementKeyboardNavigation(event) {
|
||||
switch (event.key) {
|
||||
case 'Tab':
|
||||
const tabDirection = event.shiftKey ? 'previous' : 'next';
|
||||
this.handleContentElementTabEvents(event, tabDirection);
|
||||
break;
|
||||
case 'Escape':
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this.handleContentElementEscapeEvents(event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
handleContentElementTabEvents(event, direction) {
|
||||
const $currentElement = jQuery(event.currentTarget),
|
||||
containerSelector = this.getSettings('selectors').itemContainer,
|
||||
$currentContainer = $currentElement.closest(containerSelector),
|
||||
$focusableContainerElements = this.getFocusableElements($currentContainer);
|
||||
let $lastFocusableElement;
|
||||
if ('previous' === direction) {
|
||||
$lastFocusableElement = $focusableContainerElements.first();
|
||||
} else {
|
||||
$lastFocusableElement = $focusableContainerElements.last();
|
||||
}
|
||||
const isCurrentElementLastFocusableElement = $currentElement.is($lastFocusableElement);
|
||||
if (!isCurrentElementLastFocusableElement) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
const $activeTitle = this.getActiveTitleElement(),
|
||||
activeTitleIndex = this.getTitleIndex($activeTitle[0]);
|
||||
this.setTitleFocus(activeTitleIndex);
|
||||
event.stopPropagation();
|
||||
}
|
||||
handleContentElementEscapeEvents() {
|
||||
this.getActiveTitleElement().trigger('focus');
|
||||
this.closeActiveContentElements();
|
||||
}
|
||||
focusFirstFocusableContainerElement(event, titleControl) {
|
||||
const currentContainerSelector = `#${titleControl}`,
|
||||
$activeContainer = this.elements.$itemContainers.filter(currentContainerSelector),
|
||||
$firstFocusableContainer = this.getFocusableElements($activeContainer).first();
|
||||
if (0 === $firstFocusableContainer.length) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
$firstFocusableContainer[0]?.focus();
|
||||
event.stopPropagation();
|
||||
}
|
||||
closeActiveContentElements() {
|
||||
elementorFrontend.elements.$window.trigger('elementor/nested-elements/activate-by-keyboard', {
|
||||
widgetId: this.getID()
|
||||
});
|
||||
}
|
||||
}
|
||||
exports["default"] = MenuTitleKeyboardHandler;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=menu-title-keyboard-handler.255f6b16a2f292e5c260.bundle.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,224 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["nav-menu"],{
|
||||
|
||||
/***/ "../assets/dev/js/frontend/utils/anchor-link.js":
|
||||
/*!******************************************************!*\
|
||||
!*** ../assets/dev/js/frontend/utils/anchor-link.js ***!
|
||||
\******************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class AnchorLinks {
|
||||
followMenuAnchors($anchorLinks, classes) {
|
||||
$anchorLinks.each((index, anchorLink) => {
|
||||
if (location.pathname === anchorLink.pathname && '' !== anchorLink.hash) {
|
||||
this.followMenuAnchor(jQuery(anchorLink), classes);
|
||||
}
|
||||
});
|
||||
}
|
||||
followMenuAnchor($element, classes) {
|
||||
const anchorSelector = $element[0].hash,
|
||||
activeAnchorClass = classes.activeAnchorItem,
|
||||
anchorClass = classes.anchorItem,
|
||||
$targetElement = $element.hasClass(anchorClass) ? $element : $element.closest(`.${anchorClass}`);
|
||||
let offset = -300,
|
||||
$anchor;
|
||||
try {
|
||||
// `decodeURIComponent` for UTF8 characters in the hash.
|
||||
$anchor = jQuery(decodeURIComponent(anchorSelector));
|
||||
} catch (e) {
|
||||
return;
|
||||
}
|
||||
if (!$anchor.length) {
|
||||
return;
|
||||
}
|
||||
if (!$anchor.hasClass('elementor-menu-anchor')) {
|
||||
const halfViewport = jQuery(window).height() / 2;
|
||||
offset = -$anchor.outerHeight() + halfViewport;
|
||||
}
|
||||
elementorFrontend.waypoint($anchor, direction => {
|
||||
if ('down' === direction) {
|
||||
$targetElement.addClass(activeAnchorClass);
|
||||
$element.attr('aria-current', 'location');
|
||||
} else {
|
||||
$targetElement.removeClass(activeAnchorClass);
|
||||
$element.attr('aria-current', '');
|
||||
}
|
||||
}, {
|
||||
offset: '50%',
|
||||
triggerOnce: false
|
||||
});
|
||||
elementorFrontend.waypoint($anchor, direction => {
|
||||
if ('down' === direction) {
|
||||
$targetElement.removeClass(activeAnchorClass);
|
||||
$element.attr('aria-current', '');
|
||||
} else {
|
||||
$targetElement.addClass(activeAnchorClass);
|
||||
$element.attr('aria-current', 'location');
|
||||
}
|
||||
}, {
|
||||
offset,
|
||||
triggerOnce: false
|
||||
});
|
||||
}
|
||||
}
|
||||
exports["default"] = AnchorLinks;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/nav-menu/assets/js/frontend/handlers/nav-menu.js":
|
||||
/*!*******************************************************************!*\
|
||||
!*** ../modules/nav-menu/assets/js/frontend/handlers/nav-menu.js ***!
|
||||
\*******************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _anchorLink = _interopRequireDefault(__webpack_require__(/*! ../../../../../../assets/dev/js/frontend/utils/anchor-link */ "../assets/dev/js/frontend/utils/anchor-link.js"));
|
||||
var _default = exports["default"] = elementorModules.frontend.handlers.Base.extend({
|
||||
stretchElement: null,
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
menu: '.elementor-nav-menu',
|
||||
anchorLink: '.elementor-nav-menu--main .elementor-item-anchor',
|
||||
dropdownMenu: '.elementor-nav-menu__container.elementor-nav-menu--dropdown',
|
||||
menuToggle: '.elementor-menu-toggle'
|
||||
},
|
||||
classes: {
|
||||
anchorItem: 'elementor-item-anchor',
|
||||
activeAnchorItem: 'elementor-item-active'
|
||||
}
|
||||
};
|
||||
},
|
||||
getDefaultElements() {
|
||||
var selectors = this.getSettings('selectors'),
|
||||
elements = {};
|
||||
elements.$menu = this.$element.find(selectors.menu);
|
||||
elements.$anchorLink = this.$element.find(selectors.anchorLink);
|
||||
elements.$dropdownMenu = this.$element.find(selectors.dropdownMenu);
|
||||
elements.$dropdownMenuFinalItems = elements.$dropdownMenu.find('.menu-item:not(.menu-item-has-children) > a');
|
||||
elements.$menuToggle = this.$element.find(selectors.menuToggle);
|
||||
elements.$links = elements.$dropdownMenu.find('a.elementor-item');
|
||||
return elements;
|
||||
},
|
||||
dropdownMenuHeightControllerConfig() {
|
||||
const selectors = this.getSettings('selectors');
|
||||
return {
|
||||
elements: {
|
||||
$element: this.$element,
|
||||
$dropdownMenuContainer: this.$element.find(selectors.dropdownMenu),
|
||||
$menuToggle: this.$element.find(selectors.menuToggle)
|
||||
},
|
||||
attributes: {
|
||||
menuToggleState: 'aria-expanded'
|
||||
},
|
||||
settings: {
|
||||
dropdownMenuContainerMaxHeight: '1000vmax',
|
||||
// Max-height value is fixed to 1000vmax in order to allow the mobile menu closing animation.
|
||||
menuHeightCssVarName: '--menu-height'
|
||||
}
|
||||
};
|
||||
},
|
||||
bindEvents() {
|
||||
if (!this.elements.$menu.length) {
|
||||
return;
|
||||
}
|
||||
this.elements.$menuToggle.on('click', this.toggleMenu.bind(this)).on('keyup', this.triggerClickOnEnterSpace.bind(this));
|
||||
if (this.getElementSettings('full_width')) {
|
||||
this.elements.$dropdownMenuFinalItems.on('click', this.toggleMenu.bind(this, false)).on('keyup', this.triggerClickOnEnterSpace.bind(this));
|
||||
}
|
||||
elementorFrontend.addListenerOnce(this.$element.data('model-cid'), 'resize', this.stretchMenu);
|
||||
elementorFrontend.addListenerOnce(this.$element.data('model-cid'), 'scroll', elementorFrontend.debounce(this.menuHeightController.reassignMobileMenuHeight.bind(this.menuHeightController), 250));
|
||||
},
|
||||
initStretchElement() {
|
||||
this.stretchElement = new elementorModules.frontend.tools.StretchElement({
|
||||
element: this.elements.$dropdownMenu
|
||||
});
|
||||
},
|
||||
toggleNavLinksTabIndex() {
|
||||
let enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
||||
this.elements.$links.attr('tabindex', enabled ? 0 : -1);
|
||||
},
|
||||
toggleMenu(show) {
|
||||
var isDropdownVisible = this.elements.$menuToggle.hasClass('elementor-active');
|
||||
if ('boolean' !== typeof show) {
|
||||
show = !isDropdownVisible;
|
||||
}
|
||||
this.elements.$menuToggle.attr('aria-expanded', show);
|
||||
this.elements.$dropdownMenu.attr('aria-hidden', !show);
|
||||
this.elements.$menuToggle.toggleClass('elementor-active', show);
|
||||
this.toggleNavLinksTabIndex(show);
|
||||
this.menuHeightController.reassignMobileMenuHeight(this);
|
||||
if (show && this.getElementSettings('full_width')) {
|
||||
this.stretchElement.stretch();
|
||||
}
|
||||
},
|
||||
triggerClickOnEnterSpace(event) {
|
||||
const ENTER_KEY = 13,
|
||||
SPACE_KEY = 32;
|
||||
if (ENTER_KEY === event.keyCode || SPACE_KEY === event.keyCode) {
|
||||
event.currentTarget.click();
|
||||
event.stopPropagation();
|
||||
}
|
||||
},
|
||||
stretchMenu() {
|
||||
if (this.getElementSettings('full_width')) {
|
||||
this.stretchElement.stretch();
|
||||
this.elements.$dropdownMenu.css('top', this.elements.$menuToggle.outerHeight());
|
||||
} else {
|
||||
this.stretchElement.reset();
|
||||
}
|
||||
},
|
||||
onInit() {
|
||||
this.menuHeightController = new elementorProFrontend.utils.DropdownMenuHeightController(this.dropdownMenuHeightControllerConfig());
|
||||
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
|
||||
if (!this.elements.$menu.length) {
|
||||
return;
|
||||
}
|
||||
const elementSettings = this.getElementSettings(),
|
||||
iconValue = elementSettings.submenu_icon.value;
|
||||
let subIndicatorsContent = '';
|
||||
if (iconValue) {
|
||||
// The value of iconValue can be either className inside the editor or a markup in the frontend.
|
||||
subIndicatorsContent = iconValue.indexOf('<') > -1 ? iconValue : `<i class="${iconValue}"></i>`;
|
||||
}
|
||||
|
||||
// SubIndicators param - Added for backwards compatibility:
|
||||
// If the old 'indicator' control value = 'none', the <span class="sub-arrow"> wrapper element is removed
|
||||
this.elements.$menu.smartmenus({
|
||||
subIndicators: '' !== subIndicatorsContent,
|
||||
subIndicatorsText: subIndicatorsContent,
|
||||
subIndicatorsPos: 'append',
|
||||
subMenusMaxWidth: '1000px'
|
||||
});
|
||||
this.initStretchElement();
|
||||
this.stretchMenu();
|
||||
if (!elementorFrontend.isEditMode()) {
|
||||
const classes = this.getSettings('classes');
|
||||
this.anchorLinks = new _anchorLink.default();
|
||||
this.anchorLinks.followMenuAnchors(this.elements.$anchorLink, classes);
|
||||
}
|
||||
},
|
||||
onElementChange(propertyName) {
|
||||
if ('full_width' === propertyName) {
|
||||
this.stretchMenu();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=nav-menu.ad2c1632628f619ad9e9.bundle.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/nav-menu.d43af66e5000fd109c04.bundle.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/nav-menu.d43af66e5000fd109c04.bundle.min.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[42],{9891:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=class AnchorLinks{followMenuAnchors(e,t){e.each(((e,n)=>{location.pathname===n.pathname&&""!==n.hash&&this.followMenuAnchor(jQuery(n),t)}))}followMenuAnchor(e,t){const n=e[0].hash,o=t.activeAnchorItem,s=t.anchorItem,i=e.hasClass(s)?e:e.closest(`.${s}`);let r,l=-300;try{r=jQuery(decodeURIComponent(n))}catch(e){return}if(r.length){if(!r.hasClass("elementor-menu-anchor")){const e=jQuery(window).height()/2;l=-r.outerHeight()+e}elementorFrontend.waypoint(r,(t=>{"down"===t?(i.addClass(o),e.attr("aria-current","location")):(i.removeClass(o),e.attr("aria-current",""))}),{offset:"50%",triggerOnce:!1}),elementorFrontend.waypoint(r,(t=>{"down"===t?(i.removeClass(o),e.attr("aria-current","")):(i.addClass(o),e.attr("aria-current","location"))}),{offset:l,triggerOnce:!1})}}}},7480:(e,t,n)=>{var o=n(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(n(9891));t.default=elementorModules.frontend.handlers.Base.extend({stretchElement:null,getDefaultSettings:()=>({selectors:{menu:".elementor-nav-menu",anchorLink:".elementor-nav-menu--main .elementor-item-anchor",dropdownMenu:".elementor-nav-menu__container.elementor-nav-menu--dropdown",menuToggle:".elementor-menu-toggle"},classes:{anchorItem:"elementor-item-anchor",activeAnchorItem:"elementor-item-active"}}),getDefaultElements(){var e=this.getSettings("selectors"),t={};return t.$menu=this.$element.find(e.menu),t.$anchorLink=this.$element.find(e.anchorLink),t.$dropdownMenu=this.$element.find(e.dropdownMenu),t.$dropdownMenuFinalItems=t.$dropdownMenu.find(".menu-item:not(.menu-item-has-children) > a"),t.$menuToggle=this.$element.find(e.menuToggle),t.$links=t.$dropdownMenu.find("a.elementor-item"),t},dropdownMenuHeightControllerConfig(){const e=this.getSettings("selectors");return{elements:{$element:this.$element,$dropdownMenuContainer:this.$element.find(e.dropdownMenu),$menuToggle:this.$element.find(e.menuToggle)},attributes:{menuToggleState:"aria-expanded"},settings:{dropdownMenuContainerMaxHeight:"1000vmax",menuHeightCssVarName:"--menu-height"}}},bindEvents(){this.elements.$menu.length&&(this.elements.$menuToggle.on("click",this.toggleMenu.bind(this)).on("keyup",this.triggerClickOnEnterSpace.bind(this)),this.getElementSettings("full_width")&&this.elements.$dropdownMenuFinalItems.on("click",this.toggleMenu.bind(this,!1)).on("keyup",this.triggerClickOnEnterSpace.bind(this)),elementorFrontend.addListenerOnce(this.$element.data("model-cid"),"resize",this.stretchMenu),elementorFrontend.addListenerOnce(this.$element.data("model-cid"),"scroll",elementorFrontend.debounce(this.menuHeightController.reassignMobileMenuHeight.bind(this.menuHeightController),250)))},initStretchElement(){this.stretchElement=new elementorModules.frontend.tools.StretchElement({element:this.elements.$dropdownMenu})},toggleNavLinksTabIndex(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.elements.$links.attr("tabindex",e?0:-1)},toggleMenu(e){var t=this.elements.$menuToggle.hasClass("elementor-active");"boolean"!=typeof e&&(e=!t),this.elements.$menuToggle.attr("aria-expanded",e),this.elements.$dropdownMenu.attr("aria-hidden",!e),this.elements.$menuToggle.toggleClass("elementor-active",e),this.toggleNavLinksTabIndex(e),this.menuHeightController.reassignMobileMenuHeight(this),e&&this.getElementSettings("full_width")&&this.stretchElement.stretch()},triggerClickOnEnterSpace(e){13!==e.keyCode&&32!==e.keyCode||(e.currentTarget.click(),e.stopPropagation())},stretchMenu(){this.getElementSettings("full_width")?(this.stretchElement.stretch(),this.elements.$dropdownMenu.css("top",this.elements.$menuToggle.outerHeight())):this.stretchElement.reset()},onInit(){if(this.menuHeightController=new elementorProFrontend.utils.DropdownMenuHeightController(this.dropdownMenuHeightControllerConfig()),elementorModules.frontend.handlers.Base.prototype.onInit.apply(this,arguments),!this.elements.$menu.length)return;const e=this.getElementSettings().submenu_icon.value;let t="";if(e&&(t=e.indexOf("<")>-1?e:`<i class="${e}"></i>`),this.elements.$menu.smartmenus({subIndicators:""!==t,subIndicatorsText:t,subIndicatorsPos:"append",subMenusMaxWidth:"1000px"}),this.initStretchElement(),this.stretchMenu(),!elementorFrontend.isEditMode()){const e=this.getSettings("classes");this.anchorLinks=new s.default,this.anchorLinks.followMenuAnchors(this.elements.$anchorLink,e)}},onElementChange(e){"full_width"===e&&this.stretchMenu()}})}}]);
|
||||
@@ -0,0 +1,51 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["nested-carousel-editor"],{
|
||||
|
||||
/***/ "../modules/nested-carousel/assets/js/editor/module.js":
|
||||
/*!*************************************************************!*\
|
||||
!*** ../modules/nested-carousel/assets/js/editor/module.js ***!
|
||||
\*************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _nestedCarousel = _interopRequireDefault(__webpack_require__(/*! ./nested-carousel */ "../modules/nested-carousel/assets/js/editor/nested-carousel.js"));
|
||||
class Module {
|
||||
constructor() {
|
||||
elementor.elementsManager.registerElementType(new _nestedCarousel.default());
|
||||
}
|
||||
}
|
||||
exports["default"] = Module;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/nested-carousel/assets/js/editor/nested-carousel.js":
|
||||
/*!**********************************************************************!*\
|
||||
!*** ../modules/nested-carousel/assets/js/editor/nested-carousel.js ***!
|
||||
\**********************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = exports.NestedCarousel = void 0;
|
||||
class NestedCarousel extends elementor.modules.elements.types.NestedElementBase {
|
||||
getType() {
|
||||
return 'nested-carousel';
|
||||
}
|
||||
}
|
||||
exports.NestedCarousel = NestedCarousel;
|
||||
var _default = exports["default"] = NestedCarousel;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=nested-carousel-editor.2fdc278ce6bc9f6ec2e0.bundle.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[35],{5679:(e,t,s)=>{var l=s(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=l(s(6402));t.default=class Module{constructor(){elementor.elementsManager.registerElementType(new r.default)}}},6402:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.NestedCarousel=void 0;class NestedCarousel extends elementor.modules.elements.types.NestedElementBase{getType(){return"nested-carousel"}}t.NestedCarousel=NestedCarousel;t.default=NestedCarousel}}]);
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[209],{1826:(e,t,n)=>{var s=n(3203);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=s(n(6399));class NestedCarousel extends elementorModules.frontend.handlers.CarouselBase{getDefaultSettings(){const e=super.getDefaultSettings();return e.selectors.carousel=".e-n-carousel",e.selectors.slidesWrapper=".e-n-carousel > .swiper-wrapper",e}getSwiperSettings(){const e=super.getSwiperSettings(),t=this.getElementSettings(),n=elementorFrontend.config.is_rtl,s=`.elementor-element-${this.getID()}`;return elementorFrontend.isEditMode()&&(delete e.autoplay,e.loop=!1,e.noSwipingSelector=".swiper-slide > .e-con .elementor-element"),"yes"===t.arrows&&(e.navigation={prevEl:n?`${s} .elementor-swiper-button-next`:`${s} .elementor-swiper-button-prev`,nextEl:n?`${s} .elementor-swiper-button-prev`:`${s} .elementor-swiper-button-next`}),this.applySwipeOptions(e),e}async onInit(){this.wrapSlideContent(),super.onInit(...arguments),elementorFrontend.config.experimentalFeatures.e_swiper_latest||this.reInitBackgroundSlideshow(),this.ranElementHandlers=!1}handleElementHandlers(){if(this.ranElementHandlers||!this.swiper)return;const e=Array.from(this.swiper.slides).filter((e=>e.classList.contains(this.swiper.params.slideDuplicateClass)));(0,i.default)(e),this.ranElementHandlers=!0}wrapSlideContent(){if(!elementorFrontend.isEditMode())return;const e=this.getSettings(),t=e.selectors.slideContent.replace(".",""),n=this.$element;let s=1;this.findElement(`${e.selectors.slidesWrapper} > .e-con`).each((function(){const i=jQuery(this),r=i.closest("div").hasClass(t),o=n.find(`${e.selectors.slidesWrapper} > .${t}:nth-child(${s})`);r||o.append(i),s++}))}togglePauseOnHover(e){elementorFrontend.isEditMode()||super.togglePauseOnHover(e)}getChangeableProperties(){return{arrows_position:"arrows_position"}}applySwipeOptions(e){this.isTouchDevice()?(e.touchRatio=1,e.longSwipesRatio=.3,e.followFinger=!0,e.threshold=10):e.shortSwipes=!1}isTouchDevice(){return elementorFrontend.utils.environment.isTouchDevice}reInitBackgroundSlideshow(){const e=this.elements.$swiperContainer.find(".elementor-background-slideshow");for(const t of e){if(!t.swiper)return;t.swiper.initialized=!1,t.swiper.init()}}linkContainer(e){const{container:t,index:n,targetContainer:s,action:{type:i}}=e.detail,r=t.view.$el;if(t.model.get("id")===this.$element.data("id")){const{$slides:e}=this.getDefaultElements();let t,o;switch(i){case"move":[t,o]=this.move(r,n,s,e);break;case"duplicate":[t,o]=this.duplicate(r,n,s,e)}void 0!==t&&t.appendChild(o),this.updateIndexValues(e),this.updateListeners()}}move(e,t,n,s){return[s[t],n.view.$el[0]]}duplicate(e,t,n,s){return[s[t+1],n.view.$el[0]]}updateIndexValues(e){e.each(((e,t)=>{const n=e+1;t.setAttribute("data-slide",n)}))}updateListeners(){this.swiper.initialized=!1,this.swiper.init()}bindEvents(){super.bindEvents(),elementorFrontend.elements.$window.on("elementor/nested-container/atomic-repeater",this.linkContainer.bind(this))}}t.default=NestedCarousel}}]);
|
||||
@@ -0,0 +1,174 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["nested-carousel"],{
|
||||
|
||||
/***/ "../modules/nested-carousel/assets/js/frontend/handlers/nested-carousel.js":
|
||||
/*!*********************************************************************************!*\
|
||||
!*** ../modules/nested-carousel/assets/js/frontend/handlers/nested-carousel.js ***!
|
||||
\*********************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _runElementHandlers = _interopRequireDefault(__webpack_require__(/*! elementor-pro/frontend/utils/run-element-handlers */ "../assets/dev/js/frontend/utils/run-element-handlers.js"));
|
||||
class NestedCarousel extends elementorModules.frontend.handlers.CarouselBase {
|
||||
getDefaultSettings() {
|
||||
const defaultSettings = super.getDefaultSettings();
|
||||
defaultSettings.selectors.carousel = '.e-n-carousel';
|
||||
defaultSettings.selectors.slidesWrapper = '.e-n-carousel > .swiper-wrapper';
|
||||
return defaultSettings;
|
||||
}
|
||||
getSwiperSettings() {
|
||||
const swiperOptions = super.getSwiperSettings(),
|
||||
elementSettings = this.getElementSettings(),
|
||||
isRtl = elementorFrontend.config.is_rtl,
|
||||
widgetSelector = `.elementor-element-${this.getID()}`;
|
||||
if (elementorFrontend.isEditMode()) {
|
||||
delete swiperOptions.autoplay;
|
||||
swiperOptions.loop = false;
|
||||
swiperOptions.noSwipingSelector = '.swiper-slide > .e-con .elementor-element';
|
||||
}
|
||||
if ('yes' === elementSettings.arrows) {
|
||||
swiperOptions.navigation = {
|
||||
prevEl: isRtl ? `${widgetSelector} .elementor-swiper-button-next` : `${widgetSelector} .elementor-swiper-button-prev`,
|
||||
nextEl: isRtl ? `${widgetSelector} .elementor-swiper-button-prev` : `${widgetSelector} .elementor-swiper-button-next`
|
||||
};
|
||||
}
|
||||
this.applySwipeOptions(swiperOptions);
|
||||
return swiperOptions;
|
||||
}
|
||||
async onInit() {
|
||||
this.wrapSlideContent();
|
||||
super.onInit(...arguments);
|
||||
if (!elementorFrontend.config.experimentalFeatures.e_swiper_latest) {
|
||||
this.reInitBackgroundSlideshow();
|
||||
}
|
||||
this.ranElementHandlers = false;
|
||||
}
|
||||
handleElementHandlers() {
|
||||
if (this.ranElementHandlers || !this.swiper) {
|
||||
return;
|
||||
}
|
||||
const duplicatedSlides = Array.from(this.swiper.slides).filter(slide => slide.classList.contains(this.swiper.params.slideDuplicateClass));
|
||||
(0, _runElementHandlers.default)(duplicatedSlides);
|
||||
this.ranElementHandlers = true;
|
||||
}
|
||||
wrapSlideContent() {
|
||||
if (!elementorFrontend.isEditMode()) {
|
||||
return;
|
||||
}
|
||||
const settings = this.getSettings(),
|
||||
slideContentClass = settings.selectors.slideContent.replace('.', ''),
|
||||
$widget = this.$element;
|
||||
let index = 1;
|
||||
this.findElement(`${settings.selectors.slidesWrapper} > .e-con`).each(function () {
|
||||
const $currentContainer = jQuery(this),
|
||||
hasSwiperSlideWrapper = $currentContainer.closest('div').hasClass(slideContentClass),
|
||||
$currentSlide = $widget.find(`${settings.selectors.slidesWrapper} > .${slideContentClass}:nth-child(${index})`);
|
||||
if (!hasSwiperSlideWrapper) {
|
||||
$currentSlide.append($currentContainer);
|
||||
}
|
||||
index++;
|
||||
});
|
||||
}
|
||||
togglePauseOnHover(toggleOn) {
|
||||
if (elementorFrontend.isEditMode()) {
|
||||
return;
|
||||
}
|
||||
super.togglePauseOnHover(toggleOn);
|
||||
}
|
||||
getChangeableProperties() {
|
||||
return {
|
||||
arrows_position: 'arrows_position' // Not a Swiper setting.
|
||||
};
|
||||
}
|
||||
|
||||
applySwipeOptions(swiperOptions) {
|
||||
if (!this.isTouchDevice()) {
|
||||
swiperOptions.shortSwipes = false;
|
||||
} else {
|
||||
swiperOptions.touchRatio = 1;
|
||||
swiperOptions.longSwipesRatio = 0.3;
|
||||
swiperOptions.followFinger = true;
|
||||
swiperOptions.threshold = 10;
|
||||
}
|
||||
}
|
||||
isTouchDevice() {
|
||||
return elementorFrontend.utils.environment.isTouchDevice;
|
||||
}
|
||||
reInitBackgroundSlideshow() {
|
||||
const slideshows = this.elements.$swiperContainer.find('.elementor-background-slideshow');
|
||||
for (const element of slideshows) {
|
||||
if (!element.swiper) {
|
||||
return;
|
||||
}
|
||||
element.swiper.initialized = false;
|
||||
element.swiper.init();
|
||||
}
|
||||
}
|
||||
linkContainer(event) {
|
||||
const {
|
||||
container,
|
||||
index,
|
||||
targetContainer,
|
||||
action: {
|
||||
type
|
||||
}
|
||||
} = event.detail,
|
||||
view = container.view.$el,
|
||||
id = container.model.get('id'),
|
||||
currentId = this.$element.data('id');
|
||||
if (id === currentId) {
|
||||
const {
|
||||
$slides
|
||||
} = this.getDefaultElements();
|
||||
let carouselItemWrapper, contentContainer;
|
||||
switch (type) {
|
||||
case 'move':
|
||||
[carouselItemWrapper, contentContainer] = this.move(view, index, targetContainer, $slides);
|
||||
break;
|
||||
case 'duplicate':
|
||||
[carouselItemWrapper, contentContainer] = this.duplicate(view, index, targetContainer, $slides);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (undefined !== carouselItemWrapper) {
|
||||
carouselItemWrapper.appendChild(contentContainer);
|
||||
}
|
||||
this.updateIndexValues($slides);
|
||||
this.updateListeners();
|
||||
}
|
||||
}
|
||||
move(view, index, targetContainer, slides) {
|
||||
return [slides[index], targetContainer.view.$el[0]];
|
||||
}
|
||||
duplicate(view, index, targetContainer, slides) {
|
||||
return [slides[index + 1], targetContainer.view.$el[0]];
|
||||
}
|
||||
updateIndexValues($slides) {
|
||||
$slides.each((index, element) => {
|
||||
const newIndex = index + 1;
|
||||
element.setAttribute('data-slide', newIndex);
|
||||
});
|
||||
}
|
||||
updateListeners() {
|
||||
this.swiper.initialized = false;
|
||||
this.swiper.init();
|
||||
}
|
||||
bindEvents() {
|
||||
super.bindEvents();
|
||||
elementorFrontend.elements.$window.on('elementor/nested-container/atomic-repeater', this.linkContainer.bind(this));
|
||||
}
|
||||
}
|
||||
exports["default"] = NestedCarousel;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=nested-carousel.a6b8a103e170cb2de9a4.bundle.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/notes/93.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/notes/93.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* @license React
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v16.13.1
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v17.0.2
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
@@ -0,0 +1,375 @@
|
||||
/******/ (() => { // webpackBootstrap
|
||||
/******/ "use strict";
|
||||
/******/ var __webpack_modules__ = ({
|
||||
|
||||
/***/ "react":
|
||||
/*!************************!*\
|
||||
!*** external "React" ***!
|
||||
\************************/
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = React;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "react-dom":
|
||||
/*!***************************!*\
|
||||
!*** external "ReactDOM" ***!
|
||||
\***************************/
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = ReactDOM;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@wordpress/i18n":
|
||||
/*!**************************!*\
|
||||
!*** external "wp.i18n" ***!
|
||||
\**************************/
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = wp.i18n;
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/******/ // expose the modules object (__webpack_modules__)
|
||||
/******/ __webpack_require__.m = __webpack_modules__;
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/compat get default export */
|
||||
/******/ (() => {
|
||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||
/******/ __webpack_require__.n = (module) => {
|
||||
/******/ var getter = module && module.__esModule ?
|
||||
/******/ () => (module['default']) :
|
||||
/******/ () => (module);
|
||||
/******/ __webpack_require__.d(getter, { a: getter });
|
||||
/******/ return getter;
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ (() => {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = (exports, definition) => {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/ensure chunk */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.f = {};
|
||||
/******/ // This file contains only the entry chunk.
|
||||
/******/ // The chunk loading function for additional chunks
|
||||
/******/ __webpack_require__.e = (chunkId) => {
|
||||
/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {
|
||||
/******/ __webpack_require__.f[key](chunkId, promises);
|
||||
/******/ return promises;
|
||||
/******/ }, []));
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/get javascript chunk filename */
|
||||
/******/ (() => {
|
||||
/******/ // This function allow to reference async chunks
|
||||
/******/ __webpack_require__.u = (chunkId) => {
|
||||
/******/ // return url for filenames based on template
|
||||
/******/ return "" + chunkId + ".js";
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/global */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.g = (function() {
|
||||
/******/ if (typeof globalThis === 'object') return globalThis;
|
||||
/******/ try {
|
||||
/******/ return this || new Function('return this')();
|
||||
/******/ } catch (e) {
|
||||
/******/ if (typeof window === 'object') return window;
|
||||
/******/ }
|
||||
/******/ })();
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/load script */
|
||||
/******/ (() => {
|
||||
/******/ var inProgress = {};
|
||||
/******/ var dataWebpackPrefix = "elementor-pro-notes:";
|
||||
/******/ // loadScript function to load a script via script tag
|
||||
/******/ __webpack_require__.l = (url, done, key, chunkId) => {
|
||||
/******/ if(inProgress[url]) { inProgress[url].push(done); return; }
|
||||
/******/ var script, needAttach;
|
||||
/******/ if(key !== undefined) {
|
||||
/******/ var scripts = document.getElementsByTagName("script");
|
||||
/******/ for(var i = 0; i < scripts.length; i++) {
|
||||
/******/ var s = scripts[i];
|
||||
/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; }
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ if(!script) {
|
||||
/******/ needAttach = true;
|
||||
/******/ script = document.createElement('script');
|
||||
/******/
|
||||
/******/ script.charset = 'utf-8';
|
||||
/******/ script.timeout = 120;
|
||||
/******/ if (__webpack_require__.nc) {
|
||||
/******/ script.setAttribute("nonce", __webpack_require__.nc);
|
||||
/******/ }
|
||||
/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key);
|
||||
/******/
|
||||
/******/ script.src = url;
|
||||
/******/ }
|
||||
/******/ inProgress[url] = [done];
|
||||
/******/ var onScriptComplete = (prev, event) => {
|
||||
/******/ // avoid mem leaks in IE.
|
||||
/******/ script.onerror = script.onload = null;
|
||||
/******/ clearTimeout(timeout);
|
||||
/******/ var doneFns = inProgress[url];
|
||||
/******/ delete inProgress[url];
|
||||
/******/ script.parentNode && script.parentNode.removeChild(script);
|
||||
/******/ doneFns && doneFns.forEach((fn) => (fn(event)));
|
||||
/******/ if(prev) return prev(event);
|
||||
/******/ }
|
||||
/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);
|
||||
/******/ script.onerror = onScriptComplete.bind(null, script.onerror);
|
||||
/******/ script.onload = onScriptComplete.bind(null, script.onload);
|
||||
/******/ needAttach && document.head.appendChild(script);
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/make namespace object */
|
||||
/******/ (() => {
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = (exports) => {
|
||||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||
/******/ }
|
||||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/publicPath */
|
||||
/******/ (() => {
|
||||
/******/ var scriptUrl;
|
||||
/******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
|
||||
/******/ var document = __webpack_require__.g.document;
|
||||
/******/ if (!scriptUrl && document) {
|
||||
/******/ if (document.currentScript)
|
||||
/******/ scriptUrl = document.currentScript.src;
|
||||
/******/ if (!scriptUrl) {
|
||||
/******/ var scripts = document.getElementsByTagName("script");
|
||||
/******/ if(scripts.length) {
|
||||
/******/ var i = scripts.length - 1;
|
||||
/******/ while (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
|
||||
/******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
|
||||
/******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
|
||||
/******/ scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
|
||||
/******/ __webpack_require__.p = scriptUrl;
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/jsonp chunk loading */
|
||||
/******/ (() => {
|
||||
/******/ // no baseURI
|
||||
/******/
|
||||
/******/ // object to store loaded and loading chunks
|
||||
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
|
||||
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
|
||||
/******/ var installedChunks = {
|
||||
/******/ "notes-app-initiator": 0
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ __webpack_require__.f.j = (chunkId, promises) => {
|
||||
/******/ // JSONP chunk loading for javascript
|
||||
/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;
|
||||
/******/ if(installedChunkData !== 0) { // 0 means "already installed".
|
||||
/******/
|
||||
/******/ // a Promise means "currently loading".
|
||||
/******/ if(installedChunkData) {
|
||||
/******/ promises.push(installedChunkData[2]);
|
||||
/******/ } else {
|
||||
/******/ if(true) { // all chunks have JS
|
||||
/******/ // setup Promise in chunk cache
|
||||
/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));
|
||||
/******/ promises.push(installedChunkData[2] = promise);
|
||||
/******/
|
||||
/******/ // start chunk loading
|
||||
/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId);
|
||||
/******/ // create error before stack unwound to get useful stacktrace later
|
||||
/******/ var error = new Error();
|
||||
/******/ var loadingEnded = (event) => {
|
||||
/******/ if(__webpack_require__.o(installedChunks, chunkId)) {
|
||||
/******/ installedChunkData = installedChunks[chunkId];
|
||||
/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined;
|
||||
/******/ if(installedChunkData) {
|
||||
/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
|
||||
/******/ var realSrc = event && event.target && event.target.src;
|
||||
/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
|
||||
/******/ error.name = 'ChunkLoadError';
|
||||
/******/ error.type = errorType;
|
||||
/******/ error.request = realSrc;
|
||||
/******/ installedChunkData[1](error);
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId);
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // no prefetching
|
||||
/******/
|
||||
/******/ // no preloaded
|
||||
/******/
|
||||
/******/ // no HMR
|
||||
/******/
|
||||
/******/ // no HMR manifest
|
||||
/******/
|
||||
/******/ // no on chunks loaded
|
||||
/******/
|
||||
/******/ // install a JSONP callback for chunk loading
|
||||
/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
|
||||
/******/ var [chunkIds, moreModules, runtime] = data;
|
||||
/******/ // add "moreModules" to the modules object,
|
||||
/******/ // then flag all "chunkIds" as loaded and fire callback
|
||||
/******/ var moduleId, chunkId, i = 0;
|
||||
/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
|
||||
/******/ for(moduleId in moreModules) {
|
||||
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
|
||||
/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ if(runtime) var result = runtime(__webpack_require__);
|
||||
/******/ }
|
||||
/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
|
||||
/******/ for(;i < chunkIds.length; i++) {
|
||||
/******/ chunkId = chunkIds[i];
|
||||
/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
|
||||
/******/ installedChunks[chunkId][0]();
|
||||
/******/ }
|
||||
/******/ installedChunks[chunkId] = 0;
|
||||
/******/ }
|
||||
/******/
|
||||
/******/ }
|
||||
/******/
|
||||
/******/ var chunkLoadingGlobal = self["webpackChunkelementor_pro_notes"] = self["webpackChunkelementor_pro_notes"] || [];
|
||||
/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
|
||||
/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/nonce */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.nc = undefined;
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||||
(() => {
|
||||
/*!*******************************************!*\
|
||||
!*** ../assets/js/notes-app-initiator.js ***!
|
||||
\*******************************************/
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
||||
|
||||
|
||||
(() => {
|
||||
/**
|
||||
* Holds the HTML element where the notes app renders in.
|
||||
*
|
||||
* @type {null|HTMLElement}
|
||||
*/
|
||||
let rootElement = null;
|
||||
|
||||
/**
|
||||
* Add the app into the page.
|
||||
*/
|
||||
async function mount() {
|
||||
rootElement = document.createElement('div');
|
||||
document.body.appendChild(rootElement);
|
||||
const {
|
||||
default: App
|
||||
} = await Promise.all(/*! import() | notes-app */[__webpack_require__.e("vendors-node_modules_radix-ui_react-alert-dialog_dist_index_module_js-node_modules_radix-ui_r-e4587e"), __webpack_require__.e("notes-app")]).then(__webpack_require__.bind(__webpack_require__, /*! ./app/app */ "../assets/js/app/app.js"));
|
||||
ReactDOM.render( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(App, null), rootElement); // eslint-disable-line react/no-deprecated
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the app from the page
|
||||
*/
|
||||
function unmount() {
|
||||
if (!rootElement) {
|
||||
return;
|
||||
}
|
||||
ReactDOM.unmountComponentAtNode(rootElement); // eslint-disable-line react/no-deprecated
|
||||
}
|
||||
|
||||
// Listen to an event from the notes e-component to mount or unmount the app.
|
||||
window.addEventListener('message', event => {
|
||||
if (!event.data?.name?.startsWith('elementor-pro/notes')) {
|
||||
return;
|
||||
}
|
||||
const classNames = ['e-route-notes'];
|
||||
switch (event.data.name) {
|
||||
case 'elementor-pro/notes/open':
|
||||
document.body.classList.add(...classNames);
|
||||
mount();
|
||||
break;
|
||||
case 'elementor-pro/notes/close':
|
||||
document.body.classList.remove(...classNames);
|
||||
unmount();
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
// Share frontend config with the main notes script.
|
||||
window.top.postMessage({
|
||||
name: 'elementor-pro/notes/config',
|
||||
payload: {
|
||||
...elementorNotesConfig
|
||||
}
|
||||
}, '*');
|
||||
})();
|
||||
})();
|
||||
|
||||
/******/ })()
|
||||
;
|
||||
//# sourceMappingURL=notes-app-initiator.js.map
|
||||
1
wp-content/plugins/elementor-pro/assets/js/notes/notes-app-initiator.min.js
vendored
Normal file
1
wp-content/plugins/elementor-pro/assets/js/notes/notes-app-initiator.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
(()=>{"use strict";var e,t,r,o,n={7363:e=>{e.exports=React},1533:e=>{e.exports=ReactDOM},8003:e=>{e.exports=wp.i18n}},a={};function i(e){var t=a[e];if(void 0!==t)return t.exports;var r=a[e]={exports:{}};return n[e](r,r.exports,i),r.exports}i.m=n,i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>(969===e?"notes-app":e)+".min.js",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="elementor-pro-notes:",i.l=(r,o,n,a)=>{if(e[r])e[r].push(o);else{var s,l;if(void 0!==n)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var u=c[d];if(u.getAttribute("src")==r||u.getAttribute("data-webpack")==t+n){s=u;break}}s||(l=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+n),s.src=r),e[r]=[o];var p=(t,o)=>{s.onerror=s.onload=null,clearTimeout(m);var n=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),n&&n.forEach((e=>e(o))),t)return t(o)},m=setTimeout(p.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=p.bind(null,s.onerror),s.onload=p.bind(null,s.onload),l&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var t=i.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&!e;)e=r[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=e})(),(()=>{var e={67:0};i.f.j=(t,r)=>{var o=i.o(e,t)?e[t]:void 0;if(0!==o)if(o)r.push(o[2]);else{var n=new Promise(((r,n)=>o=e[t]=[r,n]));r.push(o[2]=n);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var n=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+n+": "+a+")",s.name="ChunkLoadError",s.type=n,s.request=a,o[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var o,n,[a,s,l]=r,c=0;if(a.some((t=>0!==e[t]))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);if(l)l(i)}for(t&&t(r);c<a.length;c++)n=a[c],i.o(e,n)&&e[n]&&e[n][0](),e[n]=0},r=self.webpackChunkelementor_pro_notes=self.webpackChunkelementor_pro_notes||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),i.nc=void 0,r=i(7363),o=i.n(r),(()=>{let e=null;window.addEventListener("message",(t=>{if(!t.data?.name?.startsWith("elementor-pro/notes"))return;const r=["e-route-notes"];switch(t.data.name){case"elementor-pro/notes/open":document.body.classList.add(...r),async function(){e=document.createElement("div"),document.body.appendChild(e);const{default:t}=await Promise.all([i.e(93),i.e(969)]).then(i.bind(i,5551));ReactDOM.render(o().createElement(t,null),e)}();break;case"elementor-pro/notes/close":document.body.classList.remove(...r),e&&ReactDOM.unmountComponentAtNode(e)}})),window.top.postMessage({name:"elementor-pro/notes/config",payload:{...elementorNotesConfig}},"*")})()})();
|
||||
8358
wp-content/plugins/elementor-pro/assets/js/notes/notes-app.js
Normal file
8358
wp-content/plugins/elementor-pro/assets/js/notes/notes-app.js
Normal file
File diff suppressed because it is too large
Load Diff
1638
wp-content/plugins/elementor-pro/assets/js/notes/notes-app.min.js
vendored
Normal file
1638
wp-content/plugins/elementor-pro/assets/js/notes/notes-app.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4768
wp-content/plugins/elementor-pro/assets/js/notes/notes.js
Normal file
4768
wp-content/plugins/elementor-pro/assets/js/notes/notes.js
Normal file
File diff suppressed because it is too large
Load Diff
2
wp-content/plugins/elementor-pro/assets/js/notes/notes.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/notes/notes.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,17 @@
|
||||
/** @license React v16.13.1
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v17.0.2
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
/**
|
||||
* This file is generated by Webpack, do not edit it directly.
|
||||
*/
|
||||
return [
|
||||
'handle' => 'elementor-v2-editor-documents-extended',
|
||||
'deps' => [
|
||||
'elementor-v2-editor-app-bar',
|
||||
'elementor-v2-editor-documents',
|
||||
'elementor-v2-editor-v1-adapters',
|
||||
'elementor-v2-icons',
|
||||
'elementor-v2-store',
|
||||
'elementor-v2-ui',
|
||||
'react',
|
||||
'wp-i18n',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,349 @@
|
||||
/******/ (function() { // webpackBootstrap
|
||||
/******/ "use strict";
|
||||
/******/ var __webpack_modules__ = ({
|
||||
|
||||
/***/ "react":
|
||||
/*!**************************!*\
|
||||
!*** external ["React"] ***!
|
||||
\**************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["React"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@elementor/editor-app-bar":
|
||||
/*!***********************************************!*\
|
||||
!*** external ["elementorV2","editorAppBar"] ***!
|
||||
\***********************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["editorAppBar"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@elementor/editor-documents":
|
||||
/*!**************************************************!*\
|
||||
!*** external ["elementorV2","editorDocuments"] ***!
|
||||
\**************************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["editorDocuments"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@elementor/editor-v1-adapters":
|
||||
/*!***************************************************!*\
|
||||
!*** external ["elementorV2","editorV1Adapters"] ***!
|
||||
\***************************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["editorV1Adapters"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@elementor/icons":
|
||||
/*!****************************************!*\
|
||||
!*** external ["elementorV2","icons"] ***!
|
||||
\****************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["icons"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@elementor/store":
|
||||
/*!****************************************!*\
|
||||
!*** external ["elementorV2","store"] ***!
|
||||
\****************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["store"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@elementor/ui":
|
||||
/*!*************************************!*\
|
||||
!*** external ["elementorV2","ui"] ***!
|
||||
\*************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["ui"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@wordpress/i18n":
|
||||
/*!******************************!*\
|
||||
!*** external ["wp","i18n"] ***!
|
||||
\******************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["wp"]["i18n"];
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/make namespace object */
|
||||
/******/ !function() {
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = function(exports) {
|
||||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||
/******/ }
|
||||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||
/******/ };
|
||||
/******/ }();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||||
!function() {
|
||||
/*!**************************************************************************!*\
|
||||
!*** ./node_modules/@elementor/editor-documents-extended/dist/index.mjs ***!
|
||||
\**************************************************************************/
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
|
||||
/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters");
|
||||
/* harmony import */ var _elementor_editor_app_bar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-app-bar */ "@elementor/editor-app-bar");
|
||||
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
|
||||
/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents");
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "react");
|
||||
/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
|
||||
/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
|
||||
// src/store/index.ts
|
||||
|
||||
var initialState = {
|
||||
entities: {}
|
||||
};
|
||||
var slice = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__createSlice)({
|
||||
name: "documentsExtended",
|
||||
initialState,
|
||||
reducers: {
|
||||
init(state, { payload }) {
|
||||
state.entities = payload.entities;
|
||||
},
|
||||
addDocument(state, { payload }) {
|
||||
state.entities[payload.id] = payload;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// src/sync/sync-store.ts
|
||||
|
||||
|
||||
function syncStore() {
|
||||
syncInitialization();
|
||||
syncOnDocumentOpen();
|
||||
}
|
||||
function syncInitialization() {
|
||||
const { init: init5 } = slice.actions;
|
||||
(0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.__privateListenTo)(
|
||||
(0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.v1ReadyEvent)(),
|
||||
() => {
|
||||
const documentsManager = getV1DocumentsManager();
|
||||
const entities = Object.entries(documentsManager.documents).reduce((acc, [id, document]) => {
|
||||
acc[id] = normalizeV1Document(document);
|
||||
return acc;
|
||||
}, {});
|
||||
(0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__dispatch)(init5({ entities }));
|
||||
}
|
||||
);
|
||||
}
|
||||
function syncOnDocumentOpen() {
|
||||
const { addDocument } = slice.actions;
|
||||
(0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.__privateListenTo)(
|
||||
(0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.commandEndEvent)("editor/documents/open"),
|
||||
() => {
|
||||
const documentsManager = getV1DocumentsManager();
|
||||
const currentDocument = normalizeV1Document(documentsManager.getCurrent());
|
||||
(0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__dispatch)(addDocument(currentDocument));
|
||||
}
|
||||
);
|
||||
}
|
||||
function getV1DocumentsManager() {
|
||||
const documentsManager = window.elementor?.documents;
|
||||
if (!documentsManager) {
|
||||
throw new Error("Elementor Editor V1 documents manager not found");
|
||||
}
|
||||
return documentsManager;
|
||||
}
|
||||
function normalizeV1Document(documentData) {
|
||||
return {
|
||||
id: documentData.id,
|
||||
locationKey: documentData.config.theme_builder?.settings?.location || null
|
||||
};
|
||||
}
|
||||
|
||||
// src/extensions/popups/index.ts
|
||||
|
||||
|
||||
// src/extensions/popups/hooks/use-popup-triggers-props.ts
|
||||
|
||||
|
||||
|
||||
// src/icons/hierarchy-icon.tsx
|
||||
|
||||
|
||||
var HierarchyIcon = react__WEBPACK_IMPORTED_MODULE_5__.forwardRef((props, ref) => {
|
||||
return /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_5__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.SvgIcon, { viewBox: "0 0 24 24", ...props, ref }, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_5__.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M11 3.75C10.3096 3.75 9.75 4.30964 9.75 5V7C9.75 7.69036 10.3096 8.25 11 8.25H13C13.6904 8.25 14.25 7.69036 14.25 7V5C14.25 4.30964 13.6904 3.75 13 3.75H11ZM12.75 9.75H13C14.5188 9.75 15.75 8.51878 15.75 7V5C15.75 3.48122 14.5188 2.25 13 2.25H11C9.48122 2.25 8.25 3.48122 8.25 5V7C8.25 8.51878 9.48122 9.75 11 9.75H11.25V11.25H8C7.27065 11.25 6.57118 11.5397 6.05546 12.0555C5.53973 12.5712 5.25 13.2707 5.25 14V14.25H5C3.48122 14.25 2.25 15.4812 2.25 17V19C2.25 20.5188 3.48122 21.75 5 21.75H7C8.51878 21.75 9.75 20.5188 9.75 19V17C9.75 15.4812 8.51878 14.25 7 14.25H6.75V14C6.75 13.6685 6.8817 13.3505 7.11612 13.1161C7.35054 12.8817 7.66848 12.75 8 12.75H16C16.3315 12.75 16.6495 12.8817 16.8839 13.1161C17.1183 13.3505 17.25 13.6685 17.25 14V14.25H17C15.4812 14.25 14.25 15.4812 14.25 17V19C14.25 20.5188 15.4812 21.75 17 21.75H19C20.5188 21.75 21.75 20.5188 21.75 19V17C21.75 15.4812 20.5188 14.25 19 14.25H18.75V14C18.75 13.2707 18.4603 12.5712 17.9445 12.0555C17.4288 11.5397 16.7293 11.25 16 11.25H12.75V9.75ZM17 15.75C16.3096 15.75 15.75 16.3096 15.75 17V19C15.75 19.6904 16.3096 20.25 17 20.25H19C19.6904 20.25 20.25 19.6904 20.25 19V17C20.25 16.3096 19.6904 15.75 19 15.75H17ZM5 15.75C4.30964 15.75 3.75 16.3096 3.75 17V19C3.75 19.6904 4.30964 20.25 5 20.25H7C7.69036 20.25 8.25 19.6904 8.25 19V17C8.25 16.3096 7.69036 15.75 7 15.75H5Z" }));
|
||||
});
|
||||
var hierarchy_icon_default = HierarchyIcon;
|
||||
|
||||
// src/icons/trigger-icon.tsx
|
||||
|
||||
|
||||
var TriggerIcon = react__WEBPACK_IMPORTED_MODULE_5__.forwardRef((props, ref) => {
|
||||
return /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_5__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.SvgIcon, { viewBox: "0 0 24 24", ...props, ref }, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_5__.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M3.46967 1.46967C3.76256 1.17678 4.23744 1.17678 4.53033 1.46967L5.53033 2.46967C5.82322 2.76256 5.82322 3.23744 5.53033 3.53033C5.23744 3.82322 4.76256 3.82322 4.46967 3.53033L3.46967 2.53033C3.17678 2.23744 3.17678 1.76256 3.46967 1.46967ZM15.5303 1.46967C15.8232 1.76256 15.8232 2.23744 15.5303 2.53033L14.5303 3.53033C14.2374 3.82322 13.7626 3.82322 13.4697 3.53033C13.1768 3.23744 13.1768 2.76256 13.4697 2.46967L14.4697 1.46967C14.7626 1.17678 15.2374 1.17678 15.5303 1.46967ZM9.5 3.75C9.30109 3.75 9.11032 3.82902 8.96967 3.96967C8.82902 4.11032 8.75 4.30109 8.75 4.5V13C8.75 13.3033 8.56727 13.5768 8.28702 13.6929C8.00677 13.809 7.68418 13.7448 7.46968 13.5303L5.99991 12.0606C5.82378 11.8848 5.59369 11.7726 5.34668 11.7423C5.09954 11.7119 4.84934 11.765 4.63582 11.8931C4.4683 11.9936 4.34633 12.1555 4.29628 12.3443C4.24623 12.5331 4.27182 12.734 4.36759 12.9043C6.2544 16.2581 7.33302 18.1371 7.62819 18.5904C7.62825 18.5905 7.62812 18.5903 7.62819 18.5904L7.82231 18.8875C7.82253 18.8878 7.82274 18.8881 7.82295 18.8885C8.3011 19.6142 8.95191 20.2098 9.71702 20.622C10.482 21.0341 11.3372 21.2499 12.206 21.25C12.2066 21.25 12.2072 21.25 12.2078 21.25H13.9999C15.3923 21.25 16.7277 20.6969 17.7123 19.7123C18.6968 18.7277 19.2499 17.3924 19.2499 16V11.5C19.2499 11.3011 19.1709 11.1103 19.0303 10.9697C18.8896 10.829 18.6989 10.75 18.4999 10.75C18.301 10.75 18.1103 10.829 17.9696 10.9697C17.8312 11.1081 17.7525 11.295 17.75 11.4904V12C17.75 12.4142 17.4142 12.75 17 12.75C16.5858 12.75 16.25 12.4142 16.25 12V11.5097C16.25 11.5064 16.2499 11.5032 16.2499 11.5C16.2499 11.4945 16.25 11.4889 16.25 11.4834V10.5C16.25 10.3011 16.171 10.1103 16.0303 9.96967C15.8897 9.82902 15.6989 9.75 15.5 9.75C15.3011 9.75 15.1103 9.82902 14.9697 9.96967C14.829 10.1103 14.75 10.3011 14.75 10.5V12C14.75 12.4142 14.4142 12.75 14 12.75C13.5858 12.75 13.25 12.4142 13.25 12V9.5C13.25 9.30109 13.171 9.11032 13.0303 8.96967C12.8897 8.82902 12.6989 8.75 12.5 8.75C12.3011 8.75 12.1103 8.82902 11.9697 8.96967C11.829 9.11032 11.75 9.30109 11.75 9.5V12C11.75 12.4142 11.4142 12.75 11 12.75C10.5858 12.75 10.25 12.4142 10.25 12V4.5C10.25 4.30109 10.171 4.11032 10.0303 3.96967C9.88968 3.82902 9.69891 3.75 9.5 3.75ZM11.75 7.37868V4.5C11.75 3.90326 11.5129 3.33097 11.091 2.90901C10.669 2.48705 10.0967 2.25 9.5 2.25C8.90326 2.25 8.33097 2.48705 7.90901 2.90901C7.48705 3.33097 7.25 3.90326 7.25 4.5V11.1894L7.06026 10.9997C6.64751 10.5874 6.10855 10.3245 5.52952 10.2534C4.95058 10.1823 4.36448 10.3067 3.86429 10.6067M11.75 7.37868C11.9887 7.2943 12.242 7.25 12.5 7.25C13.0967 7.25 13.669 7.48705 14.091 7.90901C14.2603 8.0783 14.3998 8.2718 14.5062 8.48136C14.8125 8.33057 15.1521 8.25 15.5 8.25C16.0967 8.25 16.669 8.48705 17.091 8.90901C17.2603 9.0783 17.3998 9.27179 17.5062 9.48134C17.8125 9.33056 18.1521 9.25 18.4999 9.25C19.0967 9.25 19.669 9.48705 20.0909 9.90901C20.5129 10.331 20.7499 10.9033 20.7499 11.5V16C20.7499 17.7902 20.0388 19.5071 18.7729 20.773C17.507 22.0388 15.7901 22.75 13.9999 22.75H12.2081C12.208 22.75 12.2081 22.75 12.2081 22.75H11.9999C11.9646 22.75 11.9298 22.7476 11.8958 22.7428C10.8859 22.6962 9.89798 22.4233 9.00562 21.9426C8.02147 21.4124 7.1844 20.6461 6.56957 19.7125L6.56807 19.7102L6.3715 19.4093C6.04238 18.9041 4.93105 16.9651 3.06029 13.6397C2.77296 13.129 2.69621 12.5264 2.84636 11.96C2.99649 11.3936 3.36183 10.9081 3.86429 10.6067M16 6.75H15C14.5858 6.75 14.25 6.41421 14.25 6C14.25 5.58579 14.5858 5.25 15 5.25H16C16.4142 5.25 16.75 5.58579 16.75 6C16.75 6.41421 16.4142 6.75 16 6.75ZM2.25 7C2.25 6.58579 2.58579 6.25 3 6.25H4C4.41421 6.25 4.75 6.58579 4.75 7C4.75 7.41421 4.41421 7.75 4 7.75H3C2.58579 7.75 2.25 7.41421 2.25 7Z" }));
|
||||
});
|
||||
var trigger_icon_default = TriggerIcon;
|
||||
|
||||
// src/extensions/popups/hooks/use-popup-triggers-props.ts
|
||||
|
||||
function usePopupTriggersProps() {
|
||||
const document = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_4__.__useActiveDocument)();
|
||||
const visible = "popup" === document?.type.value;
|
||||
return {
|
||||
icon: trigger_icon_default,
|
||||
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)("Triggers", "elementor-pro"),
|
||||
visible,
|
||||
onClick: () => {
|
||||
(0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.__privateOpenRoute)("theme-builder-publish/triggers");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// src/extensions/popups/hooks/use-popup-advanced-rules-props.ts
|
||||
|
||||
|
||||
|
||||
|
||||
function usePopupAdvancedRulesProps() {
|
||||
const document = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_4__.__useActiveDocument)();
|
||||
const visible = "popup" === document?.type.value;
|
||||
return {
|
||||
icon: _elementor_icons__WEBPACK_IMPORTED_MODULE_7__.SettingsIcon,
|
||||
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)("Advanced Rules", "elementor-pro"),
|
||||
visible,
|
||||
onClick: () => {
|
||||
(0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.__privateOpenRoute)("theme-builder-publish/timing");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// src/extensions/popups/index.ts
|
||||
function init() {
|
||||
_elementor_editor_app_bar__WEBPACK_IMPORTED_MODULE_2__.documentOptionsMenu.registerAction({
|
||||
id: "popup-triggers",
|
||||
priority: 20,
|
||||
// After display conditions.
|
||||
useProps: usePopupTriggersProps
|
||||
});
|
||||
_elementor_editor_app_bar__WEBPACK_IMPORTED_MODULE_2__.documentOptionsMenu.registerAction({
|
||||
id: "popup-advanced-rules",
|
||||
priority: 30,
|
||||
// After popup triggers.
|
||||
useProps: usePopupAdvancedRulesProps
|
||||
});
|
||||
}
|
||||
|
||||
// src/extensions/display-conditions/index.ts
|
||||
|
||||
|
||||
// src/extensions/display-conditions/hooks/use-document-display-conditions-props.ts
|
||||
|
||||
|
||||
|
||||
// src/extensions/display-conditions/hooks/use-active-document-extended.ts
|
||||
|
||||
|
||||
function useActiveDocumentExtended() {
|
||||
const document = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_4__.__useActiveDocument)();
|
||||
const documentExtensions = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)((state) => {
|
||||
if (!document) {
|
||||
return null;
|
||||
}
|
||||
return state.documentsExtended.entities[document.id] || null;
|
||||
});
|
||||
if (!documentExtensions) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
...document,
|
||||
...documentExtensions
|
||||
};
|
||||
}
|
||||
|
||||
// src/extensions/display-conditions/hooks/use-document-display-conditions-props.ts
|
||||
function useDocumentDisplayConditionsProps() {
|
||||
const document = useActiveDocumentExtended();
|
||||
const visible = !!document?.locationKey;
|
||||
return {
|
||||
icon: hierarchy_icon_default,
|
||||
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)("Display Conditions", "elementor-pro"),
|
||||
visible,
|
||||
onClick: () => {
|
||||
(0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.__privateOpenRoute)("theme-builder-publish/conditions");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// src/extensions/display-conditions/index.ts
|
||||
function init2() {
|
||||
_elementor_editor_app_bar__WEBPACK_IMPORTED_MODULE_2__.documentOptionsMenu.registerAction({
|
||||
id: "document-display-conditions",
|
||||
priority: 10,
|
||||
// Before popup triggers.
|
||||
useProps: useDocumentDisplayConditionsProps
|
||||
});
|
||||
}
|
||||
|
||||
// src/extensions/index.ts
|
||||
function init3() {
|
||||
init();
|
||||
init2();
|
||||
}
|
||||
|
||||
// src/init.ts
|
||||
|
||||
function init4() {
|
||||
init3();
|
||||
initStore();
|
||||
}
|
||||
function initStore() {
|
||||
(0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__registerSlice)(slice);
|
||||
syncStore();
|
||||
}
|
||||
|
||||
// src/index.ts
|
||||
init4();
|
||||
//# sourceMappingURL=index.mjs.map
|
||||
}();
|
||||
(window.elementorV2 = window.elementorV2 || {}).editorDocumentsExtended = __webpack_exports__;
|
||||
/******/ })()
|
||||
;
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,3 @@
|
||||
__( 'Triggers', 'elementor-pro' );
|
||||
__( 'Advanced Rules', 'elementor-pro' );
|
||||
__( 'Display Conditions', 'elementor-pro' );
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
/**
|
||||
* This file is generated by Webpack, do not edit it directly.
|
||||
*/
|
||||
return [
|
||||
'handle' => 'elementor-v2-editor-notes',
|
||||
'deps' => [
|
||||
'elementor-v2-editor-app-bar',
|
||||
'elementor-v2-editor-v1-adapters',
|
||||
'elementor-v2-icons',
|
||||
'wp-i18n',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,130 @@
|
||||
/******/ (function() { // webpackBootstrap
|
||||
/******/ "use strict";
|
||||
/******/ var __webpack_modules__ = ({
|
||||
|
||||
/***/ "@elementor/editor-app-bar":
|
||||
/*!***********************************************!*\
|
||||
!*** external ["elementorV2","editorAppBar"] ***!
|
||||
\***********************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["editorAppBar"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@elementor/editor-v1-adapters":
|
||||
/*!***************************************************!*\
|
||||
!*** external ["elementorV2","editorV1Adapters"] ***!
|
||||
\***************************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["editorV1Adapters"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@elementor/icons":
|
||||
/*!****************************************!*\
|
||||
!*** external ["elementorV2","icons"] ***!
|
||||
\****************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["icons"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@wordpress/i18n":
|
||||
/*!******************************!*\
|
||||
!*** external ["wp","i18n"] ***!
|
||||
\******************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["wp"]["i18n"];
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/make namespace object */
|
||||
/******/ !function() {
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = function(exports) {
|
||||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||
/******/ }
|
||||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||
/******/ };
|
||||
/******/ }();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||||
!function() {
|
||||
/*!*************************************************************!*\
|
||||
!*** ./node_modules/@elementor/editor-notes/dist/index.mjs ***!
|
||||
\*************************************************************/
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _elementor_editor_app_bar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-app-bar */ "@elementor/editor-app-bar");
|
||||
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
|
||||
/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters");
|
||||
/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
|
||||
// src/init.ts
|
||||
|
||||
|
||||
// src/hooks/use-notes-action-props.ts
|
||||
|
||||
|
||||
|
||||
function useNotesActionProps() {
|
||||
const { isActive, isBlocked } = (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__.__privateUseRouteStatus)("notes", {
|
||||
blockOnPreviewMode: false
|
||||
});
|
||||
return {
|
||||
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Notes", "elementor-pro"),
|
||||
icon: _elementor_icons__WEBPACK_IMPORTED_MODULE_3__.MessageIcon,
|
||||
onClick: () => (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__.__privateRunCommand)("notes/toggle"),
|
||||
selected: isActive,
|
||||
disabled: isBlocked
|
||||
};
|
||||
}
|
||||
|
||||
// src/init.ts
|
||||
function init() {
|
||||
_elementor_editor_app_bar__WEBPACK_IMPORTED_MODULE_0__.toolsMenu.registerToggleAction({
|
||||
id: "toggle-notes",
|
||||
priority: 4,
|
||||
useProps: useNotesActionProps
|
||||
});
|
||||
}
|
||||
|
||||
// src/index.ts
|
||||
init();
|
||||
//# sourceMappingURL=index.mjs.map
|
||||
}();
|
||||
(window.elementorV2 = window.elementorV2 || {}).editorNotes = __webpack_exports__;
|
||||
/******/ })()
|
||||
;
|
||||
1
wp-content/plugins/elementor-pro/assets/js/packages/editor-notes/editor-notes.min.js
vendored
Normal file
1
wp-content/plugins/elementor-pro/assets/js/packages/editor-notes/editor-notes.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(){"use strict";var e={};(function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})})(e);var o=window.elementorV2.editorAppBar,t=window.wp.i18n,n=window.elementorV2.editorV1Adapters,i=window.elementorV2.icons;o.toolsMenu.registerToggleAction({id:"toggle-notes",priority:4,useProps:function(){const{isActive:e,isBlocked:o}=(0,n.__privateUseRouteStatus)("notes",{blockOnPreviewMode:!1});return{title:(0,t.__)("Notes","elementor-pro"),icon:i.MessageIcon,onClick:()=>(0,n.__privateRunCommand)("notes/toggle"),selected:e,disabled:o}}}),(window.elementorV2=window.elementorV2||{}).editorNotes=e}();
|
||||
@@ -0,0 +1 @@
|
||||
__( 'Notes', 'elementor-pro' );
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
/**
|
||||
* This file is generated by Webpack, do not edit it directly.
|
||||
*/
|
||||
return [
|
||||
'handle' => 'elementor-v2-editor-site-navigation-extended',
|
||||
'deps' => [
|
||||
'elementor-v2-editor-site-navigation',
|
||||
'elementor-v2-icons',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,104 @@
|
||||
/******/ (function() { // webpackBootstrap
|
||||
/******/ "use strict";
|
||||
/******/ var __webpack_modules__ = ({
|
||||
|
||||
/***/ "@elementor/editor-site-navigation":
|
||||
/*!*******************************************************!*\
|
||||
!*** external ["elementorV2","editorSiteNavigation"] ***!
|
||||
\*******************************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["editorSiteNavigation"];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "@elementor/icons":
|
||||
/*!****************************************!*\
|
||||
!*** external ["elementorV2","icons"] ***!
|
||||
\****************************************/
|
||||
/***/ (function(module) {
|
||||
|
||||
module.exports = window["elementorV2"]["icons"];
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/make namespace object */
|
||||
/******/ !function() {
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = function(exports) {
|
||||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||
/******/ }
|
||||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||
/******/ };
|
||||
/******/ }();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||||
!function() {
|
||||
/*!********************************************************************************!*\
|
||||
!*** ./node_modules/@elementor/editor-site-navigation-extended/dist/index.mjs ***!
|
||||
\********************************************************************************/
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
|
||||
/* harmony import */ var _elementor_editor_site_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-site-navigation */ "@elementor/editor-site-navigation");
|
||||
// src/icons-map.ts
|
||||
|
||||
|
||||
function extendDocumentsIcons() {
|
||||
if (_elementor_editor_site_navigation__WEBPACK_IMPORTED_MODULE_1__.extendIconsMap) {
|
||||
(0,_elementor_editor_site_navigation__WEBPACK_IMPORTED_MODULE_1__.extendIconsMap)({
|
||||
header: _elementor_icons__WEBPACK_IMPORTED_MODULE_0__.HeaderTemplateIcon,
|
||||
footer: _elementor_icons__WEBPACK_IMPORTED_MODULE_0__.FooterTemplateIcon,
|
||||
"single-post": _elementor_icons__WEBPACK_IMPORTED_MODULE_0__.PostTypeIcon,
|
||||
"single-page": _elementor_icons__WEBPACK_IMPORTED_MODULE_0__.PageTypeIcon,
|
||||
popup: _elementor_icons__WEBPACK_IMPORTED_MODULE_0__.PopupTemplateIcon,
|
||||
archive: _elementor_icons__WEBPACK_IMPORTED_MODULE_0__.ArchiveTemplateIcon,
|
||||
"search-results": _elementor_icons__WEBPACK_IMPORTED_MODULE_0__.SearchResultsTemplateIcon,
|
||||
"loop-item": _elementor_icons__WEBPACK_IMPORTED_MODULE_0__.LoopItemTemplateIcon,
|
||||
"error-404": _elementor_icons__WEBPACK_IMPORTED_MODULE_0__.Error404TemplateIcon,
|
||||
"landing-page": _elementor_icons__WEBPACK_IMPORTED_MODULE_0__.LandingPageTemplateIcon
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// src/init.ts
|
||||
function init() {
|
||||
extendDocumentsIcons();
|
||||
}
|
||||
|
||||
// src/index.ts
|
||||
init();
|
||||
|
||||
}();
|
||||
(window.elementorV2 = window.elementorV2 || {}).editorSiteNavigationExtended = __webpack_exports__;
|
||||
/******/ })()
|
||||
;
|
||||
@@ -0,0 +1 @@
|
||||
!function(){"use strict";var e={};(function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})})(e);var o=window.elementorV2.icons,n=window.elementorV2.editorSiteNavigation;n.extendIconsMap&&(0,n.extendIconsMap)({header:o.HeaderTemplateIcon,footer:o.FooterTemplateIcon,"single-post":o.PostTypeIcon,"single-page":o.PageTypeIcon,popup:o.PopupTemplateIcon,archive:o.ArchiveTemplateIcon,"search-results":o.SearchResultsTemplateIcon,"loop-item":o.LoopItemTemplateIcon,"error-404":o.Error404TemplateIcon,"landing-page":o.LandingPageTemplateIcon}),(window.elementorV2=window.elementorV2||{}).editorSiteNavigationExtended=e}();
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
/**
|
||||
* This file is generated by Webpack, do not edit it directly.
|
||||
*/
|
||||
return [
|
||||
'handle' => 'elementor-v2-ui',
|
||||
'deps' => [
|
||||
'react',
|
||||
'react-dom',
|
||||
],
|
||||
];
|
||||
87837
wp-content/plugins/elementor-pro/assets/js/packages/ui/ui.js
Normal file
87837
wp-content/plugins/elementor-pro/assets/js/packages/ui/ui.js
Normal file
File diff suppressed because one or more lines are too long
205
wp-content/plugins/elementor-pro/assets/js/packages/ui/ui.min.js
vendored
Normal file
205
wp-content/plugins/elementor-pro/assets/js/packages/ui/ui.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,48 @@
|
||||
/*!
|
||||
* CSSJanus. https://github.com/cssjanus/cssjanus
|
||||
*
|
||||
* Copyright 2014 Trevor Parscal
|
||||
* Copyright 2010 Roan Kattouw
|
||||
* Copyright 2008 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @license React
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @license React
|
||||
* react-jsx-runtime.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v16.13.1
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
769
wp-content/plugins/elementor-pro/assets/js/page-transitions.js
Normal file
769
wp-content/plugins/elementor-pro/assets/js/page-transitions.js
Normal file
@@ -0,0 +1,769 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
/******/ (() => { // webpackBootstrap
|
||||
/******/ var __webpack_modules__ = ({
|
||||
|
||||
/***/ "../modules/page-transitions/assets/js/frontend/components/index.js":
|
||||
/*!**************************************************************************!*\
|
||||
!*** ../modules/page-transitions/assets/js/frontend/components/index.js ***!
|
||||
\**************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
Object.defineProperty(exports, "PageTransition", ({
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _pageTransition.PageTransition;
|
||||
}
|
||||
}));
|
||||
Object.defineProperty(exports, "Preloader", ({
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _preloader.Preloader;
|
||||
}
|
||||
}));
|
||||
var _pageTransition = __webpack_require__(/*! ./page-transition/page-transition */ "../modules/page-transitions/assets/js/frontend/components/page-transition/page-transition.js");
|
||||
var _preloader = __webpack_require__(/*! ./preloader/preloader */ "../modules/page-transitions/assets/js/frontend/components/preloader/preloader.js");
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/page-transitions/assets/js/frontend/components/page-transition/filters.js":
|
||||
/*!********************************************************************************************!*\
|
||||
!*** ../modules/page-transitions/assets/js/frontend/components/page-transition/filters.js ***!
|
||||
\********************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
"use strict";
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
// Ref: https://stackoverflow.com/questions/26088849/url-fragment-allowed-characters
|
||||
const urlFragmentPattern = /.*#[\w\-/$.+()*@?~!&',;=:%]*$/;
|
||||
var _default = exports["default"] = {
|
||||
// Disable using data attribute.
|
||||
isDisabled: a => Object.prototype.hasOwnProperty.call(a.dataset, 'eDisablePageTransition'),
|
||||
// Allow only links from same origin and without a URL fragment (e.g. #some-string).
|
||||
isEmptyHref: a => !a.getAttribute('href'),
|
||||
isTargetBlank: a => '_blank' === a.target,
|
||||
notSameOrigin: a => !a.href.startsWith(window.location.origin),
|
||||
hasFragment: a => !!a.href.match(urlFragmentPattern),
|
||||
// Internal page links, popups, etc.
|
||||
|
||||
// Disable for popup links / menu toggles, only when they are closed (to allow opening).
|
||||
isPopup: a => 'true' === a.getAttribute('aria-haspopup') && 'false' === a.getAttribute('aria-expanded'),
|
||||
// Disable in WooCommerce links.
|
||||
isWoocommerce: a => {
|
||||
const isAddToCart = a.href.match(/\?add-to-cart=/),
|
||||
isRemoveFromCart = a.href.match(/\?remove_item=/),
|
||||
isRestoreToCart = a.href.match(/\?undo_item=/),
|
||||
isWoocommercePagination = a.href.match(/\?product-page=/),
|
||||
isWoocommerceLogout = a.href.match(/\?elementor_wc_logout=/),
|
||||
isWoocommerceTab = a.parentElement?.classList.contains('woocommerce-MyAccount-navigation-link');
|
||||
return isAddToCart || isRemoveFromCart || isRestoreToCart || isWoocommercePagination || isWoocommerceLogout || isWoocommerceTab;
|
||||
},
|
||||
// Custom regex filter from attributes.
|
||||
isExcluded: (a, exclude) => a.href.match(new RegExp(exclude))
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/page-transitions/assets/js/frontend/components/page-transition/page-transition.js":
|
||||
/*!****************************************************************************************************!*\
|
||||
!*** ../modules/page-transitions/assets/js/frontend/components/page-transition/page-transition.js ***!
|
||||
\****************************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = exports.PageTransition = void 0;
|
||||
var _pageTransitionComponent = _interopRequireDefault(__webpack_require__(/*! ./page-transition.component.scss */ "../modules/page-transitions/assets/js/frontend/components/page-transition/page-transition.component.scss"));
|
||||
var _filters = _interopRequireDefault(__webpack_require__(/*! ./filters */ "../modules/page-transitions/assets/js/frontend/components/page-transition/filters.js"));
|
||||
class PageTransition extends HTMLElement {
|
||||
/**
|
||||
* Initialize the Page Transitions element.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
constructor() {
|
||||
super();
|
||||
this.classes = this.getClasses();
|
||||
this.elements = this.getElements();
|
||||
this.bindEvents();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of classes that are used in the code.
|
||||
*
|
||||
* @return {Object} - List of classes.
|
||||
*/
|
||||
getClasses() {
|
||||
return {
|
||||
preloader: 'e-page-transition--preloader',
|
||||
entering: 'e-page-transition--entering',
|
||||
exiting: 'e-page-transition--exiting',
|
||||
entered: 'e-page-transition--entered',
|
||||
preview: 'e-page-transition--preview'
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Page Transition CSS.
|
||||
*
|
||||
* @return {string} - CSS code.
|
||||
*/
|
||||
getStyle() {
|
||||
return `<style>${_pageTransitionComponent.default.toString()}</style>`;
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of attributes to observe for changes.
|
||||
*
|
||||
* @return {string[]} - Attributes to observe.
|
||||
*/
|
||||
static get observedAttributes() {
|
||||
return ['preloader-type', 'preloader-icon', 'preloader-image-url', 'preloader-animation-type', 'disabled'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Page Transitions elements.
|
||||
*
|
||||
* @return {Object} - Elements.
|
||||
*/
|
||||
getElements() {
|
||||
const triggers = this.getAttribute('triggers'),
|
||||
selector = triggers || 'a:not( [data-elementor-open-lightbox="yes"] )';
|
||||
return {
|
||||
links: document.querySelectorAll(selector)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if a link should trigger a Page Transition effect.
|
||||
*
|
||||
* @param {HTMLAnchorElement} a - The anchor element to check.
|
||||
* @return {boolean} - Whether the given link should activate the Page Transition.
|
||||
*/
|
||||
shouldPageTriggerTransition(a) {
|
||||
return Object.values(_filters.default).every(shouldDisable => !shouldDisable(a, this.getAttribute('exclude')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide the loader on page show.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
onPageShow() {
|
||||
// To disable animation on back / forward click.
|
||||
if (this.classList.contains(this.classes.exiting)) {
|
||||
this.classList.add(this.classes.entered);
|
||||
this.classList.remove(this.classes.exiting);
|
||||
}
|
||||
|
||||
// Animate the loader on page load.
|
||||
this.animateState('entering').then(() => {
|
||||
this.classList.add(this.classes.entered);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger the Page Transition on link click.
|
||||
*
|
||||
* @param {MouseEvent} e - The click Event.
|
||||
* @return {void}
|
||||
*/
|
||||
onLinkClick(e) {
|
||||
if (!this.shouldPageTriggerTransition(e.currentTarget)) {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
const href = e.currentTarget.href;
|
||||
this.classList.remove(this.classes.entered);
|
||||
this.animateState('exiting', this.getPreloaderDelay()).then(() => {
|
||||
this.classList.add(this.classes.exiting);
|
||||
|
||||
// Redirect the user to the clicked href only after the Page Transition has entered.
|
||||
location.href = href;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Prerender a webpage using `rel=prerender`.
|
||||
*
|
||||
* @param {string} href
|
||||
* @return {void}
|
||||
*/
|
||||
prerender(href) {
|
||||
if (document.querySelector(`link[href="${href}"]`)) {
|
||||
return;
|
||||
}
|
||||
const link = document.createElement('link');
|
||||
link.setAttribute('rel', 'prerender');
|
||||
link.setAttribute('href', href);
|
||||
document.head.appendChild(link);
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger a `prerender` on link mouse enter.
|
||||
*
|
||||
* @param {MouseEvent} e
|
||||
* @return {void}
|
||||
*/
|
||||
onLinkMouseEnter(e) {
|
||||
if (!this.shouldPageTriggerTransition(e.currentTarget)) {
|
||||
return;
|
||||
}
|
||||
this.prerender(e.currentTarget.href);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind events to the window & links.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
bindEvents() {
|
||||
window.addEventListener('pageshow', this.onPageShow.bind(this));
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
this.elements = this.getElements();
|
||||
this.elements.links.forEach(a => {
|
||||
a.addEventListener('click', this.onLinkClick.bind(this));
|
||||
a.addEventListener('mouseenter', this.onLinkMouseEnter.bind(this));
|
||||
a.addEventListener('touchstart', this.onLinkMouseEnter.bind(this));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Escape HTML special chars to prevent XSS.
|
||||
*
|
||||
* @param {string} str - String to escape.
|
||||
*
|
||||
* @return {string} escaped string
|
||||
*/
|
||||
escapeHTML(str) {
|
||||
const specialChars = {
|
||||
'&': '&',
|
||||
'<': '<',
|
||||
'>': '>',
|
||||
"'": ''',
|
||||
'"': '"'
|
||||
};
|
||||
return str.replace(/[&<>'"]/g, tag => specialChars[tag] || tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve an icon loader HTML markup.
|
||||
*
|
||||
* @return {string} - HTML markup.
|
||||
*/
|
||||
getIconLoader() {
|
||||
const icon = this.getAttribute('preloader-icon') || '';
|
||||
return `
|
||||
<i class="${this.escapeHTML(icon)} ${this.classes.preloader}"></i>
|
||||
`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve an image loader HTML markup.
|
||||
*
|
||||
* @return {string} - HTML markup.
|
||||
*/
|
||||
getImageLoader() {
|
||||
const url = this.getAttribute('preloader-image-url') || '';
|
||||
return `
|
||||
<img class="${this.classes.preloader}" src="${this.escapeHTML(url)}" />
|
||||
`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve a custom loader HTML markup.
|
||||
*
|
||||
* @return {string} - HTML markup.
|
||||
*/
|
||||
getAnimationLoader() {
|
||||
const type = this.getAttribute('preloader-animation-type');
|
||||
if (!type) {
|
||||
return '';
|
||||
}
|
||||
return `
|
||||
<e-preloader type="${type}"></e-preloader>
|
||||
`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the Page Transition element.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
render() {
|
||||
// Don't render when the Page Transition is disabled.
|
||||
if (this.hasAttribute('disabled')) {
|
||||
this.innerHTML = '';
|
||||
return;
|
||||
}
|
||||
const loaderType = this.getAttribute('preloader-type');
|
||||
switch (loaderType) {
|
||||
case 'icon':
|
||||
this.innerHTML = this.getIconLoader();
|
||||
break;
|
||||
case 'image':
|
||||
this.innerHTML = this.getImageLoader();
|
||||
break;
|
||||
case 'animation':
|
||||
this.innerHTML = this.getAnimationLoader();
|
||||
break;
|
||||
default:
|
||||
this.innerHTML = '';
|
||||
break;
|
||||
}
|
||||
this.innerHTML += this.getStyle();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a CSS variable value from the current element's context.
|
||||
*
|
||||
* @param {string} variable - Variable name.
|
||||
* @param {string} prefix - Variable prefix, defaults to `e-page-transition`.
|
||||
* @return {string} - CSS variable value.
|
||||
*/
|
||||
getCssVar(variable, prefix = 'e-page-transition-') {
|
||||
return window.getComputedStyle(this).getPropertyValue(`--${prefix}${variable}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the animation duration as an integer in order to be used inside a `setTimeout`.
|
||||
*
|
||||
* Assumes that all of the timings are in `ms`.
|
||||
*
|
||||
* @return {number} - Animation duration.
|
||||
*/
|
||||
getAnimationDuration() {
|
||||
return parseInt(this.getCssVar('animation-duration')) || 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the preloader delay.
|
||||
*
|
||||
* Assumes that all of the timings are in `ms`.
|
||||
*
|
||||
* @return {number} - Preloader delay.
|
||||
*/
|
||||
getPreloaderDelay() {
|
||||
return parseInt(this.getCssVar('delay', 'e-preloader-')) || 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the animate sequence of the Page Transition (enter && exit).
|
||||
*
|
||||
* @return {Promise} - Animation sequence Promise.
|
||||
*/
|
||||
animate() {
|
||||
// Don't animate if there is already an animation in progress.
|
||||
if (this.isAnimating) {
|
||||
return new Promise((resolve, reject) => {
|
||||
reject('Animation is already in progress.');
|
||||
});
|
||||
}
|
||||
this.isAnimating = true;
|
||||
|
||||
// Delay the exit animation so the user will be able to see the loader for a second.
|
||||
const delay = this.getPreloaderDelay() + 1500;
|
||||
this.classList.remove(this.classes.entered);
|
||||
return new Promise(resolve => {
|
||||
// Defer to make sure that the `entered` class is fully removed before animating.
|
||||
// Return a Promise for animations chaining.
|
||||
setTimeout(() => {
|
||||
this.animateState('exiting', delay).then(() => {
|
||||
this.animateState('entering').then(() => {
|
||||
this.classList.add(this.classes.entered);
|
||||
this.isAnimating = false;
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Animate a state of the Page Transition (enter || exit).
|
||||
*
|
||||
* @param {('entering'|'exiting')} state - The state name to animate.
|
||||
* @param {number} delay - Delay (in ms) before resolving the Promise.
|
||||
* @return {Promise} - Animation sequence Promise.
|
||||
*/
|
||||
animateState(state, delay = 0) {
|
||||
const className = this.classes?.[state];
|
||||
if (!className) {
|
||||
return new Promise((resolve, reject) => {
|
||||
reject(state);
|
||||
});
|
||||
}
|
||||
|
||||
// Remove and add the class again to force the animation, since it's using `animation-fill-mode: forwards`.
|
||||
this.classList.remove(className);
|
||||
this.classList.add(className);
|
||||
|
||||
// Return a Promise for animations chaining.
|
||||
const animationDuration = this.getAnimationDuration();
|
||||
return new Promise(resolve => {
|
||||
setTimeout(() => {
|
||||
this.classList.remove(className);
|
||||
resolve(state);
|
||||
}, animationDuration + delay);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen to attribute changes and re-render the element.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
attributeChangedCallback() {
|
||||
this.render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the element when attached to the document.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
connectedCallback() {
|
||||
this.render();
|
||||
}
|
||||
}
|
||||
exports.PageTransition = PageTransition;
|
||||
var _default = exports["default"] = PageTransition;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/page-transitions/assets/js/frontend/components/preloader/preloader.js":
|
||||
/*!****************************************************************************************!*\
|
||||
!*** ../modules/page-transitions/assets/js/frontend/components/preloader/preloader.js ***!
|
||||
\****************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = exports.Preloader = void 0;
|
||||
var _preloaderComponent = _interopRequireDefault(__webpack_require__(/*! ./preloader.component.scss */ "../modules/page-transitions/assets/js/frontend/components/preloader/preloader.component.scss"));
|
||||
class Preloader extends HTMLElement {
|
||||
/**
|
||||
* A list of attributes to observe for changes.
|
||||
*
|
||||
* @return {string[]} - Attributes to observe.
|
||||
*/
|
||||
static get observedAttributes() {
|
||||
return ['type'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen to attribute changes and re-render the element.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
attributeChangedCallback() {
|
||||
this.render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Preloader CSS.
|
||||
*
|
||||
* @return {string} - CSS code.
|
||||
*/
|
||||
getStyle() {
|
||||
return `<style>${_preloaderComponent.default.toString()}</style>`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the Preloader element.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
render() {
|
||||
const type = this.getAttribute('type'),
|
||||
dotsTypes = ['bouncing-dots', 'pulsing-dots'];
|
||||
this.innerHTML = '';
|
||||
if (!type) {
|
||||
return;
|
||||
}
|
||||
if (dotsTypes.includes(type)) {
|
||||
this.innerHTML += `
|
||||
<i></i>
|
||||
<i></i>
|
||||
<i></i>
|
||||
<i></i>
|
||||
`;
|
||||
}
|
||||
this.innerHTML += this.getStyle();
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the element when attached to the document.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
connectedCallback() {
|
||||
this.render();
|
||||
}
|
||||
}
|
||||
exports.Preloader = Preloader;
|
||||
var _default = exports["default"] = Preloader;
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/page-transitions/assets/js/frontend/components/page-transition/page-transition.component.scss":
|
||||
/*!****************************************************************************************************************!*\
|
||||
!*** ../modules/page-transitions/assets/js/frontend/components/page-transition/page-transition.component.scss ***!
|
||||
\****************************************************************************************************************/
|
||||
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../../../node_modules/css-loader/dist/runtime/api.js */ "../node_modules/css-loader/dist/runtime/api.js");
|
||||
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
|
||||
// Imports
|
||||
|
||||
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
|
||||
// Module
|
||||
___CSS_LOADER_EXPORT___.push([module.id, "e-page-transition{--preloader-fade-duration: .5s;--preloader-delay: calc( var( --e-page-transition-animation-duration, 0s ) + var( --e-preloader-delay, 0s ) );--page-transition-delay: var( --preloader-fade-duration );position:fixed;inset:0;display:grid;place-items:center;z-index:10000;background:#fff;animation-fill-mode:both;animation-duration:var(--e-page-transition-animation-duration)}e-page-transition[disabled]{display:none}e-page-transition e-preloader,e-page-transition .e-page-transition--preloader{opacity:0}e-page-transition .e-page-transition--preloader{position:absolute;font-size:var(--e-preloader-size);color:var(--e-preloader-color);fill:var(--e-preloader-color);width:var(--e-preloader-width);max-width:var(--e-preloader-max-width);transform:rotate(var(--e-preloader-rotate, 0deg));animation-name:var(--e-preloader-animation);animation-duration:var(--e-preloader-animation-duration, 1000ms);animation-iteration-count:infinite;animation-timing-function:linear}e-page-transition svg.e-page-transition--preloader{width:var(--e-preloader-size)}.e-page-transition--entering{animation-name:var(--e-page-transition-entrance-animation);animation-delay:var(--preloader-fade-duration, 0s)}.e-page-transition--entering e-preloader,.e-page-transition--entering .e-page-transition--preloader{animation:var(--e-preloader-animation, none) var(--e-preloader-animation-duration, 0s) linear infinite,e-page-transition-fade-out var(--preloader-fade-duration) both;transition:none}.e-page-transition--exiting{animation-name:var(--e-page-transition-exit-animation)}.e-page-transition--exiting e-preloader,.e-page-transition--exiting .e-page-transition--preloader{opacity:var(--e-preloader-opacity, 1);transition:var(--preloader-fade-duration) all;transition-delay:var(--preloader-delay, 0s)}.e-page-transition--entered:not(.e-page-transition--preview){display:none}.e-page-transition--preview{animation-fill-mode:initial}.e-page-transition--preview.e-page-transition--entered e-preloader,.e-page-transition--preview.e-page-transition--entered .e-page-transition--preloader{opacity:var(--e-preloader-opacity, 1)}@media(prefers-reduced-motion: reduce){e-page-transition{display:none}}@keyframes e-page-transition-fade-in{from{opacity:0}to{opacity:1}}@keyframes e-page-transition-fade-in-down{from{opacity:0;transform:translate3d(0, -100%, 0)}to{opacity:1;transform:none}}@keyframes e-page-transition-fade-in-left{from{opacity:0;transform:translate3d(-100%, 0, 0)}to{opacity:1;transform:none}}@keyframes e-page-transition-fade-in-right{from{opacity:0;transform:translate3d(100%, 0, 0)}to{opacity:1;transform:none}}@keyframes e-page-transition-fade-in-up{from{opacity:0;transform:translate3d(0, 100%, 0)}to{opacity:1;transform:none}}@keyframes e-page-transition-zoom-in{from{opacity:0;transform:scale3d(0.3, 0.3, 0.3)}50%{opacity:1}}@keyframes e-page-transition-slide-in-down{from{transform:translate3d(0, -100%, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes e-page-transition-slide-in-left{from{transform:translate3d(-100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes e-page-transition-slide-in-right{from{transform:translate3d(100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes e-page-transition-slide-in-up{from{transform:translate3d(0, 100%, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes e-page-transition-fade-out{from{opacity:1}to{opacity:0}}@keyframes e-page-transition-fade-out-up{from{opacity:1;transform:none}to{opacity:0;transform:translate3d(0, -100%, 0)}}@keyframes e-page-transition-fade-out-left{from{opacity:1;transform:none}to{opacity:0;transform:translate3d(-100%, 0, 0)}}@keyframes e-page-transition-fade-out-right{from{opacity:1;transform:none}to{opacity:0;transform:translate3d(100%, 0, 0)}}@keyframes e-page-transition-fade-out-down{from{opacity:1;transform:none}to{opacity:0;transform:translate3d(0, 100%, 0)}}@keyframes e-page-transition-slide-out-up{from{transform:translate3d(0, 0, 0)}to{transform:translate3d(0, -100%, 0);visibility:visible}}@keyframes e-page-transition-slide-out-left{from{transform:translate3d(0, 0, 0)}to{transform:translate3d(-100%, 0, 0);visibility:visible}}@keyframes e-page-transition-slide-out-right{from{transform:translate3d(0, 0, 0)}to{transform:translate3d(100%, 0, 0);visibility:visible}}@keyframes e-page-transition-slide-out-down{from{transform:translate3d(0, 0, 0)}to{transform:translate3d(0, 100%, 0);visibility:visible}}@keyframes e-page-transition-zoom-out{from{opacity:1}50%{opacity:0;transform:scale3d(0.3, 0.3, 0.3)}}", ""]);
|
||||
// Exports
|
||||
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../modules/page-transitions/assets/js/frontend/components/preloader/preloader.component.scss":
|
||||
/*!****************************************************************************************************!*\
|
||||
!*** ../modules/page-transitions/assets/js/frontend/components/preloader/preloader.component.scss ***!
|
||||
\****************************************************************************************************/
|
||||
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../../../node_modules/css-loader/dist/runtime/api.js */ "../node_modules/css-loader/dist/runtime/api.js");
|
||||
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
|
||||
// Imports
|
||||
|
||||
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
|
||||
// Module
|
||||
___CSS_LOADER_EXPORT___.push([module.id, "e-preloader{--default-duartion: 1000ms;--duration: var( --e-preloader-animation-duration, var( --default-duration ) );display:block;font-size:var(--e-preloader-size)}e-preloader[type=circle],e-preloader[type=circle-dashed],e-preloader[type=spinners]{--e-preloader-animation: e-preloader-spin;height:1em;width:1em;border:.1em solid var(--e-preloader-color);border-top-color:rgba(0,0,0,0);border-radius:100%;animation:var(--duration) var(--e-preloader-animation) linear infinite}e-preloader[type=circle-dashed]{border:.1em solid rgba(255,255,255,.3);border-top-color:var(--e-preloader-color)}e-preloader[type=spinners]{border-bottom-color:rgba(0,0,0,0)}e-preloader[type=bouncing-dots],e-preloader[type=pulsing-dots]{display:flex;gap:1em}e-preloader[type=bouncing-dots] i,e-preloader[type=pulsing-dots] i{height:1em;width:1em;border-radius:100%;background-color:var(--e-preloader-color)}e-preloader[type=bouncing-dots] i:nth-child(2),e-preloader[type=pulsing-dots] i:nth-child(2){animation-delay:var(--delay)}e-preloader[type=bouncing-dots] i:nth-child(3),e-preloader[type=pulsing-dots] i:nth-child(3){animation-delay:calc(var(--delay)*2)}e-preloader[type=bouncing-dots] i:nth-child(4),e-preloader[type=pulsing-dots] i:nth-child(4){animation-delay:calc(var(--delay)*3)}e-preloader[type=bouncing-dots] i{--delay: calc( var( --duration ) / 10 );animation:var(--duration) e-preloader-bounce linear infinite}e-preloader[type=pulsing-dots] i{--delay: calc( var( --duration ) / 6 );animation:var(--duration) e-preloader-pulsing-dots linear infinite}e-preloader[type=pulse]{height:1em;width:1em;position:relative}e-preloader[type=pulse]::before,e-preloader[type=pulse]::after{content:\"\";position:absolute;inset:0;border:.05em solid var(--e-preloader-color);border-radius:100%;animation:1.2s e-preloader-pulse infinite both ease-out}e-preloader[type=pulse]::after{animation-delay:.6s}e-preloader[type=overlap]{height:1em;width:1em;position:relative}e-preloader[type=overlap]::before,e-preloader[type=overlap]::after{content:\"\";inset:0;position:absolute;background:var(--e-preloader-color);border-radius:100%;opacity:.5;animation:2s e-preloader-overlap infinite both ease-in-out}e-preloader[type=overlap]::after{animation-delay:-1s;animation-direction:reverse}e-preloader[type=nested-spinners],e-preloader[type=opposing-nested-spinners],e-preloader[type=opposing-nested-rings]{height:1em;width:1em;position:relative}e-preloader[type=nested-spinners]::before,e-preloader[type=nested-spinners]::after,e-preloader[type=opposing-nested-spinners]::before,e-preloader[type=opposing-nested-spinners]::after,e-preloader[type=opposing-nested-rings]::before,e-preloader[type=opposing-nested-rings]::after{content:\"\";display:block;position:absolute;border-radius:100%;border:.1em solid var(--e-preloader-color);border-top-color:rgba(0,0,0,0);animation:var(--duration) e-preloader-spin linear infinite}e-preloader[type=nested-spinners]::before,e-preloader[type=opposing-nested-spinners]::before,e-preloader[type=opposing-nested-rings]::before{inset:-0.3em}e-preloader[type=nested-spinners]::after,e-preloader[type=opposing-nested-spinners]::after,e-preloader[type=opposing-nested-rings]::after{animation-duration:calc(var(--duration) - .2s);inset:0;opacity:.5}e-preloader[type=nested-spinners]::before,e-preloader[type=nested-spinners]::after,e-preloader[type=opposing-nested-spinners]::before,e-preloader[type=opposing-nested-spinners]::after{border-bottom-color:rgba(0,0,0,0)}e-preloader[type=opposing-nested-rings]::after,e-preloader[type=opposing-nested-spinners]::after{animation-direction:reverse}e-preloader[type=progress-bar],e-preloader[type=two-way-progress-bar],e-preloader[type=repeating-bar]{--e-preloader-animation: e-preloader-progress-bar;height:.05em;width:5em;max-width:50vw;background:var(--e-preloader-color);animation:var(--duration) var(--e-preloader-animation) linear infinite both}e-preloader[type=progress-bar]{transform-origin:0 50%}e-preloader[type=repeating-bar]{--e-preloader-animation: e-preloader-repeating-bar}@media(prefers-reduced-motion: reduce){e-preloader{display:none}}@keyframes e-preloader-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes e-preloader-bounce{0%,40%,100%{transform:translateY(0)}20%{transform:translateY(-80%)}}@keyframes e-preloader-pulsing-dots{0%,40%,100%{transform:scale(1)}20%{transform:scale(1.5)}}@keyframes e-preloader-pulse{from{transform:scale(0);opacity:1}to{transform:scale(1);opacity:0}}@keyframes e-preloader-overlap{0%,100%{transform:scale(0.2)}50%{transform:scale(1)}}@keyframes e-preloader-progress-bar{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}@keyframes e-preloader-repeating-bar{0%{transform:scaleX(0);transform-origin:0 50%}49%{transform-origin:0 50%}50%{transform:scaleX(1);transform-origin:100% 50%}100%{transform:scaleX(0);transform-origin:100% 50%}}", ""]);
|
||||
// Exports
|
||||
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../node_modules/css-loader/dist/runtime/api.js":
|
||||
/*!******************************************************!*\
|
||||
!*** ../node_modules/css-loader/dist/runtime/api.js ***!
|
||||
\******************************************************/
|
||||
/***/ ((module) => {
|
||||
|
||||
"use strict";
|
||||
|
||||
|
||||
/*
|
||||
MIT License http://www.opensource.org/licenses/mit-license.php
|
||||
Author Tobias Koppers @sokra
|
||||
*/
|
||||
// css base code, injected by the css-loader
|
||||
// eslint-disable-next-line func-names
|
||||
module.exports = function (cssWithMappingToString) {
|
||||
var list = []; // return the list of modules as css string
|
||||
|
||||
list.toString = function toString() {
|
||||
return this.map(function (item) {
|
||||
var content = cssWithMappingToString(item);
|
||||
|
||||
if (item[2]) {
|
||||
return "@media ".concat(item[2], " {").concat(content, "}");
|
||||
}
|
||||
|
||||
return content;
|
||||
}).join("");
|
||||
}; // import a list of modules into the list
|
||||
// eslint-disable-next-line func-names
|
||||
|
||||
|
||||
list.i = function (modules, mediaQuery, dedupe) {
|
||||
if (typeof modules === "string") {
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
modules = [[null, modules, ""]];
|
||||
}
|
||||
|
||||
var alreadyImportedModules = {};
|
||||
|
||||
if (dedupe) {
|
||||
for (var i = 0; i < this.length; i++) {
|
||||
// eslint-disable-next-line prefer-destructuring
|
||||
var id = this[i][0];
|
||||
|
||||
if (id != null) {
|
||||
alreadyImportedModules[id] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var _i = 0; _i < modules.length; _i++) {
|
||||
var item = [].concat(modules[_i]);
|
||||
|
||||
if (dedupe && alreadyImportedModules[item[0]]) {
|
||||
// eslint-disable-next-line no-continue
|
||||
continue;
|
||||
}
|
||||
|
||||
if (mediaQuery) {
|
||||
if (!item[2]) {
|
||||
item[2] = mediaQuery;
|
||||
} else {
|
||||
item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
|
||||
}
|
||||
}
|
||||
|
||||
list.push(item);
|
||||
}
|
||||
};
|
||||
|
||||
return list;
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js":
|
||||
/*!***********************************************************************!*\
|
||||
!*** ../node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!
|
||||
\***********************************************************************/
|
||||
/***/ ((module) => {
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
"default": obj
|
||||
};
|
||||
}
|
||||
module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ id: moduleId,
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/compat get default export */
|
||||
/******/ (() => {
|
||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||
/******/ __webpack_require__.n = (module) => {
|
||||
/******/ var getter = module && module.__esModule ?
|
||||
/******/ () => (module['default']) :
|
||||
/******/ () => (module);
|
||||
/******/ __webpack_require__.d(getter, { a: getter });
|
||||
/******/ return getter;
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ (() => {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = (exports, definition) => {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/make namespace object */
|
||||
/******/ (() => {
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = (exports) => {
|
||||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||
/******/ }
|
||||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
|
||||
(() => {
|
||||
"use strict";
|
||||
var exports = __webpack_exports__;
|
||||
/*!******************************************************************!*\
|
||||
!*** ../modules/page-transitions/assets/js/frontend/frontend.js ***!
|
||||
\******************************************************************/
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
var _components = __webpack_require__(/*! ./components */ "../modules/page-transitions/assets/js/frontend/components/index.js");
|
||||
class PageTransitionsFrontend {
|
||||
/**
|
||||
* Initialize the module.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
constructor() {
|
||||
customElements.define('e-preloader', _components.Preloader);
|
||||
customElements.define('e-page-transition', _components.PageTransition);
|
||||
}
|
||||
}
|
||||
exports["default"] = PageTransitionsFrontend;
|
||||
new PageTransitionsFrontend();
|
||||
})();
|
||||
|
||||
/******/ })()
|
||||
;
|
||||
//# sourceMappingURL=page-transitions.js.map
|
||||
2
wp-content/plugins/elementor-pro/assets/js/page-transitions.min.js
vendored
Normal file
2
wp-content/plugins/elementor-pro/assets/js/page-transitions.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,51 @@
|
||||
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
||||
"use strict";
|
||||
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["paypal-button"],{
|
||||
|
||||
/***/ "../modules/payments/assets/js/frontend/handlers/paypal-button.js":
|
||||
/*!************************************************************************!*\
|
||||
!*** ../modules/payments/assets/js/frontend/handlers/paypal-button.js ***!
|
||||
\************************************************************************/
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = void 0;
|
||||
class PayPalHandler extends elementorModules.frontend.handlers.Base {
|
||||
getDefaultSettings() {
|
||||
return {
|
||||
selectors: {
|
||||
button: '.elementor-button.elementor-paypal-legacy',
|
||||
errors: '.elementor-message-danger'
|
||||
}
|
||||
};
|
||||
}
|
||||
getDefaultElements() {
|
||||
const settings = this.getSettings();
|
||||
return {
|
||||
wrapper: this.$element[0],
|
||||
button: this.$element[0].querySelector(settings.selectors.button),
|
||||
errors: this.$element[0].querySelectorAll(settings.selectors.errors)
|
||||
};
|
||||
}
|
||||
handleClick(event) {
|
||||
if (0 < this.elements.errors.length) {
|
||||
event.preventDefault();
|
||||
this.elements.errors.forEach(error => {
|
||||
error.classList.remove('elementor-hidden');
|
||||
});
|
||||
}
|
||||
}
|
||||
bindEvents() {
|
||||
this.elements.button.addEventListener('click', this.handleClick.bind(this));
|
||||
}
|
||||
}
|
||||
exports["default"] = PayPalHandler;
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=paypal-button.3028ea98fc2e17fdfe8f.bundle.js.map
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user