/*! elementor - v3.19.0 - 07-02-2024 */ (self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["modules_nested-elements_assets_js_editor_nested-element-types-base_js"],{ /***/ "../modules/nested-elements/assets/js/editor/nested-element-types-base.js": /*!********************************************************************************!*\ !*** ../modules/nested-elements/assets/js/editor/nested-element-types-base.js ***! \********************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = exports.NestedElementTypesBase = void 0; 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 _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.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 _view = _interopRequireDefault(__webpack_require__(/*! ./views/view */ "../modules/nested-elements/assets/js/editor/views/view.js")); var _empty = _interopRequireDefault(__webpack_require__(/*! ./views/empty */ "../modules/nested-elements/assets/js/editor/views/empty.js")); function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /** * @typedef {import('../../../../../assets/dev/js/editor/elements/types/base/element-base')} ElementBase */ var NestedElementTypesBase = /*#__PURE__*/function (_elementor$modules$el) { (0, _inherits2.default)(NestedElementTypesBase, _elementor$modules$el); var _super = _createSuper(NestedElementTypesBase); function NestedElementTypesBase() { (0, _classCallCheck2.default)(this, NestedElementTypesBase); return _super.apply(this, arguments); } (0, _createClass2.default)(NestedElementTypesBase, [{ key: "getType", value: function getType() { elementorModules.ForceMethodImplementation(); } }, { key: "getView", value: function getView() { return _view.default; } }, { key: "getEmptyView", value: function getEmptyView() { return _empty.default; } }, { key: "getModel", value: function getModel() { return $e.components.get('nested-elements/nested-repeater').exports.NestedModelBase; } }]); return NestedElementTypesBase; }(elementor.modules.elements.types.Base); exports.NestedElementTypesBase = NestedElementTypesBase; var _default = NestedElementTypesBase; exports["default"] = _default; /***/ }), /***/ "../modules/nested-elements/assets/js/editor/views/add-section-area.js": /*!*****************************************************************************!*\ !*** ../modules/nested-elements/assets/js/editor/views/add-section-area.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"]; /* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"); var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = AddSectionArea; var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /* eslint-disable jsx-a11y/click-events-have-key-events */ function AddSectionArea(props) { var addAreaElementRef = (0, _react.useRef)(), containerHelper = elementor.helpers.container; // Make droppable area. (0, _react.useEffect)(function () { var $addAreaElementRef = jQuery(addAreaElementRef.current), defaultDroppableOptions = props.container.view.getDroppableOptions(); // Make some adjustments to behave like 'AddSectionArea', use default droppable options from container element. defaultDroppableOptions.placeholder = false; defaultDroppableOptions.items = '> .elementor-add-section-inner'; defaultDroppableOptions.hasDraggingOnChildClass = 'elementor-dragging-on-child'; // Make element drop-able. $addAreaElementRef.html5Droppable(defaultDroppableOptions); // Cleanup. return function () { $addAreaElementRef.html5Droppable('destroy'); }; }, []); return /*#__PURE__*/_react.default.createElement("div", { className: "elementor-add-section", onClick: function onClick() { return containerHelper.openEditMode(props.container); }, ref: addAreaElementRef, role: "button", tabIndex: "0" }, /*#__PURE__*/_react.default.createElement("div", { className: "elementor-add-section-inner" }, /*#__PURE__*/_react.default.createElement("div", { className: "e-view elementor-add-new-section" }, /*#__PURE__*/_react.default.createElement("div", { className: "elementor-add-section-area-button elementor-add-section-button", onClick: function onClick() { return props.setIsRenderPresets(true); }, title: __('Add new container', 'elementor'), role: "button", tabIndex: "0" }, /*#__PURE__*/_react.default.createElement("i", { className: "eicon-plus" })), /*#__PURE__*/_react.default.createElement("div", { className: "elementor-add-section-drag-title" }, __('Drag widgets here.', 'elementor'))))); } AddSectionArea.propTypes = { container: PropTypes.object.isRequired, setIsRenderPresets: PropTypes.func.isRequired }; /***/ }), /***/ "../modules/nested-elements/assets/js/editor/views/empty.js": /*!******************************************************************!*\ !*** ../modules/nested-elements/assets/js/editor/views/empty.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"); var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = Empty; var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js")); var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js")); var _addSectionArea = _interopRequireDefault(__webpack_require__(/*! ./add-section-area */ "../modules/nested-elements/assets/js/editor/views/add-section-area.js")); var _selectPreset = _interopRequireDefault(__webpack_require__(/*! ./select-preset */ "../modules/nested-elements/assets/js/editor/views/select-preset.js")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function Empty(props) { var _useState = (0, _react.useState)(false), _useState2 = (0, _slicedToArray2.default)(_useState, 2), isRenderPresets = _useState2[0], setIsRenderPresets = _useState2[1]; props = _objectSpread(_objectSpread({}, props), {}, { setIsRenderPresets: setIsRenderPresets }); return isRenderPresets ? /*#__PURE__*/_react.default.createElement(_selectPreset.default, props) : /*#__PURE__*/_react.default.createElement(_addSectionArea.default, props); } Empty.propTypes = { container: PropTypes.object.isRequired }; /***/ }), /***/ "../modules/nested-elements/assets/js/editor/views/select-preset.js": /*!**************************************************************************!*\ !*** ../modules/nested-elements/assets/js/editor/views/select-preset.js ***! \**************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"]; /* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"); var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = SelectPreset; var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); /* eslint-disable jsx-a11y/click-events-have-key-events */ function SelectPreset(props) { var containerHelper = elementor.helpers.container, onPresetSelected = function onPresetSelected(preset, container) { var options = { createWrapper: false }; // Create new one by selected preset. containerHelper.createContainerFromPreset(preset, container, options); }; return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { className: "elementor-add-section-close" }, /*#__PURE__*/_react.default.createElement("i", { onClick: function onClick() { return props.setIsRenderPresets(false); }, className: "eicon-close", "aria-hidden": "true" }), /*#__PURE__*/_react.default.createElement("span", { className: "elementor-screen-only" }, __('Close', 'elementor'))), /*#__PURE__*/_react.default.createElement("div", { className: "e-view e-con-select-preset" }, /*#__PURE__*/_react.default.createElement("div", { className: "e-con-select-preset__title" }, __('Select your Structure', 'elementor')), /*#__PURE__*/_react.default.createElement("div", { className: "e-con-select-preset__list" }, elementor.presetsFactory.getContainerPresets().map(function (preset) { return /*#__PURE__*/_react.default.createElement("div", { onClick: function onClick() { return onPresetSelected(preset, props.container); }, key: preset, className: "e-con-preset", "data-preset": preset, dangerouslySetInnerHTML: { __html: elementor.presetsFactory.generateContainerPreset(preset) }, role: "button", tabIndex: "0" }); })))); } SelectPreset.propTypes = { container: PropTypes.object.isRequired, setIsRenderPresets: PropTypes.func.isRequired }; /***/ }), /***/ "../modules/nested-elements/assets/js/editor/views/view.js": /*!*****************************************************************!*\ !*** ../modules/nested-elements/assets/js/editor/views/view.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = exports.View = void 0; 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 _get2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/get */ "../node_modules/@babel/runtime/helpers/get.js")); var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.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")); function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var View = /*#__PURE__*/function (_$e$components$get$ex) { (0, _inherits2.default)(View, _$e$components$get$ex); var _super = _createSuper(View); function View() { (0, _classCallCheck2.default)(this, View); return _super.apply(this, arguments); } (0, _createClass2.default)(View, [{ key: "events", value: function events() { var _this = this; var events = (0, _get2.default)((0, _getPrototypeOf2.default)(View.prototype), "events", this).call(this); events.click = function (e) { // If the clicked Nested Element is not within the currently edited document, don't do anything with it. if (elementor.documents.currentDocument.id.toString() !== e.target.closest('.elementor').dataset.elementorId) { return; } var closest = e.target.closest('.elementor-element'); var model = _this.options.model, view = _this; // For clicks on container/widget. if (['container', 'widget'].includes(closest === null || closest === void 0 ? void 0 : closest.dataset.element_type)) { // eslint-disable-line camelcase // In case the container empty, click should be handled by the EmptyView. var container = elementor.getContainer(closest.dataset.id); if (container.view.isEmpty()) { return true; } // If not empty, open it. model = container.model; view = container.view; } e.stopPropagation(); $e.run('panel/editor/open', { model: model, view: view }); }; return events; } /** * Function renderHTML(). * * The `renderHTML()` method is overridden as it causes redundant renders when removing focus from any nested element. * This is because the original `renderHTML()` method sets `editModel.renderOnLeave = true;`. */ }, { key: "renderHTML", value: function renderHTML() { var templateType = this.getTemplateType(), editModel = this.getEditModel(); if ('js' === templateType) { editModel.setHtmlCache(); this.render(); } else { editModel.renderRemoteServer(); } } }]); return View; }($e.components.get('nested-elements/nested-repeater').exports.NestedViewBase); exports.View = View; var _default = View; exports["default"] = _default; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js": /*!***********************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/assertThisInitialized.js ***! \***********************************************************************/ /***/ ((module) => { function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } module.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/defineProperty.js": /*!****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***! \****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js"); function _defineProperty(obj, key, value) { key = toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/get.js": /*!*****************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/get.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var superPropBase = __webpack_require__(/*! ./superPropBase.js */ "../node_modules/@babel/runtime/helpers/superPropBase.js"); function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { module.exports = _get = Reflect.get.bind(), module.exports.__esModule = true, module.exports["default"] = module.exports; } else { module.exports = _get = function _get(target, property, receiver) { var base = superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }, module.exports.__esModule = true, module.exports["default"] = module.exports; } return _get.apply(this, arguments); } module.exports = _get, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js": /*!****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/getPrototypeOf.js ***! \****************************************************************/ /***/ ((module) => { function _getPrototypeOf(o) { module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }, module.exports.__esModule = true, module.exports["default"] = module.exports; return _getPrototypeOf(o); } module.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/inherits.js": /*!**********************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/inherits.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js"); function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) setPrototypeOf(subClass, superClass); } module.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": /*!***************************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***! \***************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]); var assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized.js */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return assertThisInitialized(self); } module.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js": /*!****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/setPrototypeOf.js ***! \****************************************************************/ /***/ ((module) => { function _setPrototypeOf(o, p) { module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }, module.exports.__esModule = true, module.exports["default"] = module.exports; return _setPrototypeOf(o, p); } module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/superPropBase.js": /*!***************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/superPropBase.js ***! \***************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getPrototypeOf = __webpack_require__(/*! ./getPrototypeOf.js */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = getPrototypeOf(object); if (object === null) break; } return object; } module.exports = _superPropBase, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }) }]); //# sourceMappingURL=e8a7573e654d921656ab.bundle.js.map
Warning: Cannot modify header information - headers already sent by (output started at /autoinstalator/wordpress/wp-content/themes/prioris/cherry-framework/modules/cherry-breadcrumbs/cherry-breadcrumbs.php:509) in /autoinstalator/wordpress/wp-includes/feed-rss2.php on line 8
IT Образование – KONKRET http://serwer1711581.home.pl/autoinstalator/wordpress Kolejna witryna oparta na WordPressie Wed, 02 Oct 2024 16:01:43 +0000 pl-PL hourly 1 https://wordpress.org/?v=6.2.6 Как провести A B-тестирование в Facebook и не продать при этом почку http://serwer1711581.home.pl/autoinstalator/wordpress/?p=69 http://serwer1711581.home.pl/autoinstalator/wordpress/?p=69#respond Thu, 21 Dec 2023 19:22:51 +0000 http://serwer1711581.home.pl/autoinstalator/wordpress/?p=69

Содержание

Прежде чем вы сможете проверить результаты A/B теста, вы должны убедиться, что он достиг статистической значимости. Во многих сервисах есть специальный калькулятор. Например, если вы только что протестировали заголовок на целевой странице, почему бы не сделать новый тест для основного текста?

Как сделать А Б тестирование

Когда один из вариантов теста выигрывает, сервис автоматически начинает демонстрировать его пользователям. Навигация вашего сайта начинается с главной страницы. Она связывает все основные разделы и часто выступает ориентиром для пользователя. Убедитесь, что ваша структура такова, что посетители могут легко ориентироваться в разделах, когда ищут нужную услугу или товар.

Шаг 2. Создать варианты страницы

Давайте теперь перейдем к другим типам тестирования. Если вы тестируете формы захвата, варианты могут затрагивать формулировки CTA, размер самой формы, количество полей, информацию, которую должен ввести пользователь и т. Качественные и количественные инструменты исследования помогли вам в сборе данных о поведении посетителей. Чтобы рассчитать статистическую значимость, можно использовать онлайн-инструменты — они проделают всю работу за вас и выдадут результаты в упрощенном виде.

  • Если коэффициент конверсии слишком низкий, это, безусловно, красный флаг.
  • Итак, как же правильно проводить A/B-тестирование?
  • Сложно найти что-то максимально универсальное, более эффективно комбинировать для разных целей разные инструменты.
  • Поклонники SimCity 5 не были заинтересованы в стимуле.
  • Выборка не будет идеально репрезентативной, но мы всегда обращаем внимание на структуру пользователей в разрезе их характеристик — новый/старый пользователь, уровень в игре, страна.

Но как узнать, на что ваша аудитория лучше всего откликается? Самое очевидное — просто внести нужные изменения и посмотреть, что произойдет. Но это — время и деньги, которые не хочется тратить впустую. В каждом онлайн-калькуляторе заложены свои критерии и алгоритмы, которые могут не учитывать всех особенностей эксперимента.

Недостатки Google Analytics и самописных скриптов

То, что работает для одной компании, может не обязательно работать для другой. Фактически, эксперты по оптимизации коэффициента конверсии ненавидят термин «лучшие практики», потому что они на самом деле не всегда могут быть лучшими для вас. После отмены рассылки на тестовые группы редактировать рассылку или копировать в новую вы уже не можете. На третьем этапе создания рассылки — «Настройка рассылки» — с помощью ползунка вы можете определить количество тестовых групп и итоговой рассылки в процентном соотношении. Хорошо то, что Google Optimize сам определяет, когда пора завершить тестирование для получения достоверных сведений.

Как сделать А Б тестирование

Этот эксперимент проходил на сайте Highrise. Как видите, на правую страницу вместо обычного белого фона была добавлена эмоциональная фотография. Глядя на девушку с улыбкой, у пользователя подсознательно менялось отношение к странице и кликабельность кнопки увеличилась на 102%. Например, у вас в меню есть элементы, на которые часто переходят пользователи, но при этом они не играют никакой роли в воронке продаж. Соответственно, она может исказить статистику и повлиять на результаты АБ теста.

Как тестировать варианты страниц

Сложно найти что-то максимально универсальное, более эффективно комбинировать для разных целей разные инструменты. Есть бесплатная версия с ограничением до 5000 показов в месяц, чего в принципе достаточно, чтобы понять нужен ли вам этот сервис. https://deveducation.com/ Также там нет никаких дополнительных функций, в частности, таргетинга. Отсутствует и поддержка, которая поможет правильно настроить и запустить тест. Еще одна проблема — отсутствие русской локализации в большинстве этих сервисов.

Как сделать А Б тестирование

Split testing означает «раздельное тестирование», объясняя, что такое сплит-тестирование заключается в разделении потока пользователей на две группы «подопытных». Одна группа пользователей попадает на текущую версию страницы (страница A), вторая — на страницу с изменённым элементом (страница B). A/B-тестирование позволяет узнать, какие слова, фразы, изображения, видео, отзывы и другие элементы сайта работают лучше всего.

Слишком длительное проведение кампании также является распространенной ошибкой бизнеса. Продолжительность выполнения теста зависит от различных факторов, таких как существующий трафик, коэффициент конверсии, ожидаемое улучшение и т. A/B-тестирование – это процесс одновременного показа двух вариантов одной и той же веб-страницы двум тестовым группам посетителей сайта. На основе поведенческой активности каждой группы можно судить об эффективности тестируемых изменений на странице. Сравнивая полученные результаты, нужно решить, как поступить дальше.

✓ Что такое A/B тестирование сайтов?

Это тестирование проводила компания «Экспидия». У них была вот такая форма для отправки счета в оригинальном варианте, в котором нужно было ввести имя, фамилию, название компании и адрес. Следующий кейс компании «Сильвер», которая экспериментирует с невероятной скоростью.

Во-первых, оно помогает настроить сайт под потребности и пожелания клиента. Например, можно запустить AB тест, в котором поменять кнопку призыва к действию с «Купить» на «Получить», и посмотреть, как пользователи будут с ней взаимодействовать. ✓ Как создать свой первый A/B тест с помощью платных и бесплатных сервисов. В документации указано, что при проведении тестирования аудитория случайным образом делится на непересекающиеся группы.

Получите лучшую рентабельность инвестиций от существующего трафика

Для следующей проверки бизнес заменил свой ползунок на заметную строку поиска. Идея заключалась в том, что клиенты будут более склонны к поиску товаров, которые им особенно интересны. Если вы не знакомы с WallMonkeys, это компания, которая продает невероятно разнообразные настенные наклейки для дома и бизнеса. Три из лучших примеров A/B тестирования, чтобы вдохновить вас. За прошедшие годы я провел тысячи A/B тестов. Каждый из них был разработан, чтобы помочь мне найти лучший дизайн и сделать маркетинговую кампанию действительно эффективной.

✔ С чего начать А/В тест?

Для анализа релевантной информации необходимо, чтобы объявления набрали адекватное (не менее 100) количество переходов. Но как быть, когда по запросу всего 5-10 показов в неделю? a/b тестирование К сожалению, не остаётся ничего другого, как увеличивать период тестирования до нескольких месяцев. Безусловно, можно сделать выводы, основываясь на небольшом объёме данных.

Поэтому, в один момент лучше тестировать только одну гипотезу. Можно придумать большое количество идей для проверки путем сплит-тестирования, но вряд ли у вас хватит ресурсов реализовать все и сразу. Поэтому, сформируйте список исходя из важности конкретного пункта для бизнеса.

A/B тест проверит некоторые изменения в копии, изображениях и других элементах. Это не означает, что A/B тестирование бесполезно для нового бизнеса. Это просто означает, что вы можете получить менее точные результаты.

Увеличить показатели эффективности помогает проведение сплит-тестов в контекстной рекламе. Выбираем бизнес страницу, регион и вертикаль кампании. За основу мы можем взять существующие группы, кампании или создать копию. После создания гипотезы по улучшению сайта, нужно запустить A/B тест. Изучите ключевые особенности нескольких сервисов и выбирайте подходящий.

Выдвижение гипотезы

Но это долго, данные скорее всего будут неточные и вероятность ошибиться в интерпретации результатов – довольно высокая. Кроме того, опустились 4 блока с описанием примера работ, которые в оригинальном варианте находятся на первом экране. В тестовом варианте изображение опущено вниз. И это также повлияло на количество регистраций на сайте, которое увеличилось на 57%. Можно также тестировать социальные кнопки, страницы с ценами и делать радикальный редизайн.

]]>
http://serwer1711581.home.pl/autoinstalator/wordpress/?feed=rss2&p=69 0
Статическое и динамическое тестирование http://serwer1711581.home.pl/autoinstalator/wordpress/?p=248 http://serwer1711581.home.pl/autoinstalator/wordpress/?p=248#respond Mon, 23 Oct 2023 22:07:10 +0000 http://serwer1711581.home.pl/autoinstalator/wordpress/?p=248 Почти каждый pull-запрос так или иначе содержит в себе изменения файлов с тестами. Суть этого процесса виды тестирования qa в объединении программных модулей в группы и их последующее тестирование. Проще говоря, это проверка бизнес-логики без использования UI. На проекте интеграционные тесты пишут разработчики и они же их и поддерживают. Однако можно встретить команды, где этот уровень закрывает QA.

уровни тестирования

Второй уровень: интеграционные тесты

Время выполнения операций может играть в данном виде тестирования второстепенную роль. При этом на первое место выходит отсутствие утечек памяти, перезапусков серверов под нагрузкой и другие аспекты влияющие именно на стабильность работы. Как я упоминал выше, в основе тестирования нашего проекта лежат unit-тесты. Однако количество никогда не свидетельствует о качестве. Нельзя сказать, что на проекте используется метод разработки через тестирование (TDD), однако вся функциональность — как существующая, так и новая — покрыта тестами.

Из чего состоит тестирование программного продукта?

Мануальное тестирование» рассчитан на тех, кто вообще не занимался программированием/тестированием или имеет начальные знания, которые хочет упорядочить и углубить. В течение двенадцати логически взаимосвязанных уроков учащиеся изучат процесс тестирования приложений, эффективные современные подходы и инструменты. Научатся создавать все необходимые документы и на практике закрепят свои знания. Очень часто на собеседованиях по тестированию дают подобное задание - протестировать какой-либо предмет. Оно показывает насколько гибок ум тестировщика в плане видов и объекта тестирования. Ведь не важно что перед вами, а важно понимать логическую концепцию видов тестирования.

  • Начать свой путь в обретении данной профессии лучше всего с качественных курсов тестирования ПО.
  • Так они тоже смогут вносить правки и знать, что, где и почему «упало».
  • Уровень тестирования — активности тестирования, объединенные в группу исходя из общих характеристик, связанных с SDLC.
  • Вместо этого необходимо использовать анализ рисков и расстановку приоритетов, что позволит более эффективно распределять усилия по обеспечению качества ПО.
  • Дефекты (bugs), процесс их нахождения и починки.
  • Например, программное обеспечение для медицинских нужд требует гораздо более строгой и тщательной проверки, чем, скажем, компьютерная игра.

