diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2019-12-22 14:45:26 +0900 |
---|---|---|
committer | Shin'ya Ueoka <ueokande@i-beam.org> | 2019-12-22 14:45:26 +0900 |
commit | 65a20a9fc43a20664e7d90de5d266ec134f9020a (patch) | |
tree | 7172bfb0b1992e9d2c9cc35f0c7ea43dee0a9af4 | |
parent | b1a6f374dca078dee2406ebe049715b826e37ca2 (diff) |
Enable addon on blacklisted sites
-rw-r--r-- | src/content/controllers/SettingController.ts | 4 | ||||
-rw-r--r-- | src/content/usecases/KeymapUseCase.ts | 8 | ||||
-rw-r--r-- | src/shared/settings/Blacklist.ts | 5 | ||||
-rw-r--r-- | test/shared/settings/Blacklist.test.ts | 2 |
4 files changed, 8 insertions, 11 deletions
diff --git a/src/content/controllers/SettingController.ts b/src/content/controllers/SettingController.ts index 9124188..2d32c09 100644 --- a/src/content/controllers/SettingController.ts +++ b/src/content/controllers/SettingController.ts @@ -18,9 +18,9 @@ export default class SettingController { const url = new URL(window.location.href); const disabled = current.blacklist.includesEntireBlacklist(url); if (disabled) { - this.addonEnabledUseCase.disable(); + await this.addonEnabledUseCase.disable(); } else { - this.addonEnabledUseCase.enable(); + await this.addonEnabledUseCase.enable(); } } catch (e) { // Sometime sendMessage fails when background script is not ready. diff --git a/src/content/usecases/KeymapUseCase.ts b/src/content/usecases/KeymapUseCase.ts index 074de72..7aa7e92 100644 --- a/src/content/usecases/KeymapUseCase.ts +++ b/src/content/usecases/KeymapUseCase.ts @@ -39,16 +39,16 @@ export default class KeymapUseCase { nextOps(key: Key): { repeat: number, op: operations.Operation } | null { const sequence = this.repository.enqueueKey(key); const baseSequence = sequence.trimNumericPrefix(); + const keymaps = this.keymapEntityMap(); + const matched = keymaps.filter(([seq]) => seq.startsWith(sequence)); + const baseMatched = keymaps.filter(([seq]) => seq.startsWith(baseSequence)); + if (baseSequence.length() === 1 && this.blacklistKey(key)) { // ignore if the input starts with black list keys this.repository.clear(); return null; } - const keymaps = this.keymapEntityMap(); - const matched = keymaps.filter(([seq]) => seq.startsWith(sequence)); - const baseMatched = keymaps.filter(([seq]) => seq.startsWith(baseSequence)); - if (matched.length === 1 && sequence.length() === matched[0][0].length()) { // keys are matched with an operation diff --git a/src/shared/settings/Blacklist.ts b/src/shared/settings/Blacklist.ts index 6e6b51c..6c54d73 100644 --- a/src/shared/settings/Blacklist.ts +++ b/src/shared/settings/Blacklist.ts @@ -55,12 +55,9 @@ export class BlacklistItem { } includeKey(url: URL, key: Key): boolean { - if (!this.matches(url)) { + if (!this.matches(url) || !this.partial) { return false; } - if (!this.partial) { - return true; - } return this.keyEntities.some(k => k.equals(key)); } } diff --git a/test/shared/settings/Blacklist.test.ts b/test/shared/settings/Blacklist.test.ts index dfd036e..bcddf18 100644 --- a/test/shared/settings/Blacklist.test.ts +++ b/test/shared/settings/Blacklist.test.ts @@ -132,7 +132,7 @@ describe('Blacklist', () => { { url: 'github.com', keys: ['j', 'k'] }, ]); - expect(blacklist.includeKey(new URL('https://google.com'), Key.fromMapKey('j'))).to.be.true; + expect(blacklist.includeKey(new URL('https://google.com'), Key.fromMapKey('j'))).to.be.false; expect(blacklist.includeKey(new URL('https://github.com'), Key.fromMapKey('j'))).to.be.true; expect(blacklist.includeKey(new URL('https://github.com'), Key.fromMapKey('a'))).to.be.false; }); |