/** * AKSRT Misc — related swiper, slide covers, hidden content */ (function () { "use strict"; function renderGradientBackground(container) { if (!container || container.dataset.aksrtGradientState || typeof window.Grade !== "function") return; var source = container.querySelector("img"); if (!source || (!source.classList.contains("lazyloaded") && !(source.complete && source.naturalWidth > 0))) return; container.dataset.aksrtGradientState = "loading"; window.Grade(container, null, function (result) { var gradientData = result && result[0]; var colors = gradientData && gradientData.gradientData; if (!gradientData || !colors || !colors[0] || !colors[1]) { delete container.dataset.aksrtGradientState; return; } var opacity = container.getAttribute("data-opacity"); var colorName = opacity ? "rgba" : "rgb"; var alpha = opacity ? "," + opacity : ""; var color1 = colorName + "(" + colors[0].rgba.slice(0, 3).join(",") + alpha + ") 10%"; var color2 = colorName + "(" + colors[1].rgba.slice(0, 3).join(",") + alpha + ") 80%"; gradientData.element.classList.add("gradient-bg-loaded"); gradientData.element.style.backgroundImage = "linear-gradient(135deg, " + color1 + ", " + color2 + ")"; container.dataset.aksrtGradientState = "loaded"; }); } function initGradientBackgrounds(root) { var scope = root || document; if (scope.nodeType === 1 && scope.matches(".gradient-bg")) { renderGradientBackground(scope); } scope.querySelectorAll(".gradient-bg").forEach(renderGradientBackground); } document.addEventListener("lazyloaded", function (event) { if (!(event.target instanceof Element) || !event.target.matches(".gradient-bg img")) return; renderGradientBackground(event.target.closest(".gradient-bg")); }, true); function initPostThumbMedia(root) { var scope = root || document; scope.querySelectorAll("[data-post-thumb-video]").forEach(function (box) { if (box.dataset.aksrtThumbVideoBound === "1") return; box.dataset.aksrtThumbVideoBound = "1"; var video = box.querySelector("video"); if (!video) return; function loadVideo() { if (!video.getAttribute("src") && video.dataset.src) { video.setAttribute("src", video.dataset.src); video.load(); } } function playVideo() { loadVideo(); var result = video.play(); var postItem = box.closest(".posts-item"); if (postItem) postItem.classList.add("thumb-dplayer-playing"); if (result && typeof result.catch === "function") result.catch(function () {}); } function pauseVideo() { video.pause(); var postItem = box.closest(".posts-item"); if (postItem) postItem.classList.remove("thumb-dplayer-playing"); } var item = box.closest(".item-thumbnail") || box; item.addEventListener("mouseenter", playVideo); item.addEventListener("mouseleave", pauseVideo); item.addEventListener("focusin", playVideo); item.addEventListener("focusout", pauseVideo); }); } function init(root) { initPostThumbMedia(root); initGradientBackgrounds(root); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", function () { init(); }); } else { init(); } // AJAX 注入新内容后由 auto_fun 重扫(各 init 均带 data 标记,重复调用幂等)。 if (window.jQuery) { window.jQuery(document).on("auto_fun", function () { init(); }); } })(); (function () { "use strict"; function initSlideCovers() { var covers = document.querySelectorAll(".single-cover--slide"); covers.forEach(function (cover) { var slides = cover.querySelectorAll(".single-cover__slide"); var dots = cover.querySelectorAll(".single-cover__dot"); if (slides.length < 2) return; var current = 0; var interval = 5000; function goTo(idx) { slides[current].classList.remove("is-active"); if (dots[current]) dots[current].classList.remove("is-active"); current = idx; slides[current].classList.add("is-active"); if (dots[current]) dots[current].classList.add("is-active"); } var timer = setInterval(function () { goTo((current + 1) % slides.length); }, interval); dots.forEach(function (dot, i) { dot.addEventListener("click", function () { clearInterval(timer); goTo(i); timer = setInterval(function () { goTo((current + 1) % slides.length); }, interval); }); }); }); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", initSlideCovers); } else { initSlideCovers(); } })(); (function () { "use strict"; function initHiddenContent() { document.addEventListener("click", function (e) { var btn = e.target.closest(".aksrt-hidden-content__submit-btn"); if (!btn) return; e.preventDefault(); var wrapper = btn.closest(".aksrt-hidden-content--locked"); if (!wrapper) return; var mode = wrapper.getAttribute("data-aksrt-visibility-mode"); var pid = wrapper.getAttribute("data-aksrt-visibility-pid"); var input = wrapper.querySelector(".aksrt-hidden-content__password-input"); var password = input ? input.value.trim() : ""; if (mode === "password" && !password) { if (input) input.focus(); return; } var formData = new FormData(); formData.append("action", "aksrt_check_visibility"); formData.append("_nonce", (window.aksrtData && aksrtData.visibilityNonce) || ""); formData.append("mode", mode); formData.append("pid", pid); if (password) formData.append("password", password); btn.disabled = true; btn.textContent = "..."; fetch((window.aksrtData && aksrtData.ajaxUrl) || "/wp-admin/admin-ajax.php", { method: "POST", body: formData, credentials: "same-origin", }) .then(function (res) { return res.json(); }) .then(function (data) { if (data.success) { window.location.reload(); } else { var msg = (data.data && data.data.message) ? data.data.message : "验证失败"; alert(msg); btn.disabled = false; btn.textContent = "验证"; } }) .catch(function () { alert("网络错误,请重试"); btn.disabled = false; btn.textContent = "验证"; }); }); // Handle Enter key on password input document.addEventListener("keydown", function (e) { if (e.key === "Enter" && e.target.classList.contains("aksrt-hidden-content__password-input")) { e.preventDefault(); var wrapper = e.target.closest(".aksrt-hidden-content--locked"); if (wrapper) { var btn = wrapper.querySelector(".aksrt-hidden-content__submit-btn"); if (btn) btn.click(); } } }); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", initHiddenContent); } else { initHiddenContent(); } })();