Your IP : 18.222.117.94


Current Path : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/landing/install/js/landing/
Upload File :
Current File : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/landing/install/js/landing/utils.js

(function() {
	"use strict";

	BX.namespace("BX.Landing");

	/**
	 * Landing utils.
	 * @returns {void}
	 */
	BX.Landing.Utils = function()
	{
		//
	};

	BX.Landing.Utils.Show = function(element)
	{
		var promise = new BX.Promise();

		if (!!element && !BX.Landing.Utils.isShown(element))
		{
			var handler = function(event) {
				promise.fulfill(event);
				element.removeEventListener("animationend", handler);
				element.removeEventListener("oAnimationEnd", handler);
				element.removeEventListener("webkitAnimationEnd", handler);
			};

			element.addEventListener("animationend", handler);
			element.addEventListener("oAnimationEnd", handler);
			element.addEventListener("webkitAnimationEnd", handler);

			BX.DOM.write(function() {
				element.dataset.isShown = true;
				element.hidden = false;
				element.classList.remove("landing-ui-hide");
				element.classList.add("landing-ui-show");
			});
		}
		else
		{
			promise.fulfill();
		}

		return promise;
	};


	BX.Landing.Utils.isShown = function(element)
	{
		return element.dataset.isShown === "true";
	};


	BX.Landing.Utils.Hide = function(element)
	{
		var promise = new BX.Promise();

		if (!!element && BX.Landing.Utils.isShown(element))
		{
			var handler = function(event) {
				element.hidden = true;
				element.removeEventListener("animationend", handler);
				element.removeEventListener("oAnimationEnd", handler);
				element.removeEventListener("webkitAnimationEnd", handler);
				promise.fulfill(event);
			};

			element.addEventListener("animationend", handler);
			element.addEventListener("oAnimationEnd", handler);
			element.addEventListener("webkitAnimationEnd", handler);

			requestAnimationFrame(function() {
				element.dataset.isShown = false;
				element.classList.remove("landing-ui-show");
				element.classList.add("landing-ui-hide");
			});
		}
		else
		{
			promise.fulfill();
		}

		return promise;
	};


	BX.Landing.Utils.appendHTML = function(element, html)
	{
		element.innerHTML = element.innerHTML + html;
	};


	//noinspection JSUnusedGlobalSymbols
	BX.Landing.Utils.prototype = {
		/**
		 * Find all nodes by selector rule.
		 * @param {HTMLElement|HTMLDocument} node Start node.
		 * @param {String} selector
		 * @returns {?NodeList}
		 */
		findBySelector: function(node, selector)
		{
			return node.querySelectorAll(selector);
		},

		/**
		 * Find all nodes by selector rule and remove them.
		 * @param {HTMLElement} node Start node.
		 * @param {String} selector
		 * @return {void}
		 */
		removeBySelector: function(node, selector)
		{
			var remove = this.findBySelector(node, selector);
			for (var i = 0, c = remove.length; i < c; i++)
			{
				BX.remove(remove[i]);
			}
		},

		/**
		 * Return Class by class name.
		 * @param {string} fullClassName
		 * @returns {?function}
		 */
		getClass: function(fullClassName)
		{
			if (!BX.type.isNotEmptyString(fullClassName))
			{
				return null;
			}

			var classFn = null;
			var currentNamespace = window;
			var namespaces = fullClassName.split(".");
			for (var i = 0; i < namespaces.length; i++)
			{
				var namespace = namespaces[i];
				if (!currentNamespace[namespace])
				{
					return null;
				}

				currentNamespace = currentNamespace[namespace];
				classFn = currentNamespace;
			}

			return classFn;
		},

		/**
		 * Error alert.
		 * @param {?{[error_description]: ?string}[]|string} message
		 * @returns {void}
		 */
		errorAlert: function(message)
		{
			var output = "";

			if (BX.type.isArray(message))
			{
				for (var i = 0, c = message.length; i < c; i++)
				{
					if (message.hasOwnProperty(i))
					{
						if (typeof message[i].error_description !== "undefined")
						{
							output += message[i].error_description + "<br/>";
						}
					}
				}
			}
			else
			{
				output = message;
			}

			alert(output);
		},

		/**
		 * Refresh page.
		 * @returns {void}
		 */
		refresh: function()
		{
			window.location.reload();
		},

		/**
		 * Add or remove class for element.
		 * @param {HTMLElement} el DOMNode.
		 * @param {String} className Which class switch.
		 * @param {Boolean} mode Add or remove.
		 * @returns {void}
		 */
		switchClass: function(el, className, mode)
		{
			if (mode)
			{
				BX.addClass(el, className);
			}
			else
			{
				BX.removeClass(el, className);
			}
		},

		/**
		 * Get options-array for select node from array.
		 * @params {Object} items Items of select.
		 * @params {String} current Current selected.
		 * @returns {HTMLElement[]}
		 */
		getSelectFromArray: function(items, current)
		{
			var options = [];

			for (var id in items)
			{
				if (items.hasOwnProperty(id))
				{
					options.push(BX.create("option", {
						attrs: {
							value: id
						},
						props: {
							selected: current === id
						},
						text: items[id]
					}));
				}
			}

			return options;
		}

	};

})();