/** * GraphicsSellNepal — Main JavaScript * @package GraphicsSellNepal */ (function () { 'use strict'; /* ============================================== TOAST NOTIFICATION ============================================== */ function gsnToast(msg) { var c = document.getElementById('gsnToastContainer'); if (!c) return; var t = document.createElement('div'); t.className = 'gsn-toast'; t.innerHTML = '' + msg; c.appendChild(t); // Trigger Iconify scan for the new icon if (window.Iconify) Iconify.scan(t); requestAnimationFrame(function () { requestAnimationFrame(function () { t.classList.add('gsn-show'); }); }); setTimeout(function () { t.classList.remove('gsn-show'); setTimeout(function () { t.remove(); }, 400); }, 2800); } // Expose globally for PHP onclick usage window.gsnToast = gsnToast; /* ============================================== CATEGORY DROPDOWN ============================================== */ var catsToggle = document.getElementById('gsnCatsToggle'); var catsDrop = document.getElementById('gsnCatsDropdown'); if (catsToggle && catsDrop) { catsToggle.addEventListener('click', function (e) { e.stopPropagation(); catsToggle.classList.toggle('open'); catsDrop.classList.toggle('open'); }); document.addEventListener('click', function () { catsToggle.classList.remove('open'); catsDrop.classList.remove('open'); }); } /* ============================================== MOBILE MENU ============================================== */ var mobileBtn = document.getElementById('gsnMobileToggle'); var primaryNav = document.querySelector('.gsn-primary-nav'); if (mobileBtn && primaryNav) { mobileBtn.addEventListener('click', function () { primaryNav.classList.toggle('open'); }); } /* ============================================== HERO SLIDER ============================================== */ var slides = document.querySelectorAll('.gsn-hero-slide'); var dots = document.querySelectorAll('.gsn-hero-dot'); var cur = 0; var timer; if (slides.length > 1) { function go(n) { slides[cur].style.display = 'none'; if (dots[cur]) dots[cur].classList.remove('gsn-active'); cur = (n + slides.length) % slides.length; slides[cur].style.display = 'flex'; if (dots[cur]) dots[cur].classList.add('gsn-active'); } function start() { timer = setInterval(function () { go(cur + 1); }, 5000); } function reset() { clearInterval(timer); start(); } var nb = document.getElementById('gsnHeroNext'); var pb = document.getElementById('gsnHeroPrev'); if (nb) nb.addEventListener('click', function () { go(cur + 1); reset(); }); if (pb) pb.addEventListener('click', function () { go(cur - 1); reset(); }); dots.forEach(function (d) { d.addEventListener('click', function () { go(parseInt(d.dataset.dot)); reset(); }); }); start(); } /* ============================================== STICKY HEADER SHADOW ============================================== */ var hdr = document.getElementById('gsnSiteHeader'); if (hdr) { window.addEventListener('scroll', function () { hdr.style.boxShadow = window.scrollY > 10 ? '0 4px 20px rgba(0,0,0,0.2)' : '0 2px 10px rgba(0,0,0,0.15)'; }); } /* ============================================== SCROLL TO TOP ============================================== */ var st = document.getElementById('gsnScrollTop'); if (st) { window.addEventListener('scroll', function () { st.classList.toggle('visible', window.scrollY > 400); }); st.addEventListener('click', function () { window.scrollTo({ top: 0, behavior: 'smooth' }); }); } /* ============================================== SCROLL FADE-UP OBSERVER ============================================== */ if (window.IntersectionObserver) { var obs = new IntersectionObserver(function (entries) { entries.forEach(function (e) { if (e.isIntersecting) { e.target.classList.add('visible'); obs.unobserve(e.target); } }); }, { threshold: 0.08, rootMargin: '0px 0px -30px 0px' }); document.querySelectorAll('.gsn-fade-up:not(.visible)').forEach(function (el) { obs.observe(el); }); } /* ============================================== AJAX ADD TO CART ============================================== */ document.addEventListener('click', function (e) { var btn = e.target.closest('.gsn-ajax-cart'); if (!btn) return; e.preventDefault(); var pid = btn.getAttribute('data-id'); if (!pid) return; btn.style.opacity = '0.6'; btn.style.pointerEvents = 'none'; var fd = new FormData(); fd.append('product_id', pid); fd.append('quantity', 1); fd.append('action', 'gsn_ajax_add_to_cart'); fd.append('nonce', (window.gsnData && gsnData.nonce) || ''); fetch((window.gsnData && gsnData.ajaxUrl) || '/wp-admin/admin-ajax.php', { method: 'POST', body: fd, credentials: 'same-origin' }) .then(function (r) { return r.json(); }) .then(function (res) { btn.style.opacity = '1'; btn.style.pointerEvents = 'auto'; if (res.success) { gsnToast(res.data || (gsnData && gsnData.i18n && gsnData.i18n.addedToCart) || 'Added to cart!'); } else { gsnToast(res.data || (gsnData && gsnData.i18n && gsnData.i18n.cartError) || 'Error'); } }) .catch(function () { btn.style.opacity = '1'; btn.style.pointerEvents = 'auto'; // Fallback var href = btn.getAttribute('href'); if (href) window.location.href = href; }); }); /* ============================================== WISHLIST BUTTON ============================================== */ document.addEventListener('click', function (e) { var btn = e.target.closest('[data-action="wishlist"]'); if (!btn) return; e.preventDefault(); gsnToast((window.gsnData && gsnData.i18n && gsnData.i18n.addedToWishlist) || 'Added to wishlist'); }); /* ============================================== NEWSLETTER FORM ============================================== */ var nlForm = document.getElementById('gsnNewsletterForm'); if (nlForm) { nlForm.addEventListener('submit', function (e) { e.preventDefault(); var email = document.getElementById('gsnNewsletterEmail'); if (email && email.value) { gsnToast((window.gsnData && gsnData.i18n && gsnData.i18n.subscribed) || 'Subscribed!'); email.value = ''; } }); } })(); MP499 – Graphic Sell Nepal https://graphicssellnepal.com Nepal first graphics sell company Wed, 13 Oct 2021 03:56:46 +0000 en-US hourly 1 https://wordpress.org/?v=7.0.3 MP499 Wed, 13 Oct 2021 03:56:46 +0000 Showing 1–9 of 47 results Default sorting Sort by popularity Sort by average rating Sort by latest Sort by price: low to high Sort by price: high to low FN : 1019 Medical ₨ 99.00 Add to cart FN : 1020 Medical ₨ 99.00 Add to cart FN : 1063 Dental ₨ 99.00 Add to cart FN : 1068 Dental ₨ 99.00 Add to cart FN : 1151 Ayurvedic Medical ₨ 99.00 Add to cart FN : 1155 Medical ₨ 99.00 Add to cart FN : 1189 Medical ₨ 99.00 Add to cart FN : 1190 Medical ₨ 99.00 Add to cart FN : 1191 Medical ₨ 99.00 Add to cart 1 2 3 4 5 6 → ]]>
Showing 1–9 of 47 results