Miew.prototype.init = function()

in packages/miew/src/Miew.js [264:365]


Miew.prototype.init = function () {
  const container = this._container;
  const elem = utils.createElement('div', { class: 'miew-canvas' });
  _setContainerContents(container, elem);
  this._container = elem;

  const frag = document.createDocumentFragment();
  frag.appendChild(this._msgMode = createElement(
    'div',
    { class: 'mode-message overlay' },
    createElement('p', {}, 'COMPONENT EDIT MODE'),
  ));
  frag.appendChild(this._msgAtomInfo = createElement(
    'div',
    { class: 'atom-info overlay' },
    createElement('p', {}, ''),
  ));
  container.appendChild(frag);

  if (this._gfx !== null) { // block double init
    return true;
  }

  const self = this;
  this._showMessage('Viewer is being initialized...');
  try {
    this._initGfx();

    this._initListeners();
    this._spinner = new Spinner({
      lines: 13,
      length: 28,
      width: 14,
      radius: 42,
      color: '#fff',
      zIndex: 700,
    });

    const target = getTopWindow();
    target.addEventListener('keydown', (event) => {
      self._onKeyDown(event);
    });

    target.addEventListener('keyup', (event) => {
      self._onKeyUp(event);
    });

    this._objectControls = new ObjectControls(
      this._gfx.root,
      this._gfx.pivot,
      this._gfx.camera,
      this._gfx.renderer.domElement,
      () => self._getAltObj(),
    );
    this._objectControls.addEventListener('change', (e) => {
      if (settings.now.shadow.on) {
        self._updateShadowCamera();
      }
      // route rotate, zoom, translate and translatePivot events to the external API
      switch (e.action) {
        case 'rotate':
          self.dispatchEvent({ type: 'rotate', quaternion: e.quaternion });
          break;
        case 'zoom':
          self.dispatchEvent({ type: 'zoom', factor: e.factor });
          break;
        default:
          self.dispatchEvent({ type: e.action });
      }
      self.dispatchEvent({ type: 'transform' });
      self._needRender = true;
    });

    const gfx = this._gfx;
    this._picker = new Picker(gfx.root, gfx.camera, gfx.renderer.domElement);
    this._picker.addEventListener('newpick', (event) => {
      self._onPick(event);
    });
    this._picker.addEventListener('dblclick', (event) => {
      self.center(event);
    });
  } catch (error) {
    if (error.name === 'TypeError' && error.message === 'Cannot read property \'getExtension\' of null') {
      this._showMessage('Could not create WebGL context.');
    } else if (error.message.search(/webgl/i) > 1) {
      this._showMessage(error.message);
    } else {
      this._showMessage('Viewer initialization failed.');
      throw error;
    }
    return false;
  }

  // automatically load default file
  const file = this._opts && this._opts.load;
  if (file) {
    const type = this._opts && this._opts.type;
    this.load(file, { fileType: type, keepRepsInfo: true });
  }

  return true;
};