/*! * Creative Elements - live Theme & Page Builder * Copyright 2019-2022 WebshopWorks.com & Elementor.com */ /******/ (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 = 43); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var ControlBaseView = __webpack_require__(3), TagsBehavior = __webpack_require__(57), Validator = __webpack_require__(9), ControlBaseDataView; ControlBaseDataView = ControlBaseView.extend({ ui: function ui() { var ui = ControlBaseView.prototype.ui.apply(this, arguments); _.extend(ui, { input: 'input[data-setting][type!="checkbox"][type!="radio"]', checkbox: 'input[data-setting][type="checkbox"]', radio: 'input[data-setting][type="radio"]', select: 'select[data-setting]', textarea: 'textarea[data-setting]', responsiveSwitchers: '.elementor-responsive-switcher', contentEditable: '[contenteditable="true"]', tooltipTarget: '.tooltip-target' }); return ui; }, templateHelpers: function templateHelpers() { var controlData = ControlBaseView.prototype.templateHelpers.apply(this, arguments); controlData.data.controlValue = this.getControlValue(); return controlData; }, events: function events() { return { 'input @ui.input': 'onBaseInputChange', 'change @ui.checkbox': 'onBaseInputChange', 'change @ui.radio': 'onBaseInputChange', 'input @ui.textarea': 'onBaseInputChange', 'change @ui.select': 'onBaseInputChange', 'input @ui.contentEditable': 'onBaseInputChange', 'click @ui.responsiveSwitchers': 'onResponsiveSwitchersClick' }; }, behaviors: function behaviors() { var behaviors = {}, dynamicSettings = this.options.model.get('dynamic'); if (dynamicSettings && dynamicSettings.active) { var tags = _.filter(elementor.dynamicTags.getConfig('tags'), function (tag) { return _.intersection(tag.categories, dynamicSettings.categories).length; }); if (tags.length) { behaviors.tags = { behaviorClass: TagsBehavior, tags: tags, dynamicSettings: dynamicSettings }; } } return behaviors; }, initialize: function initialize() { ControlBaseView.prototype.initialize.apply(this, arguments); this.registerValidators(); this.listenTo(this.elementSettingsModel, 'change:external:' + this.model.get('name'), this.onAfterExternalChange); }, getControlValue: function getControlValue() { return this.elementSettingsModel.get(this.model.get('name')); }, setValue: function setValue(value) { this.setSettingsModel(value); }, setSettingsModel: function setSettingsModel(value) { this.elementSettingsModel.set(this.model.get('name'), value); this.triggerMethod('settings:change'); }, applySavedValue: function applySavedValue() { this.setInputValue('[data-setting="' + this.model.get('name') + '"]', this.getControlValue()); }, getEditSettings: function getEditSettings(setting) { var settings = this.getOption('elementEditSettings').toJSON(); if (setting) { return settings[setting]; } return settings; }, setEditSetting: function setEditSetting(settingKey, settingValue) { var settings = this.getOption('elementEditSettings'); settings.set(settingKey, settingValue); }, getInputValue: function getInputValue(input) { var $input = this.$(input); if ($input.is('[contenteditable="true"]')) { return $input.html(); } var inputValue = $input.val(), inputType = $input.attr('type'); if (-1 !== ['radio', 'checkbox'].indexOf(inputType)) { return $input.prop('checked') ? inputValue : ''; } if ('number' === inputType && _.isFinite(inputValue)) { return +inputValue; } // Temp fix for jQuery (< 3.0) that return null instead of empty array if ('SELECT' === input.tagName && $input.prop('multiple') && null === inputValue) { inputValue = []; } return inputValue; }, setInputValue: function setInputValue(input, value) { var $input = this.$(input), inputType = $input.attr('type'); if ('checkbox' === inputType) { $input.prop('checked', !!value); } else if ('radio' === inputType) { $input.filter('[value="' + value + '"]').prop('checked', true); } else { $input.val(value); } }, addValidator: function addValidator(validator) { this.validators.push(validator); }, registerValidators: function registerValidators() { this.validators = []; var validationTerms = {}; if (this.model.get('required')) { validationTerms.required = true; } if (!jQuery.isEmptyObject(validationTerms)) { this.addValidator(new Validator({ validationTerms: validationTerms })); } }, onRender: function onRender() { ControlBaseView.prototype.onRender.apply(this, arguments); if (this.model.get('responsive')) { this.renderResponsiveSwitchers(); } this.applySavedValue(); this.triggerMethod('ready'); this.toggleControlVisibility(); this.addTooltip(); }, onBaseInputChange: function onBaseInputChange(event) { clearTimeout(this.correctionTimeout); var input = event.currentTarget, value = this.getInputValue(input), validators = this.validators.slice(0), settingsValidators = this.elementSettingsModel.validators[this.model.get('name')]; if (settingsValidators) { validators = validators.concat(settingsValidators); } if (validators) { var oldValue = this.getControlValue(input.dataset.setting); var isValidValue = validators.every(function (validator) { return validator.isValid(value, oldValue); }); if (!isValidValue) { this.correctionTimeout = setTimeout(this.setInputValue.bind(this, input, oldValue), 1200); return; } } this.updateElementModel(value, input); this.triggerMethod('input:change', event); }, onResponsiveSwitchersClick: function onResponsiveSwitchersClick(event) { var device = jQuery(event.currentTarget).data('device'); this.triggerMethod('responsive:switcher:click', device); elementor.changeDeviceMode(device); }, renderResponsiveSwitchers: function renderResponsiveSwitchers() { var templateHtml = Marionette.Renderer.render('#tmpl-elementor-control-responsive-switchers', this.model.attributes); this.ui.controlTitle.after(templateHtml); }, onAfterExternalChange: function onAfterExternalChange() { this.hideTooltip(); this.applySavedValue(); }, addTooltip: function addTooltip() { if (!this.ui.tooltipTarget) { return; } // Create tooltip on controls this.ui.tooltipTarget.tipsy({ gravity: function gravity() { // `n` for down, `s` for up var gravity = jQuery(this).data('tooltip-pos'); if (undefined !== gravity) { return gravity; } return 'n'; }, title: function title() { return this.getAttribute('data-tooltip'); } }); }, hideTooltip: function hideTooltip() { if (this.ui.tooltipTarget) { this.ui.tooltipTarget.tipsy('hide'); } }, updateElementModel: function updateElementModel(value) { this.setValue(value); } }, { // Static methods getStyleValue: function getStyleValue(placeholder, controlValue, controlData) { if ('DEFAULT' === placeholder) { return controlData.default; } return controlValue; }, onPasteStyle: function onPasteStyle() { return true; } }); module.exports = ControlBaseDataView; /***/ }), /* 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') }; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var ControlBaseDataView = __webpack_require__(0), ControlBaseMultipleItemView; ControlBaseMultipleItemView = ControlBaseDataView.extend({ applySavedValue: function applySavedValue() { var values = this.getControlValue(), $inputs = this.$('[data-setting]'), self = this; _.each(values, function (value, key) { var $input = $inputs.filter(function () { return key === this.dataset.setting; }); self.setInputValue($input, value); }); }, getControlValue: function getControlValue(key) { var values = this.elementSettingsModel.get(this.model.get('name')); if (!jQuery.isPlainObject(values)) { return {}; } if (key) { var value = values[key]; if (undefined === value) { value = ''; } return value; } return elementorCommon.helpers.cloneObject(values); }, setValue: function setValue(key, value) { var values = this.getControlValue(); if ('object' === (typeof key === 'undefined' ? 'undefined' : _typeof(key))) { _.each(key, function (internalValue, internalKey) { values[internalKey] = internalValue; }); } else { values[key] = value; } this.setSettingsModel(values); }, updateElementModel: function updateElementModel(value, input) { var key = input.dataset.setting; this.setValue(key, value); } }, { // Static methods getStyleValue: function getStyleValue(placeholder, controlValue) { if (!_.isObject(controlValue)) { return ''; // invalid } return controlValue[placeholder.toLowerCase()]; } }); module.exports = ControlBaseMultipleItemView; /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var ControlBaseView; ControlBaseView = Marionette.CompositeView.extend({ ui: function ui() { return { controlTitle: '.elementor-control-title' }; }, behaviors: function behaviors() { var behaviors = {}; return elementor.hooks.applyFilters('controls/base/behaviors', behaviors, this); }, getBehavior: function getBehavior(name) { return this._behaviors[Object.keys(this.behaviors()).indexOf(name)]; }, className: function className() { // TODO: Any better classes for that? var classes = 'elementor-control elementor-control-' + this.model.get('name') + ' elementor-control-type-' + this.model.get('type'), modelClasses = this.model.get('classes'), responsive = this.model.get('responsive'); if (!_.isEmpty(modelClasses)) { classes += ' ' + modelClasses; } if (!_.isEmpty(responsive)) { classes += ' elementor-control-responsive-' + responsive.max; } return classes; }, templateHelpers: function templateHelpers() { var controlData = { _cid: this.model.cid }; return { data: _.extend({}, this.model.toJSON(), controlData) }; }, getTemplate: function getTemplate() { return Marionette.TemplateCache.get('#tmpl-elementor-control-' + this.model.get('type') + '-content'); }, initialize: function initialize(options) { this.elementSettingsModel = options.elementSettingsModel; var controlType = this.model.get('type'), controlSettings = jQuery.extend(true, {}, elementor.config.controls[controlType], this.model.attributes); this.model.set(controlSettings); this.listenTo(this.elementSettingsModel, 'change', this.toggleControlVisibility); }, toggleControlVisibility: function toggleControlVisibility() { var isVisible = elementor.helpers.isActiveControl(this.model, ( this.model.get('check_section') ? elementor.helpers.getParentSectionModel(this.elementSettingsModel.cid) : this.elementSettingsModel ).attributes); this.$el.toggleClass('elementor-hidden-control', !isVisible); elementor.getPanelView().updateScrollbar(); }, onRender: function onRender() { var layoutType = this.model.get('label_block') ? 'block' : 'inline', showLabel = this.model.get('show_label'), elClasses = 'elementor-label-' + layoutType; elClasses += ' elementor-control-separator-' + this.model.get('separator'); if (!showLabel) { elClasses += ' elementor-control-hidden-label'; } this.$el.addClass(elClasses); this.toggleControlVisibility(); } }); module.exports = ControlBaseView; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var ControlBaseDataView = __webpack_require__(0), ControlSelect2ItemView; ControlSelect2ItemView = ControlBaseDataView.extend({ getSelect2Placeholder: function getSelect2Placeholder() { return this.ui.select.children('option:first[value=""]').text(); }, getSelect2DefaultOptions: function getSelect2DefaultOptions() { return { allowClear: true, placeholder: this.getSelect2Placeholder(), dir: elementorCommon.config.isRTL ? 'rtl' : 'ltr', }; }, getProductsListOptions: function getProductsListOptions() { return { ajax: { type: 'GET', dataType: 'json', delay: 250, processResults: function (data) { return {results: data}; } }, minimumInputLength: 2, templateResult: function (data) { elementor.productsCache[data.id] = data; return jQuery( '
' + (data.image ? '' : '') + '' + (data.name || '') + '' + '
' ); }, templateSelection: function (data) { return data.name || data.text || ''; }, }; }, getSelect2Options: function getSelect2Options() { var opts = this.model.get('select2options') || {}; return jQuery.extend(true, this.getSelect2DefaultOptions(), opts.product ? this.getProductsListOptions() : {}, opts); }, onReady: function onReady() { var opts = this.getSelect2Options(), val = this.elementSettingsModel.attributes[this.model.attributes.name]; this.ui.select.select2(opts); this.ui.fieldLoading = this.$el.find('.elementor-control-loading'); if (opts.ajax && val) { var result = elementor.productsCache[val]; if (result) { return this.onSuccessGetProducts([result]); } elementorCommon.ajax.addRequest('get_products_by_id', { data: {ids: [val]}, success: $.proxy(this, 'onSuccessGetProducts'), }); } else { this.ui.fieldLoading.hide(); } }, onSuccessGetProducts: function onSuccessGetProducts(results) { var result = results && results[0]; if (result) { elementor.productsCache[result.id] = result; this.ui.select.select2('trigger', 'select', { data: result, }); } this.ui.fieldLoading.hide(); }, onBeforeDestroy: function onBeforeDestroy() { if (this.ui.select.data('select2')) { this.ui.select.select2('destroy'); } this.$el.remove(); } }); module.exports = ControlSelect2ItemView; /***/ }), /* 5 */, /* 6 */, /* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _environment = __webpack_require__(1); var _environment2 = _interopRequireDefault(_environment); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ControlsCSSParser = __webpack_require__(10), Validator = __webpack_require__(9), BaseContainer = __webpack_require__(26), BaseElementView; BaseElementView = BaseContainer.extend({ tagName: 'div', controlsCSSParser: null, allowRender: true, toggleEditTools: false, renderAttributes: {}, className: function className() { var classes = 'elementor-element elementor-element-edit-mode ' + this.getElementUniqueID(); if (this.toggleEditTools) { classes += ' elementor-element--toggle-edit-tools'; } return classes; }, attributes: function attributes() { return { 'data-id': this.getID(), 'data-element_type': this.model.get('elType') }; }, ui: function ui() { return { tools: '> .elementor-element-overlay > .elementor-editor-element-settings', editButton: '> .elementor-element-overlay .elementor-editor-element-edit', duplicateButton: '> .elementor-element-overlay .elementor-editor-element-duplicate', addButton: '> .elementor-element-overlay .elementor-editor-element-add', removeButton: '> .elementor-element-overlay .elementor-editor-element-remove', tabs: '> .elementor-container > nav li' }; }, behaviors: function behaviors() { var groups = elementor.hooks.applyFilters('elements/' + this.options.model.get('elType') + '/contextMenuGroups', this.getContextMenuGroups(), this); var behaviors = { contextMenu: { behaviorClass: __webpack_require__(8), groups: groups } }; return elementor.hooks.applyFilters('elements/base/behaviors', behaviors, this); }, getBehavior: function getBehavior(name) { return this._behaviors[Object.keys(this.behaviors()).indexOf(name)]; }, events: function events() { return { mousedown: 'onMouseDown', 'click @ui.editButton': 'onEditButtonClick', 'click @ui.duplicateButton': 'onDuplicateButtonClick', 'click @ui.addButton': 'onAddButtonClick', 'click @ui.removeButton': 'onRemoveButtonClick', 'click @ui.tabs': 'onTabClick' }; }, getElementType: function getElementType() { return this.model.get('elType'); }, getIDInt: function getIDInt() { return parseInt(this.getID(), 16); }, getChildType: function getChildType() { return elementor.helpers.getElementChildType(this.getElementType()); }, getChildView: function getChildView(model) { var ChildView, elType = model.get('elType'); if ('section' === elType) { ChildView = __webpack_require__(27); } else if ('column' === elType) { ChildView = __webpack_require__(96); } else { ChildView = elementor.modules.elements.views.Widget; } return elementor.hooks.applyFilters('element/view', ChildView, model, this); }, getTemplateType: function getTemplateType() { return 'js'; }, getEditModel: function getEditModel() { return this.model; }, getContextMenuGroups: function getContextMenuGroups() { var controlSign = _environment2.default.mac ? '⌘' : '^'; return [{ name: 'general', actions: [{ name: 'edit', icon: 'eicon-edit', title: elementor.translate('edit_element', [this.options.model.getTitle()]), callback: this.options.model.trigger.bind(this.options.model, 'request:edit') }, { name: 'duplicate', icon: 'eicon-clone', title: elementor.translate('duplicate'), shortcut: controlSign + '+D', callback: this.duplicate.bind(this) }] }, { name: 'transfer', actions: [{ name: 'copy', title: elementor.translate('copy'), shortcut: controlSign + '+C', callback: this.copy.bind(this) }, { name: 'paste', title: elementor.translate('paste'), shortcut: controlSign + '+V', callback: this.paste.bind(this), isEnabled: this.isPasteEnabled.bind(this) }, { name: 'pasteStyle', title: elementor.translate('paste_style'), shortcut: controlSign + '+⇧+V', callback: this.pasteStyle.bind(this), isEnabled: function isEnabled() { return !!elementorCommon.storage.get('transfer'); } }, { name: 'resetStyle', title: elementor.translate('reset_style'), callback: this.resetStyle.bind(this) }] }, { name: 'delete', actions: [{ name: 'delete', icon: 'eicon-trash', title: elementor.translate('delete'), shortcut: '⌦', callback: this.removeElement.bind(this) }] }]; }, initialize: function initialize() { BaseContainer.prototype.initialize.apply(this, arguments); if (this.collection) { this.listenTo(this.collection, 'add remove reset', this.onCollectionChanged, this); } var editModel = this.getEditModel(); this.listenTo(editModel.get('settings'), 'change', this.onSettingsChanged).listenTo(editModel.get('editSettings'), 'change', this.onEditSettingsChanged).listenTo(this.model, 'request:edit', this.onEditRequest).listenTo(this.model, 'request:toggleVisibility', this.toggleVisibility); this.initControlsCSSParser(); }, startTransport: function startTransport(type) { elementorCommon.storage.set('transfer', { type: type, elementsType: this.getElementType(), elements: [this.model.toJSON({ copyHtmlCache: true })] }); }, copy: function copy() { this.startTransport('copy'); }, cut: function cut() { this.startTransport('cut'); }, paste: function paste() { this.trigger('request:paste'); }, isPasteEnabled: function isPasteEnabled() { var transferData = elementorCommon.storage.get('transfer'); if (!transferData || this.isCollectionFilled()) { return false; } return this.getElementType() === transferData.elementsType; }, isStyleTransferControl: function isStyleTransferControl(control) { if (undefined !== control.style_transfer) { return control.style_transfer; } return 'content' !== control.tab || control.selectors || control.prefix_class; }, duplicate: function duplicate() { var oldTransport = elementorCommon.storage.get('transfer'); this.copy(); this.paste(); elementorCommon.storage.set('transfer', oldTransport); }, pasteStyle: function pasteStyle() { var self = this, transferData = elementorCommon.storage.get('transfer'), sourceElement = transferData.elements[0], sourceSettings = sourceElement.settings, editModel = self.getEditModel(), settings = editModel.get('settings'), settingsAttributes = settings.attributes, controls = settings.controls, diffSettings = {}; jQuery.each(controls, function (controlName, control) { if (!self.isStyleTransferControl(control)) { return; } var sourceValue = sourceSettings[controlName], targetValue = settingsAttributes[controlName]; if (undefined === sourceValue || undefined === targetValue) { return; } if ('object' === (typeof sourceValue === 'undefined' ? 'undefined' : _typeof(sourceValue)) ^ 'object' === (typeof targetValue === 'undefined' ? 'undefined' : _typeof(targetValue))) { return; } if ('object' === (typeof sourceValue === 'undefined' ? 'undefined' : _typeof(sourceValue))) { var isEqual = true; jQuery.each(sourceValue, function (propertyKey) { if (sourceValue[propertyKey] !== targetValue[propertyKey]) { return isEqual = false; } }); if (isEqual) { return; } } if (sourceValue === targetValue) { return; } var ControlView = elementor.getControlView(control.type); if (!ControlView.onPasteStyle(control, sourceValue)) { return; } diffSettings[controlName] = sourceValue; }); self.allowRender = false; elementor.channels.data.trigger('element:before:paste:style', editModel); editModel.setSetting(diffSettings); elementor.channels.data.trigger('element:after:paste:style', editModel); self.allowRender = true; self.renderOnChange(); }, resetStyle: function resetStyle() { var self = this, editModel = self.getEditModel(), controls = editModel.get('settings').controls, defaultValues = {}; self.allowRender = false; elementor.channels.data.trigger('element:before:reset:style', editModel); jQuery.each(controls, function (controlName, control) { if (!self.isStyleTransferControl(control)) { return; } defaultValues[controlName] = control.default; }); editModel.setSetting(defaultValues); elementor.channels.data.trigger('element:after:reset:style', editModel); self.allowRender = true; self.renderOnChange(); }, toggleVisibility: function toggleVisibility() { this.model.set('hidden', !this.model.get('hidden')); this.toggleVisibilityClass(); }, toggleVisibilityClass: function toggleVisibilityClass() { this.$el.toggleClass('elementor-edit-hidden', !!this.model.get('hidden')); }, addElementFromPanel: function addElementFromPanel(options) { options = options || {}; var elementView = elementor.channels.panelElements.request('element:selected'); var itemData = { elType: elementView.model.get('elType') }; if ('widget' === itemData.elType) { itemData.widgetType = elementView.model.get('widgetType'); } else if ('section' === itemData.elType) { itemData.isInner = true; } else { return; } var customData = elementView.model.get('custom'); if (customData) { jQuery.extend(itemData, customData); } options.trigger = { beforeAdd: 'element:before:add', afterAdd: 'element:after:add' }; options.onAfterAdd = function (newModel, newView) { if ('section' === newView.getElementType() && newView.isInner()) { newView.addChildElement(); } }; this.addChildElement(itemData, options); }, addControlValidator: function addControlValidator(controlName, validationCallback) { validationCallback = validationCallback.bind(this); var validator = new Validator({ customValidationMethod: validationCallback }), validators = this.getEditModel().get('settings').validators; if (!validators[controlName]) { validators[controlName] = []; } validators[controlName].push(validator); }, addRenderAttribute: function addRenderAttribute(element, key, value, overwrite) { var self = this; if ('object' === (typeof element === 'undefined' ? 'undefined' : _typeof(element))) { jQuery.each(element, function (elementKey) { self.addRenderAttribute(elementKey, this, null, overwrite); }); return self; } if ('object' === (typeof key === 'undefined' ? 'undefined' : _typeof(key))) { jQuery.each(key, function (attributeKey) { self.addRenderAttribute(element, attributeKey, this, overwrite); }); return self; } if (!self.renderAttributes[element]) { self.renderAttributes[element] = {}; } if (!self.renderAttributes[element][key]) { self.renderAttributes[element][key] = []; } if (!Array.isArray(value)) { value = [value]; } if (overwrite) { self.renderAttributes[element][key] = value; } else { self.renderAttributes[element][key] = self.renderAttributes[element][key].concat(value); } }, getRenderAttributeString: function getRenderAttributeString(element) { if (!this.renderAttributes[element]) { return ''; } var renderAttributes = this.renderAttributes[element], attributes = []; jQuery.each(renderAttributes, function (attributeKey) { attributes.push(attributeKey + '="' + _.escape(this.join(' ')) + '"'); }); return attributes.join(' '); }, isInner: function isInner() { return !!this.model.get('isInner'); }, initControlsCSSParser: function initControlsCSSParser() { this.controlsCSSParser = new ControlsCSSParser({ id: this.model.cid, settingsModel: this.getEditModel().get('settings'), dynamicParsing: this.getDynamicParsingSettings() }); }, enqueueFonts: function enqueueFonts() { var editModel = this.getEditModel(), settings = editModel.get('settings'); _.each(settings.getFontControls(), function (control) { var fontFamilyName = editModel.getSetting(control.name); if (_.isEmpty(fontFamilyName)) { return; } elementor.helpers.enqueueFont(fontFamilyName); }); }, renderStyles: function renderStyles(settings) { if (!settings) { settings = this.getEditModel().get('settings'); } this.controlsCSSParser.stylesheet.empty(); this.controlsCSSParser.addStyleRules(settings.getStyleControls(), settings.attributes, this.getEditModel().get('settings').controls, [ /{{ID}}/g, /{{WRAPPER}}/g, /{{HOVER}}/g ], [ this.getID(), '#elementor .' + this.getElementUniqueID(), this.getTransformHoverSelector(settings) ]); this.controlsCSSParser.addStyleToDocument(); var extraCSS = elementor.hooks.applyFilters('editor/style/styleText', '', this); if (extraCSS) { this.controlsCSSParser.elements.$stylesheetElement.append(extraCSS); } }, renderCustomClasses: function renderCustomClasses() { var self = this; var settings = self.getEditModel().get('settings'), classControls = settings.getClassControls(); // Remove all previous classes _.each(classControls, function (control) { var previousClassValue = settings.previous(control.name); if (control.classes_dictionary) { if (undefined !== control.classes_dictionary[previousClassValue]) { previousClassValue = control.classes_dictionary[previousClassValue]; } } self.$el.removeClass(control.prefix_class + previousClassValue); }); // Add new classes _.each(classControls, function (control) { var value = settings.attributes[control.name], classValue = value; if (control.classes_dictionary) { if (undefined !== control.classes_dictionary[value]) { classValue = control.classes_dictionary[value]; } } var isVisible = elementor.helpers.isActiveControl(control, settings.attributes); if (isVisible && (classValue || 0 === classValue)) { self.$el.addClass(control.prefix_class + classValue); } }); self.$el.addClass(_.result(self, 'className')); self.toggleVisibilityClass(); }, renderCustomElementID: function renderCustomElementID() { var customElementID = this.getEditModel().get('settings').get('_element_id'); this.$el.attr('id', customElementID); }, renderUI: function renderUI() { this.renderStyles(); this.renderCustomClasses(); this.renderCustomElementID(); this.enqueueFonts(); }, runReadyTrigger: function runReadyTrigger() { var self = this; _.defer(function () { ceFrontend.elementsHandler.runReadyTrigger(self.el); if (!ceFrontend.isEditMode()) { return; } // In edit mode - handle an external elements that loaded by another elements like shortcode etc. self.$el.find('.elementor-element.elementor-' + self.model.get('elType') + ':not(.elementor-element-edit-mode)').each(function () { ceFrontend.elementsHandler.runReadyTrigger(this); }); }); }, getID: function getID() { return this.model.get('id'); }, getElementUniqueID: function getElementUniqueID() { return 'elementor-element-' + this.getID(); }, getTransformHoverSelector: function getTransformHoverSelector(settings) { switch (settings.get('_transform_trigger_hover')) { case 'miniature': return '[data-elementor-type$=miniature] > :hover .' + this.getElementUniqueID() + ' > .elementor-widget-container'; case 'section': return '.elementor-section:hover > .elementor-container > * > * > .elementor-column-wrap > * > .' + this.getElementUniqueID() + ' > .elementor-widget-container'; case 'column': return '.elementor-column-wrap:hover > * > .' + this.getElementUniqueID() + ' > .elementor-widget-container'; } return '.' + this.getElementUniqueID() + ' > .elementor-widget-container:hover'; }, renderOnChange: function renderOnChange(settings) { if (!this.allowRender) { return; } // Make sure is correct model if (settings instanceof elementorModules.editor.elements.models.BaseSettings) { var hasChanged = settings.hasChanged(), isContentChanged = !hasChanged, isRenderRequired = !hasChanged; _.each(settings.changedAttributes(), function (settingValue, settingKey) { var control = settings.getControl(settingKey); if ('_column_size' === settingKey) { isRenderRequired = true; return; } if (!control) { isRenderRequired = true; isContentChanged = true; return; } if ('none' !== control.render_type) { isRenderRequired = true; } if (-1 !== ['none', 'ui'].indexOf(control.render_type)) { return; } if ('template' === control.render_type || !settings.isStyleControl(settingKey) && !settings.isClassControl(settingKey) && '_element_id' !== settingKey) { isContentChanged = true; } }); if (!isRenderRequired) { return; } if (!isContentChanged) { this.renderUI(); return; } } // Re-render the template var templateType = this.getTemplateType(), editModel = this.getEditModel(); if ('js' === templateType) { this.getEditModel().setHtmlCache(); this.render(); editModel.renderOnLeave = true; } else { editModel.renderRemoteServer(); } }, getDynamicParsingSettings: function getDynamicParsingSettings() { var self = this; return { onServerRequestStart: function onServerRequestStart() { self.$el.addClass('elementor-loading'); }, onServerRequestEnd: function onServerRequestEnd() { // tmp fix: self.render(); doesn't work on all widgets try { self.renderOnChange({}); } catch (ex) {} self.$el.removeClass('elementor-loading'); } }; }, serializeData: function serializeData() { var data = BaseContainer.prototype.serializeData.apply(this, arguments); data.settings = this.getEditModel().get('settings').parseDynamicSettings(data.settings, this.getDynamicParsingSettings()); return data; }, save: function save() { var model = this.model; elementor.templates.startModal({ onReady: function onReady() { elementor.templates.getLayout().showSaveTemplateView(model); } }); }, removeElement: function removeElement() { elementor.channels.data.trigger('element:before:remove', this.model); var parent = this._parent; parent.isManualRemoving = true; this.model.destroy(); parent.isManualRemoving = false; elementor.channels.data.trigger('element:after:remove', this.model); }, onBeforeRender: function onBeforeRender() { this.renderAttributes = {}; }, onRender: function onRender() { this.renderUI(); this.runReadyTrigger(); if (this.toggleEditTools) { var editButton = this.ui.editButton; this.ui.tools.hoverIntent(function () { editButton.addClass('elementor-active'); }, function () { editButton.removeClass('elementor-active'); }, { timeout: 500 }); } }, onCollectionChanged: function onCollectionChanged() { elementor.saver.setFlagEditorChange(true); }, onEditSettingsChanged: function onEditSettingsChanged(changedModel) { elementor.channels.editor.trigger('change:editSettings', changedModel, this); }, onSettingsChanged: function onSettingsChanged(changedModel) { elementor.saver.setFlagEditorChange(true); this.renderOnChange(changedModel); }, onEditButtonClick: function onEditButtonClick() { this.model.trigger('request:edit'); }, onTabClick: function onTabClick(e) { var index = $(e.currentTarget).index(); this.model.get('elements').models[index].trigger('request:edit'); }, onEditRequest: function onEditRequest() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if ('edit' !== elementor.channels.dataEditMode.request('activeMode')) { return; } var model = this.getEditModel(), panel = elementor.getPanelView(); if ('editor' === panel.getCurrentPageName() && panel.getCurrentPageView().model === model) { return; } if (options.scrollIntoView) { elementor.helpers.scrollToView(this.$el, 200); } panel.openEditor(model, this); }, onDuplicateButtonClick: function onDuplicateButtonClick(event) { event.stopPropagation(); this.duplicate(); }, onRemoveButtonClick: function onRemoveButtonClick(event) { event.stopPropagation(); this.removeElement(); }, /* jQuery ui sortable preventing any `mousedown` event above any element, and as a result is preventing the `blur` * event on the currently active element. Therefor, we need to blur the active element manually. */ onMouseDown: function onMouseDown(event) { if (jQuery(event.target).closest('.elementor-inline-editing').length) { return; } ceFrontend.elements.window.document.activeElement.blur(); }, onDestroy: function onDestroy() { this.controlsCSSParser.removeStyleFromDocument(); this.getEditModel().get('settings').validators = {}; elementor.channels.data.trigger('element:destroy', this.model); } }); module.exports = BaseElementView; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var ContextMenu = __webpack_require__(94); module.exports = Marionette.Behavior.extend({ defaults: { groups: [], eventTargets: ['el'] }, events: function events() { var events = {}; this.getOption('eventTargets').forEach(function (eventTarget) { var eventName = 'contextmenu'; if ('el' !== eventTarget) { eventName += ' ' + eventTarget; } events[eventName] = 'onContextMenu'; }); return events; }, initialize: function initialize() { this.listenTo(this.view.options.model, 'request:contextmenu', this.onRequestContextMenu); }, initContextMenu: function initContextMenu() { var contextMenuGroups = this.getOption('groups'), deleteGroup = _.findWhere(contextMenuGroups, { name: 'delete' }), afterGroupIndex = contextMenuGroups.indexOf(deleteGroup); if (-1 === afterGroupIndex) { afterGroupIndex = contextMenuGroups.length; } contextMenuGroups.splice(afterGroupIndex, 0, { name: 'tools', actions: [{ name: 'navigator', title: elementor.translate('navigator'), callback: elementor.navigator.open.bind(elementor.navigator, this.view.model) }] }); this.contextMenu = new ContextMenu({ groups: contextMenuGroups }); this.contextMenu.getModal().on('hide', this.onContextMenuHide); }, getContextMenu: function getContextMenu() { if (!this.contextMenu) { this.initContextMenu(); } return this.contextMenu; }, onContextMenu: function onContextMenu(event) { if (elementorCommon.hotKeys.isControlEvent(event) || !elementor.userCan('design')) { return; } if ('edit' !== elementor.channels.dataEditMode.request('activeMode')) { return; } event.preventDefault(); event.stopPropagation(); this.getContextMenu().show(event); elementor.channels.editor.reply('contextMenu:targetView', this.view); }, onRequestContextMenu: function onRequestContextMenu(event) { var modal = this.getContextMenu().getModal(), iframe = modal.getSettings('iframe'), toolsGroup = _.findWhere(this.contextMenu.getSettings('groups'), { name: 'tools' }); toolsGroup.isVisible = false; modal.setSettings('iframe', null); this.onContextMenu(event); toolsGroup.isVisible = true; modal.setSettings('iframe', iframe); }, onContextMenuHide: function onContextMenuHide() { elementor.channels.editor.reply('contextMenu:targetView', null); }, onDestroy: function onDestroy() { if (this.contextMenu) { this.contextMenu.destroy(); } } }); /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = elementorModules.Module.extend({ errors: [], __construct: function __construct(settings) { var customValidationMethod = settings.customValidationMethod; if (customValidationMethod) { this.validationMethod = customValidationMethod; } }, getDefaultSettings: function getDefaultSettings() { return { validationTerms: {} }; }, isValid: function isValid() { var validationErrors = this.validationMethod.apply(this, arguments); if (validationErrors.length) { this.errors = validationErrors; return false; } return true; }, validationMethod: function validationMethod(newValue) { var validationTerms = this.getSettings('validationTerms'), errors = []; if (validationTerms.required) { if (!('' + newValue).length) { errors.push('Required value is empty'); } } return errors; } }); /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var Stylesheet = __webpack_require__(22), ControlsCSSParser; ControlsCSSParser = elementorModules.ViewModule.extend({ stylesheet: null, getDefaultSettings: function getDefaultSettings() { return { id: 0, settingsModel: null, dynamicParsing: {} }; }, getDefaultElements: function getDefaultElements() { return { $stylesheetElement: jQuery(''); } if (data.font_url) { elementor.$previewContents.find('link:last').after(''); } } }); this._enqueuedFonts.push(font); // if ('typekit' === fontType) { // this._enqueuedTypekit = true; // } }, onInit: function onInit() { elementor.channels.editor.on('font:insertion', this.onFontChange.bind(this)); } }); /***/ }), /* 17 */, /* 18 */, /* 19 */, /* 20 */, /* 21 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = Marionette.Region.extend({ storage: null, storageSizeKeys: null, constructor: function constructor() { Marionette.Region.prototype.constructor.apply(this, arguments); var savedStorage = elementorCommon.storage.get(this.getStorageKey()); this.storage = savedStorage ? savedStorage : this.getDefaultStorage(); this.storageSizeKeys = Object.keys(this.storage.size); }, saveStorage: function saveStorage(key, value) { this.storage[key] = value; elementorCommon.storage.set(this.getStorageKey(), this.storage); }, saveSize: function saveSize() { this.saveStorage('size', elementor.helpers.getElementInlineStyle(this.$el, this.storageSizeKeys)); } }); /***/ }), /* 22 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; (function ($) { var Stylesheet = function Stylesheet() { var self = this, rules = {}, rawCSS = {}, devices = {}; var getDeviceMaxValue = function getDeviceMaxValue(deviceName) { var deviceNames = Object.keys(devices), deviceNameIndex = deviceNames.indexOf(deviceName), nextIndex = deviceNameIndex + 1; if (nextIndex >= deviceNames.length) { throw new RangeError('Max value for this device is out of range.'); } return devices[deviceNames[nextIndex]] - 1; }; var queryToHash = function queryToHash(query) { var hash = []; $.each(query, function (endPoint) { hash.push(endPoint + '_' + this); }); return hash.join('-'); }; var hashToQuery = function hashToQuery(hash) { var query = {}; hash = hash.split('-').filter(String); hash.forEach(function (singleQuery) { var queryParts = singleQuery.split('_'), endPoint = queryParts[0], deviceName = queryParts[1]; query[endPoint] = 'max' === endPoint ? getDeviceMaxValue(deviceName) : devices[deviceName]; }); return query; }; var addQueryHash = function addQueryHash(queryHash) { rules[queryHash] = {}; var hashes = Object.keys(rules); if (hashes.length < 2) { return; } // Sort the devices from narrowest to widest hashes.sort(function (a, b) { if ('all' === a) { return -1; } if ('all' === b) { return 1; } var aQuery = hashToQuery(a), bQuery = hashToQuery(b); return bQuery.max - aQuery.max; }); var sortedRules = {}; hashes.forEach(function (deviceName) { sortedRules[deviceName] = rules[deviceName]; }); rules = sortedRules; }; var getQueryHashStyleFormat = function getQueryHashStyleFormat(queryHash) { var query = hashToQuery(queryHash), styleFormat = []; $.each(query, function (endPoint) { styleFormat.push('(' + endPoint + '-width:' + this + 'px)'); }); return '@media' + styleFormat.join(' and '); }; this.addDevice = function (newDeviceName, deviceValue) { devices[newDeviceName] = deviceValue; var deviceNames = Object.keys(devices); if (deviceNames.length < 2) { return self; } // Sort the devices from narrowest to widest deviceNames.sort(function (a, b) { return devices[a] - devices[b]; }); var sortedDevices = {}; deviceNames.forEach(function (deviceName) { sortedDevices[deviceName] = devices[deviceName]; }); devices = sortedDevices; return self; }; this.addRawCSS = function (key, css) { rawCSS[key] = css; }; this.addRules = function (selector, styleRules, query) { var queryHash = 'all'; if (!_.isEmpty(query)) { queryHash = queryToHash(query); } if (!rules[queryHash]) { addQueryHash(queryHash); } if (!styleRules) { var parsedRules = selector.match(/[^{]+\{[^}]+}/g); $.each(parsedRules, function () { var parsedRule = this.match(/([^{]+)\{([^}]+)}/); if (parsedRule) { self.addRules(parsedRule[1].trim(), parsedRule[2].trim(), query); } }); return; } if (!rules[queryHash][selector]) { rules[queryHash][selector] = {}; } if ('string' === typeof styleRules) { styleRules = styleRules.split(';').filter(String); var orderedRules = {}; try { $.each(styleRules, function () { var property = this.split(/:(.*)?/); orderedRules[property[0].trim()] = property[1].trim().replace(';', ''); }); } catch (error) { // At least one of the properties is incorrect return; } styleRules = orderedRules; } $.extend(rules[queryHash][selector], styleRules); return self; }; this.getRules = function () { return rules; }; this.empty = function () { rules = {}; rawCSS = {}; }; this.toString = function () { var styleText = ''; $.each(rules, function (queryHash) { var deviceText = Stylesheet.parseRules(this); if ('all' !== queryHash) { deviceText = getQueryHashStyleFormat(queryHash) + '{' + deviceText + '}'; } styleText += deviceText; }); $.each(rawCSS, function () { styleText += this; }); return styleText; }; }; Stylesheet.parseRules = function (rules) { var parsedRules = ''; $.each(rules, function (selector) { var selectorContent = Stylesheet.parseProperties(this); if (selectorContent) { parsedRules += selector + '{' + selectorContent + '}'; } }); return parsedRules; }; Stylesheet.parseProperties = function (properties) { var parsedProperties = ''; $.each(properties, function (propertyKey) { if (this) { parsedProperties += propertyKey + ':' + this + ';'; } }); return parsedProperties; }; module.exports = Stylesheet; })(jQuery); /***/ }), /* 23 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var InsertTemplateHandler; InsertTemplateHandler = Marionette.Behavior.extend({ ui: { insertButton: '.elementor-template-library-template-insert' }, events: { 'click @ui.insertButton': 'onInsertButtonClick' }, onInsertButtonClick: function onInsertButtonClick() { var autoImportSettings = elementor.config.document.remoteLibrary.autoImportSettings; if (!autoImportSettings && this.view.model.get('hasPageSettings')) { InsertTemplateHandler.showImportDialog(this.view.model); return; } elementor.templates.importTemplate(this.view.model, { withPageSettings: autoImportSettings }); } }, { dialog: null, showImportDialog: function showImportDialog(model) { var dialog = InsertTemplateHandler.getDialog(); dialog.onConfirm = function () { elementor.templates.importTemplate(model, { withPageSettings: true }); }; dialog.onCancel = function () { elementor.templates.importTemplate(model); }; dialog.show(); }, initDialog: function initDialog() { InsertTemplateHandler.dialog = elementorCommon.dialogsManager.createWidget('confirm', { id: 'elementor-insert-template-settings-dialog', headerMessage: elementor.translate('import_template_dialog_header'), message: elementor.translate('import_template_dialog_message') + '
' + elementor.translate('import_template_dialog_message_attention'), strings: { confirm: elementor.translate('yes'), cancel: elementor.translate('no') } }); }, getDialog: function getDialog() { if (!InsertTemplateHandler.dialog) { InsertTemplateHandler.initDialog(); } return InsertTemplateHandler.dialog; } }); module.exports = InsertTemplateHandler; /***/ }), /* 24 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var TemplateLibraryInsertTemplateBehavior = __webpack_require__(23), TemplateLibraryTemplateView; TemplateLibraryTemplateView = Marionette.ItemView.extend({ className: function className() { var classes = 'elementor-template-library-template', source = this.model.get('source'); classes += ' elementor-template-library-template-' + source; if ('remote' === source) { classes += ' elementor-template-library-template-' + this.model.get('type'); } if (this.model.get('isPro')) { classes += ' elementor-template-library-pro-template'; } return classes; }, ui: function ui() { return { previewButton: '.elementor-template-library-template-preview' }; }, events: function events() { return { 'click @ui.previewButton': 'onPreviewButtonClick' }; }, behaviors: { insertTemplate: { behaviorClass: TemplateLibraryInsertTemplateBehavior } } }); module.exports = TemplateLibraryTemplateView; /***/ }), /* 25 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _itemView = __webpack_require__(88); var _itemView2 = _interopRequireDefault(_itemView); var _empty = __webpack_require__(89); var _empty2 = _interopRequireDefault(_empty); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } module.exports = Marionette.CompositeView.extend({ id: 'elementor-panel-history', template: '#tmpl-elementor-panel-history-tab', childView: _itemView2.default, childViewContainer: '#elementor-history-list', emptyView: _empty2.default, currentItem: null, updateCurrentItem: function updateCurrentItem() { var _this = this; if (this.children.length <= 1) { return; } _.defer(function () { // Set current item - the first not applied item var currentItem = _this.collection.find(function (model) { return 'not_applied' === model.get('status'); }), currentView = _this.children.findByModel(currentItem); if (!currentView) { return; } var currentItemClass = 'elementor-history-item-current'; if (_this.currentItem) { _this.currentItem.removeClass(currentItemClass); } _this.currentItem = currentView.$el; _this.currentItem.addClass(currentItemClass); }); }, onRender: function onRender() { this.updateCurrentItem(); }, onRenderEmpty: function onRenderEmpty() { this.$el.addClass('elementor-empty'); }, onChildviewClick: function onChildviewClick(childView, event) { if (childView.$el === this.currentItem) { return; } var collection = event.model.collection, itemIndex = collection.findIndex(event.model); elementor.history.history.doItem(itemIndex); } }); /***/ }), /* 26 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = Marionette.CompositeView.extend({ templateHelpers: function templateHelpers() { return { view: this }; }, getBehavior: function getBehavior(name) { return this._behaviors[Object.keys(this.behaviors()).indexOf(name)]; }, initialize: function initialize() { this.collection = this.model.get('elements'); }, addChildModel: function addChildModel(model, options) { return this.collection.add(model, options, true); }, addChildElement: function addChildElement(data, options) { if (this.isCollectionFilled()) { return; } options = jQuery.extend({ trigger: false, edit: true, onBeforeAdd: null, onAfterAdd: null }, options); var childTypes = this.getChildType(), newItem, elType; if (data instanceof Backbone.Model) { newItem = data; elType = newItem.get('elType'); } else { newItem = { id: elementor.helpers.getUniqueID(), elType: childTypes[0], settings: {}, elements: [] }; if (data) { jQuery.extend(newItem, data); } elType = newItem.elType; } if (-1 === childTypes.indexOf(elType)) { return this.children.last().addChildElement(newItem, options); } if (options.clone) { newItem = this.cloneItem(newItem); } if (options.trigger) { elementor.channels.data.trigger(options.trigger.beforeAdd, newItem); } if (options.onBeforeAdd) { options.onBeforeAdd(); } var newModel = this.addChildModel(newItem, { at: options.at }), newView = this.children.findByModel(newModel); if (options.onAfterAdd) { options.onAfterAdd(newModel, newView); } if (options.trigger) { elementor.channels.data.trigger(options.trigger.afterAdd, newItem); } if (options.edit) { newModel.trigger('request:edit'); } return newView; }, cloneItem: function cloneItem(item) { var self = this; if (item instanceof Backbone.Model) { return item.clone(); } item.id = elementor.helpers.getUniqueID(); item.settings._element_id = ''; item.elements.forEach(function (childItem, index) { item.elements[index] = self.cloneItem(childItem); }); return item; }, isCollectionFilled: function isCollectionFilled() { return false; }, onChildviewRequestAddNew: function onChildviewRequestAddNew(childView) { this.addChildElement({}, { at: childView.$el.index() + 1, trigger: { beforeAdd: 'element:before:add', afterAdd: 'element:after:add' } }); }, onChildviewRequestPaste: function onChildviewRequestPaste(childView) { var self = this; if (self.isCollectionFilled()) { return; } var elements = elementorCommon.storage.get('transfer').elements, index = self.collection.indexOf(childView.model); elementor.channels.data.trigger('element:before:add', elements[0]); elements.forEach(function (item) { index++; self.addChildElement(item, { at: index, clone: true }); }); elementor.channels.data.trigger('element:after:add', elements[0]); } }); /***/ }), /* 27 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _inline = __webpack_require__(95); var _inline2 = _interopRequireDefault(_inline); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var BaseElementView = __webpack_require__(7), SectionView; SectionView = BaseElementView.extend({ template: Marionette.TemplateCache.get('#tmpl-elementor-section-content'), addSectionView: null, className: function className() { var classes = BaseElementView.prototype.className.apply(this, arguments), type = this.isInner() ? 'inner' : 'top'; return classes + ' elementor-section elementor-' + type + '-section'; }, tagName: function tagName() { return this.model.getSetting('html_tag') || 'section'; }, childViewContainer: '> .elementor-container > .elementor-row', behaviors: function behaviors() { var behaviors = BaseElementView.prototype.behaviors.apply(this, arguments); _.extend(behaviors, { Sortable: { behaviorClass: __webpack_require__(11), elChildType: 'column' } }); return elementor.hooks.applyFilters('elements/section/behaviors', behaviors, this); }, errors: { columnWidthTooLarge: 'New column width is too large', columnWidthTooSmall: 'New column width is too small' }, initialize: function initialize() { BaseElementView.prototype.initialize.apply(this, arguments); this.listenTo(this.collection, 'add remove reset', this._checkIsFull); this._checkIsEmpty(); }, getContextMenuGroups: function getContextMenuGroups() { var groups = BaseElementView.prototype.getContextMenuGroups.apply(this, arguments), transferGroupIndex = groups.indexOf(_.findWhere(groups, { name: 'transfer' })); groups.splice(transferGroupIndex + 1, 0, { name: 'save', actions: [{ name: 'save', title: elementor.translate('save_as_block'), callback: this.save.bind(this) }] }); return groups; }, addChildModel: function addChildModel(model) { var isModelInstance = model instanceof Backbone.Model, isInner = this.isInner(); if (isModelInstance) { model.set('isInner', isInner); } else { model.isInner = isInner; } return BaseElementView.prototype.addChildModel.apply(this, arguments); }, getSortableOptions: function getSortableOptions() { var sectionConnectClass = this.isInner() ? '.elementor-inner-section' : '.elementor-top-section'; return { connectWith: sectionConnectClass + ' > .elementor-container > .elementor-row', handle: '> .elementor-element-overlay .elementor-editor-element-edit', items: '> .elementor-column', forcePlaceholderSize: true, tolerance: 'pointer' }; }, getColumnPercentSize: function getColumnPercentSize(element, size) { return +(size / element.parent().width() * 100).toFixed(3); }, getDefaultStructure: function getDefaultStructure() { return this.collection.length + '0'; }, getStructure: function getStructure() { return this.model.getSetting('structure'); }, setStructure: function setStructure(structure) { var parsedStructure = elementor.presetsFactory.getParsedStructure(structure); if (+parsedStructure.columnsCount !== this.collection.length) { throw new TypeError('The provided structure doesn\'t match the columns count.'); } this.model.setSetting('structure', structure); }, redefineLayout: function redefineLayout() { var preset = elementor.presetsFactory.getPresetByStructure(this.getStructure()); this.collection.each(function (model, index) { model.setSetting('_column_size', preset.preset[index]); model.setSetting('_inline_size', null); }); }, resetLayout: function resetLayout() { this.setStructure(this.getDefaultStructure()); }, resetColumnsCustomSize: function resetColumnsCustomSize() { this.collection.each(function (model) { model.setSetting('_inline_size', null); }); }, isCollectionFilled: function isCollectionFilled() { var MAX_SIZE = 10, columnsCount = this.collection.length; return MAX_SIZE <= columnsCount; }, _checkIsFull: function _checkIsFull() { this.$el.toggleClass('elementor-section-filled', this.isCollectionFilled()); }, _checkIsEmpty: function _checkIsEmpty() { if (!this.collection.length && !this.model.get('allowEmpty')) { this.addChildElement(null, { edit: false }); } }, getColumnAt: function getColumnAt(index) { var model = this.collection.at(index); return model ? this.children.findByModelCid(model.cid) : null; }, getNextColumn: function getNextColumn(columnView) { return this.getColumnAt(this.collection.indexOf(columnView.model) + 1); }, getPreviousColumn: function getPreviousColumn(columnView) { return this.getColumnAt(this.collection.indexOf(columnView.model) - 1); }, showChildrenPercentsTooltip: function showChildrenPercentsTooltip(columnView, nextColumnView) { columnView.ui.percentsTooltip.show(); columnView.ui.percentsTooltip.attr('data-side', elementorCommon.config.isRTL ? 'right' : 'left'); nextColumnView.ui.percentsTooltip.show(); nextColumnView.ui.percentsTooltip.attr('data-side', elementorCommon.config.isRTL ? 'left' : 'right'); }, hideChildrenPercentsTooltip: function hideChildrenPercentsTooltip(columnView, nextColumnView) { columnView.ui.percentsTooltip.hide(); nextColumnView.ui.percentsTooltip.hide(); }, resizeChild: function resizeChild(childView, currentSize, newSize) { var nextChildView = this.getNextColumn(childView) || this.getPreviousColumn(childView); if (!nextChildView) { throw new ReferenceError('There is not any next column'); } var minColumnSize = 2, $nextElement = nextChildView.$el, nextElementCurrentSize = +nextChildView.model.getSetting('_inline_size') || this.getColumnPercentSize($nextElement, $nextElement[0].getBoundingClientRect().width), nextElementNewSize = +(currentSize + nextElementCurrentSize - newSize).toFixed(3); if (nextElementNewSize < minColumnSize) { throw new RangeError(this.errors.columnWidthTooLarge); } if (newSize < minColumnSize) { throw new RangeError(this.errors.columnWidthTooSmall); } nextChildView.model.setSetting('_inline_size', nextElementNewSize); return true; }, destroyAddSectionView: function destroyAddSectionView() { if (this.addSectionView && !this.addSectionView.isDestroyed) { this.addSectionView.destroy(); } }, onRender: function onRender() { BaseElementView.prototype.onRender.apply(this, arguments); this._checkIsFull(); }, onSettingsChanged: function onSettingsChanged(settingsModel) { BaseElementView.prototype.onSettingsChanged.apply(this, arguments); if (settingsModel.changed.structure) { this.redefineLayout(); } }, onAddButtonClick: function onAddButtonClick() { if (this.addSectionView && !this.addSectionView.isDestroyed) { this.addSectionView.fadeToDeath(); return; } var myIndex = this.model.collection.indexOf(this.model), addSectionView = new _inline2.default({ at: myIndex }); addSectionView.render(); this.$el.before(addSectionView.$el); addSectionView.$el.hide(); // Delaying the slide down for slow-render browsers (such as FF) setTimeout(function () { addSectionView.$el.slideDown(); }); this.addSectionView = addSectionView; }, onAddChild: function onAddChild() { if (!this.isBuffering && !this.model.get('allowEmpty')) { // Reset the layout just when we have really add/remove element. this.resetLayout(); } }, onRemoveChild: function onRemoveChild() { if (!this.isManualRemoving) { return; } // If it's the last column, please create new one. this._checkIsEmpty(); this.resetLayout(); }, onChildviewRequestResizeStart: function onChildviewRequestResizeStart(columnView) { var nextColumnView = this.getNextColumn(columnView); if (!nextColumnView) { return; } this.showChildrenPercentsTooltip(columnView, nextColumnView); var $iframes = columnView.$el.find('iframe').add(nextColumnView.$el.find('iframe')); elementor.helpers.disableElementEvents($iframes); }, onChildviewRequestResizeStop: function onChildviewRequestResizeStop(columnView) { var nextColumnView = this.getNextColumn(columnView); if (!nextColumnView) { return; } this.hideChildrenPercentsTooltip(columnView, nextColumnView); var $iframes = columnView.$el.find('iframe').add(nextColumnView.$el.find('iframe')); elementor.helpers.enableElementEvents($iframes); }, onChildviewRequestResize: function onChildviewRequestResize(columnView, ui) { // Get current column details var currentSize = +columnView.model.getSetting('_inline_size') || this.getColumnPercentSize(columnView.$el, columnView.$el.data('originalWidth')); ui.element.css({ width: '', left: 'initial' // Fix for RTL resizing }); var newSize = this.getColumnPercentSize(ui.element, ui.size.width); try { this.resizeChild(columnView, currentSize, newSize); } catch (e) { return; } columnView.model.setSetting('_inline_size', newSize); }, onDestroy: function onDestroy() { BaseElementView.prototype.onDestroy.apply(this, arguments); this.destroyAddSectionView(); } }); module.exports = SectionView; /***/ }), /* 28 */ /***/ (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 AddSectionBase = function (_Marionette$ItemView) { _inherits(AddSectionBase, _Marionette$ItemView); function AddSectionBase() { _classCallCheck(this, AddSectionBase); return _possibleConstructorReturn(this, (AddSectionBase.__proto__ || Object.getPrototypeOf(AddSectionBase)).apply(this, arguments)); } _createClass(AddSectionBase, [{ key: 'template', value: function template() { return Marionette.TemplateCache.get('#tmpl-elementor-add-section'); } }, { key: 'attributes', value: function attributes() { return { 'data-view': 'choose-action' }; } }, { key: 'ui', value: function ui() { return { addNewSection: '.elementor-add-new-section', closeButton: '.elementor-add-section-close', addSectionButton: '.elementor-add-section-button', addTemplateButton: '.elementor-add-template-button', selectPreset: '.elementor-select-preset', presets: '.elementor-preset' }; } }, { key: 'events', value: function events() { return { 'click @ui.addSectionButton': 'onAddSectionButtonClick', 'click @ui.addTemplateButton': 'onAddTemplateButtonClick', 'click @ui.closeButton': 'onCloseButtonClick', 'click @ui.presets': 'onPresetSelected' }; } }, { key: 'behaviors', value: function behaviors() { return { contextMenu: { behaviorClass: __webpack_require__(8), groups: this.getContextMenuGroups() } }; } }, { key: 'className', value: function className() { return 'elementor-add-section elementor-visible-desktop'; } }, { key: 'addSection', value: function addSection(properties, options) { return elementor.getPreviewView().addChildElement(properties, jQuery.extend({}, this.options, options)); } }, { key: 'setView', value: function setView(view) { this.$el.attr('data-view', view); } }, { key: 'showSelectPresets', value: function showSelectPresets() { this.setView('select-preset'); } }, { key: 'closeSelectPresets', value: function closeSelectPresets() { this.setView('choose-action'); } }, { key: 'getTemplatesModalOptions', value: function getTemplatesModalOptions() { return { importOptions: { at: this.getOption('at') } }; } }, { key: 'getContextMenuGroups', value: function getContextMenuGroups() { var hasContent = function hasContent() { return elementor.elements.length > 0; }; return [{ name: 'paste', actions: [{ name: 'paste', title: elementor.translate('paste'), callback: this.paste.bind(this), isEnabled: this.isPasteEnabled.bind(this) }] }, { name: 'content', actions: [{ name: 'copy_all_content', title: elementor.translate('copy_all_content'), callback: this.copy.bind(this), isEnabled: hasContent }, { name: 'delete_all_content', title: elementor.translate('delete_all_content'), callback: elementor.clearPage.bind(elementor), isEnabled: hasContent }] }]; } }, { key: 'copy', value: function copy() { elementor.getPreviewView().copy(); } }, { key: 'paste', value: function paste() { elementor.getPreviewView().paste(this.getOption('at')); } }, { key: 'isPasteEnabled', value: function isPasteEnabled() { return elementorCommon.storage.get('transfer'); } }, { key: 'onAddSectionButtonClick', value: function onAddSectionButtonClick() { this.showSelectPresets(); } }, { key: 'onAddTemplateButtonClick', value: function onAddTemplateButtonClick() { elementor.templates.startModal(this.getTemplatesModalOptions()); } }, { key: 'onRender', value: function onRender() { this.$el.html5Droppable({ axis: ['vertical'], groups: ['elementor-element'], placeholder: false, currentElementClass: 'elementor-html5dnd-current-element', hasDraggingOnChildClass: 'elementor-dragging-on-child', onDropping: this.onDropping.bind(this) }); } }, { key: 'onPresetSelected', value: function onPresetSelected(event) { this.closeSelectPresets(); var selectedStructure = event.currentTarget.dataset.structure, parsedStructure = elementor.presetsFactory.getParsedStructure(selectedStructure), elements = []; var loopIndex = void 0; for (loopIndex = 0; loopIndex < parsedStructure.columnsCount; loopIndex++) { elements.push({ id: elementor.helpers.getUniqueID(), elType: 'column', settings: {}, elements: [] }); } elementor.channels.data.trigger('element:before:add', { elType: 'section' }); var newSection = this.addSection({ elements: elements }, { edit: false }); newSection.setStructure(selectedStructure); newSection.getEditModel().trigger('request:edit'); elementor.channels.data.trigger('element:after:add'); } }, { key: 'onDropping', value: function onDropping() { elementor.channels.data.trigger('section:before:drop'); this.addSection().addElementFromPanel(); elementor.channels.data.trigger('section:after:drop'); } }]); return AddSectionBase; }(Marionette.ItemView); exports.default = AddSectionBase; /***/ }), /* 29 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var ControlMultipleBaseItemView = __webpack_require__(2), ControlBoxShadowItemView; ControlBoxShadowItemView = ControlMultipleBaseItemView.extend({ ui: function ui() { var ui = ControlMultipleBaseItemView.prototype.ui.apply(this, arguments); ui.sliders = '.elementor-slider'; ui.colors = '.elementor-shadow-color-picker'; return ui; }, initSliders: function initSliders() { var _this = this; var value = this.getControlValue(); this.ui.sliders.each(function (index, slider) { var $input = jQuery(slider).next('.elementor-slider-input').find('input'); var sliderInstance = noUiSlider.create(slider, { start: [value[slider.dataset.input]], step: 1, range: { min: +$input.attr('min'), max: +$input.attr('max') }, format: { to: function to(sliderValue) { return +sliderValue.toFixed(1); }, from: function from(sliderValue) { return +sliderValue; } } }); sliderInstance.on('slide', function (values) { var type = sliderInstance.target.dataset.input; $input.val(values[0]); _this.setValue(type, values[0]); }); }); }, initColors: function initColors() { var self = this; elementor.helpers.wpColorPicker(this.ui.colors, { change: function change() { var $this = jQuery(this), type = $this.data('setting'); self.setValue(type, $this.wpColorPicker('color')); }, clear: function clear() { self.setValue(this.dataset.setting, ''); } }); }, onInputChange: function onInputChange(event) { var type = event.currentTarget.dataset.setting, $slider = this.ui.sliders.filter('[data-input="' + type + '"]'); $slider[0].noUiSlider.set(this.getControlValue(type)); }, onReady: function onReady() { this.initSliders(); this.initColors(); }, onBeforeDestroy: function onBeforeDestroy() { this.ui.colors.each(function () { var $color = jQuery(this); if ($color.wpColorPicker('instance')) { $color.wpColorPicker('close'); } }); this.$el.remove(); } }); module.exports = ControlBoxShadowItemView; /***/ }), /* 30 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var ControlBaseDataView = __webpack_require__(0), ControlChooseItemView; ControlChooseItemView = ControlBaseDataView.extend({ ui: function ui() { var ui = ControlBaseDataView.prototype.ui.apply(this, arguments); ui.inputs = '[type="radio"]'; return ui; }, events: function events() { return _.extend(ControlBaseDataView.prototype.events.apply(this, arguments), { 'mousedown label': 'onMouseDownLabel', 'click @ui.inputs': 'onClickInput', 'change @ui.inputs': 'onBaseInputChange' }); }, applySavedValue: function applySavedValue() { var currentValue = this.getControlValue(); if (currentValue) { this.ui.inputs.filter('[value="' + currentValue + '"]').prop('checked', true); } }, onMouseDownLabel: function onMouseDownLabel(event) { var $clickedLabel = this.$(event.currentTarget), $selectedInput = this.$('#' + $clickedLabel.attr('for')); $selectedInput.data('checked', $selectedInput.prop('checked')); }, onClickInput: function onClickInput(event) { if (!this.model.get('toggle')) { return; } var $selectedInput = this.$(event.currentTarget); if ($selectedInput.data('checked')) { $selectedInput.prop('checked', false).trigger('change'); } } }, { onPasteStyle: function onPasteStyle(control, clipboardValue) { return '' === clipboardValue || undefined !== control.options[clipboardValue]; } }); module.exports = ControlChooseItemView; /***/ }), /* 31 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var ControlBaseMultipleItemView = __webpack_require__(2), ControlBaseUnitsItemView; ControlBaseUnitsItemView = ControlBaseMultipleItemView.extend({ getCurrentRange: function getCurrentRange() { return this.getUnitRange(this.getControlValue('unit')); }, getUnitRange: function getUnitRange(unit) { var ranges = this.model.get('range'); if (!ranges || !ranges[unit]) { return false; } return ranges[unit]; } }); module.exports = ControlBaseUnitsItemView; /***/ }), /* 32 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var ControlBaseDataView = __webpack_require__(0), RepeaterRowView; RepeaterRowView = Marionette.CompositeView.extend({ template: Marionette.TemplateCache.get('#tmpl-elementor-repeater-row'), className: 'elementor-repeater-fields', ui: { duplicateButton: '.elementor-repeater-tool-duplicate', editButton: '.elementor-repeater-tool-edit', removeButton: '.elementor-repeater-tool-remove', itemTitle: '.elementor-repeater-row-item-title' }, behaviors: { HandleInnerTabs: { behaviorClass: __webpack_require__(12) } }, triggers: { 'click @ui.removeButton': 'click:remove', 'click @ui.duplicateButton': 'click:duplicate', 'click @ui.itemTitle': 'click:edit' }, modelEvents: { change: 'onModelChange' }, templateHelpers: function templateHelpers() { return { itemIndex: this.getOption('itemIndex'), itemActions: this.getOption('itemActions') }; }, childViewContainer: '.elementor-repeater-row-controls', getChildView: function getChildView(item) { var controlType = item.get('type'); return elementor.getControlView(controlType); }, childViewOptions: function childViewOptions() { return { elementSettingsModel: this.model }; }, updateIndex: function updateIndex(newIndex) { this.itemIndex = newIndex; }, setTitle: function setTitle() { var titleField = this.getOption('titleField'), title = ''; if (titleField) { var values = {}; this.children.each(function (child) { if (!(child instanceof ControlBaseDataView)) { return; } values[child.model.get('name')] = child.getControlValue(); }); title = Marionette.TemplateCache.prototype.compileTemplate(titleField)(this.model.parseDynamicSettings()); } if (!title) { title = elementor.translate('Item #%s', [this.getOption('itemIndex')]); } this.ui.itemTitle.html(title); }, initialize: function initialize(options) { this.itemIndex = 0; // Collection for Controls list this.collection = new Backbone.Collection(_.values(elementor.mergeControlsSettings(options.controlFields))); }, onRender: function onRender() { this.setTitle(); }, onModelChange: function onModelChange() { if (this.getOption('titleField')) { this.setTitle(); } }, onChildviewResponsiveSwitcherClick: function onChildviewResponsiveSwitcherClick(childView, device) { if ('desktop' === device) { elementor.getPanelView().getCurrentPageView().$el.toggleClass('elementor-responsive-switchers-open'); } } }); module.exports = RepeaterRowView; /***/ }), /* 33 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var ColumnSettingsModel = __webpack_require__(127), ElementModel; ElementModel = Backbone.Model.extend({ defaults: { id: '', elType: '', isInner: false, settings: {}, defaultEditSettings: {} }, remoteRender: false, _htmlCache: null, _jqueryXhr: null, renderOnLeave: false, initialize: function initialize(options) { var elType = this.get('elType'), elements = this.get('elements'); if (undefined !== elements) { var ElementsCollection = __webpack_require__(34); this.set('elements', new ElementsCollection(elements)); } if ('widget' === elType) { this.remoteRender = true; this.setHtmlCache(options.htmlCache || ''); } // No need this variable anymore delete options.htmlCache; // Make call to remote server as throttle function this.renderRemoteServer = _.throttle(this.renderRemoteServer, 1000); this.initSettings(); this.initEditSettings(); this.on({ destroy: this.onDestroy, 'editor:close': this.onCloseEditor }); }, initSettings: function initSettings() { var elType = this.get('elType'), settings = this.get('settings'), settingModels = { column: ColumnSettingsModel }, SettingsModel = settingModels[elType] || elementorModules.editor.elements.models.BaseSettings; if (jQuery.isEmptyObject(settings)) { settings = elementorCommon.helpers.cloneObject(settings); } if ('widget' === elType) { settings.widgetType = this.get('widgetType'); } settings.elType = elType; settings.isInner = this.get('isInner'); settings = new SettingsModel(settings, { controls: elementor.getElementControls(this) }); this.set('settings', settings); ceFrontend.config.elements.data[this.cid] = settings; }, initEditSettings: function initEditSettings() { var editSettings = new Backbone.Model(this.get('defaultEditSettings')); this.set('editSettings', editSettings); ceFrontend.config.elements.editSettings[this.cid] = editSettings; }, setSetting: function setSetting(key, value) { var settings = this.get('settings'); if ('object' !== (typeof key === 'undefined' ? 'undefined' : _typeof(key))) { var keyParts = key.split('.'), isRepeaterKey = 3 === keyParts.length; key = keyParts[0]; if (isRepeaterKey) { settings = settings.get(key).models[keyParts[1]]; key = keyParts[2]; } } settings.setExternalChange(key, value); }, getSetting: function getSetting(key) { var keyParts = key.split('.'), isRepeaterKey = 3 === keyParts.length, settings = this.get('settings'); key = keyParts[0]; var value = settings.get(key); if (undefined === value) { return ''; } if (isRepeaterKey) { value = value.models[keyParts[1]].get(keyParts[2]); } return value; }, setHtmlCache: function setHtmlCache(htmlCache) { this._htmlCache = htmlCache; }, getHtmlCache: function getHtmlCache() { return this._htmlCache; }, getDefaultTitle: function getDefaultTitle() { return elementor.getElementData(this).title; }, getTitle: function getTitle() { var title = this.getSetting('_title'); if (!title) { title = this.getDefaultTitle(); } return title; }, getIcon: function getIcon() { return elementor.getElementData(this).icon; }, createRemoteRenderRequest: function createRemoteRenderRequest() { var actions = {}, data = this.toJSON(); actions['render_' + data.id] = { action: 'render_' + data.id, data: data }; return Backbone.$.post(elementor.config.document.urls.preview, { render: 'widget', editor_post_id: elementor.config.document.id, actions: JSON.stringify(actions), }, null, 'json').always(function (arg, status) { var data = 'success' === status ? arg : arg.responseJSON; data && this.onRemoteGetHtml(data); }.bind(this)); }, renderRemoteServer: function renderRemoteServer() { if (!this.remoteRender) { return; } this.renderOnLeave = false; this.trigger('before:remote:render'); if (this.isRemoteRequestActive()) { this._jqueryXhr.abort(); } this._jqueryXhr = this.createRemoteRenderRequest(); }, isRemoteRequestActive: function isRemoteRequestActive() { return this._jqueryXhr && 4 !== this._jqueryXhr.readyState; }, onRemoteGetHtml: function onRemoteGetHtml(data) { this.setHtmlCache(data['render_' + this.id]); this.trigger('remote:render'); }, clone: function clone() { var newModel = new this.constructor(elementorCommon.helpers.cloneObject(this.attributes)); newModel.set('id', elementor.helpers.getUniqueID()); newModel.setHtmlCache(this.getHtmlCache()); var elements = this.get('elements'); if (!_.isEmpty(elements)) { newModel.set('elements', elements.clone()); } return newModel; }, toJSON: function toJSON(options) { options = options || {}; // Call parent's toJSON method var data = Backbone.Model.prototype.toJSON.call(this); _.each(data, function (attribute, key) { if (attribute && attribute.toJSON) { data[key] = attribute.toJSON(options); } }); if (options.copyHtmlCache) { data.htmlCache = this.getHtmlCache(); } else { delete data.htmlCache; } if (options.remove) { options.remove.forEach(function (key) { return delete data[key]; }); } return data; }, onCloseEditor: function onCloseEditor() { if (this.renderOnLeave) { this.renderRemoteServer(); } }, onDestroy: function onDestroy() { // Clean the memory for all use instances var settings = this.get('settings'), elements = this.get('elements'); if (undefined !== elements) { _.each(_.clone(elements.models), function (model) { model.destroy(); }); } settings.destroy(); } }); ElementModel.prototype.sync = ElementModel.prototype.fetch = ElementModel.prototype.save = _.noop; module.exports = ElementModel; /***/ }), /* 34 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var ElementModel = __webpack_require__(33); var ElementsCollection = Backbone.Collection.extend({ add: function add(models, options, isCorrectSet) { if ((!options || !options.silent) && !isCorrectSet) { throw 'Call Error: Adding model to element collection is allowed only by the dedicated addChildModel() method.'; } return Backbone.Collection.prototype.add.call(this, models, options); }, model: function model(attrs, options) { var ModelClass = Backbone.Model; if (attrs.elType) { ModelClass = elementor.hooks.applyFilters('element/model', ElementModel, attrs); } return new ModelClass(attrs, options); }, clone: function clone() { var tempCollection = Backbone.Collection.prototype.clone.apply(this, arguments), newCollection = new ElementsCollection(); tempCollection.forEach(function (model) { newCollection.add(model.clone(), null, true); }); return newCollection; } }); ElementsCollection.prototype.sync = ElementsCollection.prototype.fetch = ElementsCollection.prototype.save = _.noop; module.exports = ElementsCollection; /***/ }), /* 35 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = Marionette.ItemView.extend({ template: '#tmpl-elementor-panel-global', id: 'elementor-panel-global', initialize: function initialize() { elementor.getPanelView().getCurrentPageView().search.reset(); }, onDestroy: function onDestroy() { var panel = elementor.getPanelView(); if ('elements' === panel.getCurrentPageName()) { setTimeout(function () { var elementsPageView = panel.getCurrentPageView(); if (!elementsPageView.search.currentView) { elementsPageView.showView('search'); } }); } } }); /***/ }), /* 36 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = Marionette.ItemView.extend({ template: '#tmpl-elementor-element-library-element', className: 'elementor-element-wrapper', ui: { element: '.elementor-element' }, onRender: function onRender() { var _this = this; if (!elementor.userCan('design')) { return; } this.ui.element.html5Draggable({ onDragStart: function onDragStart() { elementor.channels.panelElements.reply('element:selected', _this).trigger('element:drag:start'); }, onDragEnd: function onDragEnd() { elementor.channels.panelElements.trigger('element:drag:end'); }, groups: ['elementor-element'] }); } }); /***/ }), /* 37 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var PanelElementsElementModel; PanelElementsElementModel = Backbone.Model.extend({ defaults: { title: '', categories: [], keywords: [], icon: '', elType: 'widget', widgetType: '' } }); module.exports = PanelElementsElementModel; /***/ }), /* 38 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var PanelElementsElementModel = __webpack_require__(37), PanelElementsElementsCollection; PanelElementsElementsCollection = Backbone.Collection.extend({ model: PanelElementsElementModel /*, comparator: 'title'*/ }); module.exports = PanelElementsElementsCollection; /***/ }), /* 39 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var PanelSchemeBaseView = __webpack_require__(40), PanelSchemeColorsView; PanelSchemeColorsView = PanelSchemeBaseView.extend({ ui: function ui() { var ui = PanelSchemeBaseView.prototype.ui.apply(this, arguments); ui.systemSchemes = '.elementor-panel-scheme-color-system-scheme'; return ui; }, events: function events() { var events = PanelSchemeBaseView.prototype.events.apply(this, arguments); events['click @ui.systemSchemes'] = 'onSystemSchemeClick'; return events; }, getType: function getType() { return 'color'; }, onSystemSchemeClick: function onSystemSchemeClick(event) { var $schemeClicked = jQuery(event.currentTarget), schemeName = $schemeClicked.data('schemeName'), scheme = elementor.config.system_schemes[this.getType()][schemeName].items; this.changeChildrenUIValues(scheme); } }); module.exports = PanelSchemeColorsView; /***/ }), /* 40 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var childViewTypes = { color: __webpack_require__(153), typography: __webpack_require__(154) }, PanelSchemeBaseView; PanelSchemeBaseView = Marionette.CompositeView.extend({ id: function id() { return 'elementor-panel-scheme-' + this.getType(); }, className: function className() { return 'elementor-panel-scheme elementor-panel-scheme-' + this.getUIType(); }, childViewContainer: '.elementor-panel-scheme-items', getTemplate: function getTemplate() { return Marionette.TemplateCache.get('#tmpl-elementor-panel-schemes-' + this.getType()); }, getChildView: function getChildView() { return childViewTypes[this.getUIType()]; }, getUIType: function getUIType() { return this.getType(); }, ui: function ui() { return { saveButton: '.elementor-panel-scheme-save .elementor-button', discardButton: '.elementor-panel-scheme-discard .elementor-button', resetButton: '.elementor-panel-scheme-reset .elementor-button' }; }, events: function events() { return { 'click @ui.saveButton': 'saveScheme', 'click @ui.discardButton': 'discardScheme', 'click @ui.resetButton': 'setDefaultScheme' }; }, initialize: function initialize() { this.model = new Backbone.Model(); this.resetScheme(); }, getType: function getType() {}, getScheme: function getScheme() { return elementor.schemes.getScheme(this.getType()); }, changeChildrenUIValues: function changeChildrenUIValues(schemeItems) { var self = this; _.each(schemeItems, function (value, key) { var model = self.collection.findWhere({ key: key }), childView = self.children.findByModelCid(model.cid); childView.changeUIValue(value); }); }, discardScheme: function discardScheme() { elementor.schemes.resetSchemes(this.getType()); this.onSchemeChange(); this.ui.saveButton.prop('disabled', true); this._renderChildren(); }, setSchemeValue: function setSchemeValue(key, value) { elementor.schemes.setSchemeValue(this.getType(), key, value); this.onSchemeChange(); }, saveScheme: function saveScheme() { elementor.schemes.saveScheme(this.getType()); this.ui.saveButton.prop('disabled', true); this.resetScheme(); this._renderChildren(); }, setDefaultScheme: function setDefaultScheme() { var defaultScheme = elementor.config.default_schemes[this.getType()].items; this.changeChildrenUIValues(defaultScheme); }, resetItems: function resetItems() { this.model.set('items', this.getScheme().items); }, resetCollection: function resetCollection() { var self = this, items = self.model.get('items'); self.collection = new Backbone.Collection(); _.each(items, function (item, key) { item.type = self.getType(); item.key = key; self.collection.add(item); }); }, resetScheme: function resetScheme() { this.resetItems(); this.resetCollection(); }, onSchemeChange: function onSchemeChange() { elementor.schemes.printSchemesStyle(); }, onChildviewValueChange: function onChildviewValueChange(childView, newValue) { this.ui.saveButton.removeProp('disabled'); this.setSchemeValue(childView.model.get('key'), newValue); } }); module.exports = PanelSchemeBaseView; /***/ }), /* 41 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var PanelSchemeItemView; PanelSchemeItemView = Marionette.ItemView.extend({ getTemplate: function getTemplate() { return Marionette.TemplateCache.get('#tmpl-elementor-panel-scheme-' + this.getUIType() + '-item'); }, className: function className() { return 'elementor-panel-scheme-item'; } }); module.exports = PanelSchemeItemView; /***/ }), /* 42 */, /* 43 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(44); __webpack_require__(45); module.exports = __webpack_require__(46); /***/ }), /* 44 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* * jQuery Serialize Object v1.0.1 */ (function ($) { $.fn.elementorSerializeObject = function () { var serializedArray = this.serializeArray(), data = {}; var parseObject = function parseObject(dataContainer, key, value) { var isArrayKey = /^[^\[\]]+\[]/.test(key), isObjectKey = /^[^\[\]]+\[[^\[\]]+]/.test(key), keyName = key.replace(/\[.*/, ''); if (isArrayKey) { if (!dataContainer[keyName]) { dataContainer[keyName] = []; } } else { if (!isObjectKey) { if (dataContainer.push) { dataContainer.push(value); } else { dataContainer[keyName] = value; } return; } if (!dataContainer[keyName]) { dataContainer[keyName] = {}; } } var nextKeys = key.match(/\[[^\[\]]*]/g); nextKeys[0] = nextKeys[0].replace(/\[|]/g, ''); return parseObject(dataContainer[keyName], nextKeys.join(''), value); }; $.each(serializedArray, function () { parseObject(data, this.name, this.value); }); return data; }; })(jQuery); /***/ }), /* 45 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * HTML5 - Drag and Drop */ (function ($) { var hasFullDataTransferSupport = function hasFullDataTransferSupport(event) { try { event.originalEvent.dataTransfer.setData('test', 'test'); event.originalEvent.dataTransfer.clearData('test'); return true; } catch (e) { return false; } }; var Draggable = function Draggable(userSettings) { var self = this, settings = {}, elementsCache = {}, defaultSettings = { element: '', groups: null, onDragStart: null, onDragEnd: null }; var initSettings = function initSettings() { $.extend(true, settings, defaultSettings, userSettings); }; var initElementsCache = function initElementsCache() { elementsCache.$element = $(settings.element); }; var buildElements = function buildElements() { elementsCache.$element.attr('draggable', true); }; var onDragEnd = function onDragEnd(event) { if ($.isFunction(settings.onDragEnd)) { settings.onDragEnd.call(elementsCache.$element, event, self); } }; var onDragStart = function onDragStart(event) { var groups = settings.groups || [], dataContainer = { groups: groups }; if (hasFullDataTransferSupport(event)) { event.originalEvent.dataTransfer.setData(JSON.stringify(dataContainer), true); } if ($.isFunction(settings.onDragStart)) { settings.onDragStart.call(elementsCache.$element, event, self); } }; var attachEvents = function attachEvents() { elementsCache.$element.on('dragstart', onDragStart).on('dragend', onDragEnd); }; var init = function init() { initSettings(); initElementsCache(); buildElements(); attachEvents(); }; this.destroy = function () { elementsCache.$element.off('dragstart', onDragStart); elementsCache.$element.removeAttr('draggable'); }; init(); }; var Droppable = function Droppable(userSettings) { var self = this, settings = {}, elementsCache = {}, currentElement, currentSide, defaultSettings = { element: '', items: '>', horizontalSensitivity: '10%', axis: ['vertical', 'horizontal'], placeholder: true, currentElementClass: 'html5dnd-current-element', placeholderClass: 'html5dnd-placeholder', hasDraggingOnChildClass: 'html5dnd-has-dragging-on-child', groups: null, isDroppingAllowed: null, onDragEnter: null, onDragging: null, onDropping: null, onDragLeave: null }; var initSettings = function initSettings() { $.extend(settings, defaultSettings, userSettings); }; var initElementsCache = function initElementsCache() { elementsCache.$element = $(settings.element); elementsCache.$placeholder = $('
', { class: settings.placeholderClass }); }; var hasHorizontalDetection = function hasHorizontalDetection() { return -1 !== settings.axis.indexOf('horizontal'); }; var hasVerticalDetection = function hasVerticalDetection() { return -1 !== settings.axis.indexOf('vertical'); }; var checkHorizontal = function checkHorizontal(offsetX, elementWidth) { var isPercentValue, sensitivity; if (!hasHorizontalDetection()) { return false; } if (!hasVerticalDetection()) { return offsetX > elementWidth / 2 ? 'right' : 'left'; } sensitivity = settings.horizontalSensitivity.match(/\d+/); if (!sensitivity) { return false; } sensitivity = sensitivity[0]; isPercentValue = /%$/.test(settings.horizontalSensitivity); if (isPercentValue) { sensitivity = elementWidth / sensitivity; } if (offsetX > elementWidth - sensitivity) { return 'right'; } else if (offsetX < sensitivity) { return 'left'; } return false; }; var setSide = function setSide(event) { var $element = $(currentElement), elementHeight = $element.outerHeight() - elementsCache.$placeholder.outerHeight(), elementWidth = $element.outerWidth(); event = event.originalEvent; currentSide = checkHorizontal(event.offsetX, elementWidth); if (currentSide) { return; } if (!hasVerticalDetection()) { currentSide = null; return; } var elementPosition = currentElement.getBoundingClientRect(); currentSide = event.clientY > elementPosition.top + elementHeight / 2 ? 'bottom' : 'top'; }; var insertPlaceholder = function insertPlaceholder() { if (!settings.placeholder) { return; } var insertMethod = 'top' === currentSide ? 'prependTo' : 'appendTo'; elementsCache.$placeholder[insertMethod](currentElement); }; var isDroppingAllowed = function isDroppingAllowed(event) { var dataTransferTypes, draggableGroups, isGroupMatch, droppingAllowed; if (settings.groups && hasFullDataTransferSupport(event)) { dataTransferTypes = event.originalEvent.dataTransfer.types; isGroupMatch = false; dataTransferTypes = Array.prototype.slice.apply(dataTransferTypes); // Convert to array, since Firefox hold it as DOMStringList dataTransferTypes.forEach(function (type) { try { draggableGroups = JSON.parse(type); if (!draggableGroups.groups.slice) { return; } settings.groups.forEach(function (groupName) { if (-1 !== draggableGroups.groups.indexOf(groupName)) { isGroupMatch = true; return false; // stops the forEach from extra loops } }); } catch (e) {} }); if (!isGroupMatch) { return false; } } if ($.isFunction(settings.isDroppingAllowed)) { droppingAllowed = settings.isDroppingAllowed.call(currentElement, currentSide, event, self); if (!droppingAllowed) { return false; } } return true; }; var onDragEnter = function onDragEnter(event) { event.stopPropagation(); if (currentElement) { return; } currentElement = this; elementsCache.$element.parents().each(function () { var droppableInstance = $(this).data('html5Droppable'); if (!droppableInstance) { return; } droppableInstance.doDragLeave(); }); setSide(event); if (!isDroppingAllowed(event)) { return; } insertPlaceholder(); elementsCache.$element.addClass(settings.hasDraggingOnChildClass); $(currentElement).addClass(settings.currentElementClass); if ($.isFunction(settings.onDragEnter)) { settings.onDragEnter.call(currentElement, currentSide, event, self); } }; var onDragOver = function onDragOver(event) { event.stopPropagation(); if (!currentElement) { onDragEnter.call(this, event); } var oldSide = currentSide; setSide(event); if (!isDroppingAllowed(event)) { return; } event.preventDefault(); if (oldSide !== currentSide) { insertPlaceholder(); } if ($.isFunction(settings.onDragging)) { settings.onDragging.call(this, currentSide, event, self); } }; var onDragLeave = function onDragLeave(event) { var elementPosition = this.getBoundingClientRect(), oe = event.originalEvent; // Old jQuery compatibiliy fix if ('dragleave' === event.type && oe.clientX >= elementPosition.left && oe.clientX < elementPosition.right && oe.clientY >= elementPosition.top && oe.clientY < elementPosition.bottom) { return; } $(currentElement).removeClass(settings.currentElementClass); self.doDragLeave(); }; var onDrop = function onDrop(event) { setSide(event); if (!isDroppingAllowed(event)) { return; } event.preventDefault(); if ($.isFunction(settings.onDropping)) { settings.onDropping.call(this, currentSide, event, self); } }; var attachEvents = function attachEvents() { elementsCache.$element.on('dragenter', settings.items, onDragEnter).on('dragover', settings.items, onDragOver).on('drop', settings.items, onDrop).on('dragleave drop', settings.items, onDragLeave); }; var init = function init() { initSettings(); initElementsCache(); attachEvents(); }; this.doDragLeave = function () { if (settings.placeholder) { elementsCache.$placeholder.remove(); } elementsCache.$element.removeClass(settings.hasDraggingOnChildClass); if ($.isFunction(settings.onDragLeave)) { settings.onDragLeave.call(currentElement, event, self); } currentElement = currentSide = null; }; this.destroy = function () { elementsCache.$element.off('dragenter', settings.items, onDragEnter).off('dragover', settings.items, onDragOver).off('drop', settings.items, onDrop).off('dragleave drop', settings.items, onDragLeave); }; init(); }; var plugins = { html5Draggable: Draggable, html5Droppable: Droppable }; $.each(plugins, function (pluginName, Plugin) { $.fn[pluginName] = function (options) { options = options || {}; this.each(function () { var instance = $.data(this, pluginName), hasInstance = instance instanceof Plugin; if (hasInstance) { if ('destroy' === options) { instance.destroy(); $.removeData(this, pluginName); } return; } options.element = this; $.data(this, pluginName, new Plugin(options)); }); return this; }; }); })(jQuery); /***/ }), /* 46 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _heartbeat = __webpack_require__(47); var _heartbeat2 = _interopRequireDefault(_heartbeat); var _navigator = __webpack_require__(48); var _navigator2 = _interopRequireDefault(_navigator); var _hotkeys = __webpack_require__(53); var _hotkeys2 = _interopRequireDefault(_hotkeys); var _environment = __webpack_require__(1); var _environment2 = _interopRequireDefault(_environment); var _dateTime = __webpack_require__(56); var _dateTime2 = _interopRequireDefault(_dateTime); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var App = Marionette.Application.extend({ loaded: false, previewLoadedOnce: false, helpers: __webpack_require__(61), imagesManager: __webpack_require__(62), // debug: __webpack_require__(63), schemes: __webpack_require__(64), presetsFactory: __webpack_require__(65), templates: __webpack_require__(66), // TODO: BC Since 2.3.0 ajax: elementorCommon.ajax, conditions: __webpack_require__(81), history: __webpack_require__(82), channels: { editor: Backbone.Radio.channel('ELEMENTOR:editor'), data: Backbone.Radio.channel('ELEMENTOR:data'), panelElements: Backbone.Radio.channel('ELEMENTOR:panelElements'), dataEditMode: Backbone.Radio.channel('ELEMENTOR:editmode'), deviceMode: Backbone.Radio.channel('ELEMENTOR:deviceMode'), templates: Backbone.Radio.channel('ELEMENTOR:templates') }, /** * Exporting modules that can be used externally * @TODO: All of the following entries should move to `elementorModules.editor` */ modules: { // TODO: Deprecated alias since 2.3.0 get Module() { elementorCommon.helpers.deprecatedMethod('elementor.modules.Module', '2.3.0', 'elementorModules.Module'); return elementorModules.Module; }, components: { templateLibrary: { views: { // TODO: Deprecated alias since 2.4.0 get BaseModalLayout() { elementorCommon.helpers.deprecatedMethod('elementor.modules.components.templateLibrary.views.BaseModalLayout', '2.4.0', 'elementorModules.common.views.modal.Layout'); return elementorModules.common.views.modal.Layout; } } }, saver: { behaviors: { FooterSaver: __webpack_require__(102) } } }, controls: { Animation: __webpack_require__(4), Base: __webpack_require__(3), BaseData: __webpack_require__(0), BaseMultiple: __webpack_require__(2), Box_shadow: __webpack_require__(29), Button: __webpack_require__(103), Choose: __webpack_require__(30), Code: __webpack_require__(104), Color: __webpack_require__(105), Date_time: _dateTime2.default, Dimensions: __webpack_require__(106), Font: __webpack_require__(107), // Gallery: __webpack_require__(108), Hidden: __webpack_require__(109), Hover_animation: __webpack_require__(4), Icon: __webpack_require__(110), Image_dimensions: __webpack_require__(111), Media: __webpack_require__(112), Number: __webpack_require__(113), Order: __webpack_require__(115), Popover_toggle: __webpack_require__(116), Repeater: __webpack_require__(117), RepeaterRow: __webpack_require__(32), Section: __webpack_require__(118), Select: __webpack_require__(119), Select2: __webpack_require__(4), Select_category: __webpack_require__(4), Select_manufacturer: __webpack_require__(4), Select_supplier: __webpack_require__(4), Slider: __webpack_require__(120), Structure: __webpack_require__(121), Switcher: __webpack_require__(122), Tab: __webpack_require__(123), Text_shadow: __webpack_require__(29), Url: __webpack_require__(124), // Wp_widget: __webpack_require__(125), Wysiwyg: __webpack_require__(126) }, elements: { models: { // TODO: Deprecated alias since 2.4.0 get BaseSettings() { elementorCommon.helpers.deprecatedMethod('elementor.modules.elements.models.BaseSettings', '2.4.0', 'elementorModules.editor.elements.models.BaseSettings'); return elementorModules.editor.elements.models.BaseSettings; }, Element: __webpack_require__(33) }, views: { Widget: __webpack_require__(128) } }, layouts: { panel: { pages: { elements: { views: { Global: __webpack_require__(35), Elements: __webpack_require__(132) } }, menu: { Menu: __webpack_require__(133) } } } }, views: { // TODO: Deprecated alias since 2.4.0 get ControlsStack() { elementorCommon.helpers.deprecatedMethod('elementor.modules.views.ControlsStack', '2.4.0', 'elementorModules.editor.views.ControlsStack'); return elementorModules.editor.views.ControlsStack; } } }, backgroundClickListeners: { popover: { element: '.elementor-controls-popover', ignore: '.elementor-control-popover-toggle-toggle, .elementor-control-popover-toggle-toggle-label, .select2-container' }, tagsList: { element: '.elementor-tags-list', ignore: '.elementor-control-dynamic-switcher' }, panelFooterSubMenus: { element: '.elementor-panel-footer-tool', ignore: '.elementor-panel-footer-tool.elementor-toggle-state, #elementor-panel-saver-button-publish-label', callback: function callback($elementsToHide) { $elementsToHide.removeClass('elementor-open'); } } }, userCan: function userCan(capability) { return -1 === this.config.user.restrictions.indexOf(capability); }, _defaultDeviceMode: 'desktop', addControlView: function addControlView(controlID, ControlView) { this.modules.controls[elementorCommon.helpers.firstLetterUppercase(controlID)] = ControlView; }, checkEnvCompatibility: function checkEnvCompatibility() { return _environment2.default.firefox || _environment2.default.webkit; }, getElementData: function getElementData(model) { var elType = model.get('elType'); if ('widget' === elType) { var widgetType = model.get('widgetType'); if (!this.config.widgets[widgetType]) { return false; } if (!this.config.widgets[widgetType].commonMerged) { jQuery.extend(this.config.widgets[widgetType].controls, this.config.widgets.common.controls); this.config.widgets[widgetType].commonMerged = true; } return this.config.widgets[widgetType]; } if (!this.config.elements[elType]) { return false; } var elementConfig = elementorCommon.helpers.cloneObject(this.config.elements[elType]); if ('section' === elType && model.get('isInner')) { elementConfig.title = this.translate('inner_section'); } return elementConfig; }, getElementControls: function getElementControls(modelElement) { var self = this, elementData = self.getElementData(modelElement); if (!elementData) { return false; } var isInner = modelElement.get('isInner'), controls = {}; _.each(elementData.controls, function (controlData, controlKey) { if (isInner && controlData.hide_in_inner || !isInner && controlData.hide_in_top) { return; } controls[controlKey] = controlData; }); return controls; }, mergeControlsSettings: function mergeControlsSettings(controls) { var _this = this; _.each(controls, function (controlData, controlKey) { controls[controlKey] = jQuery.extend(true, {}, _this.config.controls[controlData.type], controlData); }); return controls; }, getControlView: function getControlView(controlID) { var capitalizedControlName = elementorCommon.helpers.firstLetterUppercase(controlID), View = this.modules.controls[capitalizedControlName]; if (!View) { var controlData = this.config.controls[controlID], isUIControl = -1 !== controlData.features.indexOf('ui'); View = this.modules.controls[isUIControl ? 'Base' : 'BaseData']; } return View; }, getPanelView: function getPanelView() { return this.panel.currentView; }, getPreviewView: function getPreviewView() { return this.sections.currentView; }, initComponents: function initComponents() { var EventManager = __webpack_require__(13), DynamicTags = __webpack_require__(136), Settings = __webpack_require__(138), Saver = __webpack_require__(142), Notifications = __webpack_require__(143), AssetsManager = __webpack_require__(15); this.hooks = new EventManager(); this.saver = new Saver(); this.settings = new Settings(); this.dynamicTags = new DynamicTags(); this.templates.init(); this.initDialogsManager(); this.notifications = new Notifications(); this.initHotKeys(); this.hotkeysScreen = new _hotkeys2.default(); this.fontsManager = new AssetsManager(); }, // TODO: BC method since 2.3.0 initDialogsManager: function initDialogsManager() { this.dialogsManager = elementorCommon.dialogsManager; }, initElements: function initElements() { var ElementCollection = __webpack_require__(34), config = this.config.data; // If it's an reload, use the not-saved data if (this.elements) { config = this.elements.toJSON(); } this.elements = new ElementCollection(config); this.elementsModel = new Backbone.Model({ elements: this.elements }); }, initPreview: function initPreview() { var $ = jQuery; this.$previewWrapper = $('#elementor-preview'); this.$previewResponsiveWrapper = $('#elementor-preview-responsive-wrapper'); var previewIframeId = 'elementor-preview-iframe'; // Make sure the iFrame does not exist. if (!this.$preview) { this.$preview = $('