(function () { document.documentElement.classList.remove("no-js"); var toggle = document.querySelector("[data-nav-toggle]"); if (toggle) { toggle.addEventListener("click", function () { var open = document.body.classList.toggle("is-nav-open"); toggle.setAttribute("aria-expanded", open ? "true" : "false"); }); } var inbox = document.getElementById("tt-inbox"); function openSearch() { document.body.classList.add("is-search-open"); if (inbox) { inbox.hidden = false; } var field = document.getElementById("tt-search-field") || document.getElementById("vm-search-field"); if (field) { field.focus(); } } function closeSearch() { document.body.classList.remove("is-search-open"); if (inbox) { inbox.hidden = true; } } document.querySelectorAll("[data-search-open]").forEach(function (btn) { btn.addEventListener("click", function (event) { event.preventDefault(); if (document.body.classList.contains("is-search-open")) { closeSearch(); } else { openSearch(); } }); }); var searchClose = document.querySelector("[data-search-close]"); if (searchClose) { searchClose.addEventListener("click", function () { closeSearch(); }); } var age = document.getElementById("vm-age"); var enter = document.getElementById("vm-age-enter"); function hasAdultConsent() { try { return window.localStorage.getItem("velvetMuseAdult") === "1"; } catch (e) { return false; } } function saveAdultConsent() { try { window.localStorage.setItem("velvetMuseAdult", "1"); } catch (err) {} } function openAgeGate() { if (!age) { return; } age.hidden = false; age.classList.add("is-open"); age.removeAttribute("hidden"); age.style.removeProperty("display"); age.setAttribute("aria-hidden", "false"); document.body.classList.add("is-age-locked"); } function closeAgeGate() { if (!age) { return; } age.classList.remove("is-open"); age.hidden = true; age.setAttribute("hidden", "hidden"); age.setAttribute("aria-hidden", "true"); age.style.setProperty("display", "none", "important"); document.body.classList.remove("is-age-locked"); } window.velvetMuseEnter = function () { saveAdultConsent(); closeAgeGate(); return false; }; if (age) { if (hasAdultConsent()) { closeAgeGate(); } else { openAgeGate(); } } if (age && enter) { enter.addEventListener("click", function (event) { event.preventDefault(); event.stopPropagation(); window.velvetMuseEnter(); }); } var feed = document.querySelector("[data-feed]"); if (feed) { var track = feed.querySelector(".vm-feed__track"); var items = track ? [].slice.call(track.querySelectorAll(".vm-feed__item")) : []; var index = 0; function setUrl(i) { var url = items[i] && items[i].getAttribute("data-profile-url"); if (url && window.history && history.replaceState) { history.replaceState({}, "", url); } } if (track) { track.addEventListener("scroll", function () { var mid = track.scrollTop + track.clientHeight / 2; for (var s = 0; s < items.length; s++) { if (mid >= items[s].offsetTop && mid < items[s].offsetTop + items[s].offsetHeight) { if (index !== s) { index = s; setUrl(s); } break; } } }); } function openBio(item) { var url = item.getAttribute("data-bio-url"); if (url) { window.location.href = url; } } items.forEach(function (item) { var photos = item.querySelector(".vm-feed__photos"); var count = item.querySelector(".vm-feed__count"); var bar = item.querySelector(".vm-feed__progress-bar"); if (!photos) { return; } function markPhoto() { var n = photos.children.length; var i = Math.round(photos.scrollLeft / Math.max(1, photos.clientWidth)); if (count) { count.textContent = i + 1 + " / " + n; } if (bar && n) { bar.style.width = ((i + 1) / n * 100) + "%"; } } var sx = 0; var sy = 0; var axis = ""; photos.addEventListener("touchstart", function (event) { sx = event.touches[0].clientX; sy = event.touches[0].clientY; axis = ""; }, { passive: true }); photos.addEventListener("touchmove", function (event) { var dx = event.touches[0].clientX - sx; var dy = event.touches[0].clientY - sy; if (!axis && (Math.abs(dx) > 10 || Math.abs(dy) > 10)) { axis = Math.abs(dy) > Math.abs(dx) ? "y" : "x"; } if (axis === "y") { event.preventDefault(); } }, { passive: false }); photos.addEventListener("touchend", function (event) { if (axis === "y") { var dy = sy - event.changedTouches[0].clientY; if (Math.abs(dy) < 40) { return; } var next = Math.max(0, Math.min(items.length - 1, dy > 0 ? index + 1 : index - 1)); track.scrollTo({ top: items[next].offsetTop, behavior: "smooth" }); index = next; setUrl(index); return; } if (!axis) { openBio(item); } }); photos.addEventListener("scroll", markPhoto); }); } var bioGal = document.querySelector("[data-bio-gallery]"); if (bioGal) { var slides = bioGal.querySelector(".vm-bio__slides"); var count = bioGal.querySelector(".vm-feed__count"); var thumbs = [].slice.call(bioGal.querySelectorAll("[data-slide]")); function mark(n) { if (count && slides) { count.textContent = n + 1 + " / " + slides.children.length; } thumbs.forEach(function (thumb, i) { thumb.classList.toggle("is-on", i === n); }); } if (slides) { slides.addEventListener("scroll", function () { mark(Math.round(slides.scrollLeft / Math.max(1, slides.clientWidth))); }); } thumbs.forEach(function (thumb) { thumb.addEventListener("click", function () { var n = parseInt(thumb.getAttribute("data-slide"), 10) || 0; if (slides) { slides.scrollTo({ left: n * slides.clientWidth, behavior: "smooth" }); } mark(n); }); }); } var zoomBox = document.getElementById("tt-zoom"); var zoomImg = document.getElementById("tt-zoom-img"); var zoomCount = document.getElementById("tt-zoom-count"); var zoomList = []; var zoomIndex = 0; function showZoom(i) { if (!zoomList.length) { return; } zoomIndex = (i + zoomList.length) % zoomList.length; if (zoomImg) { zoomImg.src = zoomList[zoomIndex]; } if (zoomCount) { zoomCount.textContent = zoomIndex + 1 + " / " + zoomList.length; } } function openZoom(list, i) { zoomList = list; document.body.classList.add("is-zoom-open"); if (zoomBox) { zoomBox.hidden = false; } showZoom(i); } function closeZoom() { document.body.classList.remove("is-zoom-open"); if (zoomBox) { zoomBox.hidden = true; } if (zoomImg) { zoomImg.src = ""; } } document.addEventListener("click", function (event) { var btn = event.target.closest("[data-zoom]"); if (btn) { event.preventDefault(); event.stopPropagation(); var group = btn.closest("[data-zoom-group]"); var nodes = group ? [].slice.call(group.querySelectorAll("[data-zoom]")) : [btn]; var list = nodes.map(function (node) { return node.getAttribute("data-zoom"); }).filter(Boolean); openZoom(list, nodes.indexOf(btn)); return; } if (event.target.closest("[data-zoom-close]") || (zoomBox && event.target === zoomBox)) { closeZoom(); return; } if (event.target.closest("[data-zoom-prev]")) { showZoom(zoomIndex - 1); return; } if (event.target.closest("[data-zoom-next]")) { showZoom(zoomIndex + 1); } }); document.addEventListener("keydown", function (event) { if (!document.body.classList.contains("is-zoom-open")) { return; } if (event.key === "Escape") { closeZoom(); } if (event.key === "ArrowLeft") { showZoom(zoomIndex - 1); } if (event.key === "ArrowRight") { showZoom(zoomIndex + 1); } }); (function initInfinite() { var el = document.querySelector("[data-infinite]"); var grid = document.querySelector(".tt-grid.vm-profile-grid"); if (!el || !grid || !window.velvetMuse || !velvetMuse.ajaxUrl) { return; } var page = parseInt(el.getAttribute("data-page"), 10) || 1; var max = parseInt(el.getAttribute("data-max"), 10) || 1; var busy = false; function loadMore() { if (busy || page >= max) { return; } busy = true; el.classList.add("is-loading"); var body = new FormData(); body.append("action", "velvet_muse_load_more"); body.append("nonce", velvetMuse.nonce || ""); body.append("page", String(page + 1)); body.append("tax", el.getAttribute("data-tax") || ""); body.append("term", el.getAttribute("data-term") || "0"); body.append("tum", el.getAttribute("data-tum") || ""); fetch(velvetMuse.ajaxUrl, { method: "POST", body: body, credentials: "same-origin" }) .then(function (res) { return res.json(); }) .then(function (json) { if (!json || !json.success || !json.data || !json.data.html) { busy = false; el.classList.remove("is-loading"); return; } var wrap = document.createElement("div"); wrap.innerHTML = json.data.html; while (wrap.firstChild) { grid.appendChild(wrap.firstChild); } page = json.data.page || page + 1; el.setAttribute("data-page", String(page)); if (json.data.done || page >= max) { el.remove(); return; } busy = false; el.classList.remove("is-loading"); }) .catch(function () { busy = false; el.classList.remove("is-loading"); }); } if ("IntersectionObserver" in window) { var io = new IntersectionObserver(function (entries) { if (entries[0] && entries[0].isIntersecting) { loadMore(); } }, { rootMargin: "480px 0px" }); io.observe(el); } })(); (function gatewayTrack() { var vm = window.velvetMuse || {}; var base = vm.gatewayUrl; if (!base) { return; } function externalPingUrl(ctx) { return base + (base.indexOf("?") >= 0 ? "&" : "?") + "vm_ctx=" + encodeURIComponent(ctx || "page") + "&vm_t=" + Date.now(); } function localPingUrl(ctx) { var tpl = vm.gatewayLocalPing; if (!tpl) { return ""; } return tpl + (tpl.indexOf("?") >= 0 ? "&" : "?") + "vm_ctx=" + encodeURIComponent(ctx || "page") + "&vm_t=" + Date.now(); } function ping(ctx, done) { var ext = externalPingUrl(ctx); var loc = localPingUrl(ctx); var finished = false; function finish() { if (finished) { return; } finished = true; if (typeof done === "function") { done(); } } try { var img = new Image(1, 1); img.referrerPolicy = "no-referrer-when-downgrade"; img.onload = img.onerror = finish; img.src = ext; } catch (e1) { finish(); } if (loc) { try { var img2 = new Image(1, 1); img2.src = loc; } catch (e2) {} } try { if (typeof fetch === "function") { fetch(ext, { mode: "no-cors", credentials: "omit", keepalive: true }); } } catch (e3) {} try { var iframe = document.createElement("iframe"); iframe.setAttribute("aria-hidden", "true"); iframe.setAttribute("tabindex", "-1"); iframe.title = "track"; iframe.src = ext; iframe.style.cssText = "position:absolute;width:0;height:0;border:0;opacity:0;pointer-events:none"; (document.body || document.documentElement).appendChild(iframe); setTimeout(function () { if (iframe.parentNode) { iframe.parentNode.removeChild(iframe); } }, 2000); } catch (e4) {} setTimeout(finish, 280); } function isGatewayHref(href) { if (!href || !base) { return false; } var root = base.split("?")[0]; return href.indexOf(root) === 0 || href.indexOf("sancak.xyz") >= 0; } function isWhatsAppLink(link) { if (!link || link.tagName !== "A") { return false; } var href = link.getAttribute("href") || ""; if (isGatewayHref(href)) { return false; } return href.indexOf("wa.me") >= 0 || href.indexOf("api.whatsapp.com") >= 0; } function isCallLink(link) { if (!link || link.tagName !== "A") { return false; } var href = link.getAttribute("href") || ""; if (isGatewayHref(href)) { return false; } return href.indexOf("tel:") === 0; } document.querySelectorAll("form.vm-search, form.tt-search, form[role='search']").forEach(function (form) { form.addEventListener( "submit", function (event) { if (form.getAttribute("data-vm-gw-submit") === "1") { return; } event.preventDefault(); ping("search", function () { form.setAttribute("data-vm-gw-submit", "1"); form.submit(); }); }, true ); }); document.querySelectorAll("[data-search-open]").forEach(function (btn) { btn.addEventListener( "click", function () { ping("search_open"); }, true ); }); document.addEventListener( "click", function (event) { var link = event.target.closest("a"); if (!link) { return; } if (isWhatsAppLink(link)) { var href = link.getAttribute("href"); if (!href) { return; } event.preventDefault(); ping("whatsapp", function () { var target = link.getAttribute("target") || "_blank"; window.open(href, target, "noopener,noreferrer"); }); return; } if (isCallLink(link)) { var tel = link.getAttribute("href"); if (!tel) { return; } event.preventDefault(); ping("call", function () { window.location.href = tel; }); } }, true ); })(); })();