handleRemoveNodes(nodeIds) {

    const tiddlers = $tm.adapter.getTiddlersByIds(nodeIds);
    const params = {
      'count': nodeIds.length.toString(),
      'tiddlers': $tw.utils.stringifyList(tiddlers),
      dialog: {
        preselects: {
          'delete-from': 'filter'
        }
      }
    };

    $tm.dialogManager.open('deleteNodeDialog', params, (isConfirmed, outTObj) => {

      if (!isConfirmed) return;

      let deletionCount = 0;

      for (let i = nodeIds.length; i--;) {
        const success = this.view.removeNode(nodeIds[i]);
        if (success) {
          deletionCount++;
        }
      }

      if (outTObj.fields['delete-from'] === 'system') {

        // will also delete edges
        $tm.adapter.deleteNodes(nodeIds);
        deletionCount = nodeIds.length; // we just say so ;)

      }

      // prevent zoom
      this.isPreventZoomOnNextUpdate = true;

      $tm.notify(`
        Removed ${deletionCount}
        of ${nodeIds.length}
        from ${outTObj.fields['delete-from']}
      `);

    });

  }
Handler that guides the user through the process of deleting a node
from the graph. The nodes may be removed from the filter (if possible)
or from the system.

Note: this should not trigger a zoom.