Files
stefwill 232524ad97 feat: add tags/labels for saved items
- Add free-form tags per item: chip display with remove, inline add (comma-separated, grid view only), and a toolbar tag-filter popover listing every tag in use
- Search now also matches tags; tags sync across devices like every other item field
- Fix Firefox manifest.json compliance for AMO submission: replace the placeholder gecko id with a real UUID, add the now-required data_collection_permissions (bookmarksInfo, since synced items are personal browsing/bookmark data), and bump strict_min_version to 140.0 (142.0 for gecko_android) to match
- Add description.md (elevator pitch / short / detailed descriptions for store listings), PRIVACY.md, and .gitignore for the dist/ packaging output
- Reword all em-dash punctuation across docs and code comments per user preference
2026-07-14 12:44:17 +10:00

123 lines
4.9 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Read it later</title>
<link rel="stylesheet" href="newtab.css" />
</head>
<body>
<div class="page">
<header class="masthead">
<div class="masthead-title">
<span class="mark" aria-hidden="true">🔖</span>
<h1>Read it later</h1>
</div>
<p class="tally"><span id="unreadCount">0</span> saved for later<span id="archivedNote"></span></p>
</header>
<div class="toolbar">
<input id="search" type="text" placeholder="Search title, site, or tag…" autocomplete="off" />
<div class="control-group" role="group" aria-label="Sort by">
<label for="sortSelect" class="sr-only">Sort by</label>
<select id="sortSelect">
<option value="newest">Newest first</option>
<option value="oldest">Oldest first</option>
<option value="title">Title, AZ</option>
<option value="domain">Site, AZ</option>
</select>
</div>
<div class="control-group view-toggle" role="group" aria-label="View">
<button id="viewGridBtn" class="toggle-btn" data-view="grid" title="Grid view" aria-pressed="false"></button>
<button id="viewListBtn" class="toggle-btn" data-view="list" title="List view" aria-pressed="false"></button>
</div>
<button id="showArchivedBtn" class="ghost-btn">Show archived</button>
<div class="tags-wrap">
<button id="tagsBtn" class="toggle-btn" title="Filter by tag" aria-haspopup="true" aria-expanded="false">🏷</button>
<div id="tagsPanel" class="tags-panel" hidden>
<div id="tagsList" class="tags-list"></div>
<p class="settings-hint" id="tagsEmptyHint" hidden>No tags yet. Add one from any card in grid view.</p>
</div>
</div>
<div class="settings-wrap">
<button id="settingsBtn" class="toggle-btn" title="Settings" aria-haspopup="true" aria-expanded="false"></button>
<div id="settingsPanel" class="settings-panel" hidden>
<div class="settings-row settings-theme">
<label for="themeSelect">Theme</label>
<select id="themeSelect">
<option value="system">System</option>
<option value="light">Light</option>
<option value="dark">Dark</option>
</select>
</div>
<hr class="settings-divider" />
<label class="settings-row">
<input type="checkbox" id="reminderEnabled" />
Remind me after
</label>
<div class="settings-row settings-period">
<input type="number" id="reminderAmount" min="1" max="999" value="7" />
<select id="reminderUnit">
<option value="days">days</option>
<option value="weeks">weeks</option>
<option value="months">months</option>
</select>
</div>
<p class="settings-hint">Overdue items are pinned to the top and highlighted.</p>
<hr class="settings-divider" />
<label class="settings-row">
<input type="checkbox" id="autoDeleteEnabled" />
Delete unarchived items after
</label>
<div class="settings-row settings-period">
<input type="number" id="autoDeleteAmount" min="1" max="999" value="30" />
<select id="autoDeleteUnit">
<option value="days">days</option>
<option value="weeks">weeks</option>
<option value="months">months</option>
</select>
</div>
<p class="settings-hint">Archive anything you want to keep. This only removes items you never got back to.</p>
<p class="settings-error" id="autoDeleteError" hidden>Must be longer than the reminder period above, so you're always warned first.</p>
<hr class="settings-divider" />
<label class="settings-row">
<input type="checkbox" id="spotlightEnabled" />
Worth a second look
</label>
<p class="settings-hint">Resurfaces a few old, forgotten items each time you open a new tab. The more you pass on one, the less often it comes back.</p>
</div>
</div>
</div>
<section id="spotlight" class="spotlight" hidden aria-label="Worth a second look">
<h2 class="spotlight-heading">Worth a second look</h2>
<div id="spotlightStrip" class="spotlight-strip"></div>
</section>
<main id="shelf" class="shelf" data-view="grid">
<!-- items injected here -->
</main>
<div id="emptyState" class="empty-state" hidden>
<p class="empty-title">Your shelf is empty.</p>
<p class="empty-sub">Click the Read it later icon in your toolbar, or right-click any page or link, to save something for later.</p>
</div>
</div>
<div id="toast" class="toast" hidden></div>
<script src="sync.js"></script>
<script src="newtab.js"></script>
</body>
</html>