403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/templates/landing24/assets/js/helpers/menu/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/templates/landing24/assets/js/helpers/menu/scrollspy.js
;(function ()
{
	"use strict";

	BX.namespace("BX.Landing");

	BX.Landing.NavbarScrollSpy = function ()
	{
		this.links = {};
		/**
		 * @type {HTMLElement[]}
		 */
		this.targets = [];
		/**
		 * Targets then now in viewport
		 * @type {HTMLElement[]}
		 */
		this.onScreen = [];

		/**
		 * To save target ID when click on link
		 * @type {string}
		 */
		this.forceHighlightId = null;

		this.observer = new IntersectionObserver(
			BX.Landing.NavbarScrollSpy.onIntersection,
			{threshold: [0.5, 1]}
		);
	};

	// todo: find parent element method may be set by params
	BX.Landing.NavbarScrollSpy.CLASS_TO_SET_ACTIVE = 'nav-item';
	BX.Landing.NavbarScrollSpy.ACTIVE_CLASS = 'active';

	BX.Landing.NavbarScrollSpy.getInstance = function ()
	{
		return (this.instance || (this.instance = new BX.Landing.NavbarScrollSpy()));
	};

	/**
	 * Add navbars from list to scrollSpy
	 * @param {HTMLElement} scrollspyNode
	 */
	BX.Landing.NavbarScrollSpy.init = function (scrollspyNode)
	{
		var scrollSpy = BX.Landing.NavbarScrollSpy.getInstance();
		scrollSpy.add(scrollspyNode);
	};

	BX.Landing.NavbarScrollSpy.onIntersection = function (entries)
	{
		var scrollspy = BX.Landing.NavbarScrollSpy.getInstance();
		entries.forEach(function (entry)
		{
			scrollspy.checkOnScreen(entry);
		});
		scrollspy.highlight();
	};

	BX.Landing.NavbarScrollSpy.getNodeToHighlight = function (linkNode)
	{
		var nodeToHighlight = BX.findParent(
			linkNode,
			{
				class: BX.Landing.NavbarScrollSpy.CLASS_TO_SET_ACTIVE
			}
		);

		return nodeToHighlight ? nodeToHighlight : linkNode;
	};


	BX.Landing.NavbarScrollSpy.prototype = {
		add: function (scrollspyNode)
		{
			var links = [].slice.call(scrollspyNode.querySelectorAll('a'));
			links.forEach(function (link)
			{
				if (
					link.getAttribute("href") !== "#"
					&& link.hash !== ''
					&& (link.target === '' || link.target === '_self')
					&& link.pathname === document.location.pathname
					&& link.hostname === document.location.hostname
				)
				{
					// hash can be not valid for various reasons
					try
					{
						var target = document.querySelector(link.hash);
					}
					catch (e) {}
					if (target)
					{
						if (typeof this.links[link.hash] === "undefined")
						{
							this.links[link.hash] = [];
						}
						this.links[link.hash].push(link);
						this.targets.push(target);
						this.observer.observe(target);

						link.addEventListener("click", BX.delegate(function (event)
						{
							event.preventDefault();
							event.target.blur();
							this.forceHighlightId = link.hash;
							this.unhighlight();
							this.highlightOnce(link.hash);
						}, this));
					}
				}
			}, this)
		},

		/**
		 * Check which entries now on screen
		 * @param {IntersectionObserverEntry} entry
		 */
		checkOnScreen: function (entry)
		{
			var index = this.onScreen.indexOf(entry.target);
			if (entry.isIntersecting && index === -1)
			{
				this.onScreen.push(entry.target);
			}
			else if (!entry.isIntersecting && index !== -1)
			{
				this.onScreen.splice(index, 1);
			}

			if (
				this.forceHighlightId === '#' + entry.target.id
				&& !entry.isIntersecting
			)
			{
				this.forceHighlightId = null;
			}
		},

		/**
		 * Check active target and set .active to corresponding link
		 */
		highlight: function ()
		{
			if (this.forceHighlightId !== null)
			{
				return;
			}

			this.unhighlight();
			var activeTargetId;
			var activeTargetPosition;
			this.onScreen.forEach(function (target)
			{
				if (activeTargetPosition === undefined)
				{
					activeTargetPosition = target.offsetTop;
				}

				if (target.offsetTop <= activeTargetPosition)
				{
					activeTargetPosition = target.offsetTop;
					activeTargetId = '#' + target.id;
				}
			}, this);

			if (
				typeof activeTargetId !== "undefined"
				&& typeof this.links[activeTargetId] !== "undefined"
				&& this.links[activeTargetId].length > 0
			)
			{
				this.highlightOnce(activeTargetId);
			}
		},

		unhighlight: function ()
		{
			for (var linkId in this.links)
			{
				this.unhighlightOnce(linkId);
			}
		},

		highlightOnce: function (linkId)
		{
			this.links[linkId].forEach(function (link)
			{
				BX.Landing.NavbarScrollSpy.getNodeToHighlight(link)
					.classList.add(BX.Landing.NavbarScrollSpy.ACTIVE_CLASS);
			});
		},

		unhighlightOnce: function (linkId)
		{
			this.links[linkId].forEach(function (link)
			{
				BX.Landing.NavbarScrollSpy.getNodeToHighlight(link)
					.classList.remove(BX.Landing.NavbarScrollSpy.ACTIVE_CLASS);
			}, this)
		}
	};
})();

Youez - 2016 - github.com/yon3zu
LinuXploit