Compare commits

..

No commits in common. "a6cb847f2f49eca68d66b6265bdeba9a6d2931c0" and "0a6f9fe60a6c811b023b2ae8d40b9d42ca3cd8e9" have entirely different histories.

5 changed files with 49 additions and 23 deletions

View file

@ -26,6 +26,21 @@ body {
/* .hidden lives in shared/base.css; no per-tool override needed. */
/* Status bar — shows transient errors/info */
.status-bar {
padding: 0.4rem 1rem;
background: var(--bg-secondary);
border-top: 1px solid var(--border);
font-size: 0.85rem;
color: var(--text-muted);
min-height: 1.6rem;
line-height: 1.6rem;
flex-shrink: 0;
}
.status-bar--error { color: #b00020; }
.status-bar--info { color: var(--primary); }
/* Read-only banner for the YAML editor surfaced by preview-yaml.js
when the listing's `writable` bit was false. CodeMirror's readOnly
mode has no built-in visual signal beyond the disabled caret, so a

View file

@ -244,11 +244,6 @@ body {
.preview-pane__body {
flex: 1;
min-height: 0; /* critical: lets the flex child shrink to fit
the viewport instead of growing to its
content's natural size (which clips the
YAML editor's bottom when there are many
lines, even with the editor's own scroll) */
overflow: auto;
display: flex;
flex-direction: column;
@ -580,6 +575,21 @@ body {
color: var(--text-muted);
}
/* ── Status bar ──────────────────────────────────────────────────────────── */
.status-bar {
padding: 0.4rem 1rem;
background: var(--bg-secondary);
border-top: 1px solid var(--border);
font-size: 0.8rem;
color: var(--text-muted);
min-height: 1.6rem;
flex-shrink: 0;
}
.status-bar.is-error { color: var(--danger); }
.status-bar.is-info { color: var(--text); }
/* ── Markdown plugin (right-pane internals when a .md is selected) ──────── */
/* CSS-Grid shell mirroring mdedit's layout: sidebar on the LEFT
(front matter top + TOC bottom), content on the RIGHT (informational

View file

@ -10,21 +10,18 @@
// call time, not at IIFE-eval time.
function previewMod() { return window.app.modules.preview; }
// Notifications route through the shared toast helper (shared/
// toast.js) — there's no persistent footer strip in browse. Same
// signatures as before so the 70+ existing call sites work
// unchanged; statusClear is a no-op (toasts fade on their own and
// single-toast policy guarantees only the latest is visible).
function status(msg, kind) {
if (!msg) return;
if (!window.zddc || typeof window.zddc.toast !== 'function') return;
var level = kind === 'error' ? 'error' : 'info';
window.zddc.toast(msg, level);
var el = document.getElementById('statusBar');
if (!el) return;
el.textContent = msg || '';
el.classList.remove('status-bar--error', 'status-bar--info');
if (kind === 'error') el.classList.add('status-bar--error');
if (kind === 'info') el.classList.add('status-bar--info');
}
function statusError(msg) { status(msg, 'error'); }
function statusInfo(msg) { status(msg, 'info'); }
function statusClear() { /* no-op — toasts fade on their own */ }
function statusClear() { status('', null); }
async function pickLocalDir() {
if (typeof window.showDirectoryPicker !== 'function') {

View file

@ -32,17 +32,19 @@
var REVIEW_OFFSET_DAYS = 7;
var RESPONSE_OFFSET_DAYS = 14;
// Notifications go through the shared toast helper — there's no
// persistent footer strip in browse anymore.
function statusInfo(msg) {
if (msg && window.zddc && typeof window.zddc.toast === 'function') {
window.zddc.toast(msg, 'info');
}
var el = document.getElementById('statusBar');
if (!el) return;
el.textContent = msg || '';
el.classList.remove('status-bar--error');
el.classList.add('status-bar--info');
}
function statusError(msg) {
if (msg && window.zddc && typeof window.zddc.toast === 'function') {
window.zddc.toast(msg, 'error');
}
var el = document.getElementById('statusBar');
if (!el) return;
el.textContent = msg || '';
el.classList.remove('status-bar--info');
el.classList.add('status-bar--error');
}
// Compute today + N days as a YYYY-MM-DD string.

View file

@ -98,6 +98,8 @@
</div>
</main>
<div id="statusBar" class="status-bar"></div>
<!-- Help Panel -->
<aside id="help-panel" class="help-panel" hidden aria-labelledby="help-panel-title">
<div class="help-panel__header">