Commit 5e4b1267 authored by jan.koester's avatar jan.koester
Browse files

test

parent f9c4b193
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@
    box-sizing: border-box;
}

:root {
:root, [data-theme="dark"] {
    --bg-primary: #1e1e2e;
    --bg-secondary: #2a2a3e;
    --bg-tertiary: #35354a;
@@ -23,6 +23,23 @@
    --shadow: rgba(0, 0, 0, 0.3);
}

[data-theme="light"] {
    --bg-primary: #eff1f5;
    --bg-secondary: #e6e9ef;
    --bg-tertiary: #dce0e8;
    --bg-hover: #ccd0da;
    --text-primary: #4c4f69;
    --text-secondary: #5c5f77;
    --text-muted: #8c8fa1;
    --accent: #1e66f5;
    --accent-hover: #2a6ef7;
    --border: #bcc0cc;
    --danger: #d20f39;
    --success: #40a02b;
    --warning: #df8e1d;
    --shadow: rgba(0, 0, 0, 0.1);
}

body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    background: var(--bg-primary);
+7 −16
Original line number Diff line number Diff line
@@ -57,6 +57,10 @@
        <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="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>
            <iframe id="preview-frame" sandbox="allow-same-origin"></iframe>
        </main>
@@ -271,23 +275,10 @@

                <!-- Connection section -->
                <div id="settings-connection" class="set-section" style="display:none">
                    <h4 data-i18n="I18N_CONNECTION">Verbindung</h4>
                    <div class="set-field">
                        <label data-i18n="I18N_BLOG_NAME">Blog Name</label>
                        <input type="text" id="settings-blog-name" placeholder="Mein Blog">
                    </div>
                    <div class="set-field">
                        <label data-i18n="I18N_BLOG_URL">Blog URL</label>
                        <input type="text" id="settings-blog-url" placeholder="https://mein-blog.de">
                    </div>
                    <div class="set-field">
                        <label data-i18n="I18N_BLOG_API_KEY">API Key</label>
                        <input type="password" id="settings-blog-apikey" placeholder="">
                    </div>
                    <h4 data-i18n="I18N_CONNECTIONS">Verbindungen</h4>
                    <p class="hint" data-i18n="I18N_CONN_MANAGER_HINT">Verbindungen werden im Verbindungsmanager verwaltet.</p>
                    <div class="set-field">
                        <button id="btn-settings-conn-save" class="set-save-btn" data-i18n="save">Speichern</button>
                        <button id="btn-settings-conn-test" class="set-save-btn" data-i18n="I18N_TEST_CONNECTION">Verbindung testen</button>
                        <span id="settings-conn-status" class="set-status"></span>
                        <button id="btn-settings-open-connmgr" class="set-save-btn" data-i18n="I18N_OPEN_CONN_MANAGER">Verbindungsmanager &ouml;ffnen</button>
                    </div>
                </div>
            </div>
+19 −35
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
    // --- Initialize ---

    function init() {
        initTheme();
        I18n.load(function() {
            I18n.translatePage();
            loadPlugins();
@@ -28,6 +29,20 @@
        });
    }

    // --- Theme ---

    function initTheme() {
        var saved = localStorage.getItem('blogi-theme') || 'dark';
        document.documentElement.setAttribute('data-theme', saved);
        var sel = document.getElementById('theme-select');
        sel.value = saved;
        sel.addEventListener('change', function() {
            var theme = this.value;
            document.documentElement.setAttribute('data-theme', theme);
            localStorage.setItem('blogi-theme', theme);
        });
    }

    // --- Load widget plugins ---

    function loadPlugins() {
@@ -473,12 +488,6 @@
            document.getElementById('settings-ai-apikey').value = resp.api_key || '';
            document.getElementById('settings-ai-status').textContent = '';
        });
        EditorApi.getConnectionSettings().then(function(resp) {
            document.getElementById('settings-blog-name').value = resp.name || '';
            document.getElementById('settings-blog-url').value = resp.url || '';
            document.getElementById('settings-blog-apikey').value = resp.api_key || '';
            document.getElementById('settings-conn-status').textContent = '';
        });
        document.getElementById('settings-dialog').showModal();
    }

@@ -545,35 +554,10 @@
            });
        });

        // Connection settings save
        document.getElementById('btn-settings-conn-save').addEventListener('click', function() {
            var status = document.getElementById('settings-conn-status');
            status.textContent = I18n.t('I18N_SAVING', 'Saving...');
            var name = document.getElementById('settings-blog-name').value;
            var url = document.getElementById('settings-blog-url').value;
            var apiKey = document.getElementById('settings-blog-apikey').value;
            EditorApi.setConnectionSettings(name, url, apiKey).then(function() {
                status.textContent = I18n.t('I18N_SAVED', 'Saved');
                status.className = 'set-status success';
                setTimeout(function() { status.textContent = ''; status.className = 'set-status'; }, 2000);
            }).catch(function() {
                status.textContent = I18n.t('I18N_SAVE_FAILED', 'Save failed');
                status.className = 'set-status error';
            });
        });

        // Connection test
        document.getElementById('btn-settings-conn-test').addEventListener('click', function() {
            var status = document.getElementById('settings-conn-status');
            status.textContent = I18n.t('I18N_TESTING', 'Teste...');
            status.className = 'set-status';
            EditorApi.testConnection().then(function() {
                status.textContent = I18n.t('I18N_CONNECTION_OK', 'Verbindung erfolgreich');
                status.className = 'set-status success';
            }).catch(function(err) {
                status.textContent = I18n.t('I18N_CONNECTION_FAILED', 'Verbindung fehlgeschlagen') + ': ' + (err.error || '');
                status.className = 'set-status error';
            });
        // Connection manager link from settings
        document.getElementById('btn-settings-open-connmgr').addEventListener('click', function() {
            document.getElementById('settings-dialog').close();
            openConnectionManager();
        });
    }

+4 −0
Original line number Diff line number Diff line
@@ -368,6 +368,8 @@ namespace blogi {
            {"I18N_IGNORE_SSL",          "SSL ignorieren"},
            {"I18N_SELECT_CONNECTION",   "Verbindung ausw&auml;hlen oder neue hinzuf&uuml;gen."},
            {"I18N_NO_CONNECTIONS",      "Keine Verbindungen"},
            {"I18N_CONN_MANAGER_HINT",   "Verbindungen werden im Verbindungsmanager verwaltet."},
            {"I18N_OPEN_CONN_MANAGER",   "Verbindungsmanager &ouml;ffnen"},
            {"I18N_ADD",                 "Hinzuf&uuml;gen"},
            {"I18N_DELETE",              "L&ouml;schen"},
            {"I18N_FIELDS_REQUIRED",     "Name und URL sind erforderlich"},
@@ -805,6 +807,8 @@ namespace blogi {
            {"I18N_IGNORE_SSL",          "Ignore SSL"},
            {"I18N_SELECT_CONNECTION",   "Select a connection or add a new one."},
            {"I18N_NO_CONNECTIONS",      "No connections"},
            {"I18N_CONN_MANAGER_HINT",   "Connections are managed in the Connection Manager."},
            {"I18N_OPEN_CONN_MANAGER",   "Open Connection Manager"},
            {"I18N_ADD",                 "Add"},
            {"I18N_DELETE",              "Delete"},
            {"I18N_FIELDS_REQUIRED",     "Name and URL are required"},