End-to-End testing - Сквозное тестирование

Вот, пожалуй, основные виды, которые используют для тестирования сайта. Сейчас мы запускаем весь набор тестов на каждый коммит, который был запущен. Общий тестовый прогон включает все уровни тестирования и занимает один час, из которых 1500 UI-тестов выполняются 25 минут.

уровни тестирования

Тестирование в разработке: важность и сколько времени должно занимать?

Задача проведения пользовательского тестирования – оказать помощь конечным пользователям системы в подготовке и проведении испытаний. Если автора фейлят на «видах и типах» тестирования, то он попал на собес на проект связанный с медициной или чем то подобным. Мне, например, не нужна классификация в виде дерева. Нужен набор разных групп классификации, но внутри каждой группы равноправные ветви должны быть ортогональны и минимизированы. Правильный ответ в том, что тестировать можно вообще всё.

Что Вы будете тестировать на  курсах Тестировщиков ПО?

В этом нет ничего плохого — если человек компетентен и может выполнять подобную работу качественно, то ему стоит это делать. Такие ошибки — когда после внесения изменений в программу перестаёт работать то, что должно было продолжать работать, — называют регрессионными ошибками (regression bugs). В области же программного обеспечения, дымовое тестирование – короткий цикл тестов, выполняемый для подтверждения того, что приложение выполняет основные функции. Иногда бета-тестирование выполняется для того, чтобы получить обратную связь о продукте от его будущих пользователей.

