Commit 58732657 authored by jan.koester's avatar jan.koester
Browse files

test

parent 52751d4f
Loading
Loading
Loading
Loading
+4 −13
Original line number Diff line number Diff line
@@ -57,11 +57,14 @@
        <main id="preview-pane">
            <div id="preview-toolbar">
                <button id="btn-refresh-preview" data-i18n-title="I18N_TITLE_REFRESH_TREE">&#x1F504; <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>
                <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">&#x1F319; Dark</option>
                    <option value="light">&#x2600; Light</option>
                </select>
            </div>
            <div id="preview-publish-fields" style="display:none;padding:0 0.5em 0.4em;background:var(--bg-secondary);border-bottom:1px solid var(--border);font-size:0.8rem;"></div>
            <div id="preview-frame"></div>
        </main>

@@ -179,19 +182,7 @@
                        <button id="btn-conn-connect" class="set-save-btn" data-i18n="I18N_CONNECT">Verbinden</button>
                    </div>

                    <!-- Publish section (shown after connect) -->
                    <div id="conn-publish-section" style="display:none">
                        <hr style="border-color:var(--border);margin:1em 0">
                        <h4 data-i18n="I18N_PUBLISH">Ver&ouml;ffentlichen</h4>
                        <div class="set-field">
                            <label data-i18n="I18N_PUBLISH_TARGET">Ziel</label>
                            <select id="conn-publish-target"></select>
                        </div>
                        <div id="conn-publish-fields"></div>
                        <div class="set-field">
                            <button id="btn-conn-publish" class="set-save-btn" data-i18n="I18N_PUBLISH">Ver&ouml;ffentlichen</button>
                        </div>
                    </div>


                    <span id="conn-status" class="set-status"></span>
                </div>
