(function() { "use strict"; /** * Apply .scrolled class to the body as the page is scrolled down */ function toggleScrolled() { const selectBody = document.querySelector('body'); const selectHeader = document.querySelector('#header'); if (!selectHeader.classList.contains('scroll-up-sticky') && !selectHeader.classList.contains('sticky-top') && !selectHeader.classList.contains('fixed-top')) return; window.scrollY > 100 ? selectBody.classList.add('scrolled') : selectBody.classList.remove('scrolled'); } document.addEventListener('scroll', toggleScrolled); window.addEventListener('load', toggleScrolled); /** * Mobile nav toggle */ const mobileNavToggleBtn = document.querySelector('.mobile-nav-toggle'); function mobileNavToogle() { document.querySelector('body').classList.toggle('mobile-nav-active'); mobileNavToggleBtn.classList.toggle('bi-list'); mobileNavToggleBtn.classList.toggle('bi-x'); } mobileNavToggleBtn.addEventListener('click', mobileNavToogle); /** * Hide mobile nav on same-page/hash links */ document.querySelectorAll('#navmenu a').forEach(navmenu => { navmenu.addEventListener('click', () => { if (document.querySelector('.mobile-nav-active')) { mobileNavToogle(); } }); }); /** * Toggle mobile nav dropdowns */ document.querySelectorAll('.navmenu .toggle-dropdown').forEach(navmenu => { navmenu.addEventListener('click', function(e) { e.preventDefault(); this.parentNode.classList.toggle('active'); this.parentNode.nextElementSibling.classList.toggle('dropdown-active'); e.stopImmediatePropagation(); }); }); /** * Preloader */ const preloader = document.querySelector('#preloader'); if (preloader) { window.addEventListener('load', () => { preloader.remove(); }); } /** * Scroll top button */ let scrollTop = document.querySelector('.scroll-top'); function toggleScrollTop() { if (scrollTop) { window.scrollY > 100 ? scrollTop.classList.add('active') : scrollTop.classList.remove('active'); } } scrollTop.addEventListener('click', (e) => { e.preventDefault(); window.scrollTo({ top: 0, behavior: 'smooth' }); }); window.addEventListener('load', toggleScrollTop); document.addEventListener('scroll', toggleScrollTop); /** * Animation on scroll function and init */ // function aosInit() { // AOS.init({ // duration: 600, // easing: 'ease-in-out', // once: true, // mirror: false // }); // } // window.addEventListener('load', aosInit); /** * Initiate glightbox */ const glightbox = GLightbox({ selector: '.glightbox' }); /** * Initiate Pure Counter */ new PureCounter(); /** * Init swiper sliders */ function initSwiper() { document.querySelectorAll(".init-swiper").forEach(function(swiperElement) { let config = JSON.parse( swiperElement.querySelector(".swiper-config").innerHTML.trim() ); if (swiperElement.classList.contains("swiper-tab")) { initSwiperWithCustomPagination(swiperElement, config); } else { new Swiper(swiperElement, config); } }); } window.addEventListener("load", initSwiper); /** * Init isotope layout and filters */ document.querySelectorAll('.isotope-layout').forEach(function(isotopeItem) { let layout = isotopeItem.getAttribute('data-layout') ?? 'masonry'; let filter = isotopeItem.getAttribute('data-default-filter') ?? '*'; let sort = isotopeItem.getAttribute('data-sort') ?? 'original-order'; let initIsotope; imagesLoaded(isotopeItem.querySelector('.isotope-container'), function() { initIsotope = new Isotope(isotopeItem.querySelector('.isotope-container'), { itemSelector: '.isotope-item', layoutMode: layout, filter: filter, sortBy: sort }); // Add the active class to the filtered items initIsotope.on('arrangeComplete', function() { // Remove the active class from all items isotopeItem.querySelectorAll('.isotope-item').forEach(function(item) { item.classList.remove('active'); }); // Add the active class to the visible items after the filter is applied isotopeItem.querySelectorAll('.isotope-item').forEach(function(item) { if (item.style.display !== 'none') { item.classList.add('active'); // Add 'active' class to visible items } }); }); }); isotopeItem.querySelectorAll('.isotope-filters li').forEach(function(filters) { filters.addEventListener('click', function() { isotopeItem.querySelector('.isotope-filters .filter-active').classList.remove('filter-active'); this.classList.add('filter-active'); initIsotope.arrange({ filter: this.getAttribute('data-filter') }); if (typeof aosInit === 'function') { aosInit(); } }, false); }); }); /** * Correct scrolling position upon page load for URLs containing hash links. */ window.addEventListener('load', function(e) { if (window.location.hash) { if (document.querySelector(window.location.hash)) { setTimeout(() => { let section = document.querySelector(window.location.hash); let scrollMarginTop = getComputedStyle(section).scrollMarginTop; window.scrollTo({ top: section.offsetTop - parseInt(scrollMarginTop), behavior: 'smooth' }); }, 100); } } }); /** * Navmenu Scrollspy */ let navmenulinks = document.querySelectorAll('.navmenu a'); function navmenuScrollspy() { navmenulinks.forEach(navmenulink => { if (!navmenulink.hash) return; let section = document.querySelector(navmenulink.hash); if (!section) return; let position = window.scrollY + 200; if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) { document.querySelectorAll('.navmenu a.active').forEach(link => link.classList.remove('active')); navmenulink.classList.add('active'); } else { navmenulink.classList.remove('active'); } }) } window.addEventListener('load', navmenuScrollspy); document.addEventListener('scroll', navmenuScrollspy); })(); // technology const accordions = document.querySelectorAll(".accordion"); // Default open the first accordion if (accordions.length > 0) { const firstContent = accordions[0].querySelector(".accordion__content"); const firstIcon = accordions[0].querySelector("#accordion-icon"); firstContent.style.height = `${firstContent.scrollHeight}px`; // Set height for the first content firstIcon.classList.remove("ri-add-line"); // Update icon for the first accordion firstIcon.classList.add("ri-subtract-fill"); } accordions.forEach((accordion, index) => { const header = accordion.querySelector(".accordion__header"); const content = accordion.querySelector(".accordion__content"); const icon = accordion.querySelector("#accordion-icon"); header.addEventListener("click", () => { const isOpen = content.style.height === `${content.scrollHeight}px`; accordions.forEach((a, i) => { const c = a.querySelector(".accordion__content"); const ic = a.querySelector("#accordion-icon"); c.style.height = i === index && !isOpen ? `${c.scrollHeight}px` : "0px"; ic.classList.toggle("ri-add-line", i !== index || !isOpen); ic.classList.toggle("ri-subtract-fill", i === index && !isOpen); }); }); }); // portfolio PDF view document.addEventListener("DOMContentLoaded", () => { const viewPortfolioButton = document.getElementById("viewPortfolioButton"); if (viewPortfolioButton) { // Path to the PDF file const pdfUrl = "assets/img/portfolio/Swan Digital Labs Portfolio.pdf"; // Event listener for the button viewPortfolioButton.addEventListener("click", () => { // Open the PDF in a new tab window.open(pdfUrl, "_blank"); }); } else { // console.error("Button with ID 'viewPortfolioButton' not found."); } });