aboutsummaryrefslogtreecommitdiff
path: root/src/content/components/top-content/index.ts
blob: 0f0765321285d2f9be9d5992ae88e879ef0dee37 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import CommonComponent from '../common';
import FollowController from './follow-controller';
import * as consoleFrames from '../../console-frames';
import * as messages from '../../../shared/messages';
import MessageListener from '../../MessageListener';
import AddonEnabledUseCase from '../../usecases/AddonEnabledUseCase';
import { ScrollPresenterImpl } from '../../presenters/ScrollPresenter';

let addonEnabledUseCase = new AddonEnabledUseCase();
let scrollPresenter = new ScrollPresenterImpl();

export default class TopContent {
  private win: Window;

  constructor(win: Window, store: any) {
    this.win = win;

    new CommonComponent(win, store); // eslint-disable-line no-new
    new FollowController(win, store); // eslint-disable-line no-new

    // TODO make component
    consoleFrames.initialize(this.win.document);

    new MessageListener().onWebMessage(this.onWebMessage.bind(this));
    new MessageListener().onBackgroundMessage(
      this.onBackgroundMessage.bind(this));
  }

  onWebMessage(message: messages.Message) {
    switch (message.type) {
    case messages.CONSOLE_UNFOCUS:
      this.win.focus();
      consoleFrames.blur(window.document);
    }
  }

  onBackgroundMessage(message: messages.Message) {
    let addonEnabled = addonEnabledUseCase.getEnabled();

    switch (message.type) {
    case messages.ADDON_ENABLED_QUERY:
      return Promise.resolve(addonEnabled);
    case messages.TAB_SCROLL_TO:
      return scrollPresenter.scrollTo(message.x, message.y, false);
    }
  }
}