From ba79b2429aecdb579311c1b68393c0d5da82da43 Mon Sep 17 00:00:00 2001 From: simonpipe Date: Thu, 18 Dec 2025 22:18:42 +0100 Subject: [PATCH] Add preset-ui.js --- preset-ui.js | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 preset-ui.js diff --git a/preset-ui.js b/preset-ui.js new file mode 100644 index 0000000..d49b954 --- /dev/null +++ b/preset-ui.js @@ -0,0 +1,81 @@ +// preset-ui.js +window.PresetUI = { + renderTable() { + const tableBody = document.querySelector('#sortable-tbody'); + if (!tableBody) return; + tableBody.innerHTML = ''; + + window.PresetManager.presets.forEach((preset, index) => { + const row = document.createElement('tr'); + row.setAttribute('data-index', index); + row.innerHTML = ` + ☰ + + + + `; + tableBody.appendChild(row); + }); + this.updateExportFields(); + }, + + async updateExportFields() { + const exportField = document.getElementById('export-string-field'); + if (!exportField || !window.PresetManager) return; + const dataString = await window.PresetManager.generateExportCode(false); + const baseUrl = window.location.origin + window.location.pathname; + exportField.value = baseUrl + '#' + dataString; + }, + + copyShareLink() { + const exportField = document.getElementById('export-string-field'); + if (!exportField || !exportField.value) return; + + if (navigator.clipboard && window.isSecureContext) { + navigator.clipboard.writeText(exportField.value) + .catch(() => this.fallbackCopy(exportField)); + } else { + this.fallbackCopy(exportField); + } + }, + + fallbackCopy(field) { + field.select(); + field.setSelectionRange(0, 99999); + try { + document.execCommand('copy'); + } catch (err) { + window.UI.showAlert("Fehler", "Link bitte manuell kopieren."); + } + }, + + addPreset() { + // Hier Umlaute vermeiden oder Entities nutzen beim Default-Namen + window.PresetManager.presets.push({ name: 'Neuer Sender', url: '' }); + this.renderTable(); + }, + + deletePreset(index) { + // "Löschen" -> "Löschen" zur Sicherheit + window.UI.showConfirm("Löschen", "Sender wirklich entfernen?", (conf) => { + if (conf) { + window.PresetManager.presets.splice(index, 1); + this.renderTable(); + } + }); + }, + + changeName(i, v) { + window.PresetManager.presets[i].name = v; + this.updateExportFields(); + }, + + changeURL(i, v) { + window.PresetManager.presets[i].url = v; + this.updateExportFields(); + } +}; + +window.addPreset = () => window.PresetUI.addPreset(); +window.deletePreset = (i) => window.PresetUI.deletePreset(i); +window.copyShareLink = () => window.PresetUI.copyShareLink(); \ No newline at end of file