relay UI overhaul, favicon, settings, admin last-seen, fixes
Relay:
- Inbox/shared/sent split into own view-inbox (nav button + poll).
Compose is now single-column, centered.
- Header logo links to compose. Inbox badge stays fresh on all
views via a quiet loadInbox on every view switch.
- Mobile menu: full-height sheet below header, larger buttons
(15px font, 14px padding), full width.
- Login form wrapped in <form> with name attributes + for/id on
labels so password managers can autofill.
- Admin user list shows "last seen <relative time>" per user.
last_seen_at column on tenants, updated on every authenticated
request (session + client API).
- Cache-busting on style.css + app.js via filemtime.
- View persistence in localStorage (survives reload).
- Shared-bucket cards show title only (preview line removed).
Favicon:
- favicon.svg added to project root + copied to public/, relay/,
website/. Linked via <link rel="icon" type="image/svg+xml"> in
all three <head> sections.
Settings:
- New toggle: "Show shopping list items in task collector"
(default off). collectTasks skips #einkauf/#shopping cards when
disabled.
Fixes:
- card-spinner gets display:inline-block so it rotates outside
flex containers (shopping save spinner).
- Tim tab test opens the plugin before checking active state.
- Compose view centered with margin:auto on desktop.
Bumps to 1.9.29.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
8e738ed9d4
commit
d50f9fe789
19 files changed
+209
-101
No files matched your search
@@ -13,8 +13,13 @@ const summary = $('tasks-summary');
|
||||
const countBadge = $('tasks-open-count');
|
||||
|
||||
function collectTasks() {
|
||||
const showShopping = localStorage.getItem('hyprcrd-tasks-show-shopping') === '1';
|
||||
const all = [];
|
||||
for (const card of state.cards) {
|
||||
if (!showShopping) {
|
||||
const tags = (card.tags || '').split(',').map(s => s.trim());
|
||||
if (tags.includes('einkauf') || tags.includes('shopping')) continue;
|
||||
}
|
||||
const re = /- \[([ xX])\][ \t]*([^\n\r]*)/g;
|
||||
let m, idx = 0;
|
||||
while ((m = re.exec(card.body || '')) !== null) {
|
||||
|
||||
@@ -451,6 +451,7 @@ function initBehaviorSettings() {
|
||||
'setting-confirm-delete': { key: 'hyprcrd-confirm-delete', def: '1' },
|
||||
'setting-auto-save': { key: 'hyprcrd-auto-save', def: '0' },
|
||||
'setting-open-switches-bucket': { key: 'hyprcrd-open-switches-bucket', def: '0' },
|
||||
'setting-tasks-show-shopping': { key: 'hyprcrd-tasks-show-shopping', def: '0' },
|
||||
};
|
||||
for (const [id, cfg] of Object.entries(selects)) {
|
||||
const el = $(id);
|
||||
|
||||
Reference in new issue
Block a user