/* * ====================================================== * Purple-SA Custom JS (No Auto Sorting) * - Removed: Default Sort via URL Enforcement * - Improved: Use events + MutationObserver instead of tight intervals * ====================================================== */ (function () { "use strict"; /* ------------------------------------------------------ * Helpers * ------------------------------------------------------ */ const onReady = (fn) => { if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", fn, { once: true }); } else { fn(); } }; // Runs fn on DOM ready + on Salla content updates (SPA-ish behavior) const bindSallaContentUpdated = (fn) => { try { // Some Salla themes use this event bus if (window.salla?.event?.document?.on) { window.salla.event.document.on("content.updated", fn); } } catch (e) { // silent } }; // MutationObserver fallback to catch late-rendered components const observeDom = (fn) => { const obs = new MutationObserver(() => fn()); obs.observe(document.documentElement, { childList: true, subtree: true }); return obs; }; /* ------------------------------------------------------ * 1) Yalla Ludo Filters Takeover Strategy * ------------------------------------------------------ */ const takeoverYallaLudoPage = () => { // Ensure we are on the intended category page // Keep your original check (Salla category id) if (!window.location.pathname.includes("/c922250271")) return; const productsListElement = document.querySelector("salla-products-list"); if (!productsListElement) return; // Prevent re-run if (document.querySelector(".zentos-ludo-wrapper")) return; const masterWrapper = document.createElement("div"); masterWrapper.className = "zentos-ludo-wrapper"; const filtersHTML = `
ذهــــب مجوهرات (ماس) لواء - فارس
`; // Insert wrapper before products list productsListElement.parentNode.insertBefore(masterWrapper, productsListElement); // Add filters then move products list into wrapper masterWrapper.insertAdjacentHTML("beforeend", filtersHTML); masterWrapper.appendChild(productsListElement); }; /* * =============================== * Footer Takeover (Dynamic Year) * =============================== */ const takeoverFooter = () => { const originalFooter = document.querySelector("footer"); if (!originalFooter) return; // prevent re-run if (originalFooter.querySelector(".zentos-takeover-content")) return; const year = new Date().getFullYear(); const takeoverHTML = `
`; originalFooter.innerHTML = takeoverHTML; }; /* ------------------------------------------------------ * 3) Image to Video on Hover Effect * ------------------------------------------------------ */ function initializeHoverVideoEffect() { const videoMap = { "https://purple-sa.com/ar/redirect/categories/922250271": "https://res.cloudinary.com/dbvl7eq8m/video/upload/v1754481604/yallaludo_purple_jmjlqt.mp4", "https://purple-sa.com/ar/redirect/categories/2023830094": "https://res.cloudinary.com/dbvl7eq8m/video/upload/v1754481607/hawachat_ouwijv.mp4", "https://purple-sa.com/ar/redirect/categories/1897617688": "https://res.cloudinary.com/dbvl7eq8m/video/upload/v1754925542/yoho_vsrbvl.mp4", "https://purple-sa.com/ar/redirect/categories/1937919874": "https://res.cloudinary.com/dbvl7eq8m/video/upload/v1754481605/binmo_jrsntn.mp4", "https://purple-sa.com/ar/redirect/categories/32519871": "https://res.cloudinary.com/dbvl7eq8m/video/upload/v1754481613/pubg_k1fvcv.mp4", "https://purple-sa.com/ar/redirect/categories/410232070": "https://res.cloudinary.com/dbvl7eq8m/video/upload/v1754481608/silachat_t6mlgn.mp4", "https://www.purple-cards.com/ar/category/63/brand/303": "https://res.cloudinary.com/dbvl7eq8m/video/upload/v1754481606/yallalive_re1nje.mp4", "https://purple-sa.com/ar/redirect/categories/1594243893": "https://res.cloudinary.com/dbvl7eq8m/video/upload/v1754481605/soulfree_obe34m.mp4", "https://purple-sa.com/ar/redirect/categories/1224257357": "https://res.cloudinary.com/dbvl7eq8m/video/upload/v1754481607/sadalive_flwd8k.mp4", }; const categoryLinks = document.querySelectorAll( ".main-links-style-2-slider-single-content-image a" ); categoryLinks.forEach((link) => { const linkHref = link.getAttribute("href"); const videoSrc = videoMap[linkHref]; if (!videoSrc) return; const container = link.parentElement; if (!container) return; // Prevent duplicate init if (container.dataset.videoEffect === "true") return; const video = document.createElement("video"); video.src = videoSrc; video.className = "hover-video"; video.muted = true; video.loop = true; video.playsInline = true; video.preload = "metadata"; container.appendChild(video); container.addEventListener("mouseenter", () => { // play() can reject on some browsers; ignore safely const p = video.play(); if (p && typeof p.catch === "function") p.catch(() => {}); }); container.addEventListener("mouseleave", () => { video.pause(); video.currentTime = 0; }); container.dataset.videoEffect = "true"; }); } /* ------------------------------------------------------ * Boot * ------------------------------------------------------ */ const runAll = () => { takeoverYallaLudoPage(); takeoverFooter(); initializeHoverVideoEffect(); }; onReady(runAll); bindSallaContentUpdated(runAll); // Observer to catch delayed components (safe, no 100ms polling) observeDom(runAll); })();