/*! elementor - v3.28.0 - 01-04-2025 */
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "../assets/dev/js/editor/container/container.js":
/*!******************************************************!*\
!*** ../assets/dev/js/editor/container/container.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _readOnlyError2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/readOnlyError */ "../node_modules/@babel/runtime/helpers/readOnlyError.js"));
var _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"));
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"));
var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"));
var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"));
var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"));
var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"));
var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"));
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
var _argsObject = _interopRequireDefault(__webpack_require__(/*! ../../modules/imports/args-object */ "../assets/dev/js/modules/imports/args-object.js"));
var _panel = _interopRequireDefault(__webpack_require__(/*! ./panel */ "../assets/dev/js/editor/container/panel.js"));
var _childrenArray = _interopRequireDefault(__webpack_require__(/*! ./model/children-array */ "../assets/dev/js/editor/container/model/children-array.js"));
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
/**
* @typedef {import('../../../../lib/backbone/backbone.marionette')} Backbone
* @typedef {import('../../../../lib/backbone/backbone.marionette')} Marionette
* @typedef {import('../elements/views/base')} BaseElementView
* @typedef {import('../elements/views/section')} SectionView
* @typedef {import('../views/base-container')} BaseContainer
* @typedef {import('../elements/models/base-element-model')} BaseElementModel
*/
/**
* TODO: ViewsOptions
*
* @typedef {(Marionette.View|Marionette.CompositeView|BaseElementView|SectionView|BaseContainer)} ViewsOptions
*/
var Container = exports["default"] = /*#__PURE__*/function (_ArgsObject) {
/**
* Function constructor().
*
* Create container.
*
* @param {{}} args
*
* @throws {Error}
*/
function Container(args) {
var _this;
(0, _classCallCheck2.default)(this, Container);
_this = _callSuper(this, Container, [args]);
// Validate args.
/**
* Container type.
*
* @type {string}
*/
(0, _defineProperty2.default)(_this, "type", void 0);
/**
* Container id.
*
* @type {string}
*/
(0, _defineProperty2.default)(_this, "id", void 0);
/**
* Document Object.
*
* @type {{}}
*/
(0, _defineProperty2.default)(_this, "document", void 0);
/**
* Container model.
*
* @type {(Backbone.Model|BaseElementModel)}
*/
(0, _defineProperty2.default)(_this, "model", void 0);
/**
* Container settings.
*
* @type {Backbone.Model}
*/
(0, _defineProperty2.default)(_this, "settings", void 0);
/**
* Container view.
*
* @type {ViewsOptions}
*/
(0, _defineProperty2.default)(_this, "view", void 0);
/**
* Container parent.
*
* @type {Container}
*/
(0, _defineProperty2.default)(_this, "parent", void 0);
/**
* Container children(s).
*
* @type {ChildrenArray}
*/
(0, _defineProperty2.default)(_this, "children", new _childrenArray.default());
/**
* Container dynamic.
*
* @type {Backbone.Model}
*/
(0, _defineProperty2.default)(_this, "dynamic", void 0);
/**
* Container globals.
*
* @type {Backbone.Model}
*/
(0, _defineProperty2.default)(_this, "globals", void 0);
/**
* Container label.
*
* @type {string}
*/
(0, _defineProperty2.default)(_this, "label", void 0);
/**
* Container controls.
*
* @type {{}}
*/
(0, _defineProperty2.default)(_this, "controls", {});
/**
* Repeaters containers
*
* @type {{}}
*/
(0, _defineProperty2.default)(_this, "repeaters", {});
/**
* Container renderer (The one who render).
*
* @type {Container}
*/
(0, _defineProperty2.default)(_this, "renderer", void 0);
/**
* Container panel.
*
* @type {Panel}
*/
(0, _defineProperty2.default)(_this, "panel", void 0);
/**
* Controls placeholders.
*
* @type {{}}
*/
(0, _defineProperty2.default)(_this, "placeholders", {});
_this.validateArgs(args);
args = Object.entries(args);
// If empty.
if (0 === args.length) {
throw Error('Container cannot be empty.');
}
// Set properties, if not defined - keep the defaults.
args.forEach(function (_ref) {
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
key = _ref2[0],
value = _ref2[1];
_this[key] = 'undefined' === typeof value ? _this[key] : value;
});
if ('undefined' === typeof _this.renderer) {
_this.renderer = _this;
}
if (!_this.document) {
_this.document = elementor.documents.getCurrent();
}
_this.dynamic = new Backbone.Model(_this.settings.get('__dynamic__'));
_this.globals = new Backbone.Model(_this.settings.get('__globals__'));
_this.panel = new _panel.default(_this);
_this.initialize();
return _this;
}
(0, _inherits2.default)(Container, _ArgsObject);
return (0, _createClass2.default)(Container, [{
key: "initialize",
value: function initialize() {
if (this.isViewElement()) {
this.addToParent();
this.handleChildrenRecursive();
this.view.on('destroy', this.removeFromParent.bind(this));
}
this.handleRepeaterChildren();
}
}, {
key: "validateArgs",
value: function validateArgs(args) {
this.requireArgumentType('type', 'string', args);
this.requireArgumentType('id', 'string', args);
this.requireArgumentInstance('settings', Backbone.Model, args);
this.requireArgumentInstance('model', Backbone.Model, args);
// Require it, unless it's forced to be `false`.
if (false !== args.parent) {
this.requireArgumentInstance('parent', elementorModules.editor.Container, args);
}
}
/**
* Function getGroupRelatedControls().
*
* Example:
* Settings = { typography_typography: 'whatever', button_text_color: 'whatever' };
* Result { control_name: controlValue, ... - and so on };
* `Object.keys( Result ) = [ 'typography_typography', 'typography_font_family', 'typography_font_size', 'typography_font_size_tablet', 'typography_font_size_mobile', 'typography_font_weight', 'typography_text_transform', 'typography_font_style', 'typography_text_decoration', 'typography_line_height', 'typography_line_height_tablet', 'typography_line_height_mobile', 'typography_letter_spacing', 'typography_letter_spacing_tablet', 'typography_letter_spacing_mobile', 'button_text_color' ]`.
*
* @param {{}} settings
*
* @return {{}} result
*/
}, {
key: "getGroupRelatedControls",
value: function getGroupRelatedControls(settings) {
var _this2 = this;
var result = {};
Object.keys(settings).forEach(function (settingKey) {
Object.values(_this2.controls).forEach(function (control) {
var _this2$controls$setti;
if (settingKey === control.name) {
result[control.name] = control;
} else if ((_this2$controls$setti = _this2.controls[settingKey]) !== null && _this2$controls$setti !== void 0 && _this2$controls$setti.groupPrefix) {
var groupPrefix = _this2.controls[settingKey].groupPrefix;
if (control.name.toString().startsWith(groupPrefix)) {
result[control.name] = control;
}
}
});
});
return result;
}
/**
* Function getAffectingControls().
*
* @return {{}} All controls that effecting the container.
*/
}, {
key: "getAffectingControls",
value: function getAffectingControls() {
var _this3 = this;
var result = {},
activeControls = this.settings.getActiveControls();
Object.entries(activeControls).forEach(function (_ref3) {
var _ref4 = (0, _slicedToArray2.default)(_ref3, 2),
controlName = _ref4[0],
control = _ref4[1];
var controlValue = _this3.settings.get(control.name);
if (control.global && !(controlValue !== null && controlValue !== void 0 && controlValue.length)) {
var _this3$globals$get;
if ((_this3$globals$get = _this3.globals.get(control.name)) !== null && _this3$globals$get !== void 0 && _this3$globals$get.length || _this3.getGlobalDefault(controlName).length) {
control.global.utilized = true;
result[controlName] = control;
return;
}
}
if (control.dynamic) {
if (_this3.dynamic.get(controlName)) {
control.dynamic.utilized = true;
result[controlName] = control;
return;
}
}
if (controlValue === control.default) {
return;
}
if (!controlValue) {
return;
}
if ('object' === (0, _typeof2.default)(controlValue) && Object.values(controlValue).join() === Object.values(control.default).join()) {
return;
}
result[controlName] = control;
});
return result;
}
/**
* Function getParentAncestry().
*
* Recursively run over all parents from current container till the top
*
* @return {Array.<Container>} All parent as flat array.
*/
}, {
key: "getParentAncestry",
value: function getParentAncestry() {
var result = [];
var parent = this;
while (parent) {
result.push(parent);
parent = parent.parent;
}
return result;
}
}, {
key: "handleChildrenRecursive",
value: function handleChildrenRecursive() {
var _this$view$children;
if ((_this$view$children = this.view.children) !== null && _this$view$children !== void 0 && _this$view$children.length) {
Object.values(this.view.children._views).forEach(function (view) {
if (!view.container) {
return;
}
var container = view.container;
// Since the way 'global-widget' rendered, it does not have parent sometimes.
if (container.parent.children) {
container.parent.children[view._index] = container;
}
container.handleChildrenRecursive();
});
} else {
this.children.clear();
}
}
}, {
key: "addToParent",
value: function addToParent() {
if (!this.parent.children || this.isRepeaterItem()) {
return;
}
// On create container tell the parent where it was created.
this.parent.children.splice(this.view._index, 0, this);
}
}, {
key: "removeFromParent",
value: function removeFromParent() {
var _this4 = this;
if (!this.parent.children || this.isRepeater()) {
return;
}
// When delete container its should notify its parent, that his children is dead.
this.parent.children = this.parent.children.filter(function (filtered) {
return filtered.id !== _this4.id;
});
}
}, {
key: "handleRepeaterChildren",
value: function handleRepeaterChildren() {
var _this5 = this;
Object.values(this.controls).forEach(function (control) {
if (!control.is_repeater) {
return;
}
var model = new Backbone.Model({
name: control.name
});
_this5.repeaters[control.name] = new elementorModules.editor.Container({
type: Container.TYPE_REPEATER,
id: control.name,
model: model,
settings: model,
view: _this5.view,
parent: _this5,
label: control.label || control.name,
controls: {},
renderer: _this5.renderer
});
_this5.settings.get(control.name).forEach(function (rowModel, index) {
_this5.addRepeaterItem(control.name, rowModel, index);
});
});
// Backwards Compatibility: if there is only one repeater (type=repeater), set it's children as current children.
// Since 3.0.0.
if (['widget', 'document'].includes(this.type)) {
var repeaters = Object.values(this.controls).filter(function (control) {
return 'repeater' === control.type;
});
if (!this.model.get('supportRepeaterChildren') && 1 === repeaters.length) {
Object.defineProperty(this, 'children', {
get: function get() {
elementorDevTools.deprecation.deprecated('children', '3.0.0', 'container.repeaters[ repeaterName ].children');
return this.repeaters[repeaters[0].name].children;
}
});
}
}
}
/**
* Function addRepeaterItem().
*
* The method add repeater item, find the repeater control by it name, and create new container for the item.
*
* @param {string} repeaterName
* @param {Backbone.Model} rowSettingsModel
* @param {number} index
*
* @return {Container} container
*/
}, {
key: "addRepeaterItem",
value: function addRepeaterItem(repeaterName, rowSettingsModel, index) {
var rowId = rowSettingsModel.get('_id');
// TODO: Temp backwards compatibility. since 2.8.0.
if (!rowId) {
rowId = 'bc-' + elementorCommon.helpers.getUniqueId();
rowSettingsModel.set('_id', rowId);
}
this.repeaters[repeaterName].children.splice(index, 0, new elementorModules.editor.Container({
type: Container.TYPE_REPEATER_ITEM,
id: rowSettingsModel.get('_id'),
model: new Backbone.Model({
name: repeaterName
}),
settings: rowSettingsModel,
view: this.view,
parent: this.repeaters[repeaterName],
label: this.label + ' ' + __('Item', 'elementor'),
controls: rowSettingsModel.options.controls,
renderer: this.renderer
}));
return this.repeaters[repeaterName];
}
/**
* Function lookup().
*
* If the view were destroyed, try to find it again if it exists.
*
* TODO: Refactor.
*
* @return {Container} container
*/
}