Fix: Edit-Button-Klick-Handler vor DOMContentLoaded ziehen
Die globale Event-Delegation lag versehentlich innerhalb des DOMContentLoaded-Callbacks. Wenn initSortable fehlschlug, wurde der Click-Handler nie registriert. - editState + document click handler jetzt global (vor DOMContentLoaded) - Duplicate Code entfernt - Debug-alerts entfernt
This commit is contained in:
@@ -280,8 +280,7 @@
|
|||||||
data-zoom="{{ file.zoom | default(1.0) }}"
|
data-zoom="{{ file.zoom | default(1.0) }}"
|
||||||
data-site="{{ current_site }}"
|
data-site="{{ current_site }}"
|
||||||
data-screen="{{ screen }}"
|
data-screen="{{ screen }}"
|
||||||
data-oldname="{{ file.name | e }}"
|
data-oldname="{{ file.name | e }}">
|
||||||
onclick="alert('KLICK!');">
|
|
||||||
Edit
|
Edit
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -538,9 +537,25 @@
|
|||||||
</div> <!-- /page -->
|
</div> <!-- /page -->
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
/* ─── Playlist-Item bearbeiten (URL + Zoom) ─── */
|
||||||
|
var editState = { site: "", screen: "", oldName: "" };
|
||||||
|
|
||||||
|
/* Event-Delegation für Edit-Buttons (global, sofort aktiv) */
|
||||||
|
document.addEventListener("click", function (e) {
|
||||||
|
var btn = e.target.closest(".edit-url-btn");
|
||||||
|
if (!btn) return;
|
||||||
|
e.preventDefault();
|
||||||
|
editState.site = btn.dataset.site;
|
||||||
|
editState.screen = btn.dataset.screen;
|
||||||
|
editState.oldName = btn.dataset.oldname;
|
||||||
|
document.getElementById("edit-url-input").value = btn.dataset.oldname;
|
||||||
|
document.getElementById("edit-zoom-input").value = btn.dataset.zoom;
|
||||||
|
document.getElementById("edit-url-error").style.display = "none";
|
||||||
|
new bootstrap.Modal(document.getElementById("edit-url-modal")).show();
|
||||||
|
});
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
|
||||||
/* ─── SortableJS Drag & Drop initialisieren ─── */
|
|
||||||
function initSortable(name) {
|
function initSortable(name) {
|
||||||
const el = document.getElementById("playlist-" + name);
|
const el = document.getElementById("playlist-" + name);
|
||||||
if (!el || typeof Sortable === "undefined") return;
|
if (!el || typeof Sortable === "undefined") return;
|
||||||
@@ -592,77 +607,6 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
return new bootstrap.Tooltip(tooltipTriggerEl);
|
return new bootstrap.Tooltip(tooltipTriggerEl);
|
||||||
});
|
});
|
||||||
|
|
||||||
/* ─── Playlist-Item bearbeiten (URL + Zoom) ─── */
|
|
||||||
var editState = { site: "", screen: "", oldName: "" };
|
|
||||||
|
|
||||||
/* Event-Delegation für Edit-Buttons (global, sofort aktiv) */
|
|
||||||
document.addEventListener("click", function (e) {
|
|
||||||
var btn = e.target.closest(".edit-url-btn");
|
|
||||||
if (!btn) return;
|
|
||||||
e.preventDefault();
|
|
||||||
alert("DEBUG: Edit geklickt - " + btn.dataset.site + "/" + btn.dataset.screen + " - " + btn.dataset.oldname);
|
|
||||||
editState.site = btn.dataset.site;
|
|
||||||
editState.screen = btn.dataset.screen;
|
|
||||||
editState.oldName = btn.dataset.oldname;
|
|
||||||
document.getElementById("edit-url-input").value = btn.dataset.oldname;
|
|
||||||
document.getElementById("edit-zoom-input").value = btn.dataset.zoom;
|
|
||||||
document.getElementById("edit-url-error").style.display = "none";
|
|
||||||
new bootstrap.Modal(document.getElementById("edit-url-modal")).show();
|
|
||||||
});
|
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
|
||||||
|
|
||||||
/* ─── SortableJS Drag & Drop initialisieren ─── */
|
|
||||||
function initSortable(name) {
|
|
||||||
const el = document.getElementById("playlist-" + name);
|
|
||||||
if (!el || typeof Sortable === "undefined") return;
|
|
||||||
|
|
||||||
new Sortable(el, {
|
|
||||||
animation: 150,
|
|
||||||
handle: ".drag-handle",
|
|
||||||
ghostClass: "bg-light",
|
|
||||||
chosenClass: "bg-light"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Für jeden Screen eine Sortable-Instanz
|
|
||||||
{% for screen in screens.keys() %}
|
|
||||||
initSortable("{{ screen }}");
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
/* ─── Playlist-Reihenfolge speichern ─── */
|
|
||||||
function savePlaylist(site, screen) {
|
|
||||||
const items = document.querySelectorAll(
|
|
||||||
"#playlist-" + screen + " li"
|
|
||||||
);
|
|
||||||
const playlist = [];
|
|
||||||
|
|
||||||
const enabled = {};
|
|
||||||
items.forEach((item) => {
|
|
||||||
const checkbox = item.querySelector(".playlist-enabled");
|
|
||||||
const fileName = item.dataset.file;
|
|
||||||
enabled[fileName] = !!(checkbox && checkbox.checked);
|
|
||||||
playlist.push(fileName);
|
|
||||||
});
|
|
||||||
|
|
||||||
fetch("/admin/" + site + "/playlist/" + screen, {
|
|
||||||
method: "POST",
|
|
||||||
headers: { "Content-Type": "application/json" },
|
|
||||||
body: JSON.stringify({
|
|
||||||
playlist: playlist,
|
|
||||||
enabled: enabled
|
|
||||||
})
|
|
||||||
}).then(() => location.reload());
|
|
||||||
}
|
|
||||||
|
|
||||||
window.savePlaylist = savePlaylist;
|
|
||||||
|
|
||||||
/* ─── Bootstrap Tooltips initialisieren ─── */
|
|
||||||
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
|
|
||||||
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
|
|
||||||
return new bootstrap.Tooltip(tooltipTriggerEl);
|
|
||||||
});
|
|
||||||
|
|
||||||
/* ─── Edit-URL-Modal: Speichern-Button ─── */
|
/* ─── Edit-URL-Modal: Speichern-Button ─── */
|
||||||
document.getElementById("edit-url-save").addEventListener("click", function () {
|
document.getElementById("edit-url-save").addEventListener("click", function () {
|
||||||
const newUrl = document.getElementById("edit-url-input").value.trim();
|
const newUrl = document.getElementById("edit-url-input").value.trim();
|
||||||
|
|||||||
@@ -258,7 +258,6 @@ document.addEventListener("click", function (e) {
|
|||||||
var btn = e.target.closest(".edit-url-btn");
|
var btn = e.target.closest(".edit-url-btn");
|
||||||
if (!btn) return;
|
if (!btn) return;
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
alert("DEBUG: Edit geklickt - " + btn.dataset.site + "/" + btn.dataset.screen + " - " + btn.dataset.oldname);
|
|
||||||
editState.site = btn.dataset.site;
|
editState.site = btn.dataset.site;
|
||||||
editState.screen = btn.dataset.screen;
|
editState.screen = btn.dataset.screen;
|
||||||
editState.oldName = btn.dataset.oldname;
|
editState.oldName = btn.dataset.oldname;
|
||||||
|
|||||||
Reference in New Issue
Block a user