Третий уровень: тесты пользовательского функционала

Модульное тестирование применяется для исследования каждого отдельного элемента или объекта системы. Чтобы найти баги, применяя модульное тестирование, нужно знать, как устроена программа в целом и какой функционал каждого отдельного модуля. Этот уровень тестирования используется больше программистами, нежели тестировщиками. Они создают специальные тест-коды, с помощью которых можно проверить, выполняет ли программное обеспечение свое предназначение.

Он полностью закрывает наши потребности, так как имеет внушительный набор функционала. В Jiji мы стараемся, так сказать, придерживаться традиций. Поэтому используем пирамиду тестирования и пытаемся следовать всем советам, которые она дает.

Тестирование интерфейсов (частично) и тестирование API являются примерами интеграционного компонентного тестирования. Уровень тестирования — активности тестирования, объединенные в группу исходя из общих характеристик, связанных с SDLC. В этой статье разберемся что такое уровни тестирования, зачем они нужны и что собой представляет каждый из них. Тест состоит из 15 вопросов по одному баллу, для прохождения теста необходимо набрать 8 баллов. Мы подготовили материалы и тесты, которые помогут вам в выборе вашей будущей профессии. В благодарность за это мы дарим скидку на любой курс, который вы выберете в процессе консультации.

Тестирование сайта — один из важных жизненных этапов, после которого, предоставляется заказчику готовый проект без ошибок, с хорошей читабельностью, воспринимаемой легкостью, удобством и надежностью. Мы хотели бы рассказать о том какие этапы проходит сайт перед выходом в продакшн. Мы автоматизировали тестирование XSS-уязвимостей, чтобы всегда быть уверенными, что наши пользователи защищены. Для этого обзавелись простыми тестами, которые присылают нам вредоносный код.

