Skip to content

Commit

Permalink
Release v1.6.0
Browse files Browse the repository at this point in the history
Squashed commit of the following:

commit 41e18c6
Author: John Dunning <[email protected]>
Date:   Thu Mar 4 17:34:56 2021 -0800

    Update version to 1.6.0

    Update releases/index.md for 1.6.0.
    Change the minimum version of Chrome to 60 in manifest.json.
    Fix image URLs and sizes in README.md.
    Remove install button from docs/index.md.
    Fix #39.
    Fix #46.
    Fix #51.
    Fix #52.

commit a721754
Author: John Dunning <[email protected]>
Date:   Thu Mar 4 14:52:30 2021 -0800

    Clean up layout for RadioGroups wrapped in a NewSetting

    Support an optional lastSeenOptionsVersion param to the options page, for testing.
    Wrap the home/end option in a <NewSetting>.
    Refactor showing the pinyin update message into a prop passed into <Options>.
    Add info about the new features in 1.6.0 to the store description.

commit c5be709
Merge: 24e2dac 1f35815
Author: John Dunning <[email protected]>
Date:   Wed Mar 3 18:58:49 2021 -0800

    Merge branch 'feature/restore-last-search' into dev

commit 1f35815
Author: John Dunning <[email protected]>
Date:   Wed Mar 3 18:52:28 2021 -0800

    Update README.md with the latest Chrome store description text

    Make the privacy policy page consistent with the Chrome description.
    Remove TGS references.

commit 8608712
Merge: df7355d 2327bf6
Author: John Dunning <[email protected]>
Date:   Wed Mar 3 18:01:58 2021 -0800

    Merge branch 'feature/home-end-option' into feature/restore-last-search

commit 2327bf6
Author: John Dunning <[email protected]>
Date:   Wed Mar 3 14:16:45 2021 -0800

    Add setting for home/end key behavior to the options page

    Rearrange options page into "Search results", "Toolbar icon", and "Search box keyboard shortcuts" sections.
    Add support for the home/end setting to popup-shortcuts.js.
    Change addDefaultSetting() to take the constant object, not just the .Key value, so we don't have to repeat that on every one.
    Add better error handling to addDefaultSetting() in case it can't find a default value.
    Update error-handler.js to better handle rejected promises from Bluebird with a `detail` key and to show a stack.

commit df7355d
Merge: 5e85156 5b7a892
Author: John Dunning <[email protected]>
Date:   Tue Mar 2 12:34:55 2021 -0800

    Merge branch 'feature/show-bookmark-path' into feature/restore-last-search

commit 5b7a892
Author: John Dunning <[email protected]>
Date:   Tue Mar 2 12:32:29 2021 -0800

    Update the docs for the bookmark path option

    Default the showBookmarkPaths param to false in getBookmarks().

commit 50fa5f8
Author: John Dunning <[email protected]>
Date:   Sat Feb 27 18:38:11 2021 -0800

    Add option to show folder paths in each bookmark item

commit 36201ee
Author: John Dunning <[email protected]>
Date:   Sat Feb 27 17:58:31 2021 -0800

    Show bookmark folder path in bookmark titles

commit 5e85156
Author: John Dunning <[email protected]>
Date:   Fri Feb 26 19:34:12 2021 -0800

    Add restore last query option to Options page

    Only use and store the last query if the option is set.
    Fix storage validation for new lastQuery key.
    Pass true to setSelectedIndex() when selecting items via the mouse so the user can then release alt to switch to the item.

commit 614e121
Author: John Dunning <[email protected]>
Date:   Thu Feb 25 18:39:12 2021 -0800

    Add setting to restore last query

    Select all restored search box text.
    Change getMRUKey to default to false.  Not clear why it was ever defaulted to true.
    Add setSearchBoxText() method so we don't have to call onQueryChange().
    Store current search box text when popup unloads.
    Add selectAll prop to SearchBox and Input to force the input to select all the text.

commit 24e2dac
Author: John Dunning <[email protected]>
Date:   Tue Feb 23 18:27:22 2021 -0800

    Immediately store the tab navigated to by toggleRecentTabs() as the current tab

    Fix #51.
  • Loading branch information
fwextensions committed Mar 5, 2021
1 parent b7ee9bc commit c8efb50
Show file tree
Hide file tree
Showing 22 changed files with 454 additions and 218 deletions.
149 changes: 97 additions & 52 deletions README.md

Large diffs are not rendered by default.

21 changes: 8 additions & 13 deletions docs/chrome-store-description.txt
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,11 @@ No mouse needed!
• Press ENTER to switch to the selected tab


