Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/components/bitrix/main.user.selector/templates/.default/
Upload File :
Current File : /var/www/homesaver/www/bitrix/components/bitrix/main.user.selector/templates/.default/script.js

;(function ()
{
	BX.namespace('BX.Main.User');
	if (BX.Main.User.Selector)
	{
		return;
	}

	/**
	 * UserSelector.
	 *
	 */
	function UserSelector (params)
	{
		this.caller = params.caller;
		this.container = BX(params.containerId);
		this.id = params.id;
		this.containerId = params.containerId;
		this.inputName = params.inputName;
		this.inputId = params.inputName;
		this.isInputMultiple = params.isInputMultiple;
		this.inputNode = (this.container ? this.container.querySelector('input[name="' + params.inputName + '"]') : null);
		this.useSymbolicId = params.useSymbolicId;
		this.openDialogWhenInit = !!params.openDialogWhenInit;

		this.selector = BX.UI.TileSelector.getById(this.id);
		if (!this.selector)
		{
			throw new Error('Tile selector `' + this.id + '` not found.');
		}
		this.searchInputNode = this.selector.getSearchInput();
		if (!this.searchInputNode.id)
		{
			this.searchInputNode.id = this.inputId + '-' + this.id + '-search-input'
		}
		this.lazyload = !!params.lazyload;

		BX.addCustomEvent(this.selector, this.selector.events.buttonSelect, this.openDialog.bind(this));
		BX.addCustomEvent(this.selector, this.selector.events.tileRemove, this.removeTile.bind(this));
		BX.addCustomEvent(this.selector, this.selector.events.tileClick, this.clickTile.bind(this));
		BX.Main.User.SelectorController.init(this);
	}
	UserSelector.prototype = {
		openDialog: function()
		{
			if (this.lazyload)
			{
				var initialized = false;

				if (BX.Main.selectorManagerV2)
				{
					var selectorInstance = BX.Main.selectorManagerV2.getById(this.id);
					if (
						selectorInstance
						&& selectorInstance.initialized
					)
					{
						BX.Main.User.SelectorController.open(this);
						initialized = true;
					}
				}

				if (!initialized)
				{
					BX.onCustomEvent("BX.Main.SelectorV2:initDialog", [ {
						selectorId: this.id,
						openDialogWhenInit: true
					}]);
				}
			}
			else
			{
				BX.Main.User.SelectorController.open(this);
			}
		},
		removeTile: function(tile)
		{
			this.unsetValue(tile.id);
		},
		clickTile: function(tile)
		{
			if (
				BX.type.isNotEmptyObject(tile.data)
				&& BX.type.isNotEmptyString(tile.data.url)
			)
			{
				if (
					BX.type.isNotEmptyString(tile.data.urlUseSlider)
					&& tile.data.urlUseSlider == 'Y'
					&& BX.type.isNotEmptyObject(BX.SidePanel)
				)
				{
					BX.SidePanel.Instance.open(tile.data.url);
				}
				else
				{
					window.open(tile.data.url, '_blank');
				}
			}
		},
		setUsers: function(list)
		{
			list = list || [];

			if (this.isInputMultiple)
			{
				this.addInputs(list);
			}
			else
			{
				this.inputNode.value = list.join(',');
				BX.fireEvent(this.inputNode, "change");
			}
		},
		getUsers: function()
		{
			if (
				!this.isInputMultiple
				&& !this.inputNode
			)
			{
				return [];
			}

			var list;
			if (this.isInputMultiple)
			{
				list = this.getInputs().map(function (inputNode) {
					return inputNode.value;
				});
			}
			else
			{
				list = this.inputNode.value.split(',');
			}

			if (!this.useSymbolicId)
			{
				return list.filter(function (id) {
					id = parseInt(id);
					return !!id;
				}).map(function (id) {
					return parseInt(id);
				});
			}
			else
			{
				return list.filter(function (id) {
					return (id.length > 0);
				});
			}
		},
		setValue: function(value)
		{
			if (!this.useSymbolicId)
			{
				if (/^\d+$/.test(value) !== true)
				{
					return;
				}
				value = parseInt(value);
			}

			if (this.selectOne)
			{
				this.setUsers([value]);
			}
			else
			{
				var list = this.getUsers();
				if (!BX.util.in_array(value, list))
				{
					list.push(value);
				}
				this.setUsers(list);
			}

		},
		unsetValue: function(value)
		{
			if (!this.useSymbolicId)
			{
				if (/^\d+$/.test(value) !== true)
				{
					return;
				}
				value = parseInt(value);
			}

			if (this.selectOne)
			{
				this.setUsers();
			}
			else
			{
				var jsonValue = false;
				if (BX.type.isNotEmptyObject(BX.Main.selectorManagerV2))
				{
					var mainSelectorInstance = BX.Main.selectorManagerV2.getById(this.id);
					if (mainSelectorInstance.getOption('returnJsonValue') == 'Y')
					{
						jsonValue = true;
					}
				}

				var list = this.getUsers().filter(function (id) {
					if (jsonValue)
					{
						var parsedItem = JSON.parse(id);
						if (BX.type.isNotEmptyObject(parsedItem))
						{
							id = parsedItem.id;
						}

					}
					return id !== value;
				});
				this.setUsers(list);
			}
		},
		addInput: function(value)
		{
			var inputNode = document.createElement('input');
			inputNode.type = 'hidden';
			inputNode.name = this.inputName;
			inputNode.value = value;
			this.container.appendChild(inputNode);
			BX.fireEvent(inputNode, "change");
			BX.Event.EventEmitter.emit(window, 'BX.Main.User.SelectorController:itemRendered', [{
				selectorId: this.id,
				value: value,
			}]);
		},
		addInputs: function(list)
		{
			this.removeInputs();
			list.forEach(function (value) {
				this.addInput(value);
			}, this);

			if (
				list.length <= 0
				&& this.isInputMultiple
			)
			{
				this.addInput('');
			}


		},
		getInputs: function()
		{
			return BX.convert.nodeListToArray(this.container.querySelectorAll('input[name="' + this.inputName + '"]'));
		},
		removeInputs: function()
		{
			this.getInputs().forEach(function (inputNode) {
				BX.fireEvent(inputNode, "change");
				BX.remove(inputNode);
			});
		}
	};


	var Controller = {
		list: [],
		init: function (userSelector)
		{
			this.list.push(userSelector);

			BX.onCustomEvent(window, 'BX.Main.User.SelectorController::init', [{
				id: userSelector.id,
				inputId: userSelector.searchInputNode.id,
				containerId: userSelector.containerId,
				openDialogWhenInit: userSelector.openDialogWhenInit
			}]);
		},
		open: function (userSelector)
		{
			if (userSelector.isOpen)
			{
				return;
			}

			if (BX.UI.SelectorManager)
			{
				// read selector data from the tiles
				var selectorInstance = BX.UI.SelectorManager.instances[userSelector.id];
				if (selectorInstance)
				{
					if (!userSelector.isInputMultiple)
					{
						selectorInstance.itemsSelected = {};
					}

					userSelector.getUsers().forEach(function (id) {

						var itemEntityId = null;

						for(var entityId in selectorInstance.entities)
						{
							if (
								selectorInstance.entities.hasOwnProperty(entityId)
								&& BX.type.isNotEmptyObject(selectorInstance.entities[entityId].items)
							)
							{
								if (BX.util.in_array(id, Object.keys(selectorInstance.entities[entityId].items)))
								{
									itemEntityId = entityId;
								}
							}
						}

						if (itemEntityId)
						{
							selectorInstance.itemsSelected[id] = itemEntityId.toLowerCase();
						}
					});

					selectorInstance.nodes.input = userSelector.selector.input;
					selectorInstance.nodes.tag = userSelector.selector.buttonSelect;
				}
			}

			userSelector.isOpen = true;

			BX.onCustomEvent(window, 'BX.Main.User.SelectorController::open', [{
				id: userSelector.id,
				inputId: userSelector.searchInputNode.id,
				containerId: userSelector.containerId,
				bindNode: userSelector.container
			}]);
		},
		formatName: function(params)
		{
			var result = '';
			var nameTemplate = (BX.type.isNotEmptyString(params.nameTemplate) ? BX.util.htmlspecialcharsback(BX.util.htmlspecialcharsback(params.nameTemplate)) : '#NAME#');

			if (BX.type.isNotEmptyObject(params.item))
			{
				var item = params.item;
				result = nameTemplate;
			}
			else
			{
				return result;
			}

			for (var field in item)
			{
				if (item.hasOwnProperty(field))
				{
					result = result.replace('#' + field.toUpperCase() + '#', BX.util.htmlspecialcharsback(item[field]));
				}
			}

			return result;
		},
		select: function (params)
		{
			var mainSelectorInstance = (BX.type.isNotEmptyObject(BX.Main.selectorManagerV2) ? BX.Main.selectorManagerV2.getById(params.selectorId) : null);

			var self = BX.Main.User.SelectorController;
			var userSelector = self.getUserSelector(params.selectorId);
			if (
				!userSelector
				|| !BX.type.isNotEmptyObject(params.item)
			)
			{
				return;
			}
			var entityId = userSelector.useSymbolicId ? params.item.id : params.item.entityId;
			if (
				BX.type.isNotEmptyObject(params.item.params)
				&& BX.type.isNotEmptyString(params.item.params.email)
				&& (
					!mainSelectorInstance
					|| mainSelectorInstance.getOption('returnJsonValue') != 'Y'
				)
			)
			{
				entityId = (BX.type.isNotEmptyString(params.prefix) ? params.prefix : 'UE') + entityId;
			}

			var jsonValue = false;
			if (
				mainSelectorInstance
				&& mainSelectorInstance.getOption('returnJsonValue') == 'Y'
			)
			{
				userSelector.setValue(JSON.stringify(params.item));
			}
			else
			{
				userSelector.setValue(entityId);
			}

			var data = {
				readonly: !!params.undeletable
			};
			if (BX.type.isNotEmptyString(params.entityType))
			{
				data.entityType = params.entityType;
			}
			if (BX.type.isNotEmptyString(params.item.url))
			{
				data.url = params.item.url;
			}
			if (BX.type.isNotEmptyString(params.item.urlUseSlider))
			{
				data.urlUseSlider = params.item.urlUseSlider;
			}
			if (
				BX.type.isNotEmptyString(params.item.isExtranet)
				&& params.item.isExtranet == 'Y'
			)
			{
				data.extranet = true;
			}
			if (
				BX.type.isNotEmptyString(params.item.isCrmEmail)
				&& params.item.isCrmEmail == 'Y'
			)
			{
				data.crmEmail = true;
			}
			if (BX.type.isNotEmptyString(params.state))
			{
				data.state = params.state;
			}

			userSelector.selector.addTile(self.formatName({
				item: params.item,
				nameTemplate: (mainSelectorInstance ? mainSelectorInstance.getOption('nameTemplate') : '#NAME# #LAST_NAME#')
			}), data, entityId);
			userSelector.selector.input.value = '';

			if (
				!userSelector.isInputMultiple
				|| !BX.type.isNotEmptyString(params.tab)
				|| params.tab != 'search'
			)
			{
				userSelector.selector.input.style.display = 'none';
				userSelector.selector.buttonSelect.style.display = '';
			}

			BX.onCustomEvent('BX.Main.User.SelectorController:select', [ {
				selectorId: params.selectorId,
				item: params.item,
				contextNode: userSelector.selector.context,
				containerId: userSelector.containerId,
				inputName: userSelector.inputName
			} ]);
		},
		unSelect: function (params)
		{
			var self = BX.Main.User.SelectorController;
			var userSelector = self.getUserSelector(params.selectorId);
			if (
				!userSelector
				|| !BX.type.isNotEmptyObject(params.item)
			)
			{
				return;
			}

			var entityId = userSelector.useSymbolicId ? params.item.id : params.item.entityId;
			userSelector.unsetValue(entityId);
			var tile = userSelector.selector.getTile(entityId);
			if (tile)
			{
				userSelector.selector.removeTile(tile);
			}

			if (BX.UI.SelectorManager)
			{
				var selectorInstance = BX.UI.SelectorManager.instances[params.selectorId];
				if (selectorInstance)
				{
					if (typeof selectorInstance.deleteSelectedItem == 'function') // compatibility
					{
						selectorInstance.deleteSelectedItem({
							itemId: params.item.id
						});
					}
					else
					{
						delete selectorInstance.itemsSelected[params.item.id];
					}
				}
			}

			if (
				!userSelector.isInputMultiple
				|| !BX.type.isNotEmptyString(params.tab)
				|| params.tab != 'search'
			)
			{
				userSelector.selector.input.style.display = 'none';
				userSelector.selector.buttonSelect.style.display = '';
			}

			BX.onCustomEvent('BX.Main.User.SelectorController:unSelect', [ {
				selectorId: params.selectorId,
				item: params.item,
				contextNode: userSelector.selector.context,
				containerId: userSelector.containerId,
				inputName: userSelector.inputName
			} ]);
		},
		openDialog: function (params)
		{
			var self = BX.Main.User.SelectorController;
			var userSelector = self.getUserSelector(params.selectorId);
			if (!userSelector)
			{
				return;
			}

			userSelector.isOpen = true;

			if (userSelector.selector)
			{
				userSelector.selector.input.style.display = '';
				userSelector.selector.buttonSelect.style.display = 'none';
				userSelector.selector.input.focus();
			}
		},
		closeDialog: function (params)
		{
			var self = BX.Main.User.SelectorController;
			var userSelector = self.getUserSelector(params.selectorId);
			if (!userSelector)
			{
				return;
			}

			userSelector.isOpen = false;

			if (userSelector.selector)
			{
				userSelector.selector.input.style.display = 'none';
				userSelector.selector.buttonSelect.style.display = '';
			}
		},
		openSearch: function (params)
		{
			var self = BX.Main.User.SelectorController;
			var userSelector = self.getUserSelector(params.selectorId);
			if (!userSelector)
			{
				return;
			}

			userSelector.isOpen = false;

			if (userSelector.selector)
			{
				userSelector.selector.input.style.display = '';
				userSelector.selector.buttonSelect.style.display = 'none';
			}
		},
		closeSearch: function (params)
		{
			var self = BX.Main.User.SelectorController;
			var userSelector = self.getUserSelector(params.selectorId);
			if (!userSelector)
			{
				return;
			}

			if (userSelector.selector)
			{
				var selectorInstance = BX.UI.SelectorManager.instances[params.selectorId];
				if (
					!selectorInstance
					|| !selectorInstance.closeByEmptySearchResult
				) // e.g. autohide
				{
					userSelector.selector.input.style.display = 'none';
					userSelector.selector.buttonSelect.style.display = '';
				}
			}
		},
		getUserSelector: function (id)
		{
			var userSelector = this.list.filter(function (selector) {
				return (
					selector.id === id
					&& (
						!selector.container
						|| document.body.contains(selector.container)
					)
				);
			});

			return userSelector[0];
		}
	};

	if (!BX.Main.User.SelectorController)
	{
		BX.Main.User.SelectorController = Controller;
	}

	BX.Main.User.Selector = UserSelector;

})(window);