diff options
author | StefanVukovic99 <stefanvukovic44@gmail.com> | 2024-04-22 22:24:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-22 20:24:50 +0000 |
commit | f0196aaf6beac57e17972c87153376bbbcdd7282 (patch) | |
tree | 225ed467e09f8d83c02a666d419fef044621c9dd | |
parent | c6d93a965a5536979221fda856903356c10c1603 (diff) |
add profile switching keyboard shortcuts (#832)
* add profile switching
* add duplicate behavior dropdown (#853)
* duplicate behavior dropdown
* allow duplicate for existing users
* Update docs/anki-integration.md
Co-authored-by: James Maa <jmaa@berkeley.edu>
Signed-off-by: StefanVukovic99 <stefanvukovic44@gmail.com>
* Update docs/anki-integration.md
Co-authored-by: James Maa <jmaa@berkeley.edu>
Signed-off-by: StefanVukovic99 <stefanvukovic44@gmail.com>
* Update docs/anki-integration.md
Co-authored-by: James Maa <jmaa@berkeley.edu>
Signed-off-by: StefanVukovic99 <stefanvukovic44@gmail.com>
* remove suggestion comment
---------
Signed-off-by: StefanVukovic99 <stefanvukovic44@gmail.com>
Co-authored-by: James Maa <jmaa@berkeley.edu>
---------
Signed-off-by: StefanVukovic99 <stefanvukovic44@gmail.com>
Co-authored-by: James Maa <jmaa@berkeley.edu>
-rw-r--r-- | ext/data/schemas/options-schema.json | 8 | ||||
-rw-r--r-- | ext/js/data/options-util.js | 17 | ||||
-rw-r--r-- | ext/js/display/display.js | 22 | ||||
-rw-r--r-- | ext/js/pages/settings/keyboard-shortcuts-controller.js | 2 | ||||
-rw-r--r-- | ext/templates-settings.html | 2 | ||||
-rw-r--r-- | test/options-util.test.js | 6 |
6 files changed, 51 insertions, 6 deletions
diff --git a/ext/data/schemas/options-schema.json b/ext/data/schemas/options-schema.json index f9d11dcf..b3f68881 100644 --- a/ext/data/schemas/options-schema.json +++ b/ext/data/schemas/options-schema.json @@ -1154,8 +1154,8 @@ } }, "default": [ - {"action": "close", "argument": "", "key": "Escape", "modifiers": [], "scopes": ["popup"], "enabled": true}, - {"action": "focusSearchBox", "argument": "", "key": "Escape", "modifiers": [], "scopes": ["search"], "enabled": true}, + {"action": "close", "argument": "", "key": "Escape", "modifiers": [], "scopes": ["popup"], "enabled": true}, + {"action": "focusSearchBox", "argument": "", "key": "Escape", "modifiers": [], "scopes": ["search"], "enabled": true}, {"action": "previousEntry", "argument": "3", "key": "PageUp", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, {"action": "nextEntry", "argument": "3", "key": "PageDown", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, {"action": "lastEntry", "argument": "", "key": "End", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, @@ -1164,12 +1164,14 @@ {"action": "nextEntry", "argument": "1", "key": "ArrowDown", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, {"action": "historyBackward", "argument": "", "key": "KeyB", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, {"action": "historyForward", "argument": "", "key": "KeyF", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, + {"action": "profilePrevious", "argument": "", "key": "Minus", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, + {"action": "profileNext", "argument": "", "key": "Equal", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, {"action": "addNoteKanji", "argument": "", "key": "KeyK", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, {"action": "addNoteTermKanji", "argument": "", "key": "KeyE", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, {"action": "addNoteTermKana", "argument": "", "key": "KeyR", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, {"action": "playAudio", "argument": "", "key": "KeyP", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, {"action": "viewNotes", "argument": "", "key": "KeyV", "modifiers": ["alt"], "scopes": ["popup", "search"], "enabled": true}, - {"action": "copyHostSelection", "argument": "", "key": "KeyC", "modifiers": ["ctrl"], "scopes": ["popup"], "enabled": true} + {"action": "copyHostSelection", "argument": "", "key": "KeyC", "modifiers": ["ctrl"], "scopes": ["popup"], "enabled": true} ] } } diff --git a/ext/js/data/options-util.js b/ext/js/data/options-util.js index 62b062aa..5319cfe4 100644 --- a/ext/js/data/options-util.js +++ b/ext/js/data/options-util.js @@ -537,7 +537,8 @@ export class OptionsUtil { this._updateVersion28, this._updateVersion29, this._updateVersion30, - this._updateVersion31 + this._updateVersion31, + this._updateVersion32 ]; /* eslint-enable @typescript-eslint/unbound-method */ if (typeof targetVersion === 'number' && targetVersion < result.length) { @@ -1245,6 +1246,20 @@ export class OptionsUtil { } /** + * - Added profilePrevious and profileNext to hotkeys. + * @type {import('options-util').UpdateFunction} + */ + async _updateVersion32(options) { + for (const profile of options.profiles) { + profile.options.inputs.hotkeys.push( + {action: 'profilePrevious', key: 'Minus', modifiers: ['alt'], scopes: ['popup', 'search'], enabled: true}, + {action: 'profileNext', key: 'Equal', modifiers: ['alt'], scopes: ['popup', 'search'], enabled: true} + ); + } + } + + + /** * @param {string} url * @returns {Promise<chrome.tabs.Tab>} */ diff --git a/ext/js/display/display.js b/ext/js/display/display.js index 10c1545c..6b73f19b 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -196,6 +196,8 @@ export class Display extends EventDispatcher { ['firstEntry', () => { this._focusEntry(0, 0, true); }], ['historyBackward', () => { this._sourceTermView(); }], ['historyForward', () => { this._nextTermView(); }], + ['profilePrevious', async () => { await this._setProfile(-1); }], + ['profileNext', async () => { await this._setProfile(1); }], ['copyHostSelection', () => this._copyHostSelection()], ['nextEntryDifferentDictionary', () => { this._focusEntryWithDifferentDictionary(1, true); }], ['previousEntryDifferentDictionary', () => { this._focusEntryWithDifferentDictionary(-1, true); }] @@ -1996,6 +1998,26 @@ export class Display extends EventDispatcher { this._focusEntry(this._index + count * sign, 0, true); } + /** + * @param {number} direction + */ + async _setProfile(direction) { + const optionsFull = await this.application.api.optionsGetFull(); + + const profileCount = optionsFull.profiles.length; + const newProfile = (optionsFull.profileCurrent + direction + profileCount) % profileCount; + + /** @type {import('settings-modifications').ScopedModificationSet} */ + const modification = { + action: 'set', + path: 'profileCurrent', + value: newProfile, + scope: 'global', + optionsContext: null + }; + await this.application.api.modifySettings([modification], 'search'); + } + /** */ _closeAllPopupMenus() { for (const popupMenu of PopupMenu.openMenus) { diff --git a/ext/js/pages/settings/keyboard-shortcuts-controller.js b/ext/js/pages/settings/keyboard-shortcuts-controller.js index b1ea6bb0..1e00d907 100644 --- a/ext/js/pages/settings/keyboard-shortcuts-controller.js +++ b/ext/js/pages/settings/keyboard-shortcuts-controller.js @@ -59,6 +59,8 @@ export class KeyboardShortcutController { ['previousEntryDifferentDictionary', {scopes: new Set(['popup', 'search'])}], ['historyBackward', {scopes: new Set(['popup', 'search'])}], ['historyForward', {scopes: new Set(['popup', 'search'])}], + ['profilePrevious', {scopes: new Set(['popup', 'search'])}], + ['profileNext', {scopes: new Set(['popup', 'search'])}], ['addNoteKanji', {scopes: new Set(['popup', 'search'])}], ['addNoteTermKanji', {scopes: new Set(['popup', 'search'])}], ['addNoteTermKana', {scopes: new Set(['popup', 'search'])}], diff --git a/ext/templates-settings.html b/ext/templates-settings.html index 0fb29c22..ce703d89 100644 --- a/ext/templates-settings.html +++ b/ext/templates-settings.html @@ -363,6 +363,8 @@ <option value="previousEntryDifferentDictionary">Go to previous dictionary</option> <option value="historyBackward">Navigate backward in history</option> <option value="historyForward">Navigate forward in history</option> + <option value="profilePrevious">Switch to previous profile</option> + <option value="profileNext">Switch to next profile</option> <option value="addNoteKanji">Add kanji note</option> <option value="addNoteTermKanji">Add term note</option> <option value="addNoteTermKana">Add term note (reading)</option> diff --git a/test/options-util.test.js b/test/options-util.test.js index 5155d533..0966d0d3 100644 --- a/test/options-util.test.js +++ b/test/options-util.test.js @@ -491,7 +491,9 @@ function createProfileOptionsUpdatedTestData1() { {action: 'addNoteTermKana', argument: '', key: 'KeyR', modifiers: ['alt'], scopes: ['popup', 'search'], enabled: true}, {action: 'playAudio', argument: '', key: 'KeyP', modifiers: ['alt'], scopes: ['popup', 'search'], enabled: true}, {action: 'viewNotes', argument: '', key: 'KeyV', modifiers: ['alt'], scopes: ['popup', 'search'], enabled: true}, - {action: 'copyHostSelection', argument: '', key: 'KeyC', modifiers: ['ctrl'], scopes: ['popup'], enabled: true} + {action: 'copyHostSelection', argument: '', key: 'KeyC', modifiers: ['ctrl'], scopes: ['popup'], enabled: true}, + {action: 'profilePrevious', argument: '', key: 'Minus', modifiers: ['alt'], scopes: ['popup', 'search'], enabled: true}, + {action: 'profileNext', argument: '', key: 'Equal', modifiers: ['alt'], scopes: ['popup', 'search'], enabled: true} ] /* eslint-enable @stylistic/no-multi-spaces */ }, @@ -603,7 +605,7 @@ function createOptionsUpdatedTestData1() { } ], profileCurrent: 0, - version: 31, + version: 32, global: { database: { prefixWildcardsSupported: false |