Вы можете задать вопросы, возникающие во время выполнения домашнего задания, преподаватель и сокурсники дадут на них ответы. Продолжительность курсаВсего в курсе 57 академических часов.Занятия будуть проводиться  два – два с половиной месяца. W3School, Составление XSD схемы, программы для работы со XML. Для тех, кто уже имеет небольшой опыт в данной сфере, но желающих систематизировать и приумножить свои знания, а также получить исчерпывающую консультацию о трудоустройстве на вакансию QA Junior. Курсы тестирования подойдут вам, если вы хотите получить новую, востребованную на рынке ИТ профессию, но у вас нет времени на второе высшее образование.

Также мы можем проверить, как программа справляется с большими объемами данных или одновременными запросами. Это позволяет нам оптимизировать нашу программу и сделать ее более надежной и стабильной. А завершает тестирование — заказчик, выполняя приемочное тестирование. После завершения тестирования всей системы нас ждет последняя проверка перед сдачей работы. На этом уровне тестирования создаются end-to-end тесты, имитирующие бизнес процессы, Use Cases и Use Stories от начала до конца.

IT курсы онлайн от лучших специалистов в своей отросли https://deveducation.com/ here.

]]>
http://serwer1711581.home.pl/autoinstalator/wordpress/?feed=rss2&p=248 0
Проджект-менеджер в маркетинговом агентстве что он делает и какова его роль в бизнес-коммуникациях ️ Блог Webpromo http://serwer1711581.home.pl/autoinstalator/wordpress/?p=125 http://serwer1711581.home.pl/autoinstalator/wordpress/?p=125#respond Sat, 16 Sep 2023 00:31:44 +0000 http://serwer1711581.home.pl/autoinstalator/wordpress/?p=125 Еще один совет, которым могут неохотно делиться проджект-менеджеры, касается использования инструментов управления проектами. Они могут автоматизировать их project manager обязанности задачи и помочь с легкостью управлять проектами. Поиск идеальных инструментов часто занимает много времени и испытаний. Кроме того, приложения и методы, которые вы будете использовать, могут зависеть от вашего стиля работы.

