Commit 95b064d9 authored by Jan Köster's avatar Jan Köster
Browse files

fullscreen preview

parent 657ccc8e
Loading
Loading
Loading
Loading
+2 −1
Changes for editor/html/index.html: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -90,7 +90,8 @@
                    <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">&#x1F310; Publish</button>
                <button id="btn-preview-mode" title="Switch Desktop/Mobile Preview" style="margin-left:auto;padding:0.2em 0.6em;border-radius:4px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.8rem;cursor:pointer" data-mode="desktop">&#x1F5A5; <span data-i18n="I18N_AI_DESKTOP">Desktop</span></button>
                <button id="btn-preview-newtab" title="In neuem Tab &ouml;ffnen" style="margin-left:auto;padding:0.2em 0.6em;border-radius:4px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.8rem;cursor:pointer">&#x2197; <span data-i18n="I18N_OPEN_NEW_TAB">Neuer Tab</span></button>
                <button id="btn-preview-mode" title="Switch Desktop/Mobile Preview" style="padding:0.2em 0.6em;border-radius:4px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);font-size:0.8rem;cursor:pointer" data-mode="desktop">&#x1F5A5; <span data-i18n="I18N_AI_DESKTOP">Desktop</span></button>
                <select id="theme-select" title="Theme" 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">
                    <option value="dark">&#x1F319; Dark</option>
                    <option value="light">&#x2600; Light</option>
+60 −0
Changes for editor/html/js/preview.js: 60 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -91,6 +91,62 @@ var Preview = (function() {
            });
    }

    function openInNewTab() {
        fetch('api/preview/page')
            .then(function(r) { return r.json(); })
            .then(function(data) {
                if (data.error) {
                    alert(data.error);
                    return;
                }

                var form = document.createElement('form');
                form.method = 'POST';
                form.action = data.blogUrl + '/render';
                form.target = '_blank';
                form.style.display = 'none';

                var addField = function(name, value) {
                    var input = document.createElement('input');
                    input.type = 'hidden';
                    input.name = name;
                    input.value = value;
                    form.appendChild(input);
                };
                addField('authid', data.authid);
                addField('html', data.html);
                if (_mobileMode) addField('mobile', 'true');

                var colorScheme = document.getElementById('theme-select').value || 'dark';
                addField('_color_mode', 'theme');
                addField('_color_scheme', colorScheme);

                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);
            })
            .catch(function(err) {
                alert('Preview error: ' + err);
            });
    }

    function toggleMode() {
        _mobileMode = !_mobileMode;
        var btn = document.getElementById('btn-preview-mode');
@@ -114,6 +170,9 @@ var Preview = (function() {
    function bindToggle() {
        var btn = document.getElementById('btn-preview-mode');
        if (btn) btn.addEventListener('click', toggleMode);

        var newTabBtn = document.getElementById('btn-preview-newtab');
        if (newTabBtn) newTabBtn.addEventListener('click', openInNewTab);
    }

    function clear() {
@@ -134,6 +193,7 @@ var Preview = (function() {
        refresh: refresh,
        clear: clear,
        toggleMode: toggleMode,
        openInNewTab: openInNewTab,
        bindToggle: bindToggle,
        highlight: highlight,
        isMobile: function() { return _mobileMode; }
+2 −0
Changes for src/translations.h: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -359,6 +359,7 @@ namespace blogi {
            {"I18N_AI_FAILED",           "KI-Anfrage fehlgeschlagen"},
            {"I18N_AI_DESKTOP",          "Desktop"},
            {"I18N_AI_MOBILE",           "Mobile"},
            {"I18N_OPEN_NEW_TAB",        "Neuer Tab"},
            {"I18N_AI_INCLUDE_DOC",      "Dokument anh&auml;ngen"},
            {"I18N_AI_IMPORT_HTML",      "Als HTML importieren"},
            {"I18N_AI_API_KEY",          "API Key"},
@@ -819,6 +820,7 @@ namespace blogi {
            {"I18N_AI_FAILED",           "AI request failed"},
            {"I18N_AI_DESKTOP",          "Desktop"},
            {"I18N_AI_MOBILE",           "Mobile"},
            {"I18N_OPEN_NEW_TAB",        "New Tab"},
            {"I18N_AI_INCLUDE_DOC",      "Include document"},
            {"I18N_AI_IMPORT_HTML",      "Import as HTML"},
            {"I18N_AI_API_KEY",          "API Key"},