summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/visual_review_toolbar/index.js
blob: 67b3fadd772e36cd8f5c78bda41ea4cf3cf1ed3d (plain)
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
import './styles/toolbar.css';

import { buttonAndForm, note, selectForm, selectContainer } from './components';
import { REVIEW_CONTAINER } from './shared';
import { eventLookup, getInitialView, initializeGlobalListeners, initializeState } from './store';

/*

  Welcome to the visual review toolbar files. A few useful notes:

  - These files build a static script that is served from our webpack
    assets folder. (https://gitlab.com/assets/webpack/visual_review_toolbar.js)

  - To compile this file, run `yarn webpack-vrt`.

  - Vue is not used in these files because we do not want to ask users to
    install another library at this time. It's all pure vanilla javascript.

*/

window.addEventListener('load', () => {
  initializeState(window, document);

  const mainContent = buttonAndForm(getInitialView());
  const container = document.createElement('div');
  container.setAttribute('id', REVIEW_CONTAINER);
  container.insertAdjacentHTML('beforeend', note);
  container.insertAdjacentHTML('beforeend', mainContent);

  document.body.insertBefore(container, document.body.firstChild);

  selectContainer().addEventListener('click', event => {
    eventLookup(event.target.id)();
  });

  selectForm().addEventListener('submit', event => {
    // this is important to prevent the form from adding data
    // as URL params and inadvertently revealing secrets
    event.preventDefault();

    const id =
      event.target.querySelector('.gitlab-button-wrapper') &&
      event.target.querySelector('.gitlab-button-wrapper').getElementsByTagName('button')[0] &&
      event.target.querySelector('.gitlab-button-wrapper').getElementsByTagName('button')[0].id;

    // even if this is called with false, it's ok; it will get the default no-op
    eventLookup(id)();
  });

  initializeGlobalListeners();
});