Files
pgbackweb/internal/view/static/js/init-htmx.js
Luis Eduardo f0a60bd482 Run deno fmt
2025-02-04 18:56:15 +00:00

73 lines
2.3 KiB
JavaScript

export function initHTMX() {
const triggers = {
ctm_alert: function (evt) {
const message = decodeURIComponent(evt.detail.value);
window.swalAlert(message);
},
ctm_alert_with_refresh: function (evt) {
const message = decodeURIComponent(evt.detail.value);
window.swalAlert(message).then(() => {
location.reload();
});
},
ctm_alert_with_redirect: function (evt) {
const payload = decodeURIComponent(evt.detail.value);
const parts = payload.split("-::-::-");
if (parts.length !== 2) {
return;
}
const message = parts[0];
const url = parts[1];
window.swalAlert(message).then(() => {
location.href = url;
});
},
ctm_toast_success: function (evt) {
const message = decodeURIComponent(evt.detail.value);
toaster.success(message);
},
ctm_toast_error: function (evt) {
const message = decodeURIComponent(evt.detail.value);
toaster.error(message);
},
ctm_toast_success_infinite: function (evt) {
const message = decodeURIComponent(evt.detail.value);
toaster.successInfinite(message);
},
ctm_toast_error_infinite: function (evt) {
const message = decodeURIComponent(evt.detail.value);
toaster.errorInfinite(message);
},
};
for (const key in triggers) {
document.addEventListener(key, triggers[key]);
}
// Add trigger to use sweetalert2 for confirms
document.addEventListener("htmx:confirm", function (e) {
if (!e.detail.target.hasAttribute("hx-confirm")) return;
e.preventDefault();
window.swalConfirm(e.detail.question).then(function (result) {
if (result.isConfirmed) e.detail.issueRequest(true);
});
});
// This fixes this issue:
// https://stackoverflow.com/questions/73658449/htmx-request-not-firing-when-hx-attributes-are-added-dynamically-from-javascrip
document.addEventListener("DOMContentLoaded", function () {
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
mutation.addedNodes.forEach((node) => {
if (node.nodeType === 1 && !node["htmx-internal-data"]) {
htmx.process(node);
}
});
});
});
observer.observe(document, { childList: true, subtree: true });
});
}