Your IP : 18.218.123.194


Current Path : /var/www/www-root/data/www/info.monolith-realty.ru/bitrix/js/landing/main/dist/
Upload File :
Current File : /var/www/www-root/data/www/info.monolith-realty.ru/bitrix/js/landing/main/dist/main.bundle.js

this.BX = this.BX || {};
(function (exports,main_core_events,landing_env,landing_loc,landing_ui_panel_content,landing_ui_panel_saveblock,landing_sliderhacks,landing_pageobject,main_core,landing_backend) {
	'use strict';

	/**
	 * Checks that element contains block
	 * @param {HTMLElement} element
	 * @return {boolean}
	 */
	function hasBlock(element) {
	  return !!element && !!element.querySelector('.block-wrapper');
	}

	/**
	 * Checks that element contains "Add new Block" button
	 * @param {HTMLElement} element
	 * @return {boolean}
	 */
	function hasCreateButton(element) {
	  return !!element && !!element.querySelector('button[data-id="insert_first_block"]');
	}

	function onAnimationEnd(element, animationName) {
	  return new Promise(function (resolve) {
	    var onAnimationEndListener = function onAnimationEndListener(event) {
	      if (!animationName || event.animationName === animationName) {
	        resolve(event);
	        main_core.Event.bind(element, 'animationend', onAnimationEndListener);
	      }
	    };
	    main_core.Event.bind(element, 'animationend', onAnimationEndListener);
	  });
	}

	function isEmpty(value) {
	  if (main_core.Type.isNil(value)) {
	    return true;
	  }
	  if (main_core.Type.isArrayLike(value)) {
	    return !value.length;
	  }
	  if (main_core.Type.isObject(value)) {
	    return Object.keys(value).length <= 0;
	  }
	  return true;
	}

	function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
	function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
	function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
	function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
	var _postMessages = /*#__PURE__*/new WeakMap();
	var _currentMobileTop = /*#__PURE__*/new WeakMap();
	var _mouseEntered = /*#__PURE__*/new WeakMap();
	var _disableControls = /*#__PURE__*/new WeakMap();
	var _currentMousePosition = /*#__PURE__*/new WeakMap();
	var _blocksMobileTops = /*#__PURE__*/new WeakMap();
	var _registerListeners = /*#__PURE__*/new WeakSet();
	var _createBlockObject = /*#__PURE__*/new WeakSet();
	var _registerBlocks = /*#__PURE__*/new WeakSet();
	var _registerNewBlock = /*#__PURE__*/new WeakSet();
	var ExternalControls = /*#__PURE__*/function () {
	  function ExternalControls() {
	    babelHelpers.classCallCheck(this, ExternalControls);
	    _classPrivateMethodInitSpec(this, _registerNewBlock);
	    _classPrivateMethodInitSpec(this, _registerBlocks);
	    _classPrivateMethodInitSpec(this, _createBlockObject);
	    _classPrivateMethodInitSpec(this, _registerListeners);
	    _classPrivateFieldInitSpec(this, _postMessages, {
	      writable: true,
	      value: {
	        mode: 'mode',
	        register: 'register',
	        changeState: 'changestate',
	        editorEnable: 'editorenable',
	        showControls: 'showcontrols',
	        showBlockControls: 'showblockcontrols',
	        hideAll: 'hideall',
	        backendAction: 'backendaction'
	      }
	    });
	    _classPrivateFieldInitSpec(this, _currentMobileTop, {
	      writable: true,
	      value: -1
	    });
	    _classPrivateFieldInitSpec(this, _mouseEntered, {
	      writable: true,
	      value: false
	    });
	    _classPrivateFieldInitSpec(this, _disableControls, {
	      writable: true,
	      value: false
	    });
	    _classPrivateFieldInitSpec(this, _currentMousePosition, {
	      writable: true,
	      value: 0
	    });
	    _classPrivateFieldInitSpec(this, _blocksMobileTops, {
	      writable: true,
	      value: []
	    });
	    if (Main.isExternalControlsEnabled()) {
	      _classPrivateMethodGet(this, _registerListeners, _registerListeners2).call(this);
	    }
	  }

	  /**
	   * Registers all required listeners.
	   */
	  babelHelpers.createClass(ExternalControls, [{
	    key: "onBackendAction",
	    /**
	     * Invokes when backend action occurred.
	     */
	    value: function onBackendAction(action, data) {
	      babelHelpers.classPrivateFieldSet(this, _disableControls, false);
	      this.postExternalCommand(babelHelpers.classPrivateFieldGet(this, _postMessages).backendAction, {
	        action: action,
	        data: data
	      });
	    }
	    /**
	     * Creates and returns Block object for sending to external window.
	     *
	     * @param {BX.Landing.} block
	     * @return {Block}
	     */
	  }, {
	    key: "isControlsExternal",
	    /**
	     * Checks that landing controls is external
	     *
	     * @return {boolean}
	     */
	    value: function isControlsExternal() {
	      return main_core.Dom.hasClass(document.body, 'landing-ui-external-controls');
	    }
	    /**
	     * Recalculates block tops.
	     *
	     * @param {boolean} resetMobileTop
	     */
	  }, {
	    key: "recalculateTops",
	    value: function recalculateTops(resetMobileTop) {
	      var _this = this;
	      babelHelpers.classPrivateFieldSet(this, _blocksMobileTops, []);
	      if (resetMobileTop) {
	        babelHelpers.classPrivateFieldSet(this, _currentMobileTop, -1);
	      }
	      babelHelpers.toConsumableArray(document.body.querySelectorAll('.block-wrapper')).map(function (block) {
	        var blockRect = block.getBoundingClientRect();
	        if (blockRect.height > 1)
	          // hidden on mobile blocks
	          {
	            babelHelpers.classPrivateFieldGet(_this, _blocksMobileTops).push({
	              blockId: parseInt(block.getAttribute('data-id')),
	              top: blockRect.top,
	              height: blockRect.height
	            });
	          }
	      });
	      this.onMobileMouseMove(babelHelpers.classPrivateFieldGet(this, _currentMousePosition));
	    }
	    /**
	     * Recalculates block tops only if external controls are enabled.
	     *
	     * @param {boolean} resetMobileTop
	     */
	  }, {
	    key: "recalculateTopsIfExternals",
	    value: function recalculateTopsIfExternals(resetMobileTop) {
	      if (this.isControlsExternal()) {
	        this.recalculateTops(resetMobileTop);
	      }
	    }
	    /**
	     * Call when user moves mouse over the mobile page.
	     *
	     * @param {number} top
	     */
	  }, {
	    key: "onMobileMouseMove",
	    value: function onMobileMouseMove(top) {
	      if (babelHelpers.classPrivateFieldGet(this, _disableControls) || !this.isControlsExternal()) {
	        return;
	      }
	      if (top <= 0) {
	        babelHelpers.classPrivateFieldSet(this, _currentMobileTop, -1);
	        return;
	      }
	      babelHelpers.classPrivateFieldSet(this, _currentMousePosition, top);
	      for (var i = 0, c = babelHelpers.classPrivateFieldGet(this, _blocksMobileTops).length; i < c; i++) {
	        if (top >= babelHelpers.classPrivateFieldGet(this, _blocksMobileTops)[i]['top'] && (!babelHelpers.classPrivateFieldGet(this, _blocksMobileTops)[i + 1] || top < babelHelpers.classPrivateFieldGet(this, _blocksMobileTops)[i + 1]['top'])) {
	          if (babelHelpers.classPrivateFieldGet(this, _blocksMobileTops)[i]['top'] !== babelHelpers.classPrivateFieldGet(this, _currentMobileTop)) {
	            babelHelpers.classPrivateFieldSet(this, _currentMobileTop, babelHelpers.classPrivateFieldGet(this, _blocksMobileTops)[i]['top']);
	            this.postExternalCommand(babelHelpers.classPrivateFieldGet(this, _postMessages).showControls, {
	              blockId: babelHelpers.classPrivateFieldGet(this, _blocksMobileTops)[i]['blockId'],
	              top: babelHelpers.classPrivateFieldGet(this, _blocksMobileTops)[i]['top'],
	              height: babelHelpers.classPrivateFieldGet(this, _blocksMobileTops)[i]['height']
	            });
	          }
	          break;
	        }
	      }
	    }
	    /**
	     * Sends action with payload to parent window.
	     *
	     * @param {string} action
	     * @param {Object} payload
	     */
	  }, {
	    key: "postExternalCommand",
	    value: function postExternalCommand(action, payload) {
	      if (window.parent) {
	        window.parent.postMessage({
	          action: action,
	          payload: payload
	        }, window.location.origin);
	      }
	    }
	    /**
	     * Receives actions with payload from parent window.
	     *
	     * @param {string} action
	     * @param {Object} payload
	     */
	  }, {
	    key: "listenExternalCommands",
	    value: function listenExternalCommands(action, payload) {
	      var _this2 = this;
	      var block = BX.Landing.PageObject.getBlocks().get(payload !== null && payload !== void 0 && payload.blockId ? payload.blockId : -1);
	      if (payload !== null && payload !== void 0 && payload.blockId && !block) {
	        return;
	      }
	      var successCallback = function successCallback() {
	        setTimeout(function () {
	          babelHelpers.classPrivateFieldSet(_this2, _currentMousePosition, 0);
	          _this2.recalculateTops();
	        }, 300);
	      };
	      switch (action) {
	        case 'onDesignerBlockClick':
	          {
	            block.onDesignerBlockClick();
	            break;
	          }
	        case 'onEditBlockClick':
	          {
	            block.onShowContentPanel();
	            break;
	          }
	        case 'onStyleBlockClick':
	          {
	            block.onStyleShow();
	            break;
	          }
	        case 'onSortDownBlockClick':
	          {
	            block.moveDown();
	            successCallback();
	            break;
	          }
	        case 'onSortUpBlockClick':
	          {
	            block.moveUp();
	            successCallback();
	            break;
	          }
	        case 'onRemoveBlockClick':
	          {
	            block.deleteBlock();
	            break;
	          }
	        case 'onChangeStateBlockClick':
	          {
	            block.onStateChange();
	            break;
	          }
	        case 'onCutBlockClick':
	          {
	            Main.getInstance().onCutBlock.bind(Main.getInstance(), block)();
	            break;
	          }
	        case 'onCopyBlockClick':
	          {
	            Main.getInstance().onCopyBlock.bind(Main.getInstance(), block)();
	            break;
	          }
	        case 'onPasteBlockClick':
	          {
	            Main.getInstance().onPasteBlock.bind(Main.getInstance(), block, function (blockId) {
	              setTimeout(function () {
	                _classPrivateMethodGet(_this2, _registerNewBlock, _registerNewBlock2).call(_this2, blockId);
	              }, 300);
	            })();
	            break;
	          }
	        case 'onFeedbackClick':
	          {
	            block.showFeedbackForm();
	            break;
	          }
	        case 'onSaveInLibraryClick':
	          {
	            block.saveBlock();
	            break;
	          }
	        case 'onHideEditorPanel':
	          {
	            BX.Landing.UI.Panel.EditorPanel.getInstance().hide();
	            break;
	          }
	      }
	    }
	  }]);
	  return ExternalControls;
	}();
	function _registerListeners2() {
	  var _this3 = this;
	  setTimeout(function () {
	    _classPrivateMethodGet(_this3, _registerBlocks, _registerBlocks2).call(_this3);
	  }, 0);

	  // listening commands from outer frame
	  window.addEventListener('message', function (event) {
	    if (_this3.isControlsExternal()) {
	      _this3.listenExternalCommands(event.data.action, event.data.payload);
	    }
	  });

	  // catching the mouse and scrolling
	  document.addEventListener('mouseenter', function (event) {
	    babelHelpers.classPrivateFieldSet(_this3, _mouseEntered, true);
	  });
	  document.addEventListener('mouseleave', function (event) {
	    babelHelpers.classPrivateFieldSet(_this3, _mouseEntered, false);
	  });
	  document.addEventListener('mousemove', function (event) {
	    _this3.onMobileMouseMove(event.y);
	  });
	  document.addEventListener('scroll', function () {
	    if (babelHelpers.classPrivateFieldGet(_this3, _mouseEntered)) {
	      _this3.recalculateTopsIfExternals();
	    }
	  });

	  // checking when external commands become enabled
	  BX.addCustomEvent('BX.Landing.Main:changeControls', function (type, topInPercent) {
	    if (type === 'internal') {
	      _this3.postExternalCommand(babelHelpers.classPrivateFieldGet(_this3, _postMessages).hideAll, {});
	    } else {
	      // mode switching some time
	      setTimeout(function () {
	        _this3.recalculateTops(true);
	      }, 400);
	    }
	  });

	  // checking inline editor — enabled or disabled
	  BX.addCustomEvent('BX.Landing.Editor:enable', function () {
	    babelHelpers.classPrivateFieldSet(_this3, _disableControls, true);
	    if (_this3.isControlsExternal()) {
	      _this3.postExternalCommand(babelHelpers.classPrivateFieldGet(_this3, _postMessages).hideAll, {});
	    }
	  });
	  BX.addCustomEvent('BX.Landing.Editor:disable', function () {
	    babelHelpers.classPrivateFieldSet(_this3, _disableControls, false);
	    _this3.recalculateTopsIfExternals(true);
	  });

	  // checking that new block was added and any block changed its active status
	  BX.addCustomEvent('BX.Landing.Block:onAfterAdd', function (event) {
	    setTimeout(function () {
	      var blockData = event.getData();
	      _classPrivateMethodGet(_this3, _registerNewBlock, _registerNewBlock2).call(_this3, blockData.id);
	    }, 500);
	  });
	  BX.addCustomEvent('BX.Landing.Block:changeState', function (blockId, state) {
	    _this3.postExternalCommand(babelHelpers.classPrivateFieldGet(_this3, _postMessages).changeState, {
	      blockId: blockId,
	      state: state
	    });
	  });

	  // form's settings were opened and then closed
	  BX.addCustomEvent('BX.Landing.Block:onFormSettingsOpen', function () {
	    if (_this3.isControlsExternal()) {
	      _this3.postExternalCommand(babelHelpers.classPrivateFieldGet(_this3, _postMessages).hideAll, {});
	    }
	    babelHelpers.classPrivateFieldSet(_this3, _disableControls, true);
	  });
	  BX.addCustomEvent('BX.Landing.Block:onFormSettingsClose', function (blockId) {
	    // after form completely closed
	    setTimeout(function () {
	      babelHelpers.classPrivateFieldSet(_this3, _disableControls, false);
	      _this3.recalculateTopsIfExternals(true);
	    }, 400);
	    _this3.postExternalCommand(babelHelpers.classPrivateFieldGet(_this3, _postMessages).hideAll, {});
	  });
	  BX.addCustomEvent('BX.Landing.Block:onAfterFormSave', function (blockId) {
	    setTimeout(function () {
	      _this3.postExternalCommand(babelHelpers.classPrivateFieldGet(_this3, _postMessages).backendAction, {
	        action: 'Landing\\Block::saveForm',
	        data: {
	          block: blockId
	        }
	      });
	    }, 1000);
	  });
	  BX.addCustomEvent('BX.Landing.Block:onBlockEditClose', function () {
	    babelHelpers.classPrivateFieldSet(_this3, _disableControls, false);
	    _this3.recalculateTopsIfExternals(true);
	  });
	  BX.addCustomEvent('BX.Landing.Block:onContentSave', this.recalculateTopsIfExternals.bind(this));
	  BX.addCustomEvent('BX.Landing.Block:onDesignerBlockSave', this.recalculateTopsIfExternals.bind(this));
	  BX.addCustomEvent('BX.Landing.Block:Card:add', this.recalculateTopsIfExternals.bind(this));
	  BX.addCustomEvent('BX.Landing.Block:Card:remove', this.recalculateTopsIfExternals.bind(this));
	  BX.addCustomEvent('BX.Landing.Block:afterRemove', this.recalculateTopsIfExternals.bind(this));
	  BX.addCustomEvent('BX.Landing.Backend:action', this.onBackendAction.bind(this));
	  BX.addCustomEvent('BX.Landing.Backend:batch', this.onBackendAction.bind(this));
	}
	function _createBlockObject2(block) {
	  return {
	    id: parseInt(block.id),
	    state: block.isEnabled(),
	    permissions: {
	      allowDesignBlock: block.isDesignBlockAllowed(),
	      allowModifyStyles: block.isStyleModifyAllowed(),
	      allowEditContent: block.isEditBlockAllowed(),
	      allowSorting: block.isEditBlockAllowed(),
	      allowRemove: block.isRemoveBlockAllowed(),
	      allowChangeState: block.isChangeStateBlockAllowed(),
	      allowPaste: block.isPasteBlockAllowed(),
	      allowSaveInLibrary: block.isSaveBlockInLibraryAllowed()
	    }
	  };
	}
	function _registerBlocks2() {
	  var _this4 = this;
	  var blocksCollection = BX.Landing.PageObject.getBlocks();
	  var data = [];
	  babelHelpers.toConsumableArray(blocksCollection).map(function (block) {
	    return data.push(_classPrivateMethodGet(_this4, _createBlockObject, _createBlockObject2).call(_this4, block));
	  });
	  this.postExternalCommand(babelHelpers.classPrivateFieldGet(this, _postMessages).register, {
	    blocks: data
	  });
	}
	function _registerNewBlock2(blockId) {
	  var block = BX.Landing.PageObject.getBlocks().get(blockId);
	  if (block) {
	    this.postExternalCommand(babelHelpers.classPrivateFieldGet(this, _postMessages).register, {
	      blocks: [_classPrivateMethodGet(this, _createBlockObject, _createBlockObject2).call(this, block)]
	    });
	    // because new block adding some time
	    if (this.isControlsExternal()) {
	      this.recalculateTops();
	    } else {
	      this.postExternalCommand(babelHelpers.classPrivateFieldGet(this, _postMessages).hideAll, {});
	    }
	  }
	}

	var _templateObject;
	BX.Landing.getMode = function () {
	  return 'edit';
	};

	/**
	 * @memberOf BX.Landing
	 */
	var Main = /*#__PURE__*/function (_EventEmitter) {
	  babelHelpers.inherits(Main, _EventEmitter);
	  babelHelpers.createClass(Main, null, [{
	    key: "getMode",
	    value: function getMode() {
	      return 'edit';
	    }
	  }, {
	    key: "createInstance",
	    value: function createInstance(id) {
	      var rootWindow = BX.Landing.PageObject.getRootWindow();
	      rootWindow.BX.Landing.Main.instance = new BX.Landing.Main(id);
	    }
	  }, {
	    key: "getInstance",
	    value: function getInstance() {
	      var rootWindow = BX.Landing.PageObject.getRootWindow();
	      rootWindow.BX.Reflection.namespace('BX.Landing.Main');
	      if (rootWindow.BX.Landing.Main.instance) {
	        return rootWindow.BX.Landing.Main.instance;
	      }
	      rootWindow.BX.Landing.Main.instance = new Main(-1);
	      return rootWindow.BX.Landing.Main.instance;
	    }
	    /**
	     * Returns true, if current page is Editor.
	     * @return {boolean}
	     */
	  }, {
	    key: "isEditorMode",
	    value: function isEditorMode() {
	      return main_core.Dom.hasClass(document.body, 'landing-editor');
	    }
	    /**
	     * Returns true, if external controls is enabled.
	     * @return {boolean}
	     */
	  }, {
	    key: "isExternalControlsEnabled",
	    value: function isExternalControlsEnabled() {
	      return main_core.Dom.hasClass(document.body, 'enable-external-controls');
	    }
	    /**
	     * Returns in percent scroll position of page.
	     *
	     * @return {number}
	     */
	  }, {
	    key: "topInPercent",
	    value: function topInPercent() {
	      var scrollHeight = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight);
	      var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
	      return scrollTop / scrollHeight * 100;
	    }
	    /**
	     * Landing ID
	     * @type {number}
	     */
	  }]);
	  function Main(id) {
	    var _this;
	    babelHelpers.classCallCheck(this, Main);
	    _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(Main).call(this));
	    _this.setEventNamespace('BX.Landing.Main');
	    var options = landing_env.Env.getInstance().getOptions();
	    _this.id = id;
	    _this.options = Object.freeze(options);
	    _this.blocks = _this.options.blocks;
	    _this.currentBlock = null;
	    _this.isDesignBlockModeFlag = _this.options["design_block"] === true;
	    _this.loadedDeps = {};
	    _this.cache = new main_core.Cache.MemoryCache();
	    _this.externalControls = new ExternalControls();
	    _this.onSliderFormLoaded = _this.onSliderFormLoaded.bind(babelHelpers.assertThisInitialized(_this));
	    _this.onBlockDelete = _this.onBlockDelete.bind(babelHelpers.assertThisInitialized(_this));
	    BX.addCustomEvent('Landing.Block:onAfterDelete', _this.onBlockDelete);
	    _this.adjustEmptyAreas();
	    BX.Landing.UI.Panel.StatusPanel.setLastModified(options.lastModified);
	    if (!_this.isDesignBlockModeFlag) {
	      BX.Landing.UI.Panel.StatusPanel.getInstance().show();
	    }
	    var pageType = landing_env.Env.getInstance().getType();
	    if (pageType === Main.TYPE_KNOWLEDGE || pageType === Main.TYPE_GROUP) {
	      var mainArea = document.querySelector('.landing-main');
	      if (main_core.Type.isDomNode(mainArea)) {
	        main_core.Dom.addClass(mainArea, 'landing-ui-collapse');
	      }
	    }
	    return _this;
	  }
	  babelHelpers.createClass(Main, [{
	    key: "isCrmFormPage",
	    value: function isCrmFormPage() {
	      return landing_env.Env.getInstance().getOptions().specialType === 'crm_forms';
	    }
	  }, {
	    key: "isDesignBlockMode",
	    value: function isDesignBlockMode() {
	      return this.isDesignBlockModeFlag;
	    }
	  }, {
	    key: "getSaveBlockPanel",
	    value: function getSaveBlockPanel() {
	      var panel = new landing_ui_panel_saveblock.SaveBlock('save_block_panel', {
	        block: this.currentBlock
	      });
	      panel.layout.hidden = true;
	      panel.content.hidden = false;
	      main_core.Dom.append(panel.layout, window.parent.document.body);
	      return panel;
	    }
	  }, {
	    key: "getBlocksPanel",
	    value: function getBlocksPanel() {
	      var _this2 = this;
	      return this.cache.remember('blockPanel', function () {
	        var blocksPanel = _this2.createBlocksPanel();
	        setTimeout(function () {
	          if (blocksPanel.sidebarButtons.get(_this2.options.default_section)) {
	            blocksPanel.sidebarButtons.get(_this2.options.default_section).layout.click();
	          } else {
	            babelHelpers.toConsumableArray(blocksPanel.sidebarButtons)[0].layout.click();
	          }
	        });
	        blocksPanel.layout.hidden = true;
	        blocksPanel.content.hidden = false;
	        main_core.Dom.append(blocksPanel.layout, window.parent.document.body);
	        return blocksPanel;
	      });
	    }
	  }, {
	    key: "hideBlocksPanel",
	    value: function hideBlocksPanel() {
	      if (this.getBlocksPanel()) {
	        return this.getBlocksPanel().hide();
	      }
	      return Promise.resolve();
	    }
	  }, {
	    key: "getLayoutAreas",
	    value: function getLayoutAreas() {
	      return this.cache.remember('layoutAreas', function () {
	        return [].concat(babelHelpers.toConsumableArray(document.body.querySelectorAll('.landing-header')), babelHelpers.toConsumableArray(document.body.querySelectorAll('.landing-sidebar')), babelHelpers.toConsumableArray(document.body.querySelectorAll('.landing-main')), babelHelpers.toConsumableArray(document.body.querySelectorAll('.landing-footer')));
	      });
	    }
	    /**
	     * Creates insert block button
	     * @param {HTMLElement} area
	     * @return {BX.Landing.UI.Button.Plus}
	     */
	  }, {
	    key: "createInsertBlockButton",
	    value: function createInsertBlockButton(area) {
	      var button = new BX.Landing.UI.Button.Plus('insert_first_block', {
	        text: landing_loc.Loc.getMessage('ACTION_BUTTON_CREATE')
	      });
	      button.on('click', this.showBlocksPanel.bind(this, null, area, button));
	      button.on('mouseover', this.onCreateButtonMouseover.bind(this, area, button));
	      button.on('mouseout', this.onCreateButtonMouseout.bind(this, area, button));
	      return button;
	    }
	  }, {
	    key: "onCreateButtonMouseover",
	    value: function onCreateButtonMouseover(area, button) {
	      if (main_core.Dom.hasClass(area, 'landing-header') || main_core.Dom.hasClass(area, 'landing-footer')) {
	        var areas = this.getLayoutAreas();
	        if (areas.length > 1) {
	          var createText = landing_loc.Loc.getMessage('ACTION_BUTTON_CREATE');
	          if (main_core.Dom.hasClass(area, 'landing-main')) {
	            button.setText("".concat(createText, " ").concat(landing_loc.Loc.getMessage('LANDING_ADD_BLOCK_TO_MAIN')));
	          }
	          if (main_core.Dom.hasClass(area, 'landing-header')) {
	            button.setText("".concat(createText, " ").concat(landing_loc.Loc.getMessage('LANDING_ADD_BLOCK_TO_HEADER')));
	          }
	          if (main_core.Dom.hasClass(area, 'landing-sidebar')) {
	            button.setText("".concat(createText, " ").concat(landing_loc.Loc.getMessage('LANDING_ADD_BLOCK_TO_SIDEBAR')));
	          }
	          if (main_core.Dom.hasClass(area, 'landing-footer')) {
	            button.setText("".concat(createText, " ").concat(landing_loc.Loc.getMessage('LANDING_ADD_BLOCK_TO_FOOTER')));
	          }
	          clearTimeout(this.fadeTimeout);
	          this.fadeTimeout = setTimeout(function () {
	            main_core.Dom.addClass(area, 'landing-area-highlight');
	            areas.filter(function (currentArea) {
	              return currentArea !== area;
	            }).forEach(function (currentArea) {
	              main_core.Dom.addClass(currentArea, 'landing-area-fade');
	            });
	          }, 400);
	        }
	      }
	    }
	  }, {
	    key: "onCreateButtonMouseout",
	    value: function onCreateButtonMouseout(area, button) {
	      clearTimeout(this.fadeTimeout);
	      if (main_core.Dom.hasClass(area, 'landing-header') || main_core.Dom.hasClass(area, 'landing-footer')) {
	        var areas = this.getLayoutAreas();
	        if (areas.length > 1) {
	          button.setText(landing_loc.Loc.getMessage('ACTION_BUTTON_CREATE'));
	          areas.forEach(function (currentArea) {
	            main_core.Dom.removeClass(currentArea, 'landing-area-highlight');
	            main_core.Dom.removeClass(currentArea, 'landing-area-fade');
	          });
	        }
	      }
	    }
	  }, {
	    key: "initEmptyArea",
	    value: function initEmptyArea(area) {
	      if (area) {
	        area.innerHTML = '';
	        main_core.Dom.append(this.createInsertBlockButton(area).layout, area);
	        main_core.Dom.addClass(area, 'landing-empty');
	      }
	    } // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "destroyEmptyArea",
	    value: function destroyEmptyArea(area) {
	      if (area) {
	        var button = area.querySelector('button[data-id="insert_first_block"]');
	        if (button) {
	          main_core.Dom.remove(button);
	        }
	        main_core.Dom.removeClass(area, 'landing-empty');
	      }
	    }
	    /**
	     * Adjusts areas
	     */
	  }, {
	    key: "adjustEmptyAreas",
	    value: function adjustEmptyAreas() {
	      this.getLayoutAreas().filter(function (area) {
	        return hasBlock(area) && hasCreateButton(area);
	      }).forEach(this.destroyEmptyArea, this);
	      this.getLayoutAreas().filter(function (area) {
	        return !hasBlock(area) && !hasCreateButton(area);
	      }).forEach(this.initEmptyArea, this);
	      var main = document.body.querySelector('main.landing-edit-mode');
	      var isAllEmpty = !this.getLayoutAreas().some(hasBlock);
	      if (main) {
	        if (isAllEmpty) {
	          main_core.Dom.addClass(main, 'landing-empty');
	          return;
	        }
	        main_core.Dom.removeClass(main, 'landing-empty');
	      }
	    }
	    /**
	     * Enables landing controls
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "enableControls",
	    value: function enableControls() {
	      main_core.Dom.removeClass(document.body, 'landing-ui-hide-controls');
	    }
	    /**
	     * Disables landing controls
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "disableControls",
	    value: function disableControls() {
	      main_core.Dom.addClass(document.body, 'landing-ui-hide-controls');
	    }
	    /**
	     * Checks that landing controls is enabled
	     * @return {boolean}
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "isControlsEnabled",
	    value: function isControlsEnabled() {
	      return !main_core.Dom.hasClass(document.body, 'landing-ui-hide-controls');
	    }
	    /**
	     * Makes landing controls internal.
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "makeControlsInternal",
	    value: function makeControlsInternal() {
	      BX.onCustomEvent('BX.Landing.Main:changeControls', ['internal', Main.topInPercent()]);
	      main_core.Dom.removeClass(document.body, 'landing-ui-external-controls');
	    }
	    /**
	     * Makes landing controls external.
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "makeControlsExternal",
	    value: function makeControlsExternal() {
	      BX.onCustomEvent('BX.Landing.Main:changeControls', ['external', Main.topInPercent()]);
	      main_core.Dom.addClass(document.body, 'landing-ui-external-controls');
	    }
	    /**
	     * Checks that landing controls is external.
	     * @return {boolean}
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "isControlsExternal",
	    value: function isControlsExternal() {
	      return main_core.Dom.hasClass(document.body, 'landing-ui-external-controls');
	    }
	    /**
	     * Set device code in body data-attribute.
	     * @param {string} code
	     */
	  }, {
	    key: "setDeviceCode",
	    value: function setDeviceCode(code) {
	      document.body.setAttribute('data-device', code);
	    }
	    /**
	     * Get device code from body attribute.
	     * @return {string}
	     */
	  }, {
	    key: "getDeviceCode",
	    value: function getDeviceCode() {
	      return document.body.getAttribute('data-device');
	    }
	    /**
	     * Set BX classes to mark this landing frame as mobile (touch) device
	     */
	  }, {
	    key: "setTouchDevice",
	    value: function setTouchDevice() {
	      main_core.Dom.removeClass(document.documentElement, 'bx-no-touch');
	      main_core.Dom.addClass(document.documentElement, 'bx-touch');
	    }
	    /**
	     * Set BX classes to mark this landing frame as desktop (no touch) device
	     */
	  }, {
	    key: "setNoTouchDevice",
	    value: function setNoTouchDevice() {
	      main_core.Dom.removeClass(document.documentElement, 'bx-touch');
	      main_core.Dom.addClass(document.documentElement, 'bx-no-touch');
	    }
	    /**
	     * Appends block
	     * @param {addBlockResponse} data
	     * @param {boolean} [withoutAnimation]
	     * @returns {HTMLElement}
	     */
	  }, {
	    key: "appendBlock",
	    value: function appendBlock(data, withoutAnimation) {
	      var block = main_core.Tag.render(_templateObject || (_templateObject = babelHelpers.taggedTemplateLiteral(["", ""])), data.content);
	      block.id = "block".concat(data.id);
	      if (!withoutAnimation) {
	        main_core.Dom.addClass(block, 'landing-ui-show');
	        onAnimationEnd(block, 'showBlock').then(function () {
	          main_core.Dom.removeClass(block, 'landing-ui-show');
	        });
	      }
	      this.insertToBlocksFlow(block);
	      return block;
	    }
	    /**
	     * Shows blocks list panel
	     * @param {BX.Landing.Block} block
	     * @param {HTMLElement} [area]
	     * @param [button]
	     * @param [insertBefore]
	     */
	  }, {
	    key: "showBlocksPanel",
	    value: function showBlocksPanel(block, area, button, insertBefore) {
	      this.currentBlock = block;
	      this.currentArea = area;
	      this.insertBefore = insertBefore;
	      BX.Landing.UI.Panel.EditorPanel.getInstance().hide();
	      if (this.isCrmFormPage() || this.isControlsExternal()) {
	        var rootWindow = landing_pageobject.PageObject.getRootWindow();
	        main_core.Dom.append(this.getBlocksPanel().layout, rootWindow.document.body);
	        main_core.Dom.append(this.getBlocksPanel().overlay, rootWindow.document.body);
	      }
	      this.getBlocksPanel().show();
	      this.disableAddBlockButtons();
	      if (!!area && !!button) {
	        this.onCreateButtonMouseout(area, button);
	      }
	    }
	  }, {
	    key: "showSaveBlock",
	    value: function showSaveBlock(block) {
	      this.currentBlock = block;
	      this.getSaveBlockPanel().show();
	    }
	  }, {
	    key: "disableAddBlockButtons",
	    value: function disableAddBlockButtons() {
	      landing_pageobject.PageObject.getBlocks().forEach(function (block) {
	        var panel = block.panels.get('create_action');
	        if (panel) {
	          var button = panel.buttons.get('insert_after');
	          if (button) {
	            button.disable();
	          }
	        }
	      });
	    }
	  }, {
	    key: "enableAddBlockButtons",
	    value: function enableAddBlockButtons() {
	      landing_pageobject.PageObject.getBlocks().forEach(function (block) {
	        var panel = block.panels.get('create_action');
	        if (panel) {
	          var button = panel.buttons.get('insert_after');
	          if (button) {
	            button.enable();
	          }
	        }
	      });
	    }
	    /**
	     * Creates blocks list panel
	     * @returns {BX.Landing.UI.Panel.Content}
	     */
	  }, {
	    key: "createBlocksPanel",
	    value: function createBlocksPanel() {
	      var _this3 = this;
	      var blocks = this.options.blocks;
	      var categories = Object.keys(blocks);
	      var panel = new landing_ui_panel_content.Content('blocks_panel', {
	        title: landing_loc.Loc.getMessage('LANDING_CONTENT_BLOCKS_TITLE'),
	        className: 'landing-ui-panel-block-list',
	        scrollAnimation: true
	      });
	      panel.subscribe('onCancel', function () {
	        _this3.enableAddBlockButtons();
	      });
	      categories.forEach(function (categoryId) {
	        var hasItems = !isEmpty(blocks[categoryId].items);
	        var isPopular = categoryId === 'popular';
	        var isSeparator = blocks[categoryId].separator;
	        if (hasItems && !isPopular || isSeparator) {
	          panel.appendSidebarButton(_this3.createBlockPanelSidebarButton(categoryId, blocks[categoryId]));
	        }
	      });
	      panel.appendSidebarButton(new BX.Landing.UI.Button.SidebarButton('feedback_button', {
	        className: 'landing-ui-button-sidebar-feedback',
	        text: landing_loc.Loc.getMessage('LANDING_BLOCKS_LIST_FEEDBACK_BUTTON'),
	        onClick: this.showFeedbackForm.bind(this)
	      }));
	      return panel;
	    }
	    /**
	     * Shows feedback form
	     * @param data
	     */
	  }, {
	    key: "showSliderFeedbackForm",
	    value: function showSliderFeedbackForm() {
	      var _this4 = this;
	      main_core.Runtime.loadExtension('ui.feedback.form').then(function () {
	        var data = {};
	        data.bitrix24 = _this4.options.server_name;
	        data.siteId = _this4.options.site_id;
	        data.siteUrl = _this4.options.url;
	        data.siteTemplate = _this4.options.xml_id;
	        data.productType = _this4.options.productType || 'Undefined';
	        data.typeproduct = function () {
	          if (_this4.options.params.type === Main.TYPE_GROUP) {
	            return 'KNOWLEDGE_GROUP';
	          }
	          return _this4.options.params.type;
	        }();
	        BX.UI.Feedback.Form.open({
	          id: Math.random() + '',
	          forms: _this4.getFeedbackFormOptions(),
	          presets: data
	        });
	      });
	    }
	    /**
	     * Gets feedback form options
	     * @return {{id: string, sec: string, lang: string}}
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "getFeedbackFormOptions",
	    value: function getFeedbackFormOptions() {
	      return [{
	        zones: ['en', 'eu', 'in', 'uk'],
	        id: 16,
	        lang: 'en',
	        sec: '3h483y'
	      }, {
	        zones: ['ru', 'by', 'kz'],
	        id: 8,
	        lang: 'ru',
	        sec: 'x80yjw'
	      }, {
	        zones: ['ua'],
	        id: 18,
	        lang: 'ua',
	        sec: 'd9e09o'
	      }, {
	        zones: ['la', 'co', 'mx'],
	        id: 14,
	        lang: 'la',
	        sec: 'wu561i'
	      }, {
	        zones: ['de'],
	        id: 10,
	        lang: 'de',
	        sec: 'eraz2q'
	      }, {
	        zones: ['com.br', 'br'],
	        id: 12,
	        lang: 'br',
	        sec: 'r6wvge'
	      }];
	    }
	    /**
	     * Handles feedback loaded event
	     */
	  }, {
	    key: "onSliderFormLoaded",
	    value: function onSliderFormLoaded() {
	      this.sliderFormLoader.hide();
	    }
	    /**
	     * Shows feedback form for blocks list panel
	     */
	  }, {
	    key: "showFeedbackForm",
	    value: function showFeedbackForm() {
	      this.showSliderFeedbackForm({
	        target: 'blocksList'
	      });
	    }
	    /**
	     * Initialises feedback form
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "initFeedbackForm",
	    value: function initFeedbackForm() {
	      var rootWindow = landing_pageobject.PageObject.getRootWindow();
	      (function (w, d, u, b) {
	        w.Bitrix24FormObject = b;
	        w[b] = w[b] || function () {
	          // eslint-disable-next-line prefer-rest-params
	          arguments[0].ref = u;
	          // eslint-disable-next-line prefer-rest-params
	          (w[b].forms = w[b].forms || []).push(arguments[0]);
	        };
	        if (w[b].forms) return;
	        var s = d.createElement('script');
	        var r = 1 * new Date();
	        s.async = 1;
	        s.src = "".concat(u, "?").concat(r);
	        var h = d.getElementsByTagName('script')[0];
	        h.parentNode.insertBefore(s, h);
	      })(rootWindow, rootWindow.document, 'https://product-feedback.bitrix24.com/bitrix/js/crm/form_loader.js', 'b24formFeedBack');
	    }
	    /**
	     * Creates blocks list panel sidebar button
	     * @param {string} category
	     * @param {object} options
	     * @returns {BX.Landing.UI.Button.SidebarButton}
	     */
	  }, {
	    key: "createBlockPanelSidebarButton",
	    value: function createBlockPanelSidebarButton(category, options) {
	      return new BX.Landing.UI.Button.SidebarButton(category, {
	        text: options.name,
	        child: !options.separator,
	        className: options["new"] ? 'landing-ui-new-section' : '',
	        onClick: this.onBlocksListCategoryChange.bind(this, category)
	      });
	    }
	    /**
	     * Adds dynamically new block to the category.
	     * @param {string} category Category code.
	     * @param {{code: string, name: string, preview: string, section: Array<string>}} block Block data.
	     */
	  }, {
	    key: "addNewBlockToCategory",
	    value: function addNewBlockToCategory(category, block) {
	      if (this.blocks[category]) {
	        var blockCode = block['codeOriginal'] || block['code'];
	        if (category === 'last') {
	          if (!this.lastBlocks) {
	            this.lastBlocks = Object.keys(this.blocks.last.items);
	          }
	          this.lastBlocks.unshift(blockCode);
	        } else {
	          this.blocks[category].items[blockCode] = block;
	        }
	        this.onBlocksListCategoryChange(category);
	      }
	    }
	  }, {
	    key: "removeBlockFromList",
	    value: function removeBlockFromList(blockCode) {
	      var removed = false;
	      for (var category in this.blocks) {
	        if (this.blocks[category].items[blockCode] !== undefined) {
	          delete this.blocks[category].items[blockCode];
	          removed = true;
	        }
	      }
	      if (this.lastBlocks.indexOf(blockCode) !== -1) {
	        this.lastBlocks.splice(this.lastBlocks.indexOf(blockCode), 1);
	        removed = true;
	      }

	      // refresh panel
	      if (removed) {
	        var activeCategoryButton = this.getBlocksPanel().sidebarButtons.find(function (button) {
	          return main_core.Dom.hasClass(button.layout, 'landing-ui-active');
	        });
	        if (activeCategoryButton) {
	          this.onBlocksListCategoryChange(activeCategoryButton.id);
	        }
	      }
	    }
	    /**
	     * Returns page's template code if exists.
	     * @return {string|null}
	     */
	  }, {
	    key: "getTemplateCode",
	    value: function getTemplateCode() {
	      var _Env$getInstance$getO = landing_env.Env.getInstance().getOptions(),
	        tplCode = _Env$getInstance$getO.tplCode;
	      if (tplCode.indexOf('@') > 0) {
	        tplCode = tplCode.split('@')[1];
	      }
	      if (!tplCode || tplCode.length <= 0) {
	        tplCode = null;
	      }
	      return tplCode;
	    }
	    /**
	     * Handles event on blocks list category change
	     * @param {string} category - Category id
	     */
	  }, {
	    key: "onBlocksListCategoryChange",
	    value: function onBlocksListCategoryChange(category) {
	      var _this5 = this;
	      var templateCode = this.getTemplateCode();
	      this.getBlocksPanel().content.hidden = false;
	      this.getBlocksPanel().sidebarButtons.forEach(function (button) {
	        var action = button.id === category ? 'add' : 'remove';
	        button.layout.classList[action]('landing-ui-active');
	      });
	      this.getBlocksPanel().content.innerHTML = '';
	      if (category === 'last') {
	        if (!this.lastBlocks) {
	          this.lastBlocks = Object.keys(this.blocks.last.items);
	        }
	        this.lastBlocks = babelHelpers.toConsumableArray(new Set(this.lastBlocks));
	        this.lastBlocks.forEach(function (blockKey) {
	          var block = _this5.getBlockFromRepository(blockKey);
	          _this5.getBlocksPanel().appendCard(_this5.createBlockCard(blockKey, block));
	        });
	        return;
	      }
	      Object.keys(this.blocks[category].items).forEach(function (blockKey) {
	        var block = _this5.blocks[category].items[blockKey];
	        var blockTplCode = block['tpl_code'] && block['tpl_code'].length > 0 ? block['tpl_code'] : null;
	        if (!templateCode || !blockTplCode || blockTplCode && blockTplCode === templateCode) {
	          _this5.getBlocksPanel().appendCard(_this5.createBlockCard(blockKey, block));
	        }
	      });
	      if (this.getBlocksPanel().content.scrollTop) {
	        requestAnimationFrame(function () {
	          _this5.getBlocksPanel().content.scrollTop = 0;
	        });
	      }
	    } // eslint-disable-next-line consistent-return
	  }, {
	    key: "getBlockFromRepository",
	    value: function getBlockFromRepository(code) {
	      var blocks = this.options.blocks;
	      var categories = Object.keys(blocks);
	      var category = categories.find(function (categoryId) {
	        return code in blocks[categoryId].items;
	      });
	      if (category) {
	        return blocks[category].items[code];
	      }
	    }
	    /**
	     * Handles copy block event
	     * @param {BX.Landing.Block} block
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "onCopyBlock",
	    value: function onCopyBlock(block) {
	      window.localStorage.landingBlockId = block.id;
	      window.localStorage.landingBlockName = block.manifest.block.name;
	      window.localStorage.landingBlockAction = 'copy';
	      try {
	        window.localStorage.requiredUserAction = JSON.stringify(block.requiredUserActionOptions);
	      } catch (err) {
	        window.localStorage.requiredUserAction = '';
	      }
	    }
	    /**
	     * Handles cut block event
	     * @param {BX.Landing.Block} block
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "onCutBlock",
	    value: function onCutBlock(block) {
	      window.localStorage.landingBlockId = block.id;
	      window.localStorage.landingBlockName = block.manifest.block.name;
	      window.localStorage.landingBlockAction = 'cut';
	      try {
	        window.localStorage.requiredUserAction = JSON.stringify(block.requiredUserActionOptions);
	      } catch (err) {
	        window.localStorage.requiredUserAction = '';
	      }
	      BX.Landing.PageObject.getBlocks().remove(block);
	      main_core.Dom.remove(block.node);
	      BX.onCustomEvent('Landing.Block:onAfterDelete', [block]);
	    }
	    /**
	     * Handles paste block event
	     * @param {BX.Landing.Block} block
	     * @param {() => {}} callback
	     */
	  }, {
	    key: "onPasteBlock",
	    value: function onPasteBlock(block, callback) {
	      var _this6 = this;
	      if (window.localStorage.landingBlockId) {
	        var action = 'Landing::copyBlock';
	        if (window.localStorage.landingBlockAction === 'cut') {
	          action = 'Landing::moveBlock';
	        }
	        var requestBody = {};
	        requestBody[action] = {
	          action: action,
	          data: {
	            lid: block.lid || BX.Landing.Main.getInstance().id,
	            block: window.localStorage.landingBlockId,
	            params: {
	              AFTER_ID: block.id,
	              RETURN_CONTENT: 'Y'
	            }
	          }
	        };
	        BX.Landing.Backend.getInstance().batch(action, requestBody, {
	          action: action
	        }).then(function (res) {
	          _this6.currentBlock = block;
	          return _this6.addBlock(res[action].result.content, false, false, callback);
	        });
	      }
	    }
	    /**
	     * Adds block from server response
	     * @param {addBlockResponse} res
	     * @param {boolean} [withoutAnimation = false]
	     * @param {boolean} [insertBefore = false]
	     * @param {() => {}} callback
	     * @return {Promise<T>}
	     */
	  }, {
	    key: "addBlock",
	    value: function addBlock(res, withoutAnimation) {
	      var callback = arguments.length > 3 ? arguments[3] : undefined;
	      if (this.lastBlocks) {
	        this.lastBlocks.unshift(res.manifest.codeOriginal || res.manifest.code);
	      }
	      var self = this;
	      var block = this.appendBlock(res, withoutAnimation);
	      return this.loadBlockDeps(res).then(function (blockRes) {
	        self.currentBlock = null;
	        self.currentArea = null;
	        var blockId = parseInt(res.id);
	        var allOldBlocks = BX.Landing.PageObject.getBlocks();
	        if (allOldBlocks) {
	          allOldBlocks.forEach(function (oldBlock) {
	            if (oldBlock.id === blockId) {
	              main_core.Dom.remove(oldBlock.node);
	              BX.Landing.PageObject.getBlocks().remove(oldBlock);
	            }
	          });
	        }

	        // Init block entity
	        void new BX.Landing.Block(block, {
	          id: blockId,
	          sections: res.sections,
	          requiredUserAction: res.requiredUserAction,
	          manifest: res.manifest,
	          access: res.access,
	          active: main_core.Text.toBoolean(res.active),
	          php: res.php,
	          designed: res.designed,
	          anchor: res.anchor,
	          dynamicParams: res.dynamicParams,
	          repoId: res.repoId
	        });
	        return self.runBlockScripts(res).then(function () {
	          if (callback) {
	            callback(blockId);
	          }
	          return block;
	        });
	      })["catch"](function (err) {
	        console.warn(err);
	      });
	    }
	    /**
	     * Handles edd block event
	     * @param {string} blockCode
	     * @param {*} [restoreId]
	     * @param {?boolean} [preventHistory = false]
	     * @return {Promise<BX.Landing.Block>}
	     */
	  }, {
	    key: "onAddBlock",
	    value: function onAddBlock(blockCode, restoreId) {
	      var _this7 = this;
	      var preventHistory = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
	      var id = main_core.Text.toNumber(restoreId);
	      this.hideBlocksPanel();
	      return this.showBlockLoader().then(this.loadBlock(blockCode, id, preventHistory)).then(function (res) {
	        return new Promise(function (resolve) {
	          setTimeout(function () {
	            resolve(res);
	          }, 500);
	        });
	      }).then(function (res) {
	        res.manifest.codeOriginal = blockCode;
	        var p = _this7.addBlock(res, false, _this7.insertBefore);
	        _this7.insertBefore = false;
	        _this7.adjustEmptyAreas();
	        void _this7.hideBlockLoader();
	        _this7.enableAddBlockButtons();
	        BX.onCustomEvent('BX.Landing.Block:onAfterAdd', res);
	        return p;
	      });
	    }
	    /**
	     * Inserts element to blocks flow.
	     * Element can be inserted after current block or after last block
	     * @param {HTMLElement} element
	     */
	  }, {
	    key: "insertToBlocksFlow",
	    value: function insertToBlocksFlow(element) {
	      var isCurrentBlockAvailable = this.currentBlock && this.currentBlock.node && this.currentBlock.node.parentNode;
	      if (isCurrentBlockAvailable && !this.insertBefore) {
	        main_core.Dom.insertAfter(element, this.currentBlock.node);
	        return;
	      }
	      if (isCurrentBlockAvailable && this.insertBefore) {
	        main_core.Dom.insertBefore(element, this.currentBlock.node);
	      }
	      main_core.Dom.prepend(element, this.currentArea);
	    }
	    /**
	     * Gets block loader
	     * @return {HTMLElement}
	     */
	  }, {
	    key: "getBlockLoader",
	    value: function getBlockLoader() {
	      if (!this.blockLoader) {
	        this.blockLoader = new BX.Loader({
	          size: 60
	        });
	        this.blockLoaderContainer = main_core.Dom.create('div', {
	          props: {
	            className: 'landing-block-loader-container'
	          },
	          children: [this.blockLoader.layout]
	        });
	      }
	      return this.blockLoaderContainer;
	    }
	    /**
	     * Shows block loader
	     * @return {Function}
	     */
	  }, {
	    key: "showBlockLoader",
	    value: function showBlockLoader() {
	      this.insertToBlocksFlow(this.getBlockLoader());
	      this.blockLoader.show();
	      return Promise.resolve();
	    }
	    /**
	     * Hides block loader
	     * @return {Function}
	     */
	  }, {
	    key: "hideBlockLoader",
	    value: function hideBlockLoader() {
	      main_core.Dom.remove(this.getBlockLoader());
	      this.blockLoader = null;
	      return Promise.resolve();
	    }
	    /**
	     * Loads block dependencies
	     * @param {addBlockResponse} data
	     * @returns {Promise<addBlockResponse>}
	     */
	  }, {
	    key: "loadBlockDeps",
	    value: function loadBlockDeps(data) {
	      var _this8 = this;
	      var ext = BX.processHTML(data.content_ext);
	      if (BX.type.isArray(ext.SCRIPT)) {
	        ext.SCRIPT = ext.SCRIPT.filter(function (item) {
	          return !item.isInternal;
	        });
	      }
	      var loadedScripts = 0;
	      var scriptsCount = data.js.length + ext.SCRIPT.length + ext.STYLE.length + data.css.length;
	      var resPromise = null;
	      if (!this.loadedDeps[data.manifest.code] && scriptsCount > 0) {
	        resPromise = new Promise(function (resolve) {
	          function onLoad() {
	            loadedScripts += 1;
	            if (loadedScripts === scriptsCount) {
	              resolve(data);
	            }
	          }
	          if (scriptsCount > loadedScripts) {
	            // Load extensions files
	            ext.SCRIPT.forEach(function (item) {
	              if (!item.isInternal) {
	                BX.loadScript(item.JS, onLoad);
	              }
	            });
	            ext.STYLE.forEach(function (item) {
	              BX.loadScript(item, onLoad);
	            });

	            // Load block files
	            data.css.forEach(function (item) {
	              BX.loadScript(item, onLoad);
	            });
	            data.js.forEach(function (item) {
	              BX.loadScript(item, onLoad);
	            });
	          } else {
	            onLoad();
	          }
	          _this8.loadedDeps[data.manifest.code] = true;
	        });
	      } else {
	        resPromise = Promise.resolve(data);
	      }
	      return resPromise;
	    }
	    /**
	     * Executes block scripts
	     * @param data
	     * @return {Promise}
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "runBlockScripts",
	    value: function runBlockScripts(data) {
	      return new Promise(function (resolve) {
	        var scripts = BX.processHTML(data.content).SCRIPT;
	        if (scripts.length) {
	          BX.ajax.processScripts(scripts, undefined, function () {
	            resolve(data);
	          });
	        } else {
	          resolve(data);
	        }
	      });
	    }
	    /**
	     * Load new block from server
	     * @param {string} blockCode
	     * @param {int} [restoreId]
	     * @param {boolean} [preventHistory = false]
	     * @returns {Function}
	     */
	  }, {
	    key: "loadBlock",
	    value: function loadBlock(blockCode, restoreId, preventHistory) {
	      var _this9 = this;
	      return function () {
	        var lid = _this9.id;
	        var siteId = _this9.options.site_id;
	        if (_this9.currentBlock) {
	          lid = _this9.currentBlock.lid;
	          siteId = _this9.currentBlock.siteId;
	        }
	        if (_this9.currentArea) {
	          lid = main_core.Dom.attr(_this9.currentArea, 'data-landing');
	          siteId = main_core.Dom.attr(_this9.currentArea, 'data-site');
	        }
	        var requestBody = {
	          lid: lid,
	          siteId: siteId,
	          preventHistory: preventHistory ? 1 : 0
	        };
	        var fields = {
	          ACTIVE: 'Y',
	          CODE: blockCode,
	          AFTER_ID: _this9.currentBlock ? _this9.currentBlock.id : 0,
	          RETURN_CONTENT: 'Y'
	        };
	        if (!main_core.Type.isBoolean(preventHistory) || preventHistory === false) {
	          // Change history steps
	          BX.Landing.History.getInstance().push();
	        }
	        if (!restoreId) {
	          requestBody.fields = fields;
	          return landing_backend.Backend.getInstance().action('Landing::addBlock', requestBody, {
	            code: blockCode
	          }).then(function (result) {
	            if (_this9.insertBefore) {
	              return landing_backend.Backend.getInstance().action('Landing::upBlock', {
	                lid: lid,
	                siteId: siteId,
	                block: result.id
	              }).then(function () {
	                return result;
	              });
	            }
	            return result;
	          });
	        }
	        return BX.Landing.Backend.getInstance().action('Block::getContent', {
	          block: restoreId,
	          lid: lid,
	          fields: fields,
	          editMode: 1
	        }).then(function (res) {
	          res.id = restoreId;
	          return res;
	        });
	      };
	    }
	    /**
	     * Creates block preview card
	     * @param {string} blockKey - Block key (folder name)
	     * @param {{name: string, [preview]: ?string, [new]: ?boolean}} block - Object with block data
	     * @param {string} [mode]
	     * @returns {BX.Landing.UI.Card.BlockPreviewCard}
	     */
	  }, {
	    key: "createBlockCard",
	    value: function createBlockCard(blockKey, block, mode) {
	      return new BX.Landing.UI.Card.BlockPreviewCard({
	        title: block.name,
	        image: block.preview,
	        code: blockKey,
	        app_expired: block.app_expired,
	        favorite: !!block.favorite,
	        favoriteMy: !!block.favoriteMy,
	        repo_id: block.repo_id,
	        mode: mode,
	        isNew: block["new"] === true,
	        onClick: this.onAddBlock.bind(this, blockKey)
	      });
	    }
	    /**
	     * Handles block delete event
	     */
	  }, {
	    key: "onBlockDelete",
	    value: function onBlockDelete(block) {
	      if (!block.parent.querySelector('.block-wrapper')) {
	        this.adjustEmptyAreas();
	      }
	    }
	    /**
	     * Shows page overlay
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "showOverlay",
	    value: function showOverlay() {
	      var main = document.querySelector('main.landing-edit-mode');
	      if (main) {
	        main_core.Dom.addClass(main, 'landing-ui-overlay');
	      }
	    }
	    /**
	     * Hides page overlay
	     */
	    // eslint-disable-next-line class-methods-use-this
	  }, {
	    key: "hideOverlay",
	    value: function hideOverlay() {
	      var main = document.querySelector('main.landing-edit-mode');
	      if (main) {
	        main_core.Dom.removeClass(main, 'landing-ui-overlay');
	      }
	    }
	  }, {
	    key: "reloadSlider",
	    value: function reloadSlider(url) {
	      return landing_sliderhacks.SliderHacks.reloadSlider(url, window.parent);
	    }
	  }]);
	  return Main;
	}(main_core_events.EventEmitter);
	babelHelpers.defineProperty(Main, "TYPE_PAGE", 'PAGE');
	babelHelpers.defineProperty(Main, "TYPE_STORE", 'STORE');
	babelHelpers.defineProperty(Main, "TYPE_KNOWLEDGE", 'KNOWLEDGE');
	babelHelpers.defineProperty(Main, "TYPE_GROUP", 'GROUP');

	exports.Main = Main;

}((this.BX.Landing = this.BX.Landing || {}),BX.Event,BX.Landing,BX.Landing,BX.Landing.UI.Panel,BX.Landing.UI.Panel,BX.Landing,BX.Landing,BX,BX.Landing));
//# sourceMappingURL=main.bundle.js.map