Now with support for pinyin!
New options in v1.6.0

You can use pinyin to more easily search for Chinese characters in web page titles and URLs.
• Restore the last search query when the menu reopens
• Search for bookmarks by their folder names
• Control how the HOME and END keys behave


★ Use CTRL-TAB as the keyboard shortcut
Expand Down Expand Up @@ -214,7 +216,7 @@ You can move tabs to the left or right of the current tab, making it easy to pul
• Press CTRL-[ to move the selected tab to the left of the current one.
• Press CTRL-] to move it to the right.

Include SHIFT in the shortcut to also unsuspend the tab while moving it. The CTRL key should be used on both Windows and macOS. Note that you cannot move tabs between normal and incognito windows.
The CTRL key should be used on both Windows and macOS. Note that you cannot move tabs between normal and incognito windows.


★ Distinguish tabs with identical titles
Expand All @@ -231,7 +233,7 @@ To find a bookmark, type "/b" and a space in the search box, then part of the bo
the current window.
• Press SHIFT-ENTER to open it in a new window.

As soon as you type "/b ", your bookmarks will be listed in alphabetical order, in case you want to browse through them.
As soon as you type "/b ", your bookmarks will be listed in alphabetical order, in case you want to browse through them. Since bookmarks can be organized into folders, the folder path is shown before each bookmark's title. The folder path can be hidden by unchecking "Show the folder path to each bookmark in its title" on the Options page.


★ Search the browser history
Expand All @@ -248,13 +250,6 @@ As soon as you type "/h ", the pages from your history will be listed in order o
To delete the selected bookmark or history item, press CTRL-W (CMD-CTRL-W on macOS). Or hover over an item and click the X button on the right side of the menu. You'll be asked to confirm the deletion of bookmarks.


★ The Great Suspender integration

