%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 18.116.85.12
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/components/bitrix/main.ui.grid/templates/.default/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/components/bitrix/main.ui.grid/templates/.default/js/row.js
;(function() {
	'use strict';

	BX.namespace('BX.Grid');

	/**
	 * BX.Grid.Row
	 * @param {BX.Main.Grid} parent
	 * @param {HtmlElement} node
	 * @constructor
	 */
	BX.Grid.Row = function(parent, node)
	{
		this.node = null;
		this.checkbox = null;
		this.sort = null;
		this.actions = null;
		this.settings = null;
		this.index = null;
		this.actionsButton = null;
		this.parent = null;
		this.depth = null;
		this.parentId = null;
		this.editData = null;
		this.custom = null;
		this.init(parent, node);
	};

	//noinspection JSUnusedGlobalSymbols,JSUnusedGlobalSymbols
	BX.Grid.Row.prototype = {
		init: function(parent, node)
		{
			if (BX.type.isDomNode(node))
			{
				this.node = node;
				this.parent = parent;
				this.settings = new BX.Grid.Settings();
				this.bindNodes = [];

				if (this.isBodyChild())
				{
					this.bindNodes = [].slice.call(this.node.parentNode.querySelectorAll("tr[data-bind=\""+this.getId()+"\"]"));
					if (this.bindNodes.length)
					{
						this.node.addEventListener("mouseover", this.onMouseOver.bind(this));
						this.node.addEventListener("mouseleave", this.onMouseLeave.bind(this));
						this.bindNodes.forEach(function(row) {
							row.addEventListener("mouseover", this.onMouseOver.bind(this));
							row.addEventListener("mouseleave", this.onMouseLeave.bind(this));
							row.addEventListener("click", function() {
								if (this.isSelected())
								{
									this.unselect()
								}
								else
								{
									this.select();
								}
							}.bind(this));
						}, this);
					}
				}

				if (this.parent.getParam('ALLOW_CONTEXT_MENU'))
				{
					BX.bind(this.getNode(), 'contextmenu', BX.delegate(this._onRightClick, this));
				}
			}
		},

		onMouseOver: function()
		{
			this.node.classList.add("main-grid-row-over");
			this.bindNodes.forEach(function(row) {
				row.classList.add("main-grid-row-over");
			});
		},

		onMouseLeave: function()
		{
			this.node.classList.remove("main-grid-row-over");
			this.bindNodes.forEach(function(row) {
				row.classList.remove("main-grid-row-over");
			});
		},

		isCustom: function()
		{
			if (this.custom === null)
			{
				this.custom = BX.hasClass(this.getNode(), this.parent.settings.get('classRowCustom'));
			}

			return this.custom;
		},

		_onRightClick: function(event)
		{
			event.preventDefault();
			this.showActionsMenu(event);
		},

		getDefaultAction: function()
		{
			return BX.data(this.getNode(), 'default-action');
		},

		editGetValues: function()
		{
			var self = this;
			var cells = this.getCells();
			var values = {};
			var cellValues;

			[].forEach.call(cells, function(current) {
				cellValues = self.getCellEditorValue(current);
				if (BX.type.isArray(cellValues))
				{
					cellValues.forEach(function(cellValue) {
						values[cellValue.NAME] = cellValue.VALUE !== undefined ? cellValue.VALUE : "";

						if (cellValue.hasOwnProperty("RAW_NAME") && cellValue.hasOwnProperty("RAW_VALUE"))
						{
							values[cellValue.NAME + "_custom"] = values[cellValue.NAME + "_custom"] || {};
							values[cellValue.NAME + "_custom"][cellValue.RAW_NAME] =
								values[cellValue.NAME + "_custom"][cellValue.RAW_NAME] || cellValue.RAW_VALUE;
						}
					});
				}
				else if (cellValues)
				{
					values[cellValues.NAME] = cellValues.VALUE !== undefined ? cellValues.VALUE : "";
				}
			});

			return values;
		},

		getCellEditorValue: function(cell)
		{
			var editor = BX.Grid.Utils.getByClass(cell, this.parent.settings.get('classEditor'), true);
			var result = null;

			if (BX.type.isDomNode(editor))
			{
				if (BX.hasClass(editor, 'main-grid-editor-checkbox'))
				{
					result = {
						'NAME': editor.getAttribute('name'),
						'VALUE': editor.checked ? 'Y' : 'N'
					};
				}
				else if(BX.hasClass(editor, 'main-grid-editor-custom'))
				{
					result = this.getCustomValue(editor);
				}
				else
				{
					result = this.getImageValue(editor);
				}
			}

			return result;
		},

		isEdit: function()
		{
			return BX.hasClass(this.getNode(), 'main-grid-row-edit');
		},

		hide: function()
		{
			BX.addClass(this.getNode(), this.parent.settings.get('classHide'));
		},

		show: function()
		{
			BX.removeClass(this.getNode(), this.parent.settings.get('classHide'));
		},

		isShown: function()
		{
			return !BX.hasClass(this.getNode(), this.parent.settings.get('classHide'));
		},

		isNotCount: function()
		{
			return BX.hasClass(this.getNode(), this.parent.settings.get('classNotCount'));
		},

		getContentContainer: function(target)
		{
			var result = null;

			if (!BX.hasClass(target, this.parent.settings.get('classCellContainer')))
			{
				if (target.nodeName === 'TD' || target.nodeName === 'TR')
				{
					result = BX.Grid.Utils.getByClass(target, this.parent.settings.get('classCellContainer'), true);
				}
				else
				{
					result = BX.findParent(target, {className: this.parent.settings.get('classCellContainer')}, true, false);
				}
			}
			else
			{
				result = target;
			}

			return result;
		},

		getContent: function(cell)
		{
			var container = this.getContentContainer(cell);
			var content;

			if (BX.type.isDomNode(container))
			{
				content = BX.html(container);
			}

			return content;
		},

		getCustomValue: function(editor)
		{
			var map = new Map(), name = editor.getAttribute('data-name');
			var inputs = [].slice.call(editor.querySelectorAll('input, select, checkbox, textarea'));
			inputs.forEach(function(element) {

				var resultObject = {
					'NAME': name,
					'RAW_NAME': element.name,
					'RAW_VALUE': element.value,
					'VALUE': element.value
				};

				switch (element.tagName)
				{
					case 'SELECT':
						if (element.multiple)
						{
							var selectValues = [];
							element.querySelectorAll('option').forEach(function(option) {
								if (option.selected)
								{
									selectValues.push(option.value);
								}
							});
							resultObject['RAW_VALUE'] = selectValues;
							resultObject['VALUE'] = selectValues;
							map.set(element.name, resultObject);
						}
						else
						{
							map.set(element.name, resultObject);
						}
						break;
					case 'INPUT':
						switch(element.type.toUpperCase())
						{
							case 'RADIO':
								if (element.checked)
								{
									resultObject['RAW_VALUE'] = element.value;
									resultObject['VALUE'] = element.value;
									map.set(element.name, resultObject);
								}
								break;
							case 'CHECKBOX':
								resultObject['RAW_VALUE'] = element.checked ? element.value : '';
								resultObject['VALUE'] = element.checked ? element.value : '';
								map.set(element.name, resultObject);
								break;
							case 'FILE':
								resultObject['RAW_VALUE'] = element.files[0];
								resultObject['VALUE'] = element.files[0];
								map.set(element.name, resultObject);
								break;
							default:
								map.set(element.name, resultObject);
						}
						break;
					default:
						map.set(element.name, resultObject);
				}
			});

			var result = [];
			map.forEach(function(value) {
				result.push(value);
			});

			return result;
		},

		getImageValue: function(editor)
		{
			var result = null;
			if (BX.hasClass(editor, 'main-grid-image-editor'))
			{
				var input = editor.querySelector('.main-grid-image-editor-file-input');

				if (input)
				{
					result = {
						'NAME': input.name,
						'VALUE': input.files[0]
					};
				}
				else
				{
					var fakeInput = editor.querySelector('.main-grid-image-editor-fake-file-input');

					if (fakeInput)
					{
						result = {
							'NAME': fakeInput.name,
							'VALUE': fakeInput.value
						};
					}
				}
			}
			else if (editor.value)
			{
				result = {
					'NAME': editor.getAttribute('name'),
					'VALUE': editor.value
				};
			}
			else
			{
				result = {
					'NAME': editor.getAttribute('name'),
					'VALUE': BX.data(editor, 'value')
				};
			}

			return result;
		},

		/**
		 * @param {HTMLTableCellElement} cell
		 * @return {?HTMLElement}
		 */
		getEditorContainer: function(cell)
		{
			return BX.Grid.Utils.getByClass(cell, this.parent.settings.get('classEditorContainer'), true);
		},


		/**
		 * @return {HTMLElement}
		 */
		getCollapseButton: function()
		{
			if (!this.collapseButton)
			{
				this.collapseButton = BX.Grid.Utils.getByClass(this.getNode(), this.parent.settings.get('classCollapseButton'), true);
			}

			return this.collapseButton;
		},

		stateLoad: function()
		{
			BX.addClass(this.getNode(), this.parent.settings.get('classRowStateLoad'));
		},

		stateUnload: function()
		{
			BX.removeClass(this.getNode(), this.parent.settings.get('classRowStateLoad'));
		},

		stateExpand: function()
		{
			BX.addClass(this.getNode(), this.parent.settings.get('classRowStateExpand'));
		},

		stateCollapse: function()
		{
			BX.removeClass(this.getNode(), this.parent.settings.get('classRowStateExpand'));
		},

		getParentId: function()
		{
			if (this.parentId === null)
			{
				this.parentId = BX.data(this.getNode(), 'parent-id');

				if (typeof this.parentId !== 'undefined' && this.parentId !== null)
				{
					this.parentId = this.parentId.toString();
				}
			}

			return this.parentId;
		},


		/**
		 * @return {DOMStringMap}
		 */
		getDataset: function()
		{
			return this.getNode().dataset;
		},


		/**
		 * Gets row depth level
		 * @return {?number}
		 */
		getDepth: function()
		{
			if (this.depth === null)
			{
				this.depth = BX.data(this.getNode(), 'depth');
			}

			return this.depth;
		},


		/**
		 * Set row depth
		 * @param {number} depth
		 */
		setDepth: function(depth)
		{
			depth = parseInt(depth);

			if (BX.type.isNumber(depth))
			{
				var depthOffset = depth - parseInt(this.getDepth());
				var Rows = this.parent.getRows();

				this.getDataset().depth = depth;

				this.getShiftCells().forEach(function(cell) {
					BX.data(cell, 'depth', depth);
					BX.style(cell, 'padding-left', (depth * 20) + 'px');
				}, this);

				Rows.getRowsByParentId(this.getId(), true).forEach(function(row) {
					var childDepth = parseInt(depthOffset) + parseInt(row.getDepth());
					row.getDataset().depth = childDepth;
					row.getShiftCells().forEach(function(cell) {
						BX.data(cell, 'depth', childDepth);
						BX.style(cell, 'padding-left', (childDepth * 20) + 'px');
					});
				});
			}
		},


		/**
		 * Sets parent id
		 * @param {string|number} id
		 */
		setParentId: function(id)
		{
			this.getDataset()['parentId'] = id;
		},


		/**
		 * @return {HTMLTableRowElement}
		 */
		getShiftCells: function()
		{
			return BX.Grid.Utils.getBySelector(this.getNode(), 'td[data-shift="true"]');
		},

		showChildRows: function()
		{
			var rows = this.getChildren();
			var isCustom = this.isCustom();

			rows.forEach(function(row) {
				row.show();
				if (!isCustom && row.isExpand())
				{
					row.showChildRows();
				}
			});

			this.parent.updateCounterDisplayed();
			this.parent.updateCounterSelected();
			this.parent.adjustCheckAllCheckboxes();
			this.parent.adjustRows();
		},


		/**
		 * @return {BX.Grid.Row[]}
		 */
		getChildren: function()
		{
			var functionName = this.isCustom() ? 'getRowsByGroupId' : 'getRowsByParentId';
			var id = this.isCustom() ? this.getGroupId() : this.getId();
			return this.parent.getRows()[functionName](id, true);
		},

		hideChildRows: function()
		{
			var rows = this.getChildren();
			rows.forEach(function(row) { row.hide(); });
			this.parent.updateCounterDisplayed();
			this.parent.updateCounterSelected();
			this.parent.adjustCheckAllCheckboxes();
			this.parent.adjustRows();
		},

		isChildsLoaded: function()
		{
			if (!BX.type.isBoolean(this.childsLoaded))
			{
				this.childsLoaded = this.isCustom() || BX.data(this.getNode(), 'child-loaded') === 'true';
			}

			return this.childsLoaded;
		},

		expand: function()
		{
			var self = this;
			this.stateExpand();

			if (this.isChildsLoaded())
			{
				this.showChildRows();
			}
			else
			{
				this.stateLoad();
				this.loadChildRows(function(rows) {
					rows.reverse().forEach(function(current) {
						BX.insertAfter(current, self.getNode());
					});
					self.parent.getRows().reset();
					self.parent.bindOnRowEvents();

					if (self.parent.getParam('ALLOW_ROWS_SORT'))
					{
						self.parent.getRowsSortable().reinit();
					}

					if (self.parent.getParam('ALLOW_COLUMNS_SORT'))
					{
						self.parent.getColsSortable().reinit();
					}

					self.stateUnload();
					BX.data(self.getNode(), 'child-loaded', 'true');
					self.parent.updateCounterDisplayed();
					self.parent.updateCounterSelected();
					self.parent.adjustCheckAllCheckboxes();
				});
			}
		},

		collapse: function()
		{
			this.stateCollapse();
			this.hideChildRows();
		},

		isExpand: function()
		{
			return BX.hasClass(this.getNode(), this.parent.settings.get('classRowStateExpand'));
		},

		toggleChildRows: function()
		{
			if (!this.isExpand())
			{
				this.expand();
			}
			else
			{
				this.collapse();
			}
		},

		loadChildRows: function(callback)
		{
			if (BX.type.isFunction(callback))
			{
				var self = this;
				var depth = parseInt(this.getDepth());
				var action = this.parent.getUserOptions().getAction('GRID_GET_CHILD_ROWS');
				depth = BX.type.isNumber(depth) ? depth+1 : 1;
				this.parent.getData().request('', 'POST', {action: action, parent_id: this.getId(), depth: depth}, null, function() {
					var rows = this.getRowsByParentId(self.getId());
					callback.apply(null, [rows]);
				});
			}
		},

		update: function(data, url, callback)
		{
			data = !!data ? data : '';

			var action = this.parent.getUserOptions().getAction('GRID_UPDATE_ROW');
			var depth = this.getDepth();
			var id = this.getId();
			var parentId = this.getParentId();
			var rowData = {id: id, parentId: parentId, action: action, depth: depth, data: data};
			var self = this;

			this.stateLoad();
			this.parent.getData().request(url, 'POST', rowData, null, function() {
				var bodyRows = this.getBodyRows();
				self.parent.getUpdater().updateBodyRows(bodyRows);
				self.stateUnload();
				self.parent.getRows().reset();
				self.parent.getUpdater().updateFootRows(this.getFootRows());
				self.parent.getUpdater().updatePagination(this.getPagination());
				self.parent.getUpdater().updateMoreButton(this.getMoreButton());
				self.parent.getUpdater().updateCounterTotal(this.getCounterTotal());
				self.parent.bindOnRowEvents();
				self.parent.adjustEmptyTable(bodyRows);

				self.parent.bindOnMoreButtonEvents();
				self.parent.bindOnClickPaginationLinks();
				self.parent.updateCounterDisplayed();
				self.parent.updateCounterSelected();

				if (self.parent.getParam('ALLOW_COLUMNS_SORT'))
				{
					self.parent.colsSortable.reinit();
				}

				if (self.parent.getParam('ALLOW_ROWS_SORT'))
				{
					self.parent.rowsSortable.reinit();
				}

				BX.onCustomEvent(window, 'Grid::rowUpdated', [{id: id, data: data, grid: self.parent, response: this}]);
				BX.onCustomEvent(window, 'Grid::updated', [self.parent]);

				if (BX.type.isFunction(callback))
				{
					callback({id: id, data: data, grid: self.parent, response: this});
				}
			});
		},

		remove: function(data, url, callback)
		{
			data = !!data ? data : '';

			var action = this.parent.getUserOptions().getAction('GRID_DELETE_ROW');
			var depth = this.getDepth();
			var id = this.getId();
			var parentId = this.getParentId();
			var rowData = {id: id, parentId: parentId, action: action, depth: depth, data: data};
			var self = this;

			this.stateLoad();
			this.parent.getData().request(url, 'POST', rowData, null, function() {
				var bodyRows = this.getBodyRows();
				self.parent.getUpdater().updateBodyRows(bodyRows);
				self.stateUnload();
				self.parent.getRows().reset();
				self.parent.getUpdater().updateFootRows(this.getFootRows());
				self.parent.getUpdater().updatePagination(this.getPagination());
				self.parent.getUpdater().updateMoreButton(this.getMoreButton());
				self.parent.getUpdater().updateCounterTotal(this.getCounterTotal());
				self.parent.bindOnRowEvents();
				self.parent.adjustEmptyTable(bodyRows);

				self.parent.bindOnMoreButtonEvents();
				self.parent.bindOnClickPaginationLinks();
				self.parent.updateCounterDisplayed();
				self.parent.updateCounterSelected();

				if (self.parent.getParam('ALLOW_COLUMNS_SORT'))
				{
					self.parent.colsSortable.reinit();
				}

				if (self.parent.getParam('ALLOW_ROWS_SORT'))
				{
					self.parent.rowsSortable.reinit();
				}

				BX.onCustomEvent(window, 'Grid::rowRemoved', [{id: id, data: data, grid: self.parent, response: this}]);
				BX.onCustomEvent(window, 'Grid::updated', [self.parent]);

				if (BX.type.isFunction(callback))
				{
					callback({id: id, data: data, grid: self.parent, response: this});
				}
			});
		},

		editCancel: function()
		{
			var cells = this.getCells();
			var self = this;
			var editorContainer;

			[].forEach.call(cells, function(current) {
				editorContainer = self.getEditorContainer(current);

				if (BX.type.isDomNode(editorContainer))
				{
					BX.remove(self.getEditorContainer(current));
					BX.show(self.getContentContainer(current));
				}
			});

			BX.removeClass(this.getNode(), 'main-grid-row-edit');
		},

		getCellByIndex: function(index)
		{
			return this.getCells()[index];
		},

		getEditDataByCellIndex: function(index)
		{
			return eval(BX.data(this.getCellByIndex(index), 'edit'));
		},

		getCellNameByCellIndex: function(index)
		{
			return BX.data(this.getCellByIndex(index), 'name');
		},

		getEditData: function()
		{
			if (this.editData === null)
			{
				var editableData = this.parent.getParam('EDITABLE_DATA');
				var rowId = this.getId();

				if (BX.type.isPlainObject(editableData) && rowId in editableData)
				{
					this.editData = editableData[rowId];
				}
				else
				{
					this.editData = {};
				}
			}

			return this.editData
		},

		getCellEditDataByCellIndex: function(cellIndex)
		{
			var editData = this.getEditData();
			var result = null;
			cellIndex = parseInt(cellIndex);

			if (BX.type.isNumber(cellIndex) && BX.type.isPlainObject(editData))
			{
				var columnEditData = this.parent.getRows().getHeadFirstChild().getEditDataByCellIndex(cellIndex);

				if (BX.type.isPlainObject(columnEditData))
				{
					result = columnEditData;
					result.VALUE = editData[columnEditData.NAME];
				}
			}

			return result;
		},

		edit: function()
		{
			var cells = this.getCells();
			var self = this;
			var editObject, editor, height, contentContainer;

			[].forEach.call(cells, function(current, index) {
				if (current.dataset.editable === 'true')
				{
					try {
						editObject = self.getCellEditDataByCellIndex(index);
					} catch (err) {
						throw new Error(err);
					}

					if (self.parent.getEditor().validateEditObject(editObject))
					{
						contentContainer = self.getContentContainer(current);
						height = BX.height(contentContainer);
						editor = self.parent.getEditor().getEditor(editObject, height);

						if (!self.getEditorContainer(current) && BX.type.isDomNode(editor))
						{
							current.appendChild(editor);
							BX.hide(contentContainer);
						}
					}
				}
			});

			BX.addClass(this.getNode(), 'main-grid-row-edit');
		},

		setDraggable: function(value)
		{
			if (!value)
			{
				BX.addClass(this.getNode(), this.parent.settings.get('classDisableDrag'));
				this.parent.getRowsSortable().unregister(this.getNode());
			}
			else
			{
				BX.removeClass(this.getNode(), this.parent.settings.get('classDisableDrag'));
				this.parent.getRowsSortable().register(this.getNode());
			}
		},

		isDraggable: function()
		{
			return !BX.hasClass(this.getNode(), this.parent.settings.get('classDisableDrag'));
		},

		getNode: function()
		{
			return this.node;
		},

		getIndex: function()
		{
			return this.getNode().rowIndex;
		},

		getId: function()
		{
			return (BX.data(this.getNode(), 'id')).toString();
		},

		getGroupId: function()
		{
			return (BX.data(this.getNode(), 'group-id')).toString();
		},

		getObserver: function()
		{
			return BX.Grid.observer;
		},

		getCheckbox: function()
		{
			if (!this.checkbox)
			{
				this.checkbox = BX.Grid.Utils.getByClass(this.getNode(), this.settings.get('classRowCheckbox'), true);
			}

			return this.checkbox;
		},

		getActionsMenu: function()
		{
			if (!this.actionsMenu)
			{
				var buttonRect = this.getActionsButton().getBoundingClientRect();

				this.actionsMenu = BX.PopupMenu.create(
					'main-grid-actions-menu-' + this.getId(),
					this.getActionsButton(),
					this.getMenuItems(),
					{
						'autoHide': true,
						'offsetTop': -((buttonRect.height / 2) + 26),
						'offsetLeft': 30,
						'angle': {
							'position': 'left',
							'offset': ((buttonRect.height / 2) - 8)
						},
						'events': {
							'onPopupClose': BX.delegate(this._onCloseMenu, this),
							'onPopupShow': BX.delegate(this._onPopupShow, this)
						}
					}
				);

				BX.addCustomEvent('Grid::updated', function() {
					if(this.actionsMenu)
					{
						this.actionsMenu.destroy();
						this.actionsMenu = null;
					}
				}.bind(this));

				BX.bind(this.actionsMenu.popupWindow.popupContainer, 'click', BX.delegate(function(event) {
					var actionsMenu = this.getActionsMenu();
					if (actionsMenu)
					{
						var target = BX.getEventTarget(event);
						var item = BX.findParent(target, {
							className: 'menu-popup-item'
						}, 10);

						if (!item || !item.dataset.preventCloseContextMenu)
						{
							actionsMenu.close();
						}
					}
				}, this));
			}

			return this.actionsMenu;
		},

		_onCloseMenu: function()
		{
		},

		_onPopupShow: function(popupMenu)
		{
			popupMenu.setBindElement(this.getActionsButton());
		},

		actionsMenuIsShown: function()
		{
			return this.getActionsMenu().popupWindow.isShown();
		},

		showActionsMenu: function(event)
		{
			BX.fireEvent(document.body, 'click');

			this.getActionsMenu().popupWindow.show();

			if (event)
			{
				this.getActionsMenu().popupWindow.popupContainer.style.top = ((event.pageY - 25) + BX.PopupWindow.getOption("offsetTop")) + "px";
				this.getActionsMenu().popupWindow.popupContainer.style.left = ((event.pageX + 20) + BX.PopupWindow.getOption("offsetLeft")) + "px";
			}
			else
			{
				var pos = BX.pos(this.getActionsButton());
				pos.forceBindPosition = true;
				this.getActionsMenu().popupWindow.adjustPosition(pos);
			}
		},

		closeActionsMenu: function()
		{
			if (this.actionsMenu)
			{
				if (this.actionsMenu.popupWindow)
				{
					this.actionsMenu.popupWindow.close();
				}
			}
		},

		getMenuItems: function()
		{
			return this.getActions() || [];
		},

		getActions: function()
		{
			try {
				this.actions = this.actions || eval(BX.data(this.getActionsButton(), this.settings.get('dataActionsKey')));
			} catch (err) {
				this.actions = null;
			}

			return this.actions;
		},

		getActionsButton: function()
		{
			if (!this.actionsButton)
			{
				this.actionsButton = BX.Grid.Utils.getByClass(this.getNode(), this.settings.get('classRowActionButton'), true);
			}

			return this.actionsButton;
		},

		initSelect: function()
		{
			if (this.isSelected() && !BX.hasClass(this.getNode(), this.settings.get('classCheckedRow')))
			{
				BX.addClass(this.getNode(), this.settings.get('classCheckedRow'))
			}
		},

		getParentNode: function()
		{
			var result;

			try {
				result = (this.getNode()).parentNode;
			} catch (err) {
				result = null;
			}

			return result;
		},

		getParentNodeName: function()
		{
			var result;

			try {
				result = (this.getParentNode()).nodeName;
			} catch (err) {
				result = null;
			}

			return result;
		},

		select: function()
		{
			var checkbox;

			if (!this.isEdit() && !this.parent.getRows().hasEditable())
			{
				checkbox = this.getCheckbox();

				if (checkbox)
				{
					if (!BX.data(checkbox, 'disabled'))
					{
						BX.addClass(this.getNode(), this.settings.get('classCheckedRow'));
						this.bindNodes.forEach(function(row) {
							BX.addClass(row, this.settings.get('classCheckedRow'));
						}, this);
						checkbox.checked = true;
					}
				}
			}
		},

		unselect: function()
		{
			if (!this.isEdit())
			{
				BX.removeClass(this.getNode(), this.settings.get('classCheckedRow'));
				this.bindNodes.forEach(function(row) {
					BX.removeClass(row, this.settings.get('classCheckedRow'));
				}, this);
				if (this.getCheckbox())
				{
					this.getCheckbox().checked = false;
				}
			}
		},

		getCells: function()
		{
			return this.getNode().cells;
		},

		isSelected: function()
		{
			return (
				(this.getCheckbox() && (this.getCheckbox()).checked) ||
				(BX.hasClass(this.getNode(), this.settings.get('classCheckedRow')))
			);
		},

		isHeadChild: function()
		{
			return (
				this.getParentNodeName() === 'THEAD' &&
				BX.hasClass(this.getNode(), this.settings.get('classHeadRow'))
			);
		},

		isBodyChild: function()
		{
			return (
				BX.hasClass(this.getNode(), this.settings.get('classBodyRow')) && !BX.hasClass(this.getNode(), this.settings.get('classEmptyRows'))
			);
		},

		isFootChild: function()
		{
			return (
				this.getParentNodeName() === 'TFOOT' &&
				BX.hasClass(this.getNode(), this.settings.get('classFootRow'))
			);
		}
	};
})();

Youez - 2016 - github.com/yon3zu
LinuXploit