Если человек научился ставить цели и управлять проектами, то из него выйдет хороший PM?

кто такой проджект менеджер

Очень важно, чтобы проджект-менеджер стартапа мог оперативно перестраивать работу, спокойно относиться к форс-мажорам и легко вносить корректировки в планирование. Например, если запущена масштабная маркетинговая кампания, или выход продукта ждут к определенной дате. Грамотный тайм-менеджмент и правильное планирование позволяют вовремя закрывать сроки. Но иногда допустимо вовремя выяснить, что для лучшего результата следует сдвинуть сроки, и исходя из этого подкорректировать время завершения проекта. Менеджер проекта несет ответственность за достижение целей проекта в рамках бюджета, за реализацию в указанный срок и за требуемый уровень качества. Ключевыми здесь являются понятия «цели», «бюджет», «срок» и «уровень качества».

Проджект-менеджер и основные показатели его работы

Да, он может и порой даже обязан интересоваться смежными областями, которые связаны с проектом. «В моей карьере проджект-менеджера самой большой проблемой было то, как справиться с тревогой, чтобы делать то, что делается в ситуации, когда мы не можем контролировать других. Опыт реализации проектов, взаимодействия (слушания) с другими людьми в качестве клиента, партнера или той же компании, изучения техники и, что не менее важно, всегда стремиться понять себя. Помимо общих правил управления проектами (разработка, планирование, исполнение, мониторинг и контроль, закрытие) — я советую проявлять сострадание и сдержанность. Люди будут расстроены, всё пойдет не так, как вы хотите, но как руководитель проекта вы — то связующее звено, которое должно держать всё вместе и двигаться вперед. Я верю, что смог достичь этого в своем проекте, и в результате мы смогли создать команду».

