update(updates) {

    if (!this.network || this.isZombieWidget() || utils.isPreviewed(this)) {
      return;
    }

    const { changedTiddlers } = updates;

    // check for callback changes
    this.callbackManager.refresh(changedTiddlers);

    if (
       this.isViewSwitched(changedTiddlers)
       || this.hasChangedAttributes() // widget html code changed
       || updates[env.path.options] // global options changed
       || changedTiddlers[this.view.getRoot()] // view's main config changed
    ) {

      this.logger('warn', 'View switched or config changed');

      this.isPreventZoomOnNextUpdate = false;
      this.view = this.getView(true);
      this.reloadRefreshTriggers();

      this.trace = utils.makeHashMap();

      this.rebuildEditorBar();
      this.reloadBackgroundImage();
      this.initAndRenderGraph(this.graphDomNode);

    } else { // view has not been switched

      // give the view a chance to refresh itself
      const isViewUpdated = this.view.update(updates);

      if (isViewUpdated) {

        this.logger('warn', 'View components modified');
        this.rebuildGraph({ resetFocus: { delay: 1000, duration: 1000 }});

      } else { // neither view switch or view modification

        if (updates[env.path.nodeTypes] || this.hasChangedElements(changedTiddlers)) {
          this.rebuildGraph();
        }

        // give children a chance to update themselves
        this.refreshChildren(changedTiddlers);

      }
    }

  }
This function is called by the caretaker module to notify the
widget about tiddler changes.

TiddlyMap is interested in the following changes:

- Callbacks have been triggered (e.g. dialog results)
- A view has been switched
- A view has been modified (= configured)
- Global options have changed
- Node- or edge-types have changed
- Graph elements have changed
- Changes to the graph's topbar

@override
@see https://groups.google.com/d/msg/tiddlywikidev/hwtX59tKsIk/EWSG9glqCnsJ