', {
class: 'elementor-column-percents-tooltip'
});
this.$el.children('.elementor-element-overlay').append($tooltip);
},
getContextMenuGroups: function getContextMenuGroups() {
var self = this,
groups = BaseElementView.prototype.getContextMenuGroups.apply(this, arguments),
generalGroupIndex = groups.indexOf(_.findWhere(groups, {
name: 'general'
}));
groups.splice(generalGroupIndex + 1, 0, {
name: 'addNew',
actions: [{
name: 'addNew',
icon: 'eicon-plus',
title: __('Add New Column', 'elementor'),
callback: this.addNewColumn.bind(this),
isEnabled: function isEnabled() {
return self.model.collection.length < _section.DEFAULT_MAX_COLUMNS;
}
}]
});
return groups;
},
isDroppingAllowed: function isDroppingAllowed() {
// Don't allow dragging items to document which is not editable.
if (!this.getContainer().isEditable()) {
return false;
}
var elementView = elementor.channels.panelElements.request('element:selected');
if (!elementView) {
return false;
}
var elType = elementView.model.get('elType');
if ('section' === elType) {
return !this.isInner();
}
return 'widget' === elType;
},
getPercentsForDisplay: function getPercentsForDisplay() {
var inlineSize = +this.model.getSetting('_inline_size') || this.getPercentSize();
return inlineSize.toFixed(1) + '%';
},
changeSizeUI: function changeSizeUI() {
var self = this,
columnSize = self.model.getSetting('_column_size');
self.$el.attr('data-col', columnSize);
_.defer(function () {
// Wait for the column size to be applied
if (self.ui.percentsTooltip) {
self.ui.percentsTooltip.text(self.getPercentsForDisplay());
}
});
},
getPercentSize: function getPercentSize(size) {
if (!size) {
size = this.el.getBoundingClientRect().width;
}
return +(size / this.$el.parent().width() * 100).toFixed(3);
},
getSortableOptions: function getSortableOptions() {
return {
connectWith: '.elementor-widget-wrap',
items: '> .elementor-element'
};
},
changeChildContainerClasses: function changeChildContainerClasses() {
var emptyClass = 'elementor-element-empty',
populatedClass = 'elementor-element-populated';
if (this.ui.columnInner) {
if (this.collection.isEmpty()) {
this.ui.columnInner.removeClass(populatedClass).addClass(emptyClass);
} else {
this.ui.columnInner.removeClass(emptyClass).addClass(populatedClass);
}
}
},
addNewColumn: function addNewColumn() {
$e.run('document/elements/create', {
model: {
elType: 'column'
},
container: this.getContainer().parent,
options: {
at: this.$el.index() + 1
}
});
},
onRender: function onRender() {
var _this = this;
var isDomOptimizationActive = elementorCommon.config.experimentalFeatures['e_dom_optimization'];
var itemsClasses = '';
if (isDomOptimizationActive) {
itemsClasses = ' > .elementor-widget-wrap > .elementor-element, >.elementor-widget-wrap > .elementor-empty-view > .elementor-first-add';
} else {
itemsClasses = ' > .elementor-column-wrap > .elementor-widget-wrap > .elementor-element, >.elementor-column-wrap > .elementor-widget-wrap > .elementor-empty-view > .elementor-first-add';
}
BaseElementView.prototype.onRender.apply(this, arguments);
this.changeChildContainerClasses();
this.changeSizeUI();
this.$el.html5Droppable({
items: itemsClasses,
axis: ['vertical'],
groups: ['elementor-element'],
isDroppingAllowed: this.isDroppingAllowed.bind(this),
currentElementClass: 'elementor-html5dnd-current-element',
placeholderClass: 'elementor-sortable-placeholder elementor-widget-placeholder',
hasDraggingOnChildClass: 'elementor-dragging-on-child',
onDropping: function onDropping(side, event) {
event.stopPropagation(); // Triggering drag end manually, since it won't fired above iframe
elementor.getPreviewView().onPanelElementDragEnd();
var newIndex = jQuery(event.currentTarget).index(); // Since 3.0.0, the `.elementor-background-overlay` element sit at the same level as widgets
if ('bottom' === side && !isDomOptimizationActive) {
newIndex++;
} else if ('top' === side && isDomOptimizationActive) {
newIndex--;
}
_this.addElementFromPanel({
at: newIndex
});
}
});
},
onAddButtonClick: function onAddButtonClick(event) {
event.stopPropagation();
this.addNewColumn();
}
});
module.exports = ColumnView;
/***/ }),
/***/ "../assets/dev/js/editor/elements/views/section.js":
/*!*********************************************************!*\
!*** ../assets/dev/js/editor/elements/views/section.js ***!
\*********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var sprintf = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["sprintf"];
/* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime-corejs2/helpers/interopRequireDefault */ "../node_modules/@babel/runtime-corejs2/helpers/interopRequireDefault.js");
__webpack_require__(/*! core-js/modules/es6.array.find.js */ "../node_modules/core-js/modules/es6.array.find.js");
var _inline = _interopRequireDefault(__webpack_require__(/*! ../../views/add-section/inline */ "../assets/dev/js/editor/views/add-section/inline.js"));
var BaseElementView = __webpack_require__(/*! elementor-elements/views/base */ "../assets/dev/js/editor/elements/views/base.js");
var DEFAULT_INNER_SECTION_COLUMNS = 2,
DEFAULT_MIN_COLUMN_SIZE = 2,
DEFAULT_MAX_COLUMNS = 10;
var SectionView = BaseElementView.extend({
childViewContainer: function childViewContainer() {
var containerSelector = '> .elementor-container';
if (!elementorCommon.config.experimentalFeatures['e_dom_optimization']) {
containerSelector += ' > .elementor-row';
}
return containerSelector;
},
template: Marionette.TemplateCache.get('#tmpl-elementor-section-content'),
addSectionView: null,
_checkIsFull: function _checkIsFull() {
this.toggleSectionIsFull();
elementorCommon.helpers.softDeprecated('_checkIsFull', '2.9.0', 'toggleSectionIsFull()');
},
toggleSectionIsFull: function toggleSectionIsFull() {
this.$el.toggleClass('elementor-section-filled', this.isCollectionFilled());
},
addChildModel: function addChildModel(model) {
/// TODO: maybe should be part of $e.hooks.
var isModelInstance = model instanceof Backbone.Model,
isInner = this.isInner();
if (isModelInstance) {
// TODO: change to command.
model.set('isInner', isInner);
} else {
model.isInner = isInner;
}
return BaseElementView.prototype.addChildModel.apply(this, arguments);
},
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';
},
behaviors: function behaviors() {
var behaviors = BaseElementView.prototype.behaviors.apply(this, arguments);
_.extend(behaviors, {
Sortable: {
behaviorClass: __webpack_require__(/*! elementor-behaviors/sortable */ "../assets/dev/js/editor/elements/views/behaviors/sortable.js"),
elChildType: 'column'
}
});
return elementor.hooks.applyFilters('elements/section/behaviors', behaviors, this);
},
initialize: function initialize() {
BaseElementView.prototype.initialize.apply(this, arguments);
this.model.get('editSettings').set('defaultEditRoute', 'layout');
},
getEditButtons: function getEditButtons() {
var elementData = elementor.getElementData(this.model),
editTools = {};
if (!this.isInner()) {
editTools.add = {
/* translators: %s: Element Name. */
title: sprintf(__('Add %s', 'elementor'), elementData.title),
icon: 'plus'
};
}
editTools.edit = {
/* translators: %s: Element Name. */
title: sprintf(__('Edit %s', 'elementor'), elementData.title),
icon: 'handle'
};
if (elementor.getPreferences('edit_buttons')) {
editTools.duplicate = {
/* translators: %s: Element Name. */
title: sprintf(__('Duplicate %s', 'elementor'), elementData.title),
icon: 'clone'
};
}
editTools.remove = {
/* translators: %s: Element Name. */
title: sprintf(__('Delete %s', 'elementor'), elementData.title),
icon: 'close'
};
return editTools;
},
getContextMenuGroups: function getContextMenuGroups() {
var groups = BaseElementView.prototype.getContextMenuGroups.apply(this, arguments),
transferGroupIndex = groups.indexOf(_.findWhere(groups, {
name: 'clipboard'
}));
groups.splice(transferGroupIndex + 1, 0, {
name: 'save',
actions: [{
name: 'save',
title: __('Save as Template', 'elementor'),
callback: this.save.bind(this)
}]
});
return groups;
},
getSortableOptions: function getSortableOptions() {
var sectionConnectClass = this.isInner() ? '.elementor-inner-section' : '.elementor-top-section';
return {
connectWith: sectionConnectClass + this.childViewContainer(),
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');
},
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);
},
getNeighborContainer: function getNeighborContainer(container) {
var parentView = container.parent.view,
nextView = parentView.getNextColumn(container.view) || parentView.getPreviousColumn(container.view);
if (!nextView) {
return false;
}
return nextView.getContainer();
},
setStructure: function setStructure(structure) {
var shouldAdjustColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var parsedStructure = elementor.presetsFactory.getParsedStructure(structure);
if (+parsedStructure.columnsCount !== this.collection.length) {
throw new TypeError('The provided structure doesn\'t match the columns count.');
}
$e.run('document/elements/settings', {
container: this.getContainer(),
settings: {
structure: structure
},
options: {
external: true
}
});
if (shouldAdjustColumns) {
this.adjustColumns();
}
},
adjustColumns: function adjustColumns() {
var preset = elementor.presetsFactory.getPresetByStructure(this.getStructure());
this.children.each(function (columnView, index) {
var container = columnView.getContainer();
$e.run('document/elements/settings', {
container: container,
settings: {
_column_size: preset.preset[index],
_inline_size: null
}
});
});
},
resetLayout: function resetLayout() {
var shouldAdjustColumns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
this.setStructure(this.getDefaultStructure(), shouldAdjustColumns);
},
resetColumnsCustomSize: function resetColumnsCustomSize() {
this.children.each(function (columnView) {
$e.run('document/elements/settings', {
container: columnView.getContainer(),
settings: {
_inline_size: null
},
options: {
external: true
}
});
});
},
isCollectionFilled: function isCollectionFilled() {
return DEFAULT_MAX_COLUMNS <= this.collection.length;
},
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();
},
destroyAddSectionView: function destroyAddSectionView() {
if (this.addSectionView && !this.addSectionView.isDestroyed) {
this.addSectionView.destroy();
}
},
onRender: function onRender() {
BaseElementView.prototype.onRender.apply(this, arguments);
this.toggleSectionIsFull();
},
onAddButtonClick: function onAddButtonClick() {
if (this.addSectionView && !this.addSectionView.isDestroyed) {
this.addSectionView.fadeToDeath();
return;
}
var addSectionView = new _inline.default({
at: this.model.collection.indexOf(this.model)
});
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(null, function () {
// Remove inline style, for preview mode.
jQuery(this).css('display', '');
});
});
this.addSectionView = addSectionView;
},
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) {
ui.element.css({
width: '',
left: 'initial' // Fix for RTL resizing
});
$e.run('document/elements/settings', {
container: columnView.getContainer(),
settings: {
_inline_size: this.getColumnPercentSize(ui.element, ui.size.width)
}
});
},
onDestroy: function onDestroy() {
BaseElementView.prototype.onDestroy.apply(this, arguments);
this.destroyAddSectionView();
}
});
module.exports = SectionView;
module.exports.DEFAULT_INNER_SECTION_COLUMNS = DEFAULT_INNER_SECTION_COLUMNS;
module.exports.DEFAULT_MIN_COLUMN_SIZE = DEFAULT_MIN_COLUMN_SIZE;
module.exports.DEFAULT_MAX_COLUMNS = DEFAULT_MAX_COLUMNS;
/***/ }),
/***/ "../assets/dev/js/editor/utils/context-menu.js":
/*!*****************************************************!*\
!*** ../assets/dev/js/editor/utils/context-menu.js ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
__webpack_require__(/*! core-js/modules/es6.function.name.js */ "../node_modules/core-js/modules/es6.function.name.js");
module.exports = elementorModules.Module.extend({
getDefaultSettings: function getDefaultSettings() {
return {
actions: {},
classes: {
list: 'elementor-context-menu-list',
group: 'elementor-context-menu-list__group',
groupPrefix: 'elementor-context-menu-list__group-',
item: 'elementor-context-menu-list__item',
itemTypePrefix: 'elementor-context-menu-list__item-',
itemTitle: 'elementor-context-menu-list__item__title',
itemShortcut: 'elementor-context-menu-list__item__shortcut',
iconShortcut: 'elementor-context-menu-list__item__icon',
itemDisabled: 'elementor-context-menu-list__item--disabled',
divider: 'elementor-context-menu-list__divider',
hidden: 'elementor-hidden'
}
};
},
buildActionItem: function buildActionItem(action) {
var self = this,
classes = self.getSettings('classes'),
$item = jQuery('
', {
class: classes.item + ' ' + classes.itemTypePrefix + action.name
}),
$itemTitle = jQuery('
', {
class: classes.itemTitle
}).text(action.title),
$itemIcon = jQuery('
', {
class: classes.iconShortcut
});
if (action.icon) {
$itemIcon.html(jQuery('
', {
class: action.icon
}));
}
$item.append($itemIcon, $itemTitle);
if (action.shortcut) {
var $itemShortcut = jQuery('', {
class: classes.itemShortcut
}).html(action.shortcut);
$item.append($itemShortcut);
}
if (action.callback) {
$item.on('click', function () {
self.runAction(action);
});
}
action.$item = $item;
return $item;
},
buildActionsList: function buildActionsList() {
var self = this,
classes = self.getSettings('classes'),
groups = self.getSettings('groups'),
$list = jQuery('
', {
class: classes.list
});
groups.forEach(function (group) {
var $group = jQuery('
', {
class: classes.group + ' ' + classes.groupPrefix + group.name
});
group.actions.forEach(function (action) {
$group.append(self.buildActionItem(action));
});
$list.append($group);
group.$item = $group;
});
return $list;
},
toggleGroupVisibility: function toggleGroupVisibility(group, state) {
group.$item.toggleClass(this.getSettings('classes.hidden'), !state);
},
toggleActionVisibility: function toggleActionVisibility(action, state) {
action.$item.toggleClass(this.getSettings('classes.hidden'), !state);
},
toggleActionUsability: function toggleActionUsability(action, state) {
action.$item.toggleClass(this.getSettings('classes.itemDisabled'), !state);
},
isActionEnabled: function isActionEnabled(action) {
if (!action.callback && !action.groups) {
return false;
}
return action.isEnabled ? action.isEnabled() : true;
},
runAction: function runAction(action) {
if (!this.isActionEnabled(action)) {
return;
}
action.callback();
this.getModal().hide();
},
initModal: function initModal() {
var modal;
this.getModal = function () {
if (!modal) {
modal = elementorCommon.dialogsManager.createWidget('simple', {
className: 'elementor-context-menu',
message: this.buildActionsList(),
iframe: elementor.$preview,
effects: {
hide: 'hide',
show: 'show'
},
hide: {
onOutsideContextMenu: true
},
position: {
my: (elementorCommon.config.isRTL ? 'right' : 'left') + ' top',
collision: 'fit'
}
});
}
return modal;
};
},
show: function show(event) {
var self = this,
modal = self.getModal();
modal.setSettings('position', {
of: event
});
self.getSettings('groups').forEach(function (group) {
var isGroupVisible = false !== group.isVisible;
self.toggleGroupVisibility(group, isGroupVisible);
if (isGroupVisible) {
group.actions.forEach(function (action) {
var isActionVisible = false !== action.isVisible;
self.toggleActionVisibility(action, isActionVisible);
if (isActionVisible) {
self.toggleActionUsability(action, self.isActionEnabled(action));
}
});
}
});
modal.show();
},
destroy: function destroy() {
this.getModal().destroy();
},
onInit: function onInit() {
this.initModal();
}
});
/***/ }),
/***/ "../assets/dev/js/editor/utils/controls-css-parser.js":
/*!************************************************************!*\
!*** ../assets/dev/js/editor/utils/controls-css-parser.js ***!
\************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime-corejs2/helpers/interopRequireDefault */ "../node_modules/@babel/runtime-corejs2/helpers/interopRequireDefault.js");
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime-corejs2/helpers/slicedToArray */ "../node_modules/@babel/runtime-corejs2/helpers/slicedToArray.js"));
var _entries = _interopRequireDefault(__webpack_require__(/*! @babel/runtime-corejs2/core-js/object/entries */ "../node_modules/@babel/runtime-corejs2/core-js/object/entries.js"));
var _keys = _interopRequireDefault(__webpack_require__(/*! @babel/runtime-corejs2/core-js/object/keys */ "../node_modules/@babel/runtime-corejs2/core-js/object/keys.js"));
__webpack_require__(/*! core-js/modules/es6.array.find.js */ "../node_modules/core-js/modules/es6.array.find.js");
__webpack_require__(/*! core-js/modules/es6.function.name.js */ "../node_modules/core-js/modules/es6.function.name.js");
__webpack_require__(/*! core-js/modules/es6.regexp.replace.js */ "../node_modules/core-js/modules/es6.regexp.replace.js");
__webpack_require__(/*! core-js/modules/es6.regexp.match.js */ "../node_modules/core-js/modules/es6.regexp.match.js");
__webpack_require__(/*! core-js/modules/es6.regexp.constructor.js */ "../node_modules/core-js/modules/es6.regexp.constructor.js");
var Stylesheet = __webpack_require__(/*! elementor-editor-utils/stylesheet */ "../assets/dev/js/editor/utils/stylesheet.js"),
ControlsCSSParser;
ControlsCSSParser = elementorModules.ViewModule.extend({
stylesheet: null,
getDefaultSettings: function getDefaultSettings() {
return {
id: 0,
context: null,
settingsModel: null,
dynamicParsing: {}
};
},
getDefaultElements: function getDefaultElements() {
var id = "elementor-style-".concat(this.getSettings('id'));
var $stylesheet = elementor.$previewContents.find("#".concat(id));
if (!$stylesheet.length) {
$stylesheet = jQuery('