+37 −63
Original line number Diff line number Diff line
@@ -732,75 +732,32 @@
                status.textContent = I18n.t('I18N_CONNECTION_OK', 'Verbunden');
                status.className = 'set-status success';

                // Show publish section with targets
                // Populate preview toolbar publish targets
                var targets = resp.targets || [];
                showPublishTargets(targets);
                showPreviewPublishTargets(targets);
                // Update list to show connected state
                loadConnectionList();
            }).catch(function(err) {
                status.textContent = I18n.t('I18N_CONNECTION_FAILED', 'Verbindung fehlgeschlagen') + ': ' + (err.error || '');
                status.className = 'set-status error';
                document.getElementById('conn-publish-section').style.display = 'none';
            });
        });

        // Publish button
        document.getElementById('btn-conn-publish').addEventListener('click', function() {
            var id = document.getElementById('conn-edit-id').value;
            if (!id) return;
            var targetSelect = document.getElementById('conn-publish-target');
            var target = targetSelect.value;
            if (!target) return;

            // Collect dynamic fields
            var params = {};
            var fieldsContainer = document.getElementById('conn-publish-fields');
            var inputs = fieldsContainer.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 status = document.getElementById('conn-status');
            status.textContent = I18n.t('I18N_PUBLISHING', 'Ver\u00f6ffentliche...');
            status.className = 'set-status';

            EditorApi.publishToConnection(id, target, params).then(function() {
                status.textContent = I18n.t('I18N_PUBLISH_SUCCESS', 'Erfolgreich ver\u00f6ffentlicht');
                status.className = 'set-status success';
            }).catch(function(err) {
                status.textContent = I18n.t('I18N_PUBLISH_FAILED', 'Ver\u00f6ffentlichung fehlgeschlagen') + ': ' + (err.error || '');
                status.className = 'set-status error';
                if (err.error && err.error.indexOf('Not connected') !== -1) {
                    delete connectedConnections[id];
                    document.getElementById('conn-publish-section').style.display = 'none';
                }
            });
        });

        // Target select change: render dynamic fields
        document.getElementById('conn-publish-target').addEventListener('change', function() {
            renderPublishFields(this.value);
        });
        // Publish button removed from connection manager
    }

    // Current targets cache for dynamic field rendering
    var currentPublishTargets = [];

    function showPublishTargets(targets) {
    function showPreviewPublishTargets(targets) {
        currentPublishTargets = targets;
        var section = document.getElementById('conn-publish-section');
        var select = document.getElementById('conn-publish-target');
        var select = document.getElementById('preview-publish-target');
        var fieldsDiv = document.getElementById('preview-publish-fields');
        select.innerHTML = '';

        if (!targets || targets.length === 0) {
            section.style.display = 'none';
            select.style.display = 'none';
            fieldsDiv.style.display = 'none';
            return;
        }

@@ -811,12 +768,20 @@
            select.appendChild(opt);
        }

        section.style.display = 'block';
        renderPublishFields(targets[0].name);
        select.style.display = '';
        renderPreviewPublishFields(targets[0].name);

        // Bind change event (only once)
        if (!select._bound) {
            select._bound = true;
            select.addEventListener('change', function() {
                renderPreviewPublishFields(this.value);
            });
        }
    }

    function renderPublishFields(targetName) {
        var container = document.getElementById('conn-publish-fields');
    function renderPreviewPublishFields(targetName) {
        var container = document.getElementById('preview-publish-fields');
        container.innerHTML = '';
        var target = null;
        for (var i = 0; i < currentPublishTargets.length; i++) {
@@ -825,35 +790,42 @@
                break;
            }
        }
        if (!target || !target.fields) return;
        if (!target || !target.fields || target.fields.length === 0) {
            container.style.display = 'none';
            return;
        }
        container.style.display = 'flex';
        container.style.flexWrap = 'wrap';
        container.style.gap = '0.4em';
        container.style.alignItems = 'center';
        var fields = target.fields;
        for (var f = 0; f < fields.length; f++) {
            var field = fields[f];
            var div = document.createElement('div');
            div.className = 'set-field';
            var label = document.createElement('label');
            label.textContent = field.label || field.key;
            div.appendChild(label);
            label.style.fontSize = '0.75rem';
            label.style.color = 'var(--text-secondary)';
            container.appendChild(label);

            if (field.type === 'select' && field.options) {
                var sel = document.createElement('select');
                sel.setAttribute('data-publish-key', field.key);
                sel.style.cssText = 'padding:0.15em 0.3em;border-radius:3px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.75rem;';
                for (var o = 0; o < field.options.length; o++) {
                    var optEl = document.createElement('option');
                    optEl.value = field.options[o].value;
                    optEl.textContent = field.options[o].label;
                    sel.appendChild(optEl);
                }
                div.appendChild(sel);
                container.appendChild(sel);
            } else {
                var inp = document.createElement('input');
                inp.type = field.type || 'text';
                inp.setAttribute('data-publish-key', field.key);
                inp.style.cssText = 'padding:0.15em 0.3em;border-radius:3px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.75rem;width:8em;';
                if (field.placeholder) inp.placeholder = field.placeholder;
                if (field.required) inp.required = true;
                div.appendChild(inp);
                container.appendChild(inp);
            }
            container.appendChild(div);
        }
    }

@@ -993,6 +965,8 @@
            publishTargetsCache[connId] = targets;
            statusDiv.style.display = 'none';
            showPublishDialogTargets(targets);
            // Also update preview toolbar
            showPreviewPublishTargets(targets);
        }).catch(function(err) {
            statusEl.textContent = I18n.t('I18N_PUBLISH_FAILED', 'Verbindung fehlgeschlagen') + ': ' + (err.error || '');
            statusEl.className = 'set-status error';
+18 −0
Original line number Diff line number Diff line
@@ -55,6 +55,24 @@ var Preview = (function() {
                addField('_color_mode', 'theme');
                addField('_color_scheme', colorScheme);

                // Send publish target + params for themed preview
                var targetSelect = document.getElementById('preview-publish-target');
                if (targetSelect && targetSelect.value) {
                    addField('target', targetSelect.value);
                    var pfields = document.getElementById('preview-publish-fields');
                    if (pfields) {
                        var inputs = pfields.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') {
                                if (inputs[i].checked) addField(key, 'true');
                            } else if (inputs[i].value) {
                                addField(key, inputs[i].value);
                            }
                        }
                    }
                }

                document.body.appendChild(form);
                form.submit();
                document.body.removeChild(form);