aboutsummaryrefslogtreecommitdiff
path: root/src/content/index.ts
blob: d6440954e4b4f4da449cc1f38a828011ec6600a8 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// import TopContentComponent from './components/top-content';
// import FrameContentComponent from './components/frame-content';
import * as consoleFrames from './console-frames';
import consoleFrameStyle from './site-style';
// import { newStore } from './store';
import MessageListener from './MessageListener';
import FindController from './controllers/FindController';
import MarkController from './controllers/MarkController';
import * as messages from '../shared/messages';
import InputDriver from './InputDriver';
import KeymapController from './controllers/KeymapController';
import AddonEnabledUseCase from './usecases/AddonEnabledUseCase';
import SettingUseCase from './usecases/SettingUseCase';
import * as blacklists from '../shared/blacklists';
import MarkKeyController from './controllers/MarkKeyController';
import AddonEnabledController from './controllers/AddonEnabledController';

// const store = newStore();

if (window.self === window.top) {
  // new TopContentComponent(window, store); // eslint-disable-line no-new

  let findController = new FindController();
  new MessageListener().onWebMessage((message: messages.Message) => {
    switch (message.type) {
    case messages.CONSOLE_ENTER_FIND:
      return findController.start(message);
    case messages.FIND_NEXT:
      return findController.next(message);
    case messages.FIND_PREV:
      return findController.prev(message);
    case messages.CONSOLE_UNFOCUS:
      window.focus();
      consoleFrames.blur(window.document);
    }
    return undefined;
  });

  let markController = new MarkController();
  let addonEnabledController = new AddonEnabledController();

  new MessageListener().onBackgroundMessage((message: messages.Message) => {
    switch (message.type) {
    case messages.ADDON_ENABLED_QUERY:
      return addonEnabledController.getAddonEnabled(message);
    case messages.TAB_SCROLL_TO:
      return markController.scrollTo(message);
    }
    return undefined;
  });

  consoleFrames.initialize(window.document);
} else {
  // new FrameContentComponent(window, store); // eslint-disable-line no-new
}

let keymapController = new KeymapController();
let markKeyController = new MarkKeyController();
let inputDriver = new InputDriver(document.body);
// inputDriver.onKey(key => followSlaveController.pressKey(key));
inputDriver.onKey(key => markKeyController.press(key));
inputDriver.onKey(key => keymapController.press(key));

let style = window.document.createElement('style');
style.textContent = consoleFrameStyle;
window.document.head.appendChild(style);

// TODO move the following to a class
const reloadSettings = async() => {
  let addonEnabledUseCase = new AddonEnabledUseCase();
  let settingUseCase = new SettingUseCase();

  try {
    let current = await settingUseCase.reload();
    let disabled = blacklists.includes(
      current.blacklist, window.location.href,
    );
    if (disabled) {
      addonEnabledUseCase.disable();
    } else {
      addonEnabledUseCase.enable();
    }
  } catch (e) {
    // Sometime sendMessage fails when background script is not ready.
    console.warn(e);
    setTimeout(() => reloadSettings(), 500);
  }
};
reloadSettings();

new MessageListener().onBackgroundMessage((message: messages.Message): any => {
  let addonEnabledUseCase = new AddonEnabledUseCase();

  switch (message.type) {
  case messages.SETTINGS_CHANGED:
    return reloadSettings();
  case messages.ADDON_TOGGLE_ENABLED:
    return addonEnabledUseCase.toggle();
  }
});