78 lines
2.6 KiB
JavaScript
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);
|