renderFullWidget(widget, header, body) {

    // add window and widget dom node listeners
    utils.setDomListeners('add', window, this.windowDomListeners);
    utils.setDomListeners('add', widget, this.widgetDomListeners);

    // add a loading bar
    this.addLoadingBar(this.domNode);

    // prepare the tooltip for graph elements
    this.tooltip = new Popup(this.domNode, {
      className: 'tmap-tooltip',
      showDelay: $tm.config.sys.popups.delay
    });

    // prepare the context menu
    this.contextMenu = new Popup(this.domNode, {
      className: 'tmap-context-menu',
      showDelay: 0,
      hideOnClick: true,
      leavingDelay: 999999
    });

    // register
    // fixes #422: sidebar isn't always there depending on installed plugins
    this.sidebar = utils.getFirstElementByClassName('tc-sidebar-scrollable', undefined, false);
    this.isInSidebar = (this.sidebar
                                 && !this.domNode.isTiddlyWikiFakeDom
                                 && this.sidebar.contains(this.domNode));

    // *first* inject the bar
    this.rebuildEditorBar(header);

    // if any refresh-triggers exist, register them
    this.reloadRefreshTriggers();

    // *second* initialise graph variables and render the graph
    this.initAndRenderGraph(body);

    // register this graph at the caretaker's graph registry
    $tm.registry.push(this);

    // maybe display a welcome message
    this.checkForFreshInstall();

    if (this.id === $tm.misc.mainEditorId) {

      const url = $tm.url;
      if (url && url.query['tmap-enlarged']) {

        this.toggleEnlargedMode(url.query['tmap-enlarged']);
        this.setView(url.query['tmap-view']);

      }

    }
  }
The standard way of rendering.
Attention: BE CAREFUL WITH THE ORDER OF FUNCTION CALLS IN THIS FUNCTION.