Files
matrix/cygnus-onprem-app/build/WebContent/js/matrix-modal-v2.js

49 lines
1.6 KiB
JavaScript

(() => {
"use strict";
const modalElement = document.getElementById("matrixFrameModal");
if (!modalElement || !window.bootstrap) {
return;
}
const frame = modalElement.querySelector("iframe");
const title = modalElement.querySelector(".modal-title");
const modal = new bootstrap.Modal(modalElement, { backdrop: "static", keyboard: true });
let resolveResult;
let completionMessage = "matrix:user-saved";
window.MatrixModal = {
openFrame(options) {
title.textContent = options.title;
frame.src = options.url;
completionMessage = options.completionMessage || "matrix:user-saved";
modal.show();
return new Promise((resolve) => {
resolveResult = resolve;
});
},
close(result = { status: "cancelled" }) {
resolveResult?.(result);
resolveResult = undefined;
modal.hide();
}
};
window.addEventListener("message", (event) => {
if (event.origin !== window.location.origin || event.source !== frame.contentWindow) {
return;
}
if (event.data?.type === completionMessage) {
window.MatrixModal.close({ status: "saved", value: event.data.value });
} else if (event.data?.type === "matrix:modal-close") {
window.MatrixModal.close();
}
});
modalElement.addEventListener("hidden.bs.modal", () => {
frame.removeAttribute("src");
resolveResult?.({ status: "cancelled" });
resolveResult = undefined;
});
})();