fixes + theme
This commit is contained in:
1 parent
5af49655d6
commit
22f73ab3b9
25 files changed
+1004
-206
No files matched your search
+29
-12
@@ -126,10 +126,10 @@ importFile?.addEventListener('change', async e => {
|
||||
|
||||
// Check if it's a selective export (merge) or ask for full replace
|
||||
const form = new FormData(); form.append('file', file);
|
||||
const mode = await showDialog({ title: 'import_data', message: 'How do you want to import?', okLabel: 'merge (add to existing)', cancelLabel: 'replace (wipe all)' });
|
||||
const mode = await showDialog({ title: 'import_data', message: 'How do you want to import?', okLabel: 'Merge (add to existing)', cancelLabel: 'Replace (wipe all)' });
|
||||
// mode: true = merge, null = replace
|
||||
if (mode === null) {
|
||||
const sure = await showDialog({ title: 'replace_all', message: 'All existing data will be replaced!', danger: true, okLabel: 'replace' });
|
||||
const sure = await showDialog({ title: 'replace_all', message: 'All existing data will be replaced!', danger: true, okLabel: 'Replace' });
|
||||
if (!sure) { e.target.value = ''; return; }
|
||||
}
|
||||
try {
|
||||
@@ -145,7 +145,7 @@ importFile?.addEventListener('change', async e => {
|
||||
// ── Auth ──
|
||||
|
||||
document.getElementById('logout-btn')?.addEventListener('click', async () => {
|
||||
const ok = await showDialog({ title: 'logout', message: 'Log out?', okLabel: 'logout', danger: true });
|
||||
const ok = await showDialog({ title: 'logout', message: 'Log out?', okLabel: 'Logout', danger: true });
|
||||
if (!ok) return;
|
||||
await fetch('api/auth/logout', { method: 'POST' });
|
||||
location.reload();
|
||||
@@ -159,7 +159,7 @@ async function checkAuth() {
|
||||
if (data.setup) {
|
||||
let pw = null;
|
||||
while (!pw || pw.length < 4) {
|
||||
pw = await showDialog({ title: 'setup', message: 'Welcome to hyprcrd. Set a password:', input: 'password', placeholder: '> password (min. 4 chars)...', okLabel: 'set', cancelLabel: '' });
|
||||
pw = await showDialog({ title: 'setup', message: 'Welcome to hyprcrd. Set a password:', input: 'password', placeholder: '> password (min. 4 chars)...', okLabel: 'Set', cancelLabel: '' });
|
||||
if (pw && pw.length < 4) pw = null;
|
||||
}
|
||||
const r = await fetch('api/auth/setup', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ password: pw }) });
|
||||
@@ -169,7 +169,7 @@ async function checkAuth() {
|
||||
} else if (!data.logged_in) {
|
||||
let ok = false;
|
||||
while (!ok) {
|
||||
const pw = await showDialog({ title: 'login', message: '', input: 'password', placeholder: '> password...', okLabel: 'login', cancelLabel: '' });
|
||||
const pw = await showDialog({ title: 'login', message: '', input: 'password', placeholder: '> password...', okLabel: 'Login', cancelLabel: '' });
|
||||
if (!pw) continue;
|
||||
const r = await fetch('api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ password: pw }) });
|
||||
const d = await r.json();
|
||||
@@ -204,7 +204,15 @@ document.addEventListener('keydown', e => {
|
||||
if (e.key === 'Escape') {
|
||||
const qc = document.getElementById('quick-capture');
|
||||
if (!qc.classList.contains('hidden')) { qc.classList.add('hidden'); document.getElementById('quick-capture-input').value = ''; return; }
|
||||
if (detail.classList.contains('open')) closeDetail();
|
||||
if (detail.classList.contains('open')) {
|
||||
// If the user chose "exit zen first", ESC leaves zen mode before closing the card.
|
||||
const escAction = localStorage.getItem('hyprcrd-esc-action') || 'close';
|
||||
if (escAction === 'exitZen' && detail.classList.contains('zen')) {
|
||||
document.getElementById('detail-zen')?.click();
|
||||
return;
|
||||
}
|
||||
closeDetail();
|
||||
}
|
||||
else if (modal.classList.contains('open')) closeModal();
|
||||
else if (search.classList.contains('open')) closeSearch();
|
||||
else if (tasks?.classList.contains('open')) closeTasks();
|
||||
@@ -236,14 +244,23 @@ document.getElementById('quick-capture-input')?.addEventListener('keydown', asyn
|
||||
return;
|
||||
}
|
||||
if (e.key !== 'Enter') return;
|
||||
const title = e.target.value.trim();
|
||||
if (!title) return;
|
||||
const raw = e.target.value.trim();
|
||||
if (!raw) return;
|
||||
e.preventDefault();
|
||||
|
||||
// Split: first line = title, rest = body
|
||||
const lines = title.split(/\n/);
|
||||
const cardTitle = lines[0];
|
||||
let body = lines.slice(1).join('\n').trim();
|
||||
// Split on first "|" — title before, body after.
|
||||
// Also accept newlines as a fallback (first line = title, rest = body).
|
||||
let cardTitle, body;
|
||||
const pipeIdx = raw.indexOf('|');
|
||||
if (pipeIdx >= 0) {
|
||||
cardTitle = raw.slice(0, pipeIdx).trim();
|
||||
body = raw.slice(pipeIdx + 1).trim();
|
||||
} else {
|
||||
const lines = raw.split(/\n/);
|
||||
cardTitle = lines[0].trim();
|
||||
body = lines.slice(1).join('\n').trim();
|
||||
}
|
||||
if (!cardTitle) return;
|
||||
if (!body.includes('#inbox')) body = (body ? body + '\n\n' : '') + '#inbox';
|
||||
|
||||
await api('api/cards', { method: 'POST', body: { title: cardTitle, body, color: '#38bdf8', position: -1 } });
|
||||
|
||||
Reference in new issue
Block a user