Set up the required directory layout, app scaffolding, core settings, templates, static assets, and Docker/Tailwind tooling to establish a standardized development baseline.
50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
(function () {
|
|
if (window.Alpine && window.Alpine.plugin && window.Alpine.$persist) {
|
|
window.Alpine.plugin(window.Alpine.$persist);
|
|
}
|
|
|
|
function createToast(payload) {
|
|
var container = document.getElementById("toast-container");
|
|
if (!container || !payload || !payload.message) {
|
|
return;
|
|
}
|
|
|
|
var type = payload.type || "info";
|
|
var color = {
|
|
success: "border-success-600",
|
|
error: "border-danger-600",
|
|
warning: "border-warning-600",
|
|
info: "border-info-600",
|
|
}[type] || "border-info-600";
|
|
|
|
var item = document.createElement("div");
|
|
item.className = "bg-white border-l-4 " + color + " shadow-xs rounded px-4 py-3 text-sm min-w-[240px]";
|
|
item.textContent = payload.message;
|
|
container.appendChild(item);
|
|
|
|
window.setTimeout(function () {
|
|
item.remove();
|
|
}, 4000);
|
|
}
|
|
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
document.body.addEventListener("htmx:afterRequest", function (event) {
|
|
var xhr = event.detail && event.detail.xhr;
|
|
if (!xhr) {
|
|
return;
|
|
}
|
|
var trigger = xhr.getResponseHeader("HX-Trigger");
|
|
if (!trigger) {
|
|
return;
|
|
}
|
|
try {
|
|
var parsed = JSON.parse(trigger);
|
|
if (parsed["fonrey:toast"]) {
|
|
createToast(parsed["fonrey:toast"]);
|
|
}
|
|
} catch (_err) {
|
|
}
|
|
});
|
|
});
|
|
})();
|