(function () { 'use strict'; function ready(callback) { if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', callback); else callback(); } ready(function () { var section = document.getElementById('nc-connector'); if (!section) return; var tokenInput = section.querySelector('input[name="pwg_token"]'); var pwgToken = tokenInput ? tokenInput.value : ''; function escapeHtml(value) { return String(value == null ? '' : value).replace(/[&<>"']/g, function (c) { return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]; }); } function loadConnection(id) { return fetch('plugins/bratonien_tools/nc-connector-edit-data.php?connection_id='+encodeURIComponent(id)+'&_='+Date.now(), { credentials:'same-origin', cache:'no-store', headers:{'Accept':'application/json'} }).then(function (response) { return response.json().then(function (data) { if (!response.ok) throw new Error(data.error || ('HTTP '+response.status)); return data; }); }); } function createPostForm(label, tool, id) { var form = document.createElement('form'); form.method = 'post'; form.style.display = 'inline'; form.innerHTML = '' + '' + ''; return form; } function dialog() { var node = document.getElementById('bratonien-nc-connection-edit-v2'); if (node) return node; node = document.createElement('dialog'); node.id = 'bratonien-nc-connection-edit-v2'; node.className = 'bratonien-edit-dialog'; node.innerHTML = '
' + '
' + '

Verbindung bearbeiten

Die Einstellungen gelten nur für diese Verbindung.

' + '
' + '
'; document.body.appendChild(node); node.querySelector('[data-edit-close]').addEventListener('click', function () { node.close(); }); node.addEventListener('click', function (event) { if (event.target === node) node.close(); }); return node; } function storageRow(storage) { storage = storage || {}; return '
' + '' + '' + '' + '
'; } function showError(form, data) { var old = form.querySelector('[data-edit-error]'); if (old) old.remove(); var box = document.createElement('div'); box.dataset.editError = '1'; box.className = 'bratonien-main-cache__warning'; box.style.margin = '0 0 1rem'; box.textContent = (data && data.message) ? data.message : 'Die Verbindung konnte nicht gespeichert werden.'; form.insertBefore(box, form.firstChild); } function submitLocal(form, editDialog) { if (!form.reportValidity()) return; var button = form.querySelector('button[type="submit"]'); if (button) button.disabled = true; fetch('plugins/bratonien_tools/nc-connector-edit-save.php', { method:'POST', credentials:'same-origin', cache:'no-store', headers:{'Accept':'application/json'}, body:new FormData(form) }).then(function (response) { return response.json().then(function (data) { if (!response.ok || !data.ok) { showError(form, data); return; } editDialog.close(); window.location.reload(); }); }).catch(function (error) { showError(form, {message:error.message || String(error)}); }).finally(function () { if (button) button.disabled = false; }); } function openLocalEditor(id) { var editDialog = dialog(); var content = editDialog.querySelector('[data-edit-content]'); content.innerHTML = '

Verbindung wird geladen …

'; if (typeof editDialog.showModal === 'function') editDialog.showModal(); else editDialog.setAttribute('open', 'open'); loadConnection(id).then(function (data) { if (data.adapter !== 'local') throw new Error('Diese Verbindung wird über den WebDAV-Assistenten bearbeitet.'); var legacy = data.legacy || {}; var webdav = data.webdav || {}; var storages = Array.isArray(legacy.storages) ? legacy.storages : []; var rows = storages.map(storageRow).join('') || storageRow({}); content.innerHTML = '
' + '' + '' + '
Verbindung
' + '' + '
' + '
Nextcloud
' + '' + '' + '' + '
' + '
Piwigo-Zugang
' + '' + '' + '' + '' + '
' + '
Lokaler Connector
' + '' + '' + '' + '' + '' + '
' + '
Speicherorte
'+rows+'
' + '' + '
Erweiterte Einstellungen
' + '' + '' + '' + '' + '' + '' + '
' + '
' + '
'; var form = content.querySelector('[data-edit-form]'); form.querySelector('[data-cancel]').addEventListener('click', function () { editDialog.close(); }); form.querySelector('[data-add-storage]').addEventListener('click', function () { form.querySelector('[data-storage-list]').insertAdjacentHTML('beforeend', storageRow({})); }); form.addEventListener('click', function (event) { var remove = event.target.closest('[data-remove-storage]'); if (remove) { var row = remove.closest('[data-storage-row]'); if (row) row.remove(); } }); form.addEventListener('submit', function (event) { event.preventDefault(); submitLocal(form, editDialog); }); }).catch(function (error) { content.innerHTML = '

Bearbeiten nicht möglich: '+escapeHtml(error.message || String(error))+'

'; }); } [].slice.call(section.querySelectorAll('button[value="nc_connector_edit_start"]')).forEach(function (button) { var form = button.closest('form'); if (form) form.remove(); }); [].slice.call(section.querySelectorAll('button[value="nc_connector_migrate_start"]')).forEach(function (button) { var form = button.closest('form'); if (form) form.remove(); }); [].slice.call(section.querySelectorAll('button[value="nc_connector_delete"]')).forEach(function (deleteButton) { var deleteForm = deleteButton.closest('form'); if (!deleteForm || !deleteForm.parentElement) return; var idInput = deleteForm.querySelector('input[name="connection_id"]'); if (!idInput) return; var id = idInput.value; var actions = deleteForm.parentElement; loadConnection(id).then(function (data) { var edit; if (data.adapter === 'local') { edit = document.createElement('button'); edit.type = 'button'; edit.className = 'buttonLike'; edit.textContent = 'Bearbeiten'; edit.addEventListener('click', function () { openLocalEditor(id); }); } else { edit = createPostForm('Bearbeiten', 'nc_connector_edit_start', id); } actions.insertBefore(edit, deleteForm); }).catch(function (error) { var info = document.createElement('span'); info.className = 'bratonien-main-cache__warning'; info.textContent = 'Verbindung konnte nicht geladen werden: '+(error.message || String(error)); actions.insertBefore(info, deleteForm); }); }); }); })();