Почему на самом деле вы не хотите быть Project Manager

кто такой проджект менеджер

Следуйте рекомендациям ниже, сохраняйте уверенность в себе и верьте в успех проекта. Менеджер должен уметь создавать прочную связь между клиентом и своей командой. И будучи связующим звеном между ними, он полностью отвечает за качество этой связи.

Ключевые навыки менеджера в управлении проектами

С другой стороны, у вас может не получиться подобрать проект, над которым вы будете работать. Это означает, что вы получите небольшие проекты, с которыми будете тратить время впустую. Если вы только начинаете свою карьеру, это может оказаться для вас неразрешимой проблемой, поскольку у вас еще нет необходимых знаний, чтобы соответствующим образом управлять своим временем.

советов для новичков project manager на первом проекте

Жизнь менеджера сплошная печаль сдобренная плюшками. И это самая неблагодарная работа в команде разработки. Успех любого проекта, не важно это создание веб-сайта, подготовка и запуск новой рекламной кампании и т.д.

  • Живой онлайн-курс по управлению проектами от Web Academy полностью удовлетворяет все вышеперечисленные признаки хороших курсов.
  • Не стоит расстраиваться, если работа, которую вы будете выполнять, не будет работой всей вашей жизни.
  • Карьера в управлении проектами по-прежнему востребована, и ожидается, что в ближайшие десять лет годовая заработная плата вырастет.
  • Если вы или ваш клиент — стартапер, то целью проекта может стать продажа стартапа.
  • Эффективный проектный менеджер обладает глубоким пониманием целей проекта, может адаптироваться к изменениям и умело управляет рисками, чтобы обеспечить успешное выполнение проекта.

