Loading editor/html/index.html +4 −2 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ <button id="btn-export-xml" data-i18n-title="I18N_TITLE_EXPORT_XML">⬆ <span data-i18n="I18N_EXPORT_XML">Export XML</span></button> <button id="btn-import-html" data-i18n-title="I18N_IMPORT_HTML">⬇ <span data-i18n="I18N_IMPORT_HTML">Import HTML</span></button> <button id="btn-export-html" data-i18n-title="I18N_EXPORT_HTML">⬆ <span data-i18n="I18N_EXPORT_HTML">Export HTML</span></button> <button id="btn-publish" data-i18n-title="I18N_PUBLISH_TITLE">🌐 <span data-i18n="I18N_PUBLISH">Veröffentlichen</span></button> <button id="btn-conn-manager" data-i18n-title="I18N_CONNECTIONS">🔗 <span data-i18n="I18N_CONNECTIONS">Verbindungen</span></button> </div> <div class="toolbar-group"> <button id="btn-ai" data-i18n-title="I18N_AI_TITLE">🤖 <span data-i18n="I18N_AI">KI</span></button> Loading Loading @@ -57,8 +57,10 @@ <main id="preview-pane"> <div id="preview-toolbar"> <button id="btn-refresh-preview" data-i18n-title="I18N_TITLE_REFRESH_TREE">🔄 <span data-i18n="I18N_VIEW">Vorschau</span></button> <select id="preview-publish-target" title="Publish Target" style="padding:0.2em 0.4em;border-radius:4px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.8rem;cursor:pointer;display:none"> <select id="preview-publish-target" title="Publish Target" style="padding:0.2em 0.4em;border-radius:4px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.8rem;cursor:pointer" disabled> <option value="">Nicht verbunden</option> </select> <button id="btn-publish-now" disabled style="padding:0.2em 0.6em;border-radius:4px;border:1px solid var(--border);background:var(--accent);color:var(--bg-primary);font-size:0.8rem;cursor:pointer;font-weight:600;opacity:0.4">🌐 Publish</button> <select id="theme-select" title="Theme" style="margin-left:auto;padding:0.2em 0.4em;border-radius:4px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.8rem;cursor:pointer"> <option value="dark">🌙 Dark</option> <option value="light">☀ Light</option> Loading editor/html/js/editor.js +57 −4 Original line number Diff line number Diff line Loading @@ -165,8 +165,12 @@ openSettings(); }); document.getElementById('btn-publish').addEventListener('click', function() { openPublishDialog(); document.getElementById('btn-conn-manager').addEventListener('click', function() { openConnectionManager(); }); document.getElementById('btn-publish-now').addEventListener('click', function() { publishFromToolbar(); }); document.getElementById('btn-ai').addEventListener('click', function() { Loading Loading @@ -756,11 +760,15 @@ currentPublishTargets = targets; var select = document.getElementById('preview-publish-target'); var fieldsDiv = document.getElementById('preview-publish-fields'); var publishBtn = document.getElementById('btn-publish-now'); select.innerHTML = ''; if (!targets || targets.length === 0) { select.style.display = 'none'; select.disabled = true; select.innerHTML = '<option value="">Nicht verbunden</option>'; fieldsDiv.style.display = 'none'; publishBtn.disabled = true; publishBtn.style.opacity = '0.4'; return; } Loading @@ -771,7 +779,9 @@ select.appendChild(opt); } select.style.display = ''; select.disabled = false; publishBtn.disabled = false; publishBtn.style.opacity = '1'; renderPreviewPublishFields(targets[0].name); // Bind change event (only once) Loading Loading @@ -832,6 +842,49 @@ } } function publishFromToolbar() { var target = document.getElementById('preview-publish-target').value; if (!target) return; // Find connected connId var connId = null; for (var cid in connectedConnections) { if (connectedConnections[cid]) { connId = cid; break; } } if (!connId) return; // Collect dynamic fields from preview toolbar var params = {}; var inputs = document.getElementById('preview-publish-fields').querySelectorAll('[data-publish-key]'); for (var i = 0; i < inputs.length; i++) { var key = inputs[i].getAttribute('data-publish-key'); if (inputs[i].type === 'checkbox') { params[key] = inputs[i].checked; } else { params[key] = inputs[i].value; } } if (!confirm(I18n.t('I18N_PUBLISH_CONFIRM', 'Dokument ver\u00f6ffentlichen?'))) return; var publishBtn = document.getElementById('btn-publish-now'); var origText = publishBtn.innerHTML; publishBtn.disabled = true; publishBtn.innerHTML = '⏳ ...'; EditorApi.publishToConnection(connId, target, params).then(function() { publishBtn.innerHTML = '✅ OK'; setTimeout(function() { publishBtn.innerHTML = origText; publishBtn.disabled = false; }, 2000); }).catch(function(err) { alert(I18n.t('I18N_PUBLISH_FAILED', 'Fehler') + ': ' + (err.error || '')); publishBtn.innerHTML = origText; publishBtn.disabled = false; }); } function loadConnectionList() { EditorApi.listConnections().then(function(resp) { renderConnectionList(resp.connections || []); Loading Loading
editor/html/index.html +4 −2 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ <button id="btn-export-xml" data-i18n-title="I18N_TITLE_EXPORT_XML">⬆ <span data-i18n="I18N_EXPORT_XML">Export XML</span></button> <button id="btn-import-html" data-i18n-title="I18N_IMPORT_HTML">⬇ <span data-i18n="I18N_IMPORT_HTML">Import HTML</span></button> <button id="btn-export-html" data-i18n-title="I18N_EXPORT_HTML">⬆ <span data-i18n="I18N_EXPORT_HTML">Export HTML</span></button> <button id="btn-publish" data-i18n-title="I18N_PUBLISH_TITLE">🌐 <span data-i18n="I18N_PUBLISH">Veröffentlichen</span></button> <button id="btn-conn-manager" data-i18n-title="I18N_CONNECTIONS">🔗 <span data-i18n="I18N_CONNECTIONS">Verbindungen</span></button> </div> <div class="toolbar-group"> <button id="btn-ai" data-i18n-title="I18N_AI_TITLE">🤖 <span data-i18n="I18N_AI">KI</span></button> Loading Loading @@ -57,8 +57,10 @@ <main id="preview-pane"> <div id="preview-toolbar"> <button id="btn-refresh-preview" data-i18n-title="I18N_TITLE_REFRESH_TREE">🔄 <span data-i18n="I18N_VIEW">Vorschau</span></button> <select id="preview-publish-target" title="Publish Target" style="padding:0.2em 0.4em;border-radius:4px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.8rem;cursor:pointer;display:none"> <select id="preview-publish-target" title="Publish Target" style="padding:0.2em 0.4em;border-radius:4px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.8rem;cursor:pointer" disabled> <option value="">Nicht verbunden</option> </select> <button id="btn-publish-now" disabled style="padding:0.2em 0.6em;border-radius:4px;border:1px solid var(--border);background:var(--accent);color:var(--bg-primary);font-size:0.8rem;cursor:pointer;font-weight:600;opacity:0.4">🌐 Publish</button> <select id="theme-select" title="Theme" style="margin-left:auto;padding:0.2em 0.4em;border-radius:4px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.8rem;cursor:pointer"> <option value="dark">🌙 Dark</option> <option value="light">☀ Light</option> Loading
editor/html/js/editor.js +57 −4 Original line number Diff line number Diff line Loading @@ -165,8 +165,12 @@ openSettings(); }); document.getElementById('btn-publish').addEventListener('click', function() { openPublishDialog(); document.getElementById('btn-conn-manager').addEventListener('click', function() { openConnectionManager(); }); document.getElementById('btn-publish-now').addEventListener('click', function() { publishFromToolbar(); }); document.getElementById('btn-ai').addEventListener('click', function() { Loading Loading @@ -756,11 +760,15 @@ currentPublishTargets = targets; var select = document.getElementById('preview-publish-target'); var fieldsDiv = document.getElementById('preview-publish-fields'); var publishBtn = document.getElementById('btn-publish-now'); select.innerHTML = ''; if (!targets || targets.length === 0) { select.style.display = 'none'; select.disabled = true; select.innerHTML = '<option value="">Nicht verbunden</option>'; fieldsDiv.style.display = 'none'; publishBtn.disabled = true; publishBtn.style.opacity = '0.4'; return; } Loading @@ -771,7 +779,9 @@ select.appendChild(opt); } select.style.display = ''; select.disabled = false; publishBtn.disabled = false; publishBtn.style.opacity = '1'; renderPreviewPublishFields(targets[0].name); // Bind change event (only once) Loading Loading @@ -832,6 +842,49 @@ } } function publishFromToolbar() { var target = document.getElementById('preview-publish-target').value; if (!target) return; // Find connected connId var connId = null; for (var cid in connectedConnections) { if (connectedConnections[cid]) { connId = cid; break; } } if (!connId) return; // Collect dynamic fields from preview toolbar var params = {}; var inputs = document.getElementById('preview-publish-fields').querySelectorAll('[data-publish-key]'); for (var i = 0; i < inputs.length; i++) { var key = inputs[i].getAttribute('data-publish-key'); if (inputs[i].type === 'checkbox') { params[key] = inputs[i].checked; } else { params[key] = inputs[i].value; } } if (!confirm(I18n.t('I18N_PUBLISH_CONFIRM', 'Dokument ver\u00f6ffentlichen?'))) return; var publishBtn = document.getElementById('btn-publish-now'); var origText = publishBtn.innerHTML; publishBtn.disabled = true; publishBtn.innerHTML = '⏳ ...'; EditorApi.publishToConnection(connId, target, params).then(function() { publishBtn.innerHTML = '✅ OK'; setTimeout(function() { publishBtn.innerHTML = origText; publishBtn.disabled = false; }, 2000); }).catch(function(err) { alert(I18n.t('I18N_PUBLISH_FAILED', 'Fehler') + ': ' + (err.error || '')); publishBtn.innerHTML = origText; publishBtn.disabled = false; }); } function loadConnectionList() { EditorApi.listConnections().then(function(resp) { renderConnectionList(resp.connections || []); Loading