[wip] content
This commit is contained in:
parent
85b4bd5b07
commit
327144a3aa
6 changed files with 86 additions and 58 deletions
|
@ -4,6 +4,7 @@ import FollowComponent from './follow';
|
|||
import * as settingActions from 'content/actions/setting';
|
||||
import messages from 'shared/messages';
|
||||
import * as addonActions from '../../actions/addon';
|
||||
import * as re from 'shared/utils/re';
|
||||
|
||||
export default class Common {
|
||||
constructor(win, store) {
|
||||
|
@ -14,8 +15,10 @@ export default class Common {
|
|||
input.onKey(key => follow.key(key));
|
||||
input.onKey(key => keymapper.key(key));
|
||||
|
||||
this.win = win;
|
||||
this.store = store;
|
||||
this.prevEnabled = undefined;
|
||||
this.prevBlacklist = undefined;
|
||||
|
||||
this.reloadSettings();
|
||||
|
||||
|
@ -42,14 +45,34 @@ export default class Common {
|
|||
enabled,
|
||||
});
|
||||
}
|
||||
|
||||
let blacklist = JSON.stringify(this.store.getState().setting.blacklist);
|
||||
if (blacklist !== this.prevBlacklist) {
|
||||
this.prevBlacklist = blacklist;
|
||||
|
||||
this.disableIfBlack(this.store.getState().setting.blacklist);
|
||||
}
|
||||
}
|
||||
|
||||
async reloadSettings() {
|
||||
disableIfBlack(blacklist) {
|
||||
let loc = this.win.location;
|
||||
let partial = loc.host + loc.pathname;
|
||||
let matched = blacklist
|
||||
.map((item) => {
|
||||
let pattern = item.includes('/') ? item : item + '/*';
|
||||
return re.fromWildcard(pattern);
|
||||
})
|
||||
.some(regex => regex.test(partial));
|
||||
if (matched) {
|
||||
this.store.dispatch(addonActions.disable());
|
||||
} else {
|
||||
this.store.dispatch(addonActions.enable());
|
||||
}
|
||||
}
|
||||
|
||||
reloadSettings() {
|
||||
try {
|
||||
let settings = await browser.runtime.sendMessage({
|
||||
type: messages.SETTINGS_QUERY,
|
||||
});
|
||||
this.store.dispatch(settingActions.set(settings));
|
||||
this.store.dispatch(settingActions.load());
|
||||
} catch (e) {
|
||||
// Sometime sendMessage fails when background script is not ready.
|
||||
console.warn(e);
|
||||
|
|
|
@ -20,6 +20,7 @@ export default class KeymapperComponent {
|
|||
this.store = store;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line max-statements
|
||||
key(key) {
|
||||
this.store.dispatch(inputActions.keyPress(key));
|
||||
|
||||
|
@ -47,8 +48,8 @@ export default class KeymapperComponent {
|
|||
return true;
|
||||
}
|
||||
let operation = keymaps.get(matched[0]);
|
||||
this.store.dispatch(operationActions.exec(
|
||||
operation, key.repeat, state.setting));
|
||||
let act = operationActions.exec(operation, key.repeat, state.setting);
|
||||
this.store.dispatch(act);
|
||||
this.store.dispatch(inputActions.clearKeys());
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -2,16 +2,13 @@ import CommonComponent from '../common';
|
|||
import FollowController from './follow-controller';
|
||||
import FindComponent from './find';
|
||||
import * as consoleFrames from '../../console-frames';
|
||||
import * as addonActions from '../../actions/addon';
|
||||
import messages from 'shared/messages';
|
||||
import * as re from 'shared/utils/re';
|
||||
|
||||
export default class TopContent {
|
||||
|
||||
constructor(win, store) {
|
||||
this.win = win;
|
||||
this.store = store;
|
||||
this.prevBlacklist = undefined;
|
||||
|
||||
new CommonComponent(win, store); // eslint-disable-line no-new
|
||||
new FollowController(win, store); // eslint-disable-line no-new
|
||||
|
@ -21,32 +18,6 @@ export default class TopContent {
|
|||
consoleFrames.initialize(this.win.document);
|
||||
|
||||
messages.onMessage(this.onMessage.bind(this));
|
||||
|
||||
this.store.subscribe(() => this.update());
|
||||
}
|
||||
|
||||
update() {
|
||||
let blacklist = this.store.getState().setting.blacklist;
|
||||
if (JSON.stringify(this.prevBlacklist) !== JSON.stringify(blacklist)) {
|
||||
this.disableIfBlack(blacklist);
|
||||
this.prevBlacklist = blacklist;
|
||||
}
|
||||
}
|
||||
|
||||
disableIfBlack(blacklist) {
|
||||
let loc = this.win.location;
|
||||
let partial = loc.host + loc.pathname;
|
||||
let matched = blacklist
|
||||
.map((item) => {
|
||||
let pattern = item.includes('/') ? item : item + '/*';
|
||||
return re.fromWildcard(pattern);
|
||||
})
|
||||
.some(regex => regex.test(partial));
|
||||
if (matched) {
|
||||
this.store.dispatch(addonActions.disable());
|
||||
} else {
|
||||
this.store.dispatch(addonActions.enable());
|
||||
}
|
||||
}
|
||||
|
||||
onMessage(message) {
|
||||
|
|
Reference in a new issue