render(parent, nextSibling) {

    this.parentDomNode = parent;

    this.domNode = this.document.createElement('div');
    parent.insertBefore(this.domNode, nextSibling);

    // add widget classes
    this.registerClassNames(this.domNode);

    // get view and view holder
    this.viewHolderRef = this.getViewHolderRef();
    this.view = this.getView();

    // create the header div
    this.graphBarDomNode = this.document.createElement('div');
    $tw.utils.addClass(this.graphBarDomNode, 'tmap-topbar');
    this.domNode.appendChild(this.graphBarDomNode);

    // create body div
    this.graphDomNode = this.document.createElement('div');
    this.domNode.appendChild(this.graphDomNode);

    $tw.utils.addClass(this.graphDomNode, 'tmap-vis-graph');

    if (utils.isPreviewed(this)) {

      $tw.utils.addClass(this.domNode, 'tmap-static-mode');
      this.renderPreview(this.graphBarDomNode, this.graphDomNode);

    } else {

      // render the full widget
      this.renderFullWidget(this.domNode, this.graphBarDomNode, this.graphDomNode);
      const downloadCanvas = this.document.createElement('canvas');
      $tw.utils.addClass(downloadCanvas, 'tmap-download-canvas');

      this.domNode.appendChild(downloadCanvas);

    }

  }
Method to render this widget into the DOM.

Note that we do not add this.domNode to the list of domNodes
since this widget does never remove itself during a refresh.

@override