diff --git a/web/app.js b/web/app.js index a20149c..f2119f0 100644 --- a/web/app.js +++ b/web/app.js @@ -33,6 +33,7 @@ fillValues: {}, fillActive: 0, searchQuery: '', + cardsSort: 'newest', }; const $ = (sel) => document.querySelector(sel); @@ -611,11 +612,17 @@ panel.insertBefore(hdr, list); } const scope = state.activeTag ? `${state.intent} · #${state.activeTag}` : state.intent; + const sorts = ['newest', 'oldest', 'most used']; + const options = sorts.map(s => ``).join(''); hdr.innerHTML = ` ${scope} ${state.entities.length} cards - + `; + hdr.querySelector('.cards-sort').addEventListener('change', (ev) => { + state.cardsSort = ev.target.value; + loadEntities(); + }); } function renderCardRow(e, idx) { @@ -1103,8 +1110,16 @@ if (state.activeTag) params.tag = state.activeTag; if (state.view === 'cards') { params.cards_only = true; - params.sort = 'use_count'; - params.order = 'desc'; + if (state.cardsSort === 'oldest') { + params.sort = 'created'; + params.order = 'asc'; + } else if (state.cardsSort === 'most used') { + params.sort = 'use_count'; + params.order = 'desc'; + } else { + params.sort = 'created'; + params.order = 'desc'; + } } else { params.sort = 'created'; params.order = 'desc'; @@ -1590,16 +1605,20 @@ // ========== Theme ========== + const THEMES = ['dark', 'paper', 'tinycard']; + const THEME_ICONS = { dark: '◑', paper: '◐', tinycard: '◈' }; + const themeToggle = $('#theme-toggle'); let nibTheme = localStorage.getItem('nib:theme') || 'dark'; + if (!THEMES.includes(nibTheme)) nibTheme = 'dark'; document.documentElement.setAttribute('data-theme', nibTheme); - themeToggle.textContent = nibTheme === 'paper' ? '◐' : '◑'; + themeToggle.textContent = THEME_ICONS[nibTheme]; themeToggle.addEventListener('click', () => { - nibTheme = nibTheme === 'dark' ? 'paper' : 'dark'; + nibTheme = THEMES[(THEMES.indexOf(nibTheme) + 1) % THEMES.length]; document.documentElement.setAttribute('data-theme', nibTheme); localStorage.setItem('nib:theme', nibTheme); - themeToggle.textContent = nibTheme === 'paper' ? '◐' : '◑'; + themeToggle.textContent = THEME_ICONS[nibTheme]; }); // ========== Init ========== diff --git a/web/index.html b/web/index.html index 42aed17..2c29c7b 100644 --- a/web/index.html +++ b/web/index.html @@ -6,7 +6,7 @@