0byt3m1n1
Path:
/
data
/
49
/
4
/
11
/
84
/
4826899
/
user
/
5715128
/
htdocs
/
wp-content
/
plugins
/
elementor
/
assets
/
js
/
[
Home
]
File: frontend.js
/*! elementor - v2.5.11 - 31-03-2019 */ /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // 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 }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 181); /******/ }) /************************************************************************/ /******/ ({ /***/ 1: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var userAgent = navigator.userAgent; exports.default = { webkit: -1 !== userAgent.indexOf('AppleWebKit'), firefox: -1 !== userAgent.indexOf('Firefox'), ie: /Trident|MSIE/.test(userAgent), edge: -1 !== userAgent.indexOf('Edge'), mac: -1 !== userAgent.indexOf('Macintosh') }; /***/ }), /***/ 13: /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Handles managing all events for whatever you plug it into. Priorities for hooks are based on lowest to highest in * that, lowest priority hooks are fired first. */ var EventManager = function EventManager() { var slice = Array.prototype.slice, MethodsAvailable; /** * Contains the hooks that get registered with this EventManager. The array for storage utilizes a "flat" * object literal such that looking up the hook utilizes the native object literal hash. */ var STORAGE = { actions: {}, filters: {} }; /** * Removes the specified hook by resetting the value of it. * * @param type Type of hook, either 'actions' or 'filters' * @param hook The hook (namespace.identifier) to remove * * @private */ function _removeHook(type, hook, callback, context) { var handlers, handler, i; if (!STORAGE[type][hook]) { return; } if (!callback) { STORAGE[type][hook] = []; } else { handlers = STORAGE[type][hook]; if (!context) { for (i = handlers.length; i--;) { if (handlers[i].callback === callback) { handlers.splice(i, 1); } } } else { for (i = handlers.length; i--;) { handler = handlers[i]; if (handler.callback === callback && handler.context === context) { handlers.splice(i, 1); } } } } } /** * Use an insert sort for keeping our hooks organized based on priority. This function is ridiculously faster * than bubble sort, etc: http://jsperf.com/javascript-sort * * @param hooks The custom array containing all of the appropriate hooks to perform an insert sort on. * @private */ function _hookInsertSort(hooks) { var tmpHook, j, prevHook; for (var i = 1, len = hooks.length; i < len; i++) { tmpHook = hooks[i]; j = i; while ((prevHook = hooks[j - 1]) && prevHook.priority > tmpHook.priority) { hooks[j] = hooks[j - 1]; --j; } hooks[j] = tmpHook; } return hooks; } /** * Adds the hook to the appropriate storage container * * @param type 'actions' or 'filters' * @param hook The hook (namespace.identifier) to add to our event manager * @param callback The function that will be called when the hook is executed. * @param priority The priority of this hook. Must be an integer. * @param [context] A value to be used for this * @private */ function _addHook(type, hook, callback, priority, context) { var hookObject = { callback: callback, priority: priority, context: context }; // Utilize 'prop itself' : http://jsperf.com/hasownproperty-vs-in-vs-undefined/19 var hooks = STORAGE[type][hook]; if (hooks) { // TEMP FIX BUG var hasSameCallback = false; jQuery.each(hooks, function () { if (this.callback === callback) { hasSameCallback = true; return false; } }); if (hasSameCallback) { return; } // END TEMP FIX BUG hooks.push(hookObject); hooks = _hookInsertSort(hooks); } else { hooks = [hookObject]; } STORAGE[type][hook] = hooks; } /** * Runs the specified hook. If it is an action, the value is not modified but if it is a filter, it is. * * @param type 'actions' or 'filters' * @param hook The hook ( namespace.identifier ) to be ran. * @param args Arguments to pass to the action/filter. If it's a filter, args is actually a single parameter. * @private */ function _runHook(type, hook, args) { var handlers = STORAGE[type][hook], i, len; if (!handlers) { return 'filters' === type ? args[0] : false; } len = handlers.length; if ('filters' === type) { for (i = 0; i < len; i++) { args[0] = handlers[i].callback.apply(handlers[i].context, args); } } else { for (i = 0; i < len; i++) { handlers[i].callback.apply(handlers[i].context, args); } } return 'filters' === type ? args[0] : true; } /** * Adds an action to the event manager. * * @param action Must contain namespace.identifier * @param callback Must be a valid callback function before this action is added * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook * @param [context] Supply a value to be used for this */ function addAction(action, callback, priority, context) { if ('string' === typeof action && 'function' === typeof callback) { priority = parseInt(priority || 10, 10); _addHook('actions', action, callback, priority, context); } return MethodsAvailable; } /** * Performs an action if it exists. You can pass as many arguments as you want to this function; the only rule is * that the first argument must always be the action. */ function doAction() /* action, arg1, arg2, ... */{ var args = slice.call(arguments); var action = args.shift(); if ('string' === typeof action) { _runHook('actions', action, args); } return MethodsAvailable; } /** * Removes the specified action if it contains a namespace.identifier & exists. * * @param action The action to remove * @param [callback] Callback function to remove */ function removeAction(action, callback) { if ('string' === typeof action) { _removeHook('actions', action, callback); } return MethodsAvailable; } /** * Adds a filter to the event manager. * * @param filter Must contain namespace.identifier * @param callback Must be a valid callback function before this action is added * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook * @param [context] Supply a value to be used for this */ function addFilter(filter, callback, priority, context) { if ('string' === typeof filter && 'function' === typeof callback) { priority = parseInt(priority || 10, 10); _addHook('filters', filter, callback, priority, context); } return MethodsAvailable; } /** * Performs a filter if it exists. You should only ever pass 1 argument to be filtered. The only rule is that * the first argument must always be the filter. */ function applyFilters() /* filter, filtered arg, arg2, ... */{ var args = slice.call(arguments); var filter = args.shift(); if ('string' === typeof filter) { return _runHook('filters', filter, args); } return MethodsAvailable; } /** * Removes the specified filter if it contains a namespace.identifier & exists. * * @param filter The action to remove * @param [callback] Callback function to remove */ function removeFilter(filter, callback) { if ('string' === typeof filter) { _removeHook('filters', filter, callback); } return MethodsAvailable; } /** * Maintain a reference to the object scope so our public methods never get confusing. */ MethodsAvailable = { removeFilter: removeFilter, applyFilters: applyFilters, addFilter: addFilter, removeAction: removeAction, doAction: doAction, addAction: addAction }; // return all of the publicly available methods return MethodsAvailable; }; module.exports = EventManager; /***/ }), /***/ 15: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var _class = function (_elementorModules$Mod) { _inherits(_class, _elementorModules$Mod); function _class() { _classCallCheck(this, _class); return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments)); } _createClass(_class, [{ key: 'get', value: function get(key, options) { options = options || {}; var storage = void 0; try { storage = options.session ? sessionStorage : localStorage; } catch (e) { return key ? undefined : {}; } var elementorStorage = storage.getItem('elementor'); if (elementorStorage) { elementorStorage = JSON.parse(elementorStorage); } else { elementorStorage = {}; } if (!elementorStorage.__expiration) { elementorStorage.__expiration = {}; } var expiration = elementorStorage.__expiration; var expirationToCheck = []; if (key) { if (expiration[key]) { expirationToCheck = [key]; } } else { expirationToCheck = Object.keys(expiration); } var entryExpired = false; expirationToCheck.forEach(function (expirationKey) { if (new Date(expiration[expirationKey]) < new Date()) { delete elementorStorage[expirationKey]; delete expiration[expirationKey]; entryExpired = true; } }); if (entryExpired) { this.save(elementorStorage, options.session); } if (key) { return elementorStorage[key]; } return elementorStorage; } }, { key: 'set', value: function set(key, value, options) { options = options || {}; var elementorStorage = this.get(null, options); elementorStorage[key] = value; if (options.lifetimeInSeconds) { var date = new Date(); date.setTime(date.getTime() + options.lifetimeInSeconds * 1000); elementorStorage.__expiration[key] = date.getTime(); } this.save(elementorStorage, options.session); } }, { key: 'save', value: function save(object, session) { var storage = void 0; try { storage = session ? sessionStorage : localStorage; } catch (e) { return; } storage.setItem('elementor', JSON.stringify(object)); } }]); return _class; }(elementorModules.Module); exports.default = _class; /***/ }), /***/ 16: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _environment = __webpack_require__(1); var _environment2 = _interopRequireDefault(_environment); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var HotKeys = function () { function HotKeys() { _classCallCheck(this, HotKeys); this.hotKeysHandlers = {}; } _createClass(HotKeys, [{ key: 'applyHotKey', value: function applyHotKey(event) { var handlers = this.hotKeysHandlers[event.which]; if (!handlers) { return; } jQuery.each(handlers, function (key, handler) { if (handler.isWorthHandling && !handler.isWorthHandling(event)) { return; } // Fix for some keyboard sources that consider alt key as ctrl key if (!handler.allowAltKey && event.altKey) { return; } event.preventDefault(); handler.handle(event); }); } }, { key: 'isControlEvent', value: function isControlEvent(event) { return event[_environment2.default.mac ? 'metaKey' : 'ctrlKey']; } }, { key: 'addHotKeyHandler', value: function addHotKeyHandler(keyCode, handlerName, handler) { if (!this.hotKeysHandlers[keyCode]) { this.hotKeysHandlers[keyCode] = {}; } this.hotKeysHandlers[keyCode][handlerName] = handler; } }, { key: 'bindListener', value: function bindListener($listener) { $listener.on('keydown', this.applyHotKey.bind(this)); } }]); return HotKeys; }(); exports.default = HotKeys; /***/ }), /***/ 17: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var _class = function (_elementorModules$Vie) { _inherits(_class, _elementorModules$Vie); function _class() { _classCallCheck(this, _class); return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments)); } _createClass(_class, [{ key: 'getDefaultSettings', value: function getDefaultSettings() { return { selectors: { elements: '.elementor-element', nestedDocumentElements: '.elementor .elementor-element' }, classes: { editMode: 'elementor-edit-mode' } }; } }, { key: 'getDefaultElements', value: function getDefaultElements() { var selectors = this.getSettings('selectors'); return { $elements: this.$element.find(selectors.elements).not(this.$element.find(selectors.nestedDocumentElements)) }; } }, { key: 'getDocumentSettings', value: function getDocumentSettings(setting) { var elementSettings = void 0; if (this.isEdit) { elementSettings = {}; var settings = elementor.settings.page.model; jQuery.each(settings.getActiveControls(), function (controlKey) { elementSettings[controlKey] = settings.attributes[controlKey]; }); } else { elementSettings = this.$element.data('elementor-settings') || {}; } return this.getItems(elementSettings, setting); } }, { key: 'runElementsHandlers', value: function runElementsHandlers() { this.elements.$elements.each(function (index, element) { return elementorFrontend.elementsHandler.runReadyTrigger(element); }); } }, { key: 'onInit', value: function onInit() { this.$element = this.getSettings('$element'); _get(_class.prototype.__proto__ || Object.getPrototypeOf(_class.prototype), 'onInit', this).call(this); this.isEdit = this.$element.hasClass(this.getSettings('classes.editMode')); if (this.isEdit) { elementor.settings.page.model.on('change', this.onSettingsChange.bind(this)); } else { this.runElementsHandlers(); } } }, { key: 'onSettingsChange', value: function onSettingsChange() {} }]); return _class; }(elementorModules.ViewModule); exports.default = _class; /***/ }), /***/ 18: /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = elementorModules.frontend.handlers.Base.extend({ $activeContent: null, getDefaultSettings: function getDefaultSettings() { return { selectors: { tabTitle: '.elementor-tab-title', tabContent: '.elementor-tab-content' }, classes: { active: 'elementor-active' }, showTabFn: 'show', hideTabFn: 'hide', toggleSelf: true, hidePrevious: true, autoExpand: true }; }, getDefaultElements: function getDefaultElements() { var selectors = this.getSettings('selectors'); return { $tabTitles: this.findElement(selectors.tabTitle), $tabContents: this.findElement(selectors.tabContent) }; }, activateDefaultTab: function activateDefaultTab() { var settings = this.getSettings(); if (!settings.autoExpand || 'editor' === settings.autoExpand && !this.isEdit) { return; } var defaultActiveTab = this.getEditSettings('activeItemIndex') || 1, originalToggleMethods = { showTabFn: settings.showTabFn, hideTabFn: settings.hideTabFn }; // Toggle tabs without animation to avoid jumping this.setSettings({ showTabFn: 'show', hideTabFn: 'hide' }); this.changeActiveTab(defaultActiveTab); // Return back original toggle effects this.setSettings(originalToggleMethods); }, deactivateActiveTab: function deactivateActiveTab(tabIndex) { var settings = this.getSettings(), activeClass = settings.classes.active, activeFilter = tabIndex ? '[data-tab="' + tabIndex + '"]' : '.' + activeClass, $activeTitle = this.elements.$tabTitles.filter(activeFilter), $activeContent = this.elements.$tabContents.filter(activeFilter); $activeTitle.add($activeContent).removeClass(activeClass); $activeContent[settings.hideTabFn](); }, activateTab: function activateTab(tabIndex) { var settings = this.getSettings(), activeClass = settings.classes.active, $requestedTitle = this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]'), $requestedContent = this.elements.$tabContents.filter('[data-tab="' + tabIndex + '"]'); $requestedTitle.add($requestedContent).addClass(activeClass); $requestedContent[settings.showTabFn](); }, isActiveTab: function isActiveTab(tabIndex) { return this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]').hasClass(this.getSettings('classes.active')); }, bindEvents: function bindEvents() { var _this = this; this.elements.$tabTitles.on({ keydown: function keydown(event) { if ('Enter' === event.key) { event.preventDefault(); _this.changeActiveTab(event.currentTarget.dataset.tab); } }, click: function click(event) { event.preventDefault(); _this.changeActiveTab(event.currentTarget.dataset.tab); } }); }, onInit: function onInit() { elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); this.activateDefaultTab(); }, onEditSettingsChange: function onEditSettingsChange(propertyName) { if ('activeItemIndex' === propertyName) { this.activateDefaultTab(); } }, changeActiveTab: function changeActiveTab(tabIndex) { var isActiveTab = this.isActiveTab(tabIndex), settings = this.getSettings(); if ((settings.toggleSelf || !isActiveTab) && settings.hidePrevious) { this.deactivateActiveTab(); } if (!settings.hidePrevious && isActiveTab) { this.deactivateActiveTab(tabIndex); } if (!isActiveTab) { this.activateTab(tabIndex); } } }); /***/ }), /***/ 181: /***/ (function(module, exports, __webpack_require__) { "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _documentsManager = __webpack_require__(182); var _documentsManager2 = _interopRequireDefault(_documentsManager); var _hotKeys = __webpack_require__(16); var _hotKeys2 = _interopRequireDefault(_hotKeys); var _storage = __webpack_require__(15); var _storage2 = _interopRequireDefault(_storage); var _environment = __webpack_require__(1); var _environment2 = _interopRequireDefault(_environment); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* global elementorFrontendConfig */ var EventManager = __webpack_require__(13), ElementsHandler = __webpack_require__(183), YouTubeModule = __webpack_require__(195), AnchorsModule = __webpack_require__(196), LightboxModule = __webpack_require__(197); var Frontend = function (_elementorModules$Vie) { _inherits(Frontend, _elementorModules$Vie); function Frontend() { var _ref; _classCallCheck(this, Frontend); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var _this = _possibleConstructorReturn(this, (_ref = Frontend.__proto__ || Object.getPrototypeOf(Frontend)).call.apply(_ref, [this].concat(args))); _this.config = elementorFrontendConfig; return _this; } // TODO: BC since 2.5.0 _createClass(Frontend, [{ key: 'getDefaultSettings', value: function getDefaultSettings() { return { selectors: { elementor: '.elementor', adminBar: '#wpadminbar' }, classes: { ie: 'elementor-msie' } }; } }, { key: 'getDefaultElements', value: function getDefaultElements() { var defaultElements = { window: window, $window: jQuery(window), $document: jQuery(document), $head: jQuery(document.head), $body: jQuery(document.body), $deviceMode: jQuery('<span>', { id: 'elementor-device-mode', class: 'elementor-screen-only' }) }; defaultElements.$body.append(defaultElements.$deviceMode); return defaultElements; } }, { key: 'bindEvents', value: function bindEvents() { var _this2 = this; this.elements.$window.on('resize', function () { return _this2.setDeviceModeData(); }); } /** * @deprecated 2.4.0 Use just `this.elements` instead */ }, { key: 'getElements', value: function getElements(elementName) { return this.getItems(this.elements, elementName); } /** * @deprecated 2.4.0 This method was never in use */ }, { key: 'getPageSettings', value: function getPageSettings(settingName) { var settingsObject = this.isEditMode() ? elementor.settings.page.model.attributes : this.config.settings.page; return this.getItems(settingsObject, settingName); } }, { key: 'getGeneralSettings', value: function getGeneralSettings(settingName) { var settingsObject = this.isEditMode() ? elementor.settings.general.model.attributes : this.config.settings.general; return this.getItems(settingsObject, settingName); } }, { key: 'getCurrentDeviceMode', value: function getCurrentDeviceMode() { return getComputedStyle(this.elements.$deviceMode[0], ':after').content.replace(/"/g, ''); } }, { key: 'getCurrentDeviceSetting', value: function getCurrentDeviceSetting(settings, settingKey) { var devices = ['desktop', 'tablet', 'mobile'], currentDeviceMode = elementorFrontend.getCurrentDeviceMode(); var currentDeviceIndex = devices.indexOf(currentDeviceMode); while (currentDeviceIndex > 0) { var currentDevice = devices[currentDeviceIndex], fullSettingKey = settingKey + '_' + currentDevice, deviceValue = settings[fullSettingKey]; if (deviceValue) { return deviceValue; } currentDeviceIndex--; } return settings[settingKey]; } }, { key: 'isEditMode', value: function isEditMode() { return this.config.environmentMode.edit; } }, { key: 'isWPPreviewMode', value: function isWPPreviewMode() { return this.config.environmentMode.wpPreview; } }, { key: 'initDialogsManager', value: function initDialogsManager() { var dialogsManager = void 0; this.getDialogsManager = function () { if (!dialogsManager) { dialogsManager = new DialogsManager.Instance(); } return dialogsManager; }; } }, { key: 'initHotKeys', value: function initHotKeys() { this.hotKeys = new _hotKeys2.default(); this.hotKeys.bindListener(this.elements.$window); } }, { key: 'initOnReadyComponents', value: function initOnReadyComponents() { this.utils = { youtube: new YouTubeModule(), anchors: new AnchorsModule(), lightbox: new LightboxModule() }; // TODO: BC since 2.4.0 this.modules = { StretchElement: elementorModules.frontend.tools.StretchElement, Masonry: elementorModules.utils.Masonry }; this.elementsHandler = new ElementsHandler(jQuery); this.documentsManager = new _documentsManager2.default(); this.trigger('components:init'); } }, { key: 'initOnReadyElements', value: function initOnReadyElements() { this.elements.$wpAdminBar = this.elements.$document.find(this.getSettings('selectors.adminBar')); } }, { key: 'addIeCompatibility', value: function addIeCompatibility() { var el = document.createElement('div'), supportsGrid = 'string' === typeof el.style.grid; if (!_environment2.default.ie && supportsGrid) { return; } this.elements.$body.addClass(this.getSettings('classes.ie')); var msieCss = '<link rel="stylesheet" id="elementor-frontend-css-msie" href="' + this.config.urls.assets + 'css/frontend-msie.min.css?' + this.config.version + '" type="text/css" />'; this.elements.$body.append(msieCss); } }, { key: 'setDeviceModeData', value: function setDeviceModeData() { this.elements.$body.attr('data-elementor-device-mode', this.getCurrentDeviceMode()); } }, { key: 'addListenerOnce', value: function addListenerOnce(listenerID, event, callback, to) { if (!to) { to = this.elements.$window; } if (!this.isEditMode()) { to.on(event, callback); return; } this.removeListeners(listenerID, event, to); if (to instanceof jQuery) { var eventNS = event + '.' + listenerID; to.on(eventNS, callback); } else { to.on(event, callback, listenerID); } } }, { key: 'removeListeners', value: function removeListeners(listenerID, event, callback, from) { if (!from) { from = this.elements.$window; } if (from instanceof jQuery) { var eventNS = event + '.' + listenerID; from.off(eventNS, callback); } else { from.off(event, callback, listenerID); } } // Based on underscore function }, { key: 'debounce', value: function debounce(func, wait) { var timeout = void 0; return function () { var context = this, args = arguments; var later = function later() { timeout = null; func.apply(context, args); }; var callNow = !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) { func.apply(context, args); } }; } }, { key: 'waypoint', value: function waypoint($element, callback, options) { var defaultOptions = { offset: '100%', triggerOnce: true }; options = jQuery.extend(defaultOptions, options); var correctCallback = function correctCallback() { var element = this.element || this, result = callback.apply(element, arguments); // If is Waypoint new API and is frontend if (options.triggerOnce && this.destroy) { this.destroy(); } return result; }; return $element.elementorWaypoint(correctCallback, options); } }, { key: 'muteMigrationTraces', value: function muteMigrationTraces() { jQuery.migrateMute = true; jQuery.migrateTrace = false; } }, { key: 'init', value: function init() { this.hooks = new EventManager(); this.storage = new _storage2.default(); this.addIeCompatibility(); this.setDeviceModeData(); this.initDialogsManager(); if (this.isEditMode()) { this.muteMigrationTraces(); } // Keep this line before `initOnReadyComponents` call this.elements.$window.trigger('elementor/frontend/init'); if (!this.isEditMode()) { this.initHotKeys(); } this.initOnReadyElements(); this.initOnReadyComponents(); } }, { key: 'Module', get: function get() { /*if ( this.isEditMode() ) { parent.elementorCommon.helpers.deprecatedMethod( 'elementorFrontend.Module', '2.5.0', 'elementorModules.frontend.handlers.Base' ); }*/ return elementorModules.frontend.handlers.Base; } }]); return Frontend; }(elementorModules.ViewModule); window.elementorFrontend = new Frontend(); if (!elementorFrontend.isEditMode()) { jQuery(function () { return elementorFrontend.init(); }); } /***/ }), /***/ 182: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _document = __webpack_require__(17); var _document2 = _interopRequireDefault(_document); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var _class = function (_elementorModules$Vie) { _inherits(_class, _elementorModules$Vie); function _class() { var _ref; _classCallCheck(this, _class); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var _this = _possibleConstructorReturn(this, (_ref = _class.__proto__ || Object.getPrototypeOf(_class)).call.apply(_ref, [this].concat(args))); _this.documents = {}; _this.initDocumentClasses(); _this.attachDocumentsClasses(); return _this; } _createClass(_class, [{ key: 'getDefaultSettings', value: function getDefaultSettings() { return { selectors: { document: '.elementor' } }; } }, { key: 'getDefaultElements', value: function getDefaultElements() { var selectors = this.getSettings('selectors'); return { $documents: jQuery(selectors.document) }; } }, { key: 'initDocumentClasses', value: function initDocumentClasses() { this.documentClasses = { base: _document2.default }; elementorFrontend.hooks.doAction('elementor/frontend/documents-manager/init-classes', this); } }, { key: 'addDocumentClass', value: function addDocumentClass(documentType, documentClass) { this.documentClasses[documentType] = documentClass; } }, { key: 'attachDocumentsClasses', value: function attachDocumentsClasses() { var _this2 = this; this.elements.$documents.each(function (index, document) { return _this2.attachDocumentClass(jQuery(document)); }); } }, { key: 'attachDocumentClass', value: function attachDocumentClass($document) { var documentData = $document.data(), documentID = documentData.elementorId, documentType = documentData.elementorType, DocumentClass = this.documentClasses[documentType] || this.documentClasses.base; this.documents[documentID] = new DocumentClass({ $element: $document, id: documentID }); } }]); return _class; }(elementorModules.ViewModule); exports.default = _class; /***/ }), /***/ 183: /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = function ($) { var self = this; // element-type.skin-type var handlers = { // Elements section: __webpack_require__(184), // Widgets 'accordion.default': __webpack_require__(185), 'alert.default': __webpack_require__(186), 'counter.default': __webpack_require__(187), 'progress.default': __webpack_require__(188), 'tabs.default': __webpack_require__(189), 'toggle.default': __webpack_require__(190), 'video.default': __webpack_require__(191), 'image-carousel.default': __webpack_require__(192), 'text-editor.default': __webpack_require__(193) }; var handlersInstances = {}; var addGlobalHandlers = function addGlobalHandlers() { elementorFrontend.hooks.addAction('frontend/element_ready/global', __webpack_require__(194)); }; var addElementsHandlers = function addElementsHandlers() { $.each(handlers, function (elementName, funcCallback) { elementorFrontend.hooks.addAction('frontend/element_ready/' + elementName, funcCallback); }); }; var init = function init() { self.initHandlers(); }; this.initHandlers = function () { addGlobalHandlers(); addElementsHandlers(); }; this.addHandler = function (HandlerClass, options) { var elementID = options.$element.data('model-cid'); var handlerID = void 0; // If element is in edit mode if (elementID) { handlerID = HandlerClass.prototype.getConstructorID(); if (!handlersInstances[elementID]) { handlersInstances[elementID] = {}; } var oldHandler = handlersInstances[elementID][handlerID]; if (oldHandler) { oldHandler.onDestroy(); } } var newHandler = new HandlerClass(options); if (elementID) { handlersInstances[elementID][handlerID] = newHandler; } }; this.getHandlers = function (handlerName) { if (handlerName) { return handlers[handlerName]; } return handlers; }; this.runReadyTrigger = function (scope) { // Initializing the `$scope` as frontend jQuery instance var $scope = jQuery(scope), elementType = $scope.attr('data-element_type'); if (!elementType) { return; } elementorFrontend.hooks.doAction('frontend/element_ready/global', $scope, $); elementorFrontend.hooks.doAction('frontend/element_ready/' + elementType, $scope, $); if ('widget' === elementType) { elementorFrontend.hooks.doAction('frontend/element_ready/' + $scope.attr('data-widget_type'), $scope, $); } }; init(); }; /***/ }), /***/ 184: /***/ (function(module, exports, __webpack_require__) { "use strict"; var BackgroundVideo = elementorModules.frontend.handlers.Base.extend({ player: null, isYTVideo: null, getDefaultSettings: function getDefaultSettings() { return { selectors: { backgroundVideoContainer: '.elementor-background-video-container', backgroundVideoEmbed: '.elementor-background-video-embed', backgroundVideoHosted: '.elementor-background-video-hosted' } }; }, getDefaultElements: function getDefaultElements() { var selectors = this.getSettings('selectors'), elements = { $backgroundVideoContainer: this.$element.find(selectors.backgroundVideoContainer) }; elements.$backgroundVideoEmbed = elements.$backgroundVideoContainer.children(selectors.backgroundVideoEmbed); elements.$backgroundVideoHosted = elements.$backgroundVideoContainer.children(selectors.backgroundVideoHosted); return elements; }, calcVideosSize: function calcVideosSize() { var containerWidth = this.elements.$backgroundVideoContainer.outerWidth(), containerHeight = this.elements.$backgroundVideoContainer.outerHeight(), aspectRatioSetting = '16:9', //TEMP aspectRatioArray = aspectRatioSetting.split(':'), aspectRatio = aspectRatioArray[0] / aspectRatioArray[1], ratioWidth = containerWidth / aspectRatio, ratioHeight = containerHeight * aspectRatio, isWidthFixed = containerWidth / containerHeight > aspectRatio; return { width: isWidthFixed ? containerWidth : ratioHeight, height: isWidthFixed ? ratioWidth : containerHeight }; }, changeVideoSize: function changeVideoSize() { var $video = this.isYTVideo ? jQuery(this.player.getIframe()) : this.elements.$backgroundVideoHosted, size = this.calcVideosSize(); $video.width(size.width).height(size.height); }, startVideoLoop: function startVideoLoop() { var self = this; // If the section has been removed if (!self.player.getIframe().contentWindow) { return; } var elementSettings = self.getElementSettings(), startPoint = elementSettings.background_video_start || 0, endPoint = elementSettings.background_video_end; self.player.seekTo(startPoint); if (endPoint) { var durationToEnd = endPoint - startPoint + 1; setTimeout(function () { self.startVideoLoop(); }, durationToEnd * 1000); } }, prepareYTVideo: function prepareYTVideo(YT, videoID) { var self = this, $backgroundVideoContainer = self.elements.$backgroundVideoContainer, elementSettings = self.getElementSettings(), startStateCode = YT.PlayerState.PLAYING; // Since version 67, Chrome doesn't fire the `PLAYING` state at start time if (window.chrome) { startStateCode = YT.PlayerState.UNSTARTED; } $backgroundVideoContainer.addClass('elementor-loading elementor-invisible'); self.player = new YT.Player(self.elements.$backgroundVideoEmbed[0], { videoId: videoID, events: { onReady: function onReady() { self.player.mute(); self.changeVideoSize(); self.startVideoLoop(); self.player.playVideo(); }, onStateChange: function onStateChange(event) { switch (event.data) { case startStateCode: $backgroundVideoContainer.removeClass('elementor-invisible elementor-loading'); break; case YT.PlayerState.ENDED: self.player.seekTo(elementSettings.background_video_start || 0); } } }, playerVars: { controls: 0, rel: 0 } }); elementorFrontend.elements.$window.on('resize', self.changeVideoSize); }, activate: function activate() { var self = this, videoLink = self.getElementSettings('background_video_link'), videoID = elementorFrontend.utils.youtube.getYoutubeIDFromURL(videoLink); self.isYTVideo = !!videoID; if (videoID) { elementorFrontend.utils.youtube.onYoutubeApiReady(function (YT) { setTimeout(function () { self.prepareYTVideo(YT, videoID); }, 1); }); } else { self.elements.$backgroundVideoHosted.attr('src', videoLink).one('canplay', self.changeVideoSize); } }, deactivate: function deactivate() { if (this.isYTVideo && this.player.getIframe()) { this.player.destroy(); } else { this.elements.$backgroundVideoHosted.removeAttr('src'); } }, run: function run() { var elementSettings = this.getElementSettings(); if ('video' === elementSettings.background_background && elementSettings.background_video_link) { this.activate(); } else { this.deactivate(); } }, onInit: function onInit() { elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); this.run(); }, onElementChange: function onElementChange(propertyName) { if ('background_background' === propertyName) { this.run(); } } }); var StretchedSection = elementorModules.frontend.handlers.Base.extend({ stretchElement: null, bindEvents: function bindEvents() { var handlerID = this.getUniqueHandlerID(); elementorFrontend.addListenerOnce(handlerID, 'resize', this.stretch); elementorFrontend.addListenerOnce(handlerID, 'sticky:stick', this.stretch, this.$element); elementorFrontend.addListenerOnce(handlerID, 'sticky:unstick', this.stretch, this.$element); }, unbindEvents: function unbindEvents() { elementorFrontend.removeListeners(this.getUniqueHandlerID(), 'resize', this.stretch); }, initStretch: function initStretch() { this.stretchElement = new elementorModules.frontend.tools.StretchElement({ element: this.$element, selectors: { container: this.getStretchContainer() } }); }, getStretchContainer: function getStretchContainer() { return elementorFrontend.getGeneralSettings('elementor_stretched_section_container') || window; }, stretch: function stretch() { if (!this.getElementSettings('stretch_section')) { return; } this.stretchElement.stretch(); }, onInit: function onInit() { elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); this.initStretch(); this.stretch(); }, onElementChange: function onElementChange(propertyName) { if ('stretch_section' === propertyName) { if (this.getElementSettings('stretch_section')) { this.stretch(); } else { this.stretchElement.reset(); } } }, onGeneralSettingsChange: function onGeneralSettingsChange(changed) { if ('elementor_stretched_section_container' in changed) { this.stretchElement.setSettings('selectors.container', this.getStretchContainer()); this.stretch(); } } }); var Shapes = elementorModules.frontend.handlers.Base.extend({ getDefaultSettings: function getDefaultSettings() { return { selectors: { container: '> .elementor-shape-%s' }, svgURL: elementorFrontend.config.urls.assets + 'shapes/' }; }, getDefaultElements: function getDefaultElements() { var elements = {}, selectors = this.getSettings('selectors'); elements.$topContainer = this.$element.find(selectors.container.replace('%s', 'top')); elements.$bottomContainer = this.$element.find(selectors.container.replace('%s', 'bottom')); return elements; }, getSvgURL: function getSvgURL(shapeType, fileName) { var svgURL = this.getSettings('svgURL') + fileName + '.svg'; if (elementor.config.additional_shapes && shapeType in elementor.config.additional_shapes) { svgURL = elementor.config.additional_shapes[shapeType]; } return svgURL; }, buildSVG: function buildSVG(side) { var self = this, baseSettingKey = 'shape_divider_' + side, shapeType = self.getElementSettings(baseSettingKey), $svgContainer = this.elements['$' + side + 'Container']; $svgContainer.attr('data-shape', shapeType); if (!shapeType) { return; } var fileName = shapeType; if (self.getElementSettings(baseSettingKey + '_negative')) { fileName += '-negative'; } var svgURL = self.getSvgURL(shapeType, fileName); jQuery.get(svgURL, function (data) { $svgContainer.empty().append(data.childNodes[0]); }); this.setNegative(side); }, setNegative: function setNegative(side) { this.elements['$' + side + 'Container'].attr('data-negative', !!this.getElementSettings('shape_divider_' + side + '_negative')); }, onInit: function onInit() { var self = this; elementorModules.frontend.handlers.Base.prototype.onInit.apply(self, arguments); ['top', 'bottom'].forEach(function (side) { if (self.getElementSettings('shape_divider_' + side)) { self.buildSVG(side); } }); }, onElementChange: function onElementChange(propertyName) { var shapeChange = propertyName.match(/^shape_divider_(top|bottom)$/); if (shapeChange) { this.buildSVG(shapeChange[1]); return; } var negativeChange = propertyName.match(/^shape_divider_(top|bottom)_negative$/); if (negativeChange) { this.buildSVG(negativeChange[1]); this.setNegative(negativeChange[1]); } } }); var HandlesPosition = elementorModules.frontend.handlers.Base.extend({ isFirst: function isFirst() { return this.$element.is('.elementor-edit-mode .elementor-top-section:first'); }, getOffset: function getOffset() { if ('body' === elementor.config.document.container) { return this.$element.offset().top; } var $container = jQuery(elementor.config.document.container); return this.$element.offset().top - $container.offset().top; }, setHandlesPosition: function setHandlesPosition() { var self = this; if (!self.isFirst()) { return; } var offset = self.getOffset(), $handlesElement = self.$element.find('> .elementor-element-overlay > .elementor-editor-section-settings'), insideHandleClass = 'elementor-section--handles-inside'; if (offset < 25) { self.$element.addClass(insideHandleClass); if (offset < -5) { $handlesElement.css('top', -offset); } else { $handlesElement.css('top', ''); } } else { self.$element.removeClass(insideHandleClass); } }, onInit: function onInit() { this.setHandlesPosition(); this.$element.on('mouseenter', this.setHandlesPosition); } }); module.exports = function ($scope) { if (elementorFrontend.isEditMode() || $scope.hasClass('elementor-section-stretched')) { elementorFrontend.elementsHandler.addHandler(StretchedSection, { $element: $scope }); } if (elementorFrontend.isEditMode()) { elementorFrontend.elementsHandler.addHandler(Shapes, { $element: $scope }); elementorFrontend.elementsHandler.addHandler(HandlesPosition, { $element: $scope }); } elementorFrontend.elementsHandler.addHandler(BackgroundVideo, { $element: $scope }); }; /***/ }), /***/ 185: /***/ (function(module, exports, __webpack_require__) { "use strict"; var TabsModule = __webpack_require__(18); module.exports = function ($scope) { elementorFrontend.elementsHandler.addHandler(TabsModule, { $element: $scope, showTabFn: 'slideDown', hideTabFn: 'slideUp' }); }; /***/ }), /***/ 186: /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = function ($scope, $) { $scope.find('.elementor-alert-dismiss').on('click', function () { $(this).parent().fadeOut(); }); }; /***/ }), /***/ 187: /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = function ($scope, $) { elementorFrontend.waypoint($scope.find('.elementor-counter-number'), function () { var $number = $(this), data = $number.data(); var decimalDigits = data.toValue.toString().match(/\.(.*)/); if (decimalDigits) { data.rounding = decimalDigits[1].length; } $number.numerator(data); }); }; /***/ }), /***/ 188: /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = function ($scope, $) { elementorFrontend.waypoint($scope.find('.elementor-progress-bar'), function () { var $progressbar = $(this); $progressbar.css('width', $progressbar.data('max') + '%'); }); }; /***/ }), /***/ 189: /***/ (function(module, exports, __webpack_require__) { "use strict"; var TabsModule = __webpack_require__(18); module.exports = function ($scope) { elementorFrontend.elementsHandler.addHandler(TabsModule, { $element: $scope, toggleSelf: false }); }; /***/ }), /***/ 190: /***/ (function(module, exports, __webpack_require__) { "use strict"; var TabsModule = __webpack_require__(18); module.exports = function ($scope) { elementorFrontend.elementsHandler.addHandler(TabsModule, { $element: $scope, showTabFn: 'slideDown', hideTabFn: 'slideUp', hidePrevious: false, autoExpand: 'editor' }); }; /***/ }), /***/ 191: /***/ (function(module, exports, __webpack_require__) { "use strict"; var VideoModule = elementorModules.frontend.handlers.Base.extend({ getDefaultSettings: function getDefaultSettings() { return { selectors: { imageOverlay: '.elementor-custom-embed-image-overlay', video: '.elementor-video', videoIframe: '.elementor-video-iframe' } }; }, getDefaultElements: function getDefaultElements() { var selectors = this.getSettings('selectors'); return { $imageOverlay: this.$element.find(selectors.imageOverlay), $video: this.$element.find(selectors.video), $videoIframe: this.$element.find(selectors.videoIframe) }; }, getLightBox: function getLightBox() { return elementorFrontend.utils.lightbox; }, handleVideo: function handleVideo() { if (!this.getElementSettings('lightbox')) { this.elements.$imageOverlay.remove(); this.playVideo(); } }, playVideo: function playVideo() { if (this.elements.$video.length) { this.elements.$video[0].play(); return; } var $videoIframe = this.elements.$videoIframe, lazyLoad = $videoIframe.data('lazy-load'); if (lazyLoad) { $videoIframe.attr('src', lazyLoad); } var newSourceUrl = $videoIframe[0].src.replace('&autoplay=0', ''); $videoIframe[0].src = newSourceUrl + '&autoplay=1'; }, animateVideo: function animateVideo() { this.getLightBox().setEntranceAnimation(this.getCurrentDeviceSetting('lightbox_content_animation')); }, handleAspectRatio: function handleAspectRatio() { this.getLightBox().setVideoAspectRatio(this.getElementSettings('aspect_ratio')); }, bindEvents: function bindEvents() { this.elements.$imageOverlay.on('click', this.handleVideo); }, onElementChange: function onElementChange(propertyName) { if (0 === propertyName.indexOf('lightbox_content_animation')) { this.animateVideo(); return; } var isLightBoxEnabled = this.getElementSettings('lightbox'); if ('lightbox' === propertyName && !isLightBoxEnabled) { this.getLightBox().getModal().hide(); return; } if ('aspect_ratio' === propertyName && isLightBoxEnabled) { this.handleAspectRatio(); } } }); module.exports = function ($scope) { elementorFrontend.elementsHandler.addHandler(VideoModule, { $element: $scope }); }; /***/ }), /***/ 192: /***/ (function(module, exports, __webpack_require__) { "use strict"; var ImageCarouselHandler = elementorModules.frontend.handlers.Base.extend({ getDefaultSettings: function getDefaultSettings() { return { selectors: { carousel: '.elementor-image-carousel' } }; }, getDefaultElements: function getDefaultElements() { var selectors = this.getSettings('selectors'); return { $carousel: this.$element.find(selectors.carousel) }; }, onInit: function onInit() { elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); var elementSettings = this.getElementSettings(), slidesToShow = +elementSettings.slides_to_show || 3, isSingleSlide = 1 === slidesToShow, defaultLGDevicesSlidesCount = isSingleSlide ? 1 : 2, breakpoints = elementorFrontend.config.breakpoints; var slickOptions = { slidesToShow: slidesToShow, autoplay: 'yes' === elementSettings.autoplay, autoplaySpeed: elementSettings.autoplay_speed, infinite: 'yes' === elementSettings.infinite, pauseOnHover: 'yes' === elementSettings.pause_on_hover, speed: elementSettings.speed, arrows: -1 !== ['arrows', 'both'].indexOf(elementSettings.navigation), dots: -1 !== ['dots', 'both'].indexOf(elementSettings.navigation), rtl: 'rtl' === elementSettings.direction, responsive: [{ breakpoint: breakpoints.lg, settings: { slidesToShow: +elementSettings.slides_to_show_tablet || defaultLGDevicesSlidesCount, slidesToScroll: +elementSettings.slides_to_scroll_tablet || defaultLGDevicesSlidesCount } }, { breakpoint: breakpoints.md, settings: { slidesToShow: +elementSettings.slides_to_show_mobile || 1, slidesToScroll: +elementSettings.slides_to_scroll_mobile || 1 } }] }; if (isSingleSlide) { slickOptions.fade = 'fade' === elementSettings.effect; } else { slickOptions.slidesToScroll = +elementSettings.slides_to_scroll || defaultLGDevicesSlidesCount; } this.elements.$carousel.slick(slickOptions); } }); module.exports = function ($scope) { elementorFrontend.elementsHandler.addHandler(ImageCarouselHandler, { $element: $scope }); }; /***/ }), /***/ 193: /***/ (function(module, exports, __webpack_require__) { "use strict"; var TextEditor = elementorModules.frontend.handlers.Base.extend({ dropCapLetter: '', getDefaultSettings: function getDefaultSettings() { return { selectors: { paragraph: 'p:first' }, classes: { dropCap: 'elementor-drop-cap', dropCapLetter: 'elementor-drop-cap-letter' } }; }, getDefaultElements: function getDefaultElements() { var selectors = this.getSettings('selectors'), classes = this.getSettings('classes'), $dropCap = jQuery('<span>', { class: classes.dropCap }), $dropCapLetter = jQuery('<span>', { class: classes.dropCapLetter }); $dropCap.append($dropCapLetter); return { $paragraph: this.$element.find(selectors.paragraph), $dropCap: $dropCap, $dropCapLetter: $dropCapLetter }; }, wrapDropCap: function wrapDropCap() { var isDropCapEnabled = this.getElementSettings('drop_cap'); if (!isDropCapEnabled) { // If there is an old drop cap inside the paragraph if (this.dropCapLetter) { this.elements.$dropCap.remove(); this.elements.$paragraph.prepend(this.dropCapLetter); this.dropCapLetter = ''; } return; } var $paragraph = this.elements.$paragraph; if (!$paragraph.length) { return; } var paragraphContent = $paragraph.html().replace(/ /g, ' '), firstLetterMatch = paragraphContent.match(/^ *([^ ] ?)/); if (!firstLetterMatch) { return; } var firstLetter = firstLetterMatch[1], trimmedFirstLetter = firstLetter.trim(); // Don't apply drop cap when the content starting with an HTML tag if ('<' === trimmedFirstLetter) { return; } this.dropCapLetter = firstLetter; this.elements.$dropCapLetter.text(trimmedFirstLetter); var restoredParagraphContent = paragraphContent.slice(firstLetter.length).replace(/^ */, function (match) { return new Array(match.length + 1).join(' '); }); $paragraph.html(restoredParagraphContent).prepend(this.elements.$dropCap); }, onInit: function onInit() { elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); this.wrapDropCap(); }, onElementChange: function onElementChange(propertyName) { if ('drop_cap' === propertyName) { this.wrapDropCap(); } } }); module.exports = function ($scope) { elementorFrontend.elementsHandler.addHandler(TextEditor, { $element: $scope }); }; /***/ }), /***/ 194: /***/ (function(module, exports, __webpack_require__) { "use strict"; var GlobalHandler = elementorModules.frontend.handlers.Base.extend({ getWidgetType: function getWidgetType() { return 'global'; }, animate: function animate() { var $element = this.$element, animation = this.getAnimation(); if ('none' === animation) { $element.removeClass('elementor-invisible'); return; } var elementSettings = this.getElementSettings(), animationDelay = elementSettings._animation_delay || elementSettings.animation_delay || 0; $element.removeClass(animation); if (this.currentAnimation) { $element.removeClass(this.currentAnimation); } this.currentAnimation = animation; setTimeout(function () { $element.removeClass('elementor-invisible').addClass('animated ' + animation); }, animationDelay); }, getAnimation: function getAnimation() { return this.getCurrentDeviceSetting('animation') || this.getCurrentDeviceSetting('_animation'); }, onInit: function onInit() { elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); if (this.getAnimation()) { elementorFrontend.waypoint(this.$element, this.animate.bind(this)); } }, onElementChange: function onElementChange(propertyName) { if (/^_?animation/.test(propertyName)) { this.animate(); } } }); module.exports = function ($scope) { elementorFrontend.elementsHandler.addHandler(GlobalHandler, { $element: $scope }); }; /***/ }), /***/ 195: /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = elementorModules.ViewModule.extend({ getDefaultSettings: function getDefaultSettings() { return { isInserted: false, APISrc: 'https://www.youtube.com/iframe_api', selectors: { firstScript: 'script:first' } }; }, getDefaultElements: function getDefaultElements() { return { $firstScript: jQuery(this.getSettings('selectors.firstScript')) }; }, insertYTAPI: function insertYTAPI() { this.setSettings('isInserted', true); this.elements.$firstScript.before(jQuery('<script>', { src: this.getSettings('APISrc') })); }, onYoutubeApiReady: function onYoutubeApiReady(callback) { var self = this; if (!self.getSettings('IsInserted')) { self.insertYTAPI(); } if (window.YT && YT.loaded) { callback(YT); } else { // If not ready check again by timeout.. setTimeout(function () { self.onYoutubeApiReady(callback); }, 350); } }, getYoutubeIDFromURL: function getYoutubeIDFromURL(url) { var videoIDParts = url.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user)\/))([^?&"'>]+)/); return videoIDParts && videoIDParts[1]; } }); /***/ }), /***/ 196: /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = elementorModules.ViewModule.extend({ getDefaultSettings: function getDefaultSettings() { return { scrollDuration: 500, selectors: { links: 'a[href*="#"]', targets: '.elementor-element, .elementor-menu-anchor', scrollable: 'html, body' } }; }, getDefaultElements: function getDefaultElements() { var $ = jQuery, selectors = this.getSettings('selectors'); return { $scrollable: $(selectors.scrollable) }; }, bindEvents: function bindEvents() { elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), this.handleAnchorLinks); }, handleAnchorLinks: function handleAnchorLinks(event) { var clickedLink = event.currentTarget, isSamePathname = location.pathname === clickedLink.pathname, isSameHostname = location.hostname === clickedLink.hostname, $anchor; if (!isSameHostname || !isSamePathname || clickedLink.hash.length < 2) { return; } try { $anchor = jQuery(clickedLink.hash).filter(this.getSettings('selectors.targets')); } catch (e) { return; } if (!$anchor.length) { return; } var scrollTop = $anchor.offset().top, $wpAdminBar = elementorFrontend.elements.$wpAdminBar, $activeStickies = jQuery('.elementor-section.elementor-sticky--active'), maxStickyHeight = 0; if ($wpAdminBar.length > 0) { scrollTop -= $wpAdminBar.height(); } // Offset height of tallest sticky if ($activeStickies.length > 0) { maxStickyHeight = Math.max.apply(null, $activeStickies.map(function () { return jQuery(this).outerHeight(); }).get()); scrollTop -= maxStickyHeight; } event.preventDefault(); scrollTop = elementorFrontend.hooks.applyFilters('frontend/handlers/menu_anchor/scroll_top_distance', scrollTop); this.elements.$scrollable.animate({ scrollTop: scrollTop }, this.getSettings('scrollDuration'), 'linear'); }, onInit: function onInit() { elementorModules.ViewModule.prototype.onInit.apply(this, arguments); this.bindEvents(); } }); /***/ }), /***/ 197: /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = elementorModules.ViewModule.extend({ oldAspectRatio: null, oldAnimation: null, swiper: null, getDefaultSettings: function getDefaultSettings() { return { classes: { aspectRatio: 'elementor-aspect-ratio-%s', item: 'elementor-lightbox-item', image: 'elementor-lightbox-image', videoContainer: 'elementor-video-container', videoWrapper: 'elementor-fit-aspect-ratio', playButton: 'elementor-custom-embed-play', playButtonIcon: 'fa', playing: 'elementor-playing', hidden: 'elementor-hidden', invisible: 'elementor-invisible', preventClose: 'elementor-lightbox-prevent-close', slideshow: { container: 'swiper-container', slidesWrapper: 'swiper-wrapper', prevButton: 'elementor-swiper-button elementor-swiper-button-prev', nextButton: 'elementor-swiper-button elementor-swiper-button-next', prevButtonIcon: 'eicon-chevron-left', nextButtonIcon: 'eicon-chevron-right', slide: 'swiper-slide' } }, selectors: { links: 'a, [data-elementor-lightbox]', slideshow: { activeSlide: '.swiper-slide-active', prevSlide: '.swiper-slide-prev', nextSlide: '.swiper-slide-next' } }, modalOptions: { id: 'elementor-lightbox', entranceAnimation: 'zoomIn', videoAspectRatio: 169, position: { enable: false } } }; }, getModal: function getModal() { if (!module.exports.modal) { this.initModal(); } return module.exports.modal; }, initModal: function initModal() { var modal = module.exports.modal = elementorFrontend.getDialogsManager().createWidget('lightbox', { className: 'elementor-lightbox', closeButton: true, closeButtonClass: 'eicon-close', selectors: { preventClose: '.' + this.getSettings('classes.preventClose') }, hide: { onClick: true } }); modal.on('hide', function () { modal.setMessage(''); }); }, showModal: function showModal(options) { var self = this, defaultOptions = self.getDefaultSettings().modalOptions; self.setSettings('modalOptions', jQuery.extend(defaultOptions, options.modalOptions)); var modal = self.getModal(); modal.setID(self.getSettings('modalOptions.id')); modal.onShow = function () { DialogsManager.getWidgetType('lightbox').prototype.onShow.apply(modal, arguments); self.setEntranceAnimation(); }; modal.onHide = function () { DialogsManager.getWidgetType('lightbox').prototype.onHide.apply(modal, arguments); modal.getElements('message').removeClass('animated'); }; switch (options.type) { case 'image': self.setImageContent(options.url); break; case 'video': self.setVideoContent(options); break; case 'slideshow': self.setSlideshowContent(options.slideshow); break; default: self.setHTMLContent(options.html); } modal.show(); }, setHTMLContent: function setHTMLContent(html) { this.getModal().setMessage(html); }, setImageContent: function setImageContent(imageURL) { var self = this, classes = self.getSettings('classes'), $item = jQuery('<div>', { class: classes.item }), $image = jQuery('<img>', { src: imageURL, class: classes.image + ' ' + classes.preventClose }); $item.append($image); self.getModal().setMessage($item); }, setVideoContent: function setVideoContent(options) { var classes = this.getSettings('classes'), $videoContainer = jQuery('<div>', { class: classes.videoContainer }), $videoWrapper = jQuery('<div>', { class: classes.videoWrapper }), $videoElement, modal = this.getModal(); if ('hosted' === options.videoType) { var videoParams = jQuery.extend({ src: options.url, autoplay: '' }, options.videoParams); $videoElement = jQuery('<video>', videoParams); } else { var videoURL = options.url.replace('&autoplay=0', '') + '&autoplay=1'; $videoElement = jQuery('<iframe>', { src: videoURL, allowfullscreen: 1 }); } $videoContainer.append($videoWrapper); $videoWrapper.append($videoElement); modal.setMessage($videoContainer); this.setVideoAspectRatio(); var onHideMethod = modal.onHide; modal.onHide = function () { onHideMethod(); modal.getElements('message').removeClass('elementor-fit-aspect-ratio'); }; }, setSlideshowContent: function setSlideshowContent(options) { var $ = jQuery, self = this, classes = self.getSettings('classes'), slideshowClasses = classes.slideshow, $container = $('<div>', { class: slideshowClasses.container }), $slidesWrapper = $('<div>', { class: slideshowClasses.slidesWrapper }), $prevButton = $('<div>', { class: slideshowClasses.prevButton + ' ' + classes.preventClose }).html($('<i>', { class: slideshowClasses.prevButtonIcon })), $nextButton = $('<div>', { class: slideshowClasses.nextButton + ' ' + classes.preventClose }).html($('<i>', { class: slideshowClasses.nextButtonIcon })); options.slides.forEach(function (slide) { var slideClass = slideshowClasses.slide + ' ' + classes.item; if (slide.video) { slideClass += ' ' + classes.video; } var $slide = $('<div>', { class: slideClass }); if (slide.video) { $slide.attr('data-elementor-slideshow-video', slide.video); var $playIcon = $('<div>', { class: classes.playButton }).html($('<i>', { class: classes.playButtonIcon })); $slide.append($playIcon); } else { var $zoomContainer = $('<div>', { class: 'swiper-zoom-container' }), $slideImage = $('<img>', { class: classes.image + ' ' + classes.preventClose, src: slide.image }); $zoomContainer.append($slideImage); $slide.append($zoomContainer); } $slidesWrapper.append($slide); }); $container.append($slidesWrapper, $prevButton, $nextButton); var modal = self.getModal(); modal.setMessage($container); var onShowMethod = modal.onShow; modal.onShow = function () { onShowMethod(); var swiperOptions = { navigation: { prevEl: $prevButton, nextEl: $nextButton }, pagination: { clickable: true }, on: { slideChangeTransitionEnd: self.onSlideChange }, grabCursor: true, runCallbacksOnInit: false, loop: true, keyboard: true }; if (options.swiper) { $.extend(swiperOptions, options.swiper); } self.swiper = new Swiper($container, swiperOptions); self.setVideoAspectRatio(); self.playSlideVideo(); }; }, setVideoAspectRatio: function setVideoAspectRatio(aspectRatio) { aspectRatio = aspectRatio || this.getSettings('modalOptions.videoAspectRatio'); var $widgetContent = this.getModal().getElements('widgetContent'), oldAspectRatio = this.oldAspectRatio, aspectRatioClass = this.getSettings('classes.aspectRatio'); this.oldAspectRatio = aspectRatio; if (oldAspectRatio) { $widgetContent.removeClass(aspectRatioClass.replace('%s', oldAspectRatio)); } if (aspectRatio) { $widgetContent.addClass(aspectRatioClass.replace('%s', aspectRatio)); } }, getSlide: function getSlide(slideState) { return jQuery(this.swiper.slides).filter(this.getSettings('selectors.slideshow.' + slideState + 'Slide')); }, playSlideVideo: function playSlideVideo() { var $activeSlide = this.getSlide('active'), videoURL = $activeSlide.data('elementor-slideshow-video'); if (!videoURL) { return; } var classes = this.getSettings('classes'), $videoContainer = jQuery('<div>', { class: classes.videoContainer + ' ' + classes.invisible }), $videoWrapper = jQuery('<div>', { class: classes.videoWrapper }), $videoFrame = jQuery('<iframe>', { src: videoURL }), $playIcon = $activeSlide.children('.' + classes.playButton); $videoContainer.append($videoWrapper); $videoWrapper.append($videoFrame); $activeSlide.append($videoContainer); $playIcon.addClass(classes.playing).removeClass(classes.hidden); $videoFrame.on('load', function () { $playIcon.addClass(classes.hidden); $videoContainer.removeClass(classes.invisible); }); }, setEntranceAnimation: function setEntranceAnimation(animation) { animation = animation || elementorFrontend.getCurrentDeviceSetting(this.getSettings('modalOptions'), 'entranceAnimation'); var $widgetMessage = this.getModal().getElements('message'); if (this.oldAnimation) { $widgetMessage.removeClass(this.oldAnimation); } this.oldAnimation = animation; if (animation) { $widgetMessage.addClass('animated ' + animation); } }, isLightboxLink: function isLightboxLink(element) { if ('A' === element.tagName && (element.hasAttribute('download') || !/\.(png|jpe?g|gif|svg)(\?.*)?$/i.test(element.href))) { return false; } var generalOpenInLightbox = elementorFrontend.getGeneralSettings('elementor_global_image_lightbox'), currentLinkOpenInLightbox = element.dataset.elementorOpenLightbox; return 'yes' === currentLinkOpenInLightbox || generalOpenInLightbox && 'no' !== currentLinkOpenInLightbox; }, openLink: function openLink(event) { var element = event.currentTarget, $target = jQuery(event.target), editMode = elementorFrontend.isEditMode(), isClickInsideElementor = !!$target.closest('#elementor').length; if (!this.isLightboxLink(element)) { if (editMode && isClickInsideElementor) { event.preventDefault(); } return; } event.preventDefault(); if (editMode && !elementorFrontend.getGeneralSettings('elementor_enable_lightbox_in_editor')) { return; } var lightboxData = {}; if (element.dataset.elementorLightbox) { lightboxData = JSON.parse(element.dataset.elementorLightbox); } if (lightboxData.type && 'slideshow' !== lightboxData.type) { this.showModal(lightboxData); return; } if (!element.dataset.elementorLightboxSlideshow) { this.showModal({ type: 'image', url: element.href }); return; } var slideshowID = element.dataset.elementorLightboxSlideshow; var $allSlideshowLinks = jQuery(this.getSettings('selectors.links')).filter(function () { return slideshowID === this.dataset.elementorLightboxSlideshow; }); var slides = [], uniqueLinks = {}; $allSlideshowLinks.each(function () { var slideVideo = this.dataset.elementorLightboxVideo, uniqueID = slideVideo || this.href; if (uniqueLinks[uniqueID]) { return; } uniqueLinks[uniqueID] = true; var slideIndex = this.dataset.elementorLightboxIndex; if (undefined === slideIndex) { slideIndex = $allSlideshowLinks.index(this); } var slideData = { image: this.href, index: slideIndex }; if (slideVideo) { slideData.video = slideVideo; } slides.push(slideData); }); slides.sort(function (a, b) { return a.index - b.index; }); var initialSlide = element.dataset.elementorLightboxIndex; if (undefined === initialSlide) { initialSlide = $allSlideshowLinks.index(element); } this.showModal({ type: 'slideshow', modalOptions: { id: 'elementor-lightbox-slideshow-' + slideshowID }, slideshow: { slides: slides, swiper: { initialSlide: +initialSlide } } }); }, bindEvents: function bindEvents() { elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), this.openLink); }, onSlideChange: function onSlideChange() { this.getSlide('prev').add(this.getSlide('next')).add(this.getSlide('active')).find('.' + this.getSettings('classes.videoWrapper')).remove(); this.playSlideVideo(); } }); /***/ }) /******/ }); //# sourceMappingURL=frontend.js.map