A fork of https://github.com/ueokande/vim-vixen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.8 KiB
65 lines
1.8 KiB
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 |
|
new FindComponent(win, store); // eslint-disable-line no-new |
|
|
|
// TODO make component |
|
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()); |
|
} |
|
} |
|
|
|
onMessage(message) { |
|
let addonState = this.store.getState().addon; |
|
|
|
switch (message.type) { |
|
case messages.CONSOLE_UNFOCUS: |
|
this.win.focus(); |
|
consoleFrames.blur(window.document); |
|
return Promise.resolve(); |
|
case messages.ADDON_ENABLED_QUERY: |
|
return Promise.resolve({ |
|
type: messages.ADDON_ENABLED_RESPONSE, |
|
enabled: addonState.enabled, |
|
}); |
|
} |
|
} |
|
}
|
|
|