feat: enhance tab management with fuzzy search, multi-window grouping and i18n support#20
Open
jacky-ch93 wants to merge 39 commits into
Open
feat: enhance tab management with fuzzy search, multi-window grouping and i18n support#20jacky-ch93 wants to merge 39 commits into
jacky-ch93 wants to merge 39 commits into
Conversation
Remove chrome_url_overrides so Tab Out no longer hijacks the new tab page. Add chrome.action.onClicked listener to open Tab Out when the toolbar icon is clicked; focuses existing Tab Out tab if one is already open. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Chrome extensions disallow inline event handlers by default CSP policy. Remove the onerror attribute from config.local.js script tag — a missing file fails silently and app.js already handles the absent config gracefully. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a search input below the header that filters domain cards and tab chips in real-time. Uses character-sequence fuzzy matching against tab titles and URLs. Matching the domain name shows all tabs in that group. Overflow chips are expanded during search so all tabs are searchable. Clear button (×) restores the full dashboard view. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When tabs span multiple Chrome windows, render a section header for each window. Current window is labeled "This window"; others show "Window N" with two action buttons: "Switch here" (focuses the window) and "Close window" (closes all tabs in that window with animation). Single-window users see no change. Domain groups spanning windows are split per-window with unique stableIds to keep close-domain-tabs working correctly. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use chrome.tabs lastAccessed timestamp to classify each domain group: - active (< 30 min): green top bar - cooling (30 min–4 hr): amber top bar - abandoned (> 4 hr): red top bar Also shows a colored "X ago" badge next to the tab count in each card header. Duplicate-tab groups keep amber bar as before (higher priority). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Compute a global URL count map across all real tabs before rendering, and pass it into renderDomainCard. Cards now show (Nx) badges and the close-duplicates button even when copies of the same URL live in different windows. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace openTabs.length with getRealTabs().length in all stat update calls. Previously the count included chrome://, about:blank and extension pages which are filtered out of the dashboard view. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Show the "Close window" button on all window section headers including "This window", not just other windows. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Show "Tab Out · forked from Zara's original" with links pointing to jacky-ch93's fork and the upstream zarazhangrui/tab-out repo. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds extension/i18n.js with translations for all UI strings across five locales, with automatic browser language detection and en fallback. Updates index.html to load i18n.js and adds element IDs for static text. Replaces all hardcoded strings in app.js with t() calls. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- README.md: full Chinese rewrite with new features documented (fuzzy search, multi-window, staleness indicators, i18n, personal config) - README_EN.md: new English version with same content - Updated install links to jacky-ch93 fork - Updated attribution to credit both Zara and jacky-h.c Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add docs/screenshot.svg (English mockup) and docs/screenshot_zh.svg (Chinese mockup) showing multi-window grouping, staleness indicators, and duplicate detection - Add "Why Tab Out" / "为什么需要 Tab Out" pain points section to both READMEs - Reference screenshots at top of both README files Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Store favIconUrl from chrome.tabs.query() in openTabs - Add getTabFavicon() helper: prefers Chrome's cached favicon (most accurate), falls back to Google Favicon API for uncached sites - Pass favIconUrl via data-tab-favicon attribute on save buttons - Persist favIconUrl in deferred items so saved-for-later list shows correct icons without extra network requests - renderDeferredItem uses stored favIconUrl before falling back to API Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Adapt Tab Out UI to follow browser's system color scheme using prefers-color-scheme media query. Users with auto dark/light mode schedules will now see Tab Out match their system theme. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Shows a floating card on 300ms hover with: - Favicon + domain header - Full title (no truncation) - Last accessed time (via existing timeAgo()) - Same-domain tab count across all windows Card is a fixed-position singleton; positions right of chip with left-side fallback when near viewport edge. Supports dark mode via existing CSS variable system. Also update README and README_EN with the new feature. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Dashboard now listens to chrome.tabs events (onCreated, onRemoved, onUpdated, onActivated, onMoved, onAttached, onDetached) and re-renders automatically with a 500ms debounce when tabs change elsewhere. A manual refresh button is added to the top-right of the header with a spin animation on click. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add top shortcuts bar with website icons (Google, GitHub, Hugging Face by default) - Left-click to open URL in new tab - Right-click to open edit panel for add/delete/modify shortcuts - Shortcuts stored in chrome.storage.local - Adjust layout: move "Tab Management" section above search bar - Remove header bottom border separator - Update README and README_EN with new feature Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Migrate existing shortcuts from chrome.storage.local to chrome.storage.sync on first load to ensure users don't lose their shortcuts. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When clicking a shortcut, after the page loads, automatically fetch the tab's favicon and update the shortcut for persistent display. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Long-press and drag shortcut icons to rearrange their positions. The new order is saved to chrome.storage.sync and synced across devices. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dragging a shortcut now moves other shortcuts in real-time as you drag across them, creating a smoother reordering experience. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add shortcuts features: auto-favicon, drag-to-reorder, sync - Update version for new release Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prefer focusing an existing shortcut tab before creating a new one, with prefix-aware matching that falls back to exact matches when multiple similar pages are open. Normalize trailing slashes so equivalent shortcut URLs resolve consistently. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Place the open tabs section inside the shared dashboard columns container so the saved-for-later panel renders beside it again. Update the left column flex sizing so the layout stays stable while preserving the existing narrow-screen stack behavior. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Keep the first successfully captured shortcut favicon instead of overwriting it with the remote fallback on later edits. Continue allowing future opens to refresh the stored icon when a newer favicon is available. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prevent drag reordering from stacking listeners or accidentally opening shortcuts, improve the shortcut form defaults, and reuse the favicon guard when refreshing shortcut icons. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update the English and Chinese SVG mockups so they reflect the current Tab Out UI, including shortcuts, the right-side saved-for-later panel, and the corrected section ordering around search. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the midpoint-incompatible hit-testing and HTML5 drag handler with Pointer Events + transform-based following and FLIP animation on siblings, so reordering feels responsive and lands where the cursor is. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
New in this fork: