Your IP : 216.73.217.77


Current Path : /home/users/unlimited/www/ultimate-ai.codeskitter.site/public/themes/default/assets/js/
Upload File :
Current File : /home/users/unlimited/www/ultimate-ai.codeskitter.site/public/themes/default/assets/js/frontend.js

(() => {
	'use strict';

	const dropdownMenus = document.querySelectorAll('.dropdown-menu');
	const mobileNavTrigger = document.querySelector('.mobile-nav-trigger');
	const siteNavContainer = document.querySelector('.site-nav-container');
	const templatesShowMore = document.querySelector('.templates-show-more');
	const filterTriggers = document.querySelectorAll('button[data-target]');
	const toggleClassnameTriggers = document.querySelectorAll( '[data-lqd-toggle-class]' );
	const frontendLocalNav = document.querySelector('#frontend-local-navbar');
	const textRotators = document.querySelectorAll('.lqd-text-rotator');
	const setAnchors = document.querySelectorAll('[data-set-anchor=true]');
	let lastActiveTrigger = null;
	let lastOpenedAccordion = null;

	textRotators?.forEach(textRotator => {
		const items = textRotator.querySelectorAll('.lqd-text-rotator-item');

		if (!items.length) return;

		const timeout = 2000;
		let activeIndex = 0;

		textRotator.style.width = `${
			items[activeIndex].querySelector('span').clientWidth
		}px`;

		setInterval(() => {
			// current item
			items[activeIndex].classList.remove('lqd-is-active');

			// now next item
			activeIndex =
				activeIndex === items.length - 1 ? 0 : activeIndex + 1;
			textRotator.style.width = `${
				items[activeIndex].querySelector('span').clientWidth
			}px`;
			items[activeIndex].classList.add('lqd-is-active');
		}, timeout);
	});

	dropdownMenus.forEach(dd => {
		if (document.body.classList.contains('navbar-shrinked')) {
			dd.classList.remove('show');
		}
	});

	document.addEventListener('click', ev => {
		const { target } = ev;
		dropdownMenus.forEach(dd => {
			if (
				!document.body.classList.contains('navbar-shrinked') &&
				dd.closest('.primary-nav')
			)
				return;
			const clickedOutside = !dd.parentElement.contains(target);
			if (clickedOutside) {
				dd.classList.remove('show');
			}
		});
	});

	templatesShowMore?.addEventListener('click', ev => {
		ev.preventDefault();
		const list = document.querySelector('.templates-cards');
		const overlay = document.querySelector('.templates-cards-overlay');

		list.style.overflow = 'visible';
		list.style.maxHeight = 'none';

		overlay.animate([ { opacity: 0 } ], {
			duration: 650,
			fill: 'forwards',
			easing: 'ease-out',
		});
		const btnAnima = templatesShowMore.animate([ { opacity: 0 } ], {
			duration: 650,
			fill: 'forwards',
			easing: 'ease-out',
		});
		btnAnima.onfinish = () => {
			overlay.style.visibility = 'hidden';
			templatesShowMore.style.visibility = 'hidden';
		};
	});

	filterTriggers?.forEach(trigger => {
		const targetId = trigger.getAttribute('data-target');
		const targets = document.querySelectorAll(targetId);
		const triggerType =
			trigger.getAttribute('data-trigger-type') || 'toggle';

		if (targets.length <= 0) {
			return trigger.setAttribute('disabled', true);
		}

		trigger.addEventListener('click', ev => {
			ev?.preventDefault();

			trigger.classList.add('lqd-is-active');

			if (triggerType === 'toggle') {
				[ ...trigger.parentElement.children ]
					.filter(c => c.getAttribute('data-target') !== targetId)
					.forEach(c => c.classList.remove('lqd-is-active'));
			} else if (triggerType === 'accordion') {
				if (lastActiveTrigger) {
					lastActiveTrigger.classList.remove('lqd-is-active');
				}
				if (lastActiveTrigger === trigger) {
					lastActiveTrigger = null;
				} else {
					lastActiveTrigger = trigger;
				}
			}

			targets?.forEach(t => {
				t.style.display = 'block';
				t.animate([ { opacity: 0 }, { opacity: 1 } ], {
					duration: 650,
					easing: 'cubic-bezier(.48,.81,.52,.99)',
				});
			});

			if (triggerType === 'toggle') {
				[ ...targets[0]?.parentElement?.children ]
					?.filter(c =>
						targetId.startsWith('.')
							? !c.classList.contains(targetId.replace('.', ''))
							: c.getAttribute('id') !== targetId.replace('#', '')
					)
					?.forEach(c => (c.style.display = 'none'));
			} else if (triggerType === 'accordion') {
				if (lastOpenedAccordion) {
					lastOpenedAccordion.style.display = 'none';
				}
				if (lastOpenedAccordion === targets[0]) {
					lastOpenedAccordion = null;
				} else {
					lastOpenedAccordion = targets[0];
				}
			}
		});
	});

	toggleClassnameTriggers?.forEach(trigger => {
		const target = trigger.getAttribute('data-lqd-toggle-target');
		let targetEls = target ? document.querySelectorAll(target) : [];

		trigger.addEventListener('click', ev => {
			ev?.preventDefault();
			trigger.classList.toggle('lqd-is-active');
			targetEls.forEach(t => t.classList.toggle('lqd-is-active'));
		});
	});

	if (frontendLocalNav?.querySelector('ul')) {
		const scrollspy = VanillaScrollspy({ menu: frontendLocalNav.querySelector('ul') });
		scrollspy.init();
	}

	mobileNavTrigger?.addEventListener('click', ev => {
		ev.preventDefault();
		mobileNavTrigger?.classList.toggle('lqd-is-active');
		siteNavContainer?.classList.toggle('lqd-is-active');
	});

	siteNavContainer?.querySelectorAll('a')?.forEach(link => {
		link.addEventListener('click', ev => {
			mobileNavTrigger?.classList.remove('lqd-is-active');
			siteNavContainer?.classList.remove('lqd-is-active');
		});
	});

	document.addEventListener('click', ev => {
		const clickedEl = ev.target;
		const clipboardCopyButton = clickedEl.closest('.lqd-clipboard-copy');

		// Close mobile nav when clicked outside
		if (
			siteNavContainer?.classList.contains('lqd-is-active') &&
			!siteNavContainer?.contains(clickedEl) &&
			!siteNavContainer !== clickedEl &&
			!mobileNavTrigger?.contains(clickedEl) &&
			!mobileNavTrigger !== clickedEl
		) {
			mobileNavTrigger?.classList.remove('lqd-is-active');
			siteNavContainer?.classList.remove('lqd-is-active');
		}

		// Copy to clipboard
		if (clipboardCopyButton) {
			const settings = JSON.parse(
				clipboardCopyButton.getAttribute('data-copy-options') || '{}'
			);
			let getContentFrom;

			if (settings.contentIn) {
				if (settings.contentIn.startsWith('<') && settings.content) {
					const el = clipboardCopyButton.parentElement.closest(
						settings.contentIn.replace('<', '')
					);
					getContentFrom = el.querySelector(settings.content);
				}
			} else {
				getContentFrom = settings.content
					? document.querySelector(settings.content)
					: clipboardCopyButton.parentElement;
			}

			if (getContentFrom) {
				const copyButtonsTemplate = document.querySelector('#copy-btns-template');
				const wrapper = clipboardCopyButton.closest('.lqd-clipboard-copy-wrap');
				let textContent = extractTextWithLinks(getContentFrom);

				wrapper?.classList?.toggle('active');

				copyToClipboard(textContent, 'text');

				if ( wrapper && copyButtonsTemplate && !clipboardCopyButton.classList.contains('copy-buttons-appended') ) {
					const copyButtons = copyButtonsTemplate.content.cloneNode(true);
					const buttons = copyButtons.querySelectorAll('button');

					wrapper.appendChild(copyButtons);
					clipboardCopyButton.classList.add('copy-buttons-appended');

					buttons.forEach(button => {
						button.addEventListener('click', () => {
							const copyType = button.getAttribute('data-copy-type');

							if ( copyType === 'text' ) {
								copyToClipboard(textContent, 'text');
							} else if ( copyType === 'html' ) {
								const unwrappedContent = getContentFrom.innerHTML
									.replace(/<span[^>]*class="[^"]*animated-word[^"]*"[^>]*>(.*?)<\/span>/g, '$1')
									.replace('[DONE]', '');
								copyToClipboard(unwrappedContent, 'html');
							} else if ( copyType === 'md' ) {
								if ( typeof TurndownService !== 'undefined' ) {
									const turndownService = new TurndownService();
									const content = getContentFrom.innerHTML.replace('[DONE]', '');
									copyToClipboard(turndownService.turndown(getContentFrom.innerHTML), 'md');
								}
							}
						});
					});
				}
			}
		}
	});

	function copyToClipboard(content, contentType = 'text') {
		if (typeof toastr === 'undefined') {
			return;
		}

		navigator.clipboard.writeText(content).then(() => {
			toastr.success(
				magicai_localize && magicai_localize[`${contentType}_content_copied_to_clipboard`] ?
					magicai_localize[`${contentType}_content_copied_to_clipboard`] :
					'Content copied to clipboard' );
		}).catch(err => {
			toastr.error( magicai_localize?.copy_failed || 'Failed to copy content' );
		});
	}

	function extractTextWithLinks(element) {
		let result = '';
		const walker = document.createTreeWalker(
			element,
			NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT,
			null,
			false
		);

		let node;
		while ((node = walker.nextNode())) {
			if (node.nodeType === Node.TEXT_NODE) {
				result += node.nodeValue;
			} else if (node.nodeType === Node.ELEMENT_NODE) {
				const nodeStyles = window.getComputedStyle(node);

				if (node.nodeName === 'A') {
					result += `(${node.href})`;
				} else if (node.nodeName === 'BR') {
					result += '\n\n';
				} else if (
					nodeStyles.display === 'block' ||
					nodeStyles.display === 'list-item'
				) {
					result += '\n';
				}
			}
		}
		return result.trim();
	}

	setAnchors.forEach(el => {
		const elRect = el.getBoundingClientRect();
		const isRtl = document.documentElement.getAttribute('dir') === 'rtl';

		if (
			(!isRtl && elRect.right > window.innerWidth) ||
			(isRtl && elRect.left < 0)
		) {
			el.classList.add('anchor-end');
		}
	});
})();