Your IP : 18.119.124.190


Current Path : /var/www/www-root/data/www/www.monolith-realty.ru/bitrix/js/ui/entity-editor/js/
Upload File :
Current File : /var/www/www-root/data/www/www.monolith-realty.ru/bitrix/js/ui/entity-editor/js/tool-panel.js

BX.namespace("BX.UI");

if(typeof BX.UI.EntityEditorToolPanel === "undefined")
{
	BX.UI.EntityEditorToolPanel = function()
	{
		this._id = "";
		this._settings = {};
		this._container = null;
		this._wrapper = null;
		this._editor = null;
		this._isVisible = false;
		this._isLocked = false;
		this._hasLayout = false;
		this._keyPressHandler = BX.delegate(this.onKeyPress, this);
		this._customButtons = {};
		this._buttonsOrder = {
			VIEW: [],
			EDIT: [BX.UI.EntityEditorActionIds.defaultActionId, BX.UI.EntityEditorActionIds.cancelActionId],
		};
	};

	BX.UI.EntityEditorToolPanel.prototype =
	{
		initialize: function(id, settings)
		{
			this._id = BX.type.isNotEmptyString(id) ? id : BX.util.getRandomString(4);
			this._settings = settings ? settings : {};

			this._container = BX.prop.getElementNode(this._settings, "container", null);
			this._editor = BX.prop.get(this._settings, "editor", null);
			this._isVisible = BX.prop.getBoolean(this._settings, "visible", false);
			var customButtons = BX.prop.getArray(this._settings, 'customButtons', []);
			for (var i = 0, length = customButtons.length; i < length; i++)
			{
				var customButtonProps = customButtons[i];
				this._customButtons[customButtonProps.ID] = this.createCustomButton(customButtonProps);
			}

			var buttonsOrder = BX.prop.getObject(this._settings, 'buttonsOrder', {});
			var editButtonsOrder = BX.prop.getArray(buttonsOrder, 'EDIT', []);
			var viewButtonsOrder = BX.prop.getArray(buttonsOrder, 'VIEW', []);
			if (editButtonsOrder.length > 0 || viewButtonsOrder.length > 0)
			{
				this._buttonsOrder = buttonsOrder;
			}

			this.attachToEditorEvents();
		},
		attachToEditorEvents: function()
		{
			BX.addCustomEvent(this._editor.eventsNamespace + ':onControlModeChange', BX.delegate(function(editor, additionalData) {
				if (editor !== this._editor || !additionalData.control)
				{
					return;
				}
				var control = additionalData.control;
				if(control.getMode() === BX.UI.EntityEditorMode.edit)
				{
					this.showEditModeButtons();
				}
				else
				{
					this.showViewModeButtons();
				}
			}, this));
			BX.addCustomEvent(this._editor.eventsNamespace + ':onControlChange', BX.delegate(function(editor) {
				if (editor !== this._editor)
				{
					return;
				}
				this.showEditModeButtons();
			}, this));
			BX.addCustomEvent(this._editor.eventsNamespace + ':onControllerChange', BX.delegate(function(editor) {
				if (editor !== this._editor)
				{
					return;
				}
				this.showEditModeButtons();
			}, this));
			BX.addCustomEvent(this._editor.eventsNamespace + ':onSwitchToViewMode', BX.delegate(function(editor) {
				if (editor !== this._editor)
				{
					return;
				}
				this.showViewModeButtons();
			}, this));
			BX.addCustomEvent(this._editor.eventsNamespace + ':onNothingChanged', BX.delegate(function(editor) {
				if (editor !== this._editor)
				{
					return;
				}
				this.showViewModeButtons();
			}, this));
		},
		showEditModeButtons: function ()
		{
			var editButtonsOrder = BX.prop.getArray(this._buttonsOrder, 'EDIT', []);
			if (editButtonsOrder.length > 0)
			{
				if (this._viewModeSectionControl)
				{
					BX.hide(this._viewModeSectionControl);
				}
				if (this._editModeSectionControl)
				{
					BX.show(this._editModeSectionControl);
				}
			}
		},
		showViewModeButtons: function ()
		{
			var viewButtonsOrder = BX.prop.getArray(this._buttonsOrder, 'VIEW', []);
			if (viewButtonsOrder.length > 0)
			{
				if (this._editModeSectionControl)
				{
					BX.hide(this._editModeSectionControl);
				}
				if (this._viewModeSectionControl)
				{
					BX.show(this._viewModeSectionControl);
				}
			}
		},
		getId: function()
		{
			return this._id;
		},
		getContainer: function()
		{
			return this._container;
		},
		setContainer: function (container)
		{
			this._container = container;
		},
		isVisible: function()
		{
			return this._isVisible;
		},
		setVisible: function(visible)
		{
			visible = !!visible;
			if(this._isVisible === visible)
			{
				return;
			}

			this._isVisible = visible;
			this.adjustLayout();
		},
		isLocked: function()
		{
			return this._isLocked;
		},
		setLocked: function(locked)
		{
			locked = !!locked;
			if(this._isLocked === locked)
			{
				return;
			}

			this._isLocked = locked;

			var activeButton = this._editButton;
			if (this._clickedButton)
			{
				activeButton = this._clickedButton;
			}
			if (activeButton)
			{
				if(locked)
				{
					BX.addClass(activeButton, "ui-btn-clock");
				}
				else
				{
					BX.removeClass(activeButton, "ui-btn-clock");
				}
			}
		},
		disableSaveButton: function()
		{
			if(!this._editButton)
			{
				return;
			}

			var buttonsToDisable = [this._editButton];

			var _this = this;
			Object.keys(this._customButtons).forEach(function (button) {
				if (_this._buttonsOrder.EDIT.includes(button))
				{
					buttonsToDisable.push(_this._customButtons[button]);
				}
			});

			buttonsToDisable.forEach(function (button) {
				button.disabled = true;
				BX.addClass(button, 'ui-btn-disabled');
			});

			BX.onCustomEvent(window, "onEntityEditorToolbarSaveButtonDisabled", [this]);
		},
		enableSaveButton: function()
		{
			if(!this._editButton)
			{
				return;
			}

			var buttonsToEnable = [this._editButton];

			var _this = this;
			Object.keys(this._customButtons).forEach(function (button) {
				if (_this._buttonsOrder.EDIT.includes(button))
				{
					buttonsToEnable.push(_this._customButtons[button]);
				}
			});

			buttonsToEnable.forEach(function (button) {
				button.disabled = false;
				BX.removeClass(button, 'ui-btn-disabled');
			});

			BX.onCustomEvent(window, "onEntityEditorToolbarSaveButtonEnabled", [this]);
		},
		isSaveButtonEnabled: function()
		{
			return this._editButton && !this._editButton.disabled;
		},
		layout: function()
		{
			this._editButton = BX.create("button",
				{
					props: { className: "ui-btn ui-btn-success", title: "[Ctrl+Enter]" },
					text: BX.message("UI_ENTITY_EDITOR_SAVE"),
					events: { click: BX.delegate(this.onSaveButtonClick, this) }
				}
			);

			this._cancelButton = BX.create("a",
				{
					props:  { className: "ui-btn ui-btn-link", title: "[Esc]" },
					text: BX.message("UI_ENTITY_EDITOR_CANCEL"),
					attrs:  { href: "#" },
					events: { click: BX.delegate(this.onCancelButtonClick, this) }
				}
			);

			this._errorContainer = BX.create("DIV", { props: { className: "ui-entity-section-control-error-block" } });
			this._errorContainer.style.maxHeight = "0";

			var sectionControlChildren = [];

			var editModeButtonsOrder = BX.prop.getArray(this._buttonsOrder, 'EDIT', []);
			var viewModeButtonsOrder = BX.prop.getArray(this._buttonsOrder, 'VIEW', []);
			if (editModeButtonsOrder.length > 0 || viewModeButtonsOrder.length > 0)
			{
				var editModeSectionControlChildren = [];
				var viewModeSectionControlChildren = [];
				for (var i = 0, length = editModeButtonsOrder.length; i < length; i++)
				{
					if (editModeButtonsOrder[i] === BX.UI.EntityEditorActionIds.defaultActionId)
					{
						editModeSectionControlChildren.push(this._editButton);
					}
					else if (editModeButtonsOrder[i] === BX.UI.EntityEditorActionIds.cancelActionId)
					{
						editModeSectionControlChildren.push(this._cancelButton);
					}
					else if (this._customButtons[editModeButtonsOrder[i]])
					{
						editModeSectionControlChildren.push(this._customButtons[editModeButtonsOrder[i]]);
					}
				}
				for (var i = 0, length = viewModeButtonsOrder.length; i < length; i++)
				{
					if (viewModeButtonsOrder[i] === BX.UI.EntityEditorActionIds.defaultActionId)
					{
						viewModeSectionControlChildren.push(this._editButton);
					}
					else if (viewModeButtonsOrder[i] === BX.UI.EntityEditorActionIds.cancelActionId)
					{
						viewModeSectionControlChildren.push(this._cancelButton);
					}
					else if (this._customButtons[viewModeButtonsOrder[i]])
					{
						viewModeSectionControlChildren.push(this._customButtons[viewModeButtonsOrder[i]]);
					}
				}
				this._editModeSectionControl = BX.create("DIV",
					{
						props: { className: "ui-entity-section ui-entity-section-control-edit-mode" },
						children : editModeSectionControlChildren,
					}
				);
				this._viewModeSectionControl = BX.create("DIV",
					{
						props: { className: "ui-entity-section ui-entity-section-control-view-mode" },
						children : viewModeSectionControlChildren,
					}
				);
				if (this._editor.getMode() === BX.UI.EntityEditorMode.edit)
				{
					this.showEditModeButtons();
				}
				else
				{
					this.showViewModeButtons();
				}
				sectionControlChildren = [ this._editModeSectionControl, this._viewModeSectionControl, this._errorContainer ];
			}
			else
			{
				sectionControlChildren = [ this._editButton, this._cancelButton, this._errorContainer ];
			}

			this._wrapper = BX.create("DIV",
				{
					props: { className: "ui-entity-wrap" },
					children :
						[
							BX.create("DIV",
								{
									props: { className: "ui-entity-section ui-entity-section-control" },
									children : sectionControlChildren
								}
							)
						]
				}
			);

			this._container.appendChild(this._wrapper);

			this._hasLayout = true;
			this.adjustLayout();
		},
		adjustLayout: function()
		{
			if(!this._hasLayout)
			{
				return;
			}

			if(!this._isVisible)
			{
				BX.removeClass(this._wrapper, "crm-section-control-active");
				BX.unbind(document, "keydown", this._keyPressHandler);
			}
			else
			{
				BX.addClass(this._wrapper, "crm-section-control-active");
				BX.bind(document, "keydown", this._keyPressHandler);
			}
		},
		createCustomButton: function(buttonProps)
		{
			var actionId = buttonProps.ACTION_ID;
			var className = "ui-btn";
			if (buttonProps.CLASS)
			{
				className += " " + buttonProps.CLASS;
			}
			return BX.create("button",
				{
					props: { className: className, id: "ui-entity-section-control-" + buttonProps.ID },
					text: BX.util.htmlspecialchars(buttonProps.TEXT),
					events: { click: BX.delegate(this.onCustomButtonClick, this) },
					dataset: {
						actionId: actionId,
					}
				}
			);
		},
		getPosition: function()
		{
			return this._hasLayout ? BX.pos(this._wrapper) : null;
		}
	};
	BX.UI.EntityEditorToolPanel.prototype.onSaveButtonClick = function(e)
	{
		this._clickedButton = e.target;
		if(!this._isLocked)
		{
			this._editor.saveChanged();
		}
	};
	BX.UI.EntityEditorToolPanel.prototype.onCustomButtonClick = function(e)
	{
		this._clickedButton = e.target;
		if(!this._isLocked)
		{
			this._editor.performAction(this._clickedButton.dataset.actionId);
		}
	};
	BX.UI.EntityEditorToolPanel.prototype.onCancelButtonClick = function(e)
	{
		if(!this._isLocked)
		{
			this._editor.cancel();
		}
		return BX.eventReturnFalse(e);
	};
	BX.UI.EntityEditorToolPanel.prototype.onKeyPress = function(e)
	{
		if(!this._isVisible)
		{
			return;
		}

		if(BX.type.isFunction(BX.PopupWindowManager.isAnyPopupShown) && BX.PopupWindowManager.isAnyPopupShown())
		{
			return;
		}

		e = e || window.event;
		if (e.keyCode == 27)
		{
			//Esc pressed
			this._editor.cancel();
			BX.eventCancelBubble(e);
		}
		else if (e.keyCode == 13 && e.ctrlKey)
		{
			//Ctrl+Enter pressed
			this._editor.saveChanged();
			BX.eventCancelBubble(e);
		}
	};
	BX.UI.EntityEditorToolPanel.prototype.addError = function(error)
	{
		if (BX.Type.isStringFilled(error))
		{
			error = error
				.replace(/(<br(( *)\/)?>)/gi, '<br>')
				.split('<br>')
				.map(function(line) {
					return BX.Text.encode(line);
				})
				.join('<br>');
		}
		this._errorContainer.appendChild(
			BX.create("DIV",
				{
					attrs: { className: "ui-entity-section-control-error-text" },
					html: error
				}
			)
		);

		this._errorContainer.style.maxHeight = "";
	};
	BX.UI.EntityEditorToolPanel.prototype.clearErrors = function()
	{
		this._errorContainer.innerHTML = "";
		this._errorContainer.style.maxHeight = "0";
	};
	BX.UI.EntityEditorToolPanel.prototype.getMessage = function(name)
	{
		var m = BX.UI.EntityEditorToolPanel.messages;
		return m.hasOwnProperty(name) ? m[name] : name;
	};
	if(typeof(BX.UI.EntityEditorToolPanel.messages) === "undefined")
	{
		BX.UI.EntityEditorToolPanel.messages = {};
	}
	BX.UI.EntityEditorToolPanel.create = function(id, settings)
	{
		var self = new BX.UI.EntityEditorToolPanel();
		self.initialize(id, settings);
		return self;
	};
}