Your IP : 108.162.216.192


Current Path : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/vue3/directives/hint/src/
Upload File :
Current File : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/vue3/directives/hint/src/tooltip.js

import { Popup, PopupOptions } from 'main.popup';
import { Tag, Text, Type } from 'main.core';

class Tooltip
{
	constructor(): void
	{
		this.popup = null;
	}

	show(
		element: HTMLElement,
		bindings: Object = {}
	): void
	{
		if (this.popup)
		{
			this.popup.close();
		}

		let popupOptions: PopupOptions = {};

		let text;
		if (Type.isObject(bindings.value))
		{
			if (bindings.value.text)
			{
				text = Text.encode(bindings.value.text);
			}
			else if (bindings.value.html)
			{
				text = bindings.value.html;
			}

			if (Type.isObject(bindings.value.popupOptions))
			{
				popupOptions = bindings.value.popupOptions;
			}

			if (bindings.value.position === 'top')
			{
				if (!Type.isObject(popupOptions.bindOptions))
				{
					popupOptions.bindOptions = {};
				}

				popupOptions.bindOptions.position = 'top';
			}
		}
		else
		{
			text = bindings.value;
			if (Type.isUndefined(element.dataset.hintHtml))
			{
				text = Text.encode(text);
			}
		}

		popupOptions.bindElement = element;

		if (Type.isUndefined(popupOptions.id))
		{
			popupOptions.id = 'bx-vue-hint';
		}

		if (Type.isUndefined(popupOptions.darkMode))
		{
			popupOptions.darkMode = true;
		}

		if (Type.isUndefined(popupOptions.content))
		{
			const content = Tag.render`<span class='ui-hint-content'></span>`;
			content.innerHTML = text;
			popupOptions.content = content;
		}

		if (Type.isUndefined(popupOptions.autoHide))
		{
			popupOptions.autoHide = true;
		}

		if (!Type.isObject(popupOptions.bindOptions))
		{
			popupOptions.bindOptions = {};
		}
		if (Type.isUndefined(popupOptions.bindOptions.position))
		{
			popupOptions.bindOptions.position = 'bottom';
		}

		popupOptions.cacheable = false;

		this.popup = new Popup(popupOptions);
		this.popup.show();
	}

	hide(): void
	{
		if (this.popup)
		{
			this.popup.close();
		}
	}
}

const TooltipManager = new Tooltip;
export {TooltipManager as Tooltip};