Ignore keys on partial blacklist
This commit is contained in:
parent
9ff80fcac3
commit
7528fe831f
4 changed files with 159 additions and 0 deletions
|
@ -2,6 +2,7 @@
|
|||
|
||||
import { AddonEnabledRepositoryImpl } from './repositories/AddonEnabledRepository';
|
||||
import { AddonIndicatorClientImpl } from './client/AddonIndicatorClient';
|
||||
import { AddressRepositoryImpl } from './repositories/AddressRepository';
|
||||
import { ClipboardRepositoryImpl } from './repositories/ClipboardRepository';
|
||||
import { ConsoleClientImpl } from './client/ConsoleClient';
|
||||
import { ConsoleFramePresenterImpl } from './presenters/ConsoleFramePresenter';
|
||||
|
@ -31,6 +32,7 @@ import { container } from 'tsyringe';
|
|||
container.register('FollowMasterClient', { useValue: new FollowMasterClientImpl(window.top) });
|
||||
container.register('AddonEnabledRepository', { useClass: AddonEnabledRepositoryImpl });
|
||||
container.register('AddonIndicatorClient', { useClass: AddonIndicatorClientImpl });
|
||||
container.register('AddressRepository', { useClass: AddressRepositoryImpl });
|
||||
container.register('ClipboardRepository', { useClass: ClipboardRepositoryImpl });
|
||||
container.register('ConsoleClient', { useClass: ConsoleClientImpl });
|
||||
container.register('ConsoleFramePresenter', { useClass: ConsoleFramePresenterImpl });
|
||||
|
|
9
src/content/repositories/AddressRepository.ts
Normal file
9
src/content/repositories/AddressRepository.ts
Normal file
|
@ -0,0 +1,9 @@
|
|||
export default interface AddressRepository {
|
||||
getCurrentURL(): URL
|
||||
}
|
||||
|
||||
export class AddressRepositoryImpl implements AddressRepository {
|
||||
getCurrentURL(): URL {
|
||||
return new URL(window.location.href);
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ import * as operations from '../../shared/operations';
|
|||
import Keymaps from '../../shared/settings/Keymaps';
|
||||
import Key from '../../shared/settings/Key';
|
||||
import KeySequence from '../../shared/settings/KeySequence';
|
||||
import AddressRepository from '../repositories/AddressRepository';
|
||||
|
||||
type KeymapEntityMap = Map<KeySequence, operations.Operation>;
|
||||
|
||||
|
@ -25,11 +26,19 @@ export default class KeymapUseCase {
|
|||
|
||||
@inject('AddonEnabledRepository')
|
||||
private addonEnabledRepository: AddonEnabledRepository,
|
||||
|
||||
@inject('AddressRepository')
|
||||
private addressRepository: AddressRepository,
|
||||
) {
|
||||
}
|
||||
|
||||
nextOp(key: Key): operations.Operation | null {
|
||||
let sequence = this.repository.enqueueKey(key);
|
||||
if (sequence.length() === 1 && this.blacklistKey(key)) {
|
||||
// ignore if the input starts with black list keys
|
||||
this.repository.clear();
|
||||
return null;
|
||||
}
|
||||
|
||||
let keymaps = this.keymapEntityMap();
|
||||
let matched = Array.from(keymaps.keys()).filter(
|
||||
|
@ -71,4 +80,10 @@ export default class KeymapUseCase {
|
|||
) as [KeySequence, operations.Operation][];
|
||||
return new Map<KeySequence, operations.Operation>(entries);
|
||||
}
|
||||
|
||||
private blacklistKey(key: Key): boolean {
|
||||
let url = this.addressRepository.getCurrentURL();
|
||||
let blacklist = this.settingRepository.get().blacklist;
|
||||
return blacklist.includeKey(url, key);
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue