Files
wordpress-theme-aksrt/assets/js/core/remote-modal.js
T
2026-08-04 23:24:37 +08:00

78 lines
2.6 KiB
JavaScript

/**
* AKSRT Remote Modal compatibility bridge.
*
* The lifecycle implementation lives in AksrtModalRuntime. This file keeps
* the legacy trigger contract and the AksrtRemoteModal public alias stable.
*
* @package AKSRT
*/
(function (window, document) {
"use strict";
function runtime() {
return window.AksrtModalRuntime || null;
}
function fromTrigger(element) {
var modalRuntime = runtime();
if (!modalRuntime || !element) return Promise.reject(new Error("modal runtime unavailable"));
var url = element.getAttribute("data-remote") ||
element.getAttribute("data-aksrt-remote") ||
element.getAttribute("href") || "";
if (!url || url === "#") return Promise.resolve(null);
var ttl = parseInt(element.getAttribute("data-modal-cache-ttl") || "15000", 10);
var tags = (element.getAttribute("data-modal-cache-tags") || "").split(",").map(function (tag) {
return tag.trim();
}).filter(Boolean);
return modalRuntime.openRemote({
url: url,
method: element.getAttribute("data-method") || "GET",
className: element.getAttribute("data-class") || element.getAttribute("data-aksrt-class") || "modal-mini full-sm",
height: parseInt(element.getAttribute("data-height") || element.getAttribute("data-aksrt-height") || "0", 10) || 0,
mobileBottom: element.getAttribute("mobile-bottom") !== "false",
bottom: element.getAttribute("data-bottom") === "true",
kind: element.getAttribute("data-modal-kind") || "generic",
cacheKey: element.getAttribute("data-modal-cache-key") || "",
cacheTtl: ttl > 0 ? ttl : 15000,
cacheTags: tags,
});
}
function bind() {
if (window.__aksrtRemoteModalBound) return;
if (!runtime()) return;
window.__aksrtRemoteModalBound = true;
document.addEventListener("click", function (event) {
var trigger = event.target.closest(
'[data-toggle="AksrtRemoteModal"], [data-toggle="RefreshModal"], [data-aksrt-remote-modal], a.aksrt-remote-modal-link'
);
if (!trigger || trigger.getAttribute("data-aksrt-remote-modal") === "off") return;
event.preventDefault();
fromTrigger(trigger);
});
}
function expose() {
var modalRuntime = runtime();
if (!modalRuntime) return;
window.AksrtRemoteModal = {
open: modalRuntime.open,
openRemote: modalRuntime.openRemote,
close: modalRuntime.close,
refresh: modalRuntime.refresh,
fromTrigger: fromTrigger,
getActive: modalRuntime.getActive,
};
bind();
}
expose();
if (!window.AksrtModalRuntime) {
document.addEventListener("aksrt:modal-runtime:ready", expose, { once: true });
}
})(window, document);