Не только надеятся, что клиент знает, что происходит, но и следить за тем, чтобы всё было правильно задокументировано. Вы поняли — это намного больше усилий, но это то, что дает результаты». Если вы только начинаете свою карьеру, ты должны найти такую рабочую среду, которая позволит расти и учиться у коллег.

кто такой проджект менеджер

Менеджер начинается, когда есть требование клиента с одной стороны, мнение архитектора — с другой. Ко всем переговорам стоит готовиться и подбирать аргументы заранее. Например, клиент эскалирует, что Иванова нужно уволить, потому что он пишет неграмотные письма.

Этот специалист ответственен за планирование, организацию и успешное выполнение проектов. Проджект-менеджер обеспечивает, чтобы проект соответствовал как временным рамкам, так и бюджету, а также отвечает за качество конечного продукта. Product Manager играет критическую роль в успехе продукта, обладая комплексным пониманием бизнеса, технологий и пользовательского опыта. Это профессия, требующая глубоких знаний в области продуктового менеджмента и навыков работы с различными командами и рыночными данными.

Project Manager играет критическую роль в достижении целей проекта, обеспечивая эффективное управление ресурсами, временем и бюджетом. Эта профессия требует высокого уровня организационных способностей, умения работать с людьми и владения методиками управления проектами. Проджект-менеджеры востребованы во многих отраслях, особенно в IT, строительстве, маркетинге, и многих других. Их универсальные навыки управления проектами позволяют успешно реализовывать проекты в различных секторах экономики. Проектный менеджер — фильтр правок между клиентом и командой.

Для подтверждения эффективной работы по управлению проектом не забывайте обновлять статус при каждой выполненной задаче. Руководству важно видеть на общедоступном плане, что проект двигается вперед. Это означает, чтобы вы успешно справляетесь со своей ролью и вам можно доверять в дальнейшей работе. Гибкость к планированию и реализации проекта поможет PM всегда оставаться с холодной головой, не впадать в панику и быть эффективным лидером команды в любой ситуации.

Всё-таки я придерживаюсь мысли, что должность PM в чистом виде — это стратегическая ошибка и гораздо полезнее иметь роль, которая в этой серии статей обозначена как Team Lead. Работать с PM-ами, которые не имеют технического опыта и не участвуют в разработке меня всегда раздражает. Конечно, при конвеерном производстве сайтов это может быть уместно, но если работа идёт над несколькими продуктами или сервисами — лучше иметь нормального лидера команды. Он не обязан быть лучшим технарём, но обязан разбираться во всем, что происходит в проекте, и уметь находить решения нетривиальных проблем. Большинство менеджеров имеют бакалаврский или магистерский диплом, связанный с менеджментом или управлением бизнесом.

Фасилитация инноваций требует сильных межличностных навыков у проектного менеджера. Он должен быть эффективным слушателем, уметь эмпатизировать и создавать доверие в команде. Только таким образом можно достичь открытого обмена идеями и поддержки в команде.

IT курсы онлайн от лучших специалистов в своей отросли https://deveducation.com/ here.

]]>
http://serwer1711581.home.pl/autoinstalator/wordpress/?feed=rss2&p=125 0