If you use the handy extension "The Great Suspender", then suspended tabs will look faded in the list, and the original URL is shown (not that long chrome-extension:// one you see in the location bar). That means if you search for "chrome" or "extension", you won't simply match all the suspended tabs, which is what happens in other tab search extensions.

Press SHIFT-ENTER to switch to a tab and unsuspend it in one go. Or shift-click it with the mouse.


★ Incognito mode

To switch to incognito tabs as well as normal ones, right-click the QuicKey icon and select Options from the menu. Scroll to the very bottom of the QuicKey options page and then click the "Change incognito settings" button. On the extensions page that opens, scroll down to the "Allow in incognito" option and click the toggle button next to it.
Expand All @@ -275,10 +270,10 @@ You can also copy the URL and title of the selected tab, bookmark or history ite

When first installed, QuicKey asks for these permissions:

➤ "Read and change your browsing history on all signed-in devices"
➤ "Read and change your browsing history on all your signed-in devices"

QuicKey uses this permission to let you search the titles and URLs of
the open tabs, as well as pages from your history. The "all signed-in
the open tabs, as well as pages from your history. The "all your signed-in
devices" part is there only so that recently closed tabs can be restored
with their full history. The only time QuicKey changes your browsing
history is when you choose to delete a history item.
Expand Down
9 changes: 1 addition & 8 deletions docs/edge-store-description.txt
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ You can move tabs to the left or right of the current tab, making it easy to pul
• Press CTRL-[ to move the selected tab to the left of the current one.
• Press CTRL-] to move it to the right.

Include SHIFT in the shortcut to also unsuspend the tab while moving it. The CTRL key should be used on both Windows and macOS. Note that you cannot move tabs between normal and InPrivate windows.
The CTRL key should be used on both Windows and macOS. Note that you cannot move tabs between normal and InPrivate windows.


★ Search bookmarks
Expand All @@ -218,13 +218,6 @@ The same CTRL-ENTER (CMD-ENTER on macOS) and SHIFT-ENTER shortcuts will open the
To delete the selected bookmark or history item, press CTRL-W (CMD-CTRL-W on macOS). Or hover over an item and click the X button on the right side of the menu. You'll be asked to confirm the deletion of bookmarks.


★ The Great Suspender integration

If you use the handy extension "The Great Suspender", then suspended tabs will look faded in the list, and the original URL is shown (not that long extension:// one you see in the location bar). That means if you search for "extension", you won't simply match all the suspended tabs, which is what happens in other tab search extensions.

Press SHIFT-ENTER to switch to a tab and unsuspend it in one go. Or shift-click it with the mouse.


★ InPrivate mode

To switch to InPrivate tabs as well as normal ones, right-click the QuicKey icon and select "Extension options" from the menu. Scroll to the very bottom of the QuicKey options page and then click the "Change InPrivate settings" button. On the extensions page that opens, scroll down to the "Allow in InPrivate" option and click the toggle button next to it.
Expand Down
22 changes: 4 additions & 18 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,7 @@ With a little extra work, you can even make *QuicKey* respond to the Holy Grail

## Installation

<p class="install"><button onclick="installExtension(1)">Add to Chrome</button> or go to the <a href="https://chrome.google.com/webstore/detail/quickey-–-the-quick-tab-s/ldlghkoiihaelfnggonhjnfiabmaficg">Chrome Web Store</a> to install <em>QuicKey</em>.</p>

<p class="install-fallback" style="display: none">Go to the <a href="https://chrome.google.com/webstore/detail/quickey-–-the-quick-tab-s/ldlghkoiihaelfnggonhjnfiabmaficg">Chrome Web Store</a> in Chrome to install <em>QuicKey</em>.</p>
Install *QuicKey* from the <a href="https://chrome.google.com/webstore/detail/quickey-–-the-quick-tab-s/ldlghkoiihaelfnggonhjnfiabmaficg">Chrome Web Store</a>.

Once the extension is installed, you can click the <img src="img/icon-38.png" style="height: 19px; vertical-align: text-bottom;"> button on the toolbar to open the search box. But if you like this extension, you'll probably prefer using the default keyboard shortcut listed above.

Expand Down Expand Up @@ -152,7 +150,7 @@ You can move tabs to the left or right of the current tab, making it easy to pul
* Press <b><kbd>ctrl</kbd><kbd>[</kbd></b> to move the selected tab to the left of the current one.
* Press <b><kbd>ctrl</kbd><kbd>]</kbd></b> to move it to the right.

Include <kbd>shift</kbd> in the shortcut to also unsuspend the tab while moving it. The <kbd>ctrl</kbd> key should be used on both Windows and macOS. Note that you cannot move tabs between normal and incognito windows.
The <kbd>ctrl</kbd> key should be used on both Windows and macOS. Note that you cannot move tabs between normal and incognito windows.


## Distinguish tabs with identical titles
Expand All @@ -170,12 +168,11 @@ To find a bookmark, type <b><kbd>/</kbd><kbd>b</kbd><kbd>space</kbd></b> in the
* Press <b><kbd>ctrl</kbd><kbd>enter</kbd></b> (<b><kbd>cmd</kbd><kbd>enter</kbd></b> on macOS) to open it in a new tab in the current window.
* Press <b><kbd>shift</kbd><kbd>enter</kbd></b> to open it in a new window.

As soon as you type <b><kbd>/</kbd><kbd>b</kbd><kbd>space</kbd></b>, your bookmarks will be listed in alphabetical order, in case you want to browse through them.
As soon as you type <b><kbd>/</kbd><kbd>b</kbd><kbd>space</kbd></b>, your bookmarks will be listed in alphabetical order, in case you want to browse through them. Since bookmarks can be organized into folders, the folder path is shown before each bookmark's title. The folder path can be hidden by unchecking *Show the folder path to each bookmark in its title* on the Options page.


## <a name="history"></a>Search the browser history

To see the last 2000 pages of your browser history in order of recency, type <b><kbd>/</kbd><kbd>h</kbd><kbd>space</kbd></b> in the search box. Or type part of the page's name or URL to narrow the search.
To find something in the last 2000 pages of your browser history, type <b><kbd>/</kbd><kbd>h</kbd><kbd>space</kbd></b> in the search box, and then part of the page's name or URL.

![Search history](img/search-history.png)
Expand All @@ -190,17 +187,6 @@ As soon as you type <b><kbd>/</kbd><kbd>h</kbd><kbd>space</kbd></b>, the pages f
To delete the selected bookmark or history item, press <b><kbd>ctrl</kbd><kbd>W</kbd></b> (<b><kbd>cmd</kbd><kbd>ctrl</kbd><kbd>W</kbd></b> on macOS). Or hover over an item and click the <img src="img/clear.svg" style="height: 1em; vertical-align: middle;"> button on the right side of the menu. You'll be asked to confirm the deletion of bookmarks.


## <a href="https://chrome.google.com/webstore/detail/the-great-suspender/klbibkeccnjlkjkiokjodocebajanakg?hl=en"><img src="img/tgs-icon.png" style="height: 24px;"></a> The Great Suspender integration

If you use the handy extension [The Great Suspender](https://chrome.google.com/webstore/detail/the-great-suspender/klbibkeccnjlkjkiokjodocebajanakg?hl=en) (and you almost certainly do if you have hundreds of tabs open), then suspended tabs will look faded in the list:

![Suspended tab](img/suspended-tab.png)

The original URL is shown in the menu (not that long `chrome-extension://` one you see in the location bar). That means if you search for `chrome` or `extension`, you won't simply match all the suspended tabs, which is what happens in other tab search extensions.

Press <b><kbd>shift</kbd><kbd>enter</kbd></b> to switch to a tab and unsuspend it in one go. Or shift-click it with the mouse.


## Incognito mode

To switch to incognito tabs as well as normal ones, click the <img src="img/gear.svg" style="height: 1em"> icon in the menu, or right-click the *QuicKey* icon <img src="img/icon-38.png" style="height: 19px; vertical-align: text-bottom;"> and select *Options* from the menu:
Expand All @@ -220,7 +206,7 @@ Tabs in incognito mode display the incognito icon under the page's favicon, so y

*QuicKey* will respond to changes in your computer's dark mode setting with darker colors that match your browser's user interface.

![Dark mode](img/dark-mode.png)
<img src="img/dark-mode.png" style="width: 522px;">


## Copy a URL or title
Expand Down
4 changes: 2 additions & 2 deletions docs/privacy/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ When first installed, *QuicKey* asks for these permissions:

- [*Read and change your browsing history on all signed-in devices*](https://developer.chrome.com/extensions/sessions)

*QuicKey* uses this permission to let you search the titles and URLs of the open tabs, as well as pages from your history. The *"all signed-in devices"* part is there only so that recently closed tabs can be restored with their full history.
*QuicKey* uses this permission to let you search the titles and URLs of the open tabs, as well as pages from your history. The *"all signed-in devices"* part is there only so that recently closed tabs can be restored with their full history. The only time *QuicKey* changes your browsing history is when you choose to delete a history item.

- [*Read and change your bookmarks*](https://developer.chrome.com/extensions/bookmarks)

*QuicKey* uses this permission to let you search the titles and URLs of your bookmarked pages. It will never change your bookmarks.
*QuicKey* uses this permission to let you search the titles and URLs of your bookmarked pages. The only time it changes your bookmarks is when you choose to delete one.

*QuicKey* does not request the *Read and modify all your data on all websites you visit* permission that many extensions require, so it can't read or modify the content of any pages you visit. It doesn't transmit any information other than some anonymized diagnostic data. It never sends anything about the pages you visit.

Expand Down
15 changes: 15 additions & 0 deletions docs/releases/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,21 @@ comments: true
# Release history


## 1.6.0 - 2021-03-05

### Added

* Option to display the folder path to each bookmark in its title, so that you can search for bookmarks by folder names.

* Option to restore the last search query when the menu is reopened.

* Option to choose whether the <kbd>home</kbd> and <kbd>end</kbd> keys navigate the results list or move the cursor in the search box.

### Fixed

* After using the *Switch instantly* command to switch to the previous tab and then quickly clicking a different tab, using the command again to switch back would sometimes not select the expected tab.


## 1.5.1 - 2020-12-24

### Fixed
Expand Down
11 changes: 5 additions & 6 deletions src/css/options.css
Original file line number Diff line number Diff line change
Expand Up @@ -462,8 +462,11 @@ main {

.new-setting {
display: flex;
align-items: center;
margin-bottom: .5em;
align-items: baseline;
}

.new-setting > .control-group {
margin: 0;
}

.new-indicator {
Expand All @@ -479,10 +482,6 @@ main {
100% { color: #d70000; }
}

.new-setting .control {
margin-bottom: 0;
}


/* ===========================================================================
Shortcut setting
Expand Down
6 changes: 6 additions & 0 deletions src/js/background/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,12 @@ require([
// stack, even though a different tab was now active.
.then(addTab.execute)
.then(recentTabs.toggle)
// fire the debounced addTab() so the tab we just toggled to will
// be the most recent, in case the user quickly toggles again.
// otherwise, the debounced add would fire after we navigate,
// putting that tab on the top of the stack, even though a
// different tab was now active.
.then(addTab.execute)
.then(() => backgroundTracker.event("recents",
fromShortcut ? "toggle-shortcut" : "toggle"));
}
Expand Down
11 changes: 11 additions & 0 deletions src/js/background/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ define([
Clear: "clear",
Close: "close"
},
HomeEndBehavior: {
Key: "homeEndBehavior",
ResultsList: "resultsList",
SearchBox: "searchBox"
},
MarkTabsInOtherWindows: {
Key: "markTabsInOtherWindows"
},
Expand All @@ -41,6 +46,12 @@ define([
UsePinyin: {
Key: "usePinyin"
},
RestoreLastQuery: {
Key: "restoreLastQuery"
},
ShowBookmarkPaths: {
Key: "showBookmarkPaths"
},
Shortcuts: {
Key: "shortcuts",
MRUSelect: "mruSelect",
Expand Down
3 changes: 3 additions & 0 deletions src/js/background/get-default-settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,13 @@ define([
const DefaultSettings = {
[k.SpaceBehavior.Key]: k.SpaceBehavior.Select,
[k.EscBehavior.Key]: k.EscBehavior.Clear,
[k.HomeEndBehavior.Key]: k.HomeEndBehavior.ResultsList,
[k.MarkTabsInOtherWindows.Key]: true,
[k.IncludeClosedTabs.Key]: true,
[k.ShowTabCount.Key]: false,
[k.UsePinyin.Key]: false,
[k.RestoreLastQuery.Key]: false,
[k.ShowBookmarkPaths.Key]: true,
[k.Shortcuts.Key]: {
mac: MacDefaults,
win: DefaultShortcuts
Expand Down
33 changes: 27 additions & 6 deletions src/js/background/quickey-storage.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,21 @@ define([


function addDefaultSetting(
...keys)
...settings)
{
return async data => {
const defaults = (await DefaultData).settings;

keys.forEach(key => data.settings[key] = defaults[key]);
settings.forEach(setting => {
const {Key} = setting;
const defaultValue = defaults[Key];

if (typeof defaultValue == "undefined") {
throw new Error(`addDefaultSetting(): no default value for "${setting}"`);
} else {
data.settings[Key] = defaultValue;
}
});
};
}

Expand All @@ -71,12 +80,23 @@ define([
// add includeClosedTabs option and lastUsedVersion in
// v6. leave lastUsedVersion empty so the background
// code can tell this was an update from an older version.
await addDefaultSetting(k.IncludeClosedTabs.Key);
await addDefaultSetting(k.IncludeClosedTabs)(data);
data.lastUsedVersion = "";
}),
"6": update(addDefaultSetting(k.MarkTabsInOtherWindows.Key)),
"7": update(addDefaultSetting(k.ShowTabCount.Key)),
"8": update(addDefaultSetting(k.UsePinyin.Key))
"6": update(addDefaultSetting(k.MarkTabsInOtherWindows)),
"7": update(addDefaultSetting(k.ShowTabCount)),
"8": update(addDefaultSetting(k.UsePinyin)),
"9": update(async data =>
{
// since addDefaultSetting() returns a function, we have to
// call it with the stored data passed in by update()
await addDefaultSetting(
k.RestoreLastQuery,
k.ShowBookmarkPaths,
k.HomeEndBehavior
)(data);
data.lastQuery = "";
})
};
// calculate the version by incrementing the highest key in the
// Updaters hash, so that the version is automatically increased
Expand Down Expand Up @@ -127,6 +147,7 @@ define([
// set this to the current storage version so that we
// don't show the red badge on a new install
lastSeenOptionsVersion: CurrentVersion,
lastQuery: "",
previousTabIndex: -1,
settings: DefaultSettings,
tabIDs: [],
Expand Down
27 changes: 16 additions & 11 deletions src/js/lib/error-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@
}


function getStack(
error)
{
return (error && error.stack && error.stack.replace(PathPattern, "")) || "";
}


function init()
{
if (typeof require !== "function" && retryCount < MaxRetries) {
Expand All @@ -44,23 +51,21 @@
{
try {
const timestamp = new Date().toLocaleString();
const {detail, reason = ((detail && detail.reason) || "")} = event;
const stack = getStack(event.error) || getStack(reason);

if (event.reason) {
console.log(`Caught unhandled promise rejection at ${timestamp}: ${event.reason}`);
tracker.exception(event.reason, true);
} else if (event.preventDefault) {
// error may be null in some cases, like when
// running a script in the console
const {error} = event;
const stack = (error && error.stack &&
error.stack.replace(PathPattern, "")) || "";
if (event.type == "unhandledrejection") {
const errorMessage = `Caught unhandled promise rejection at ${timestamp}:\n${stack}`;

console.log(`Caught unhandled exception at ${timestamp}:\n${stack}`);
console.error(errorMessage);
tracker.exception(errorMessage, true);
} else if (event.preventDefault) {
console.error(`Caught unhandled exception at ${timestamp}:\n${stack}`);
tracker.exception(error, true);
event.preventDefault();
}
} catch (e) {
console.log("Unhandled error in the error handler (oh, the irony!)", e);
console.error("Unhandled error in the error handler (oh, the irony!)", e);
}
}

Expand Down
Loading

0 comments on commit c8efb50

Please sign in to comment.