/*!
* 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 = $('