onDragStart(event) {
    // if already dragging, do not start
    // this can happen on touch screens with multiple fingers
    if (this.drag.dragging) {
      return;
    }

    //in case the touch event was triggered on an external div, do the initial touch now.
    if (this.drag.pointer === undefined) {
      this.onTouch(event);
    }

    // note: drag.pointer is set in onTouch to get the initial touch location
    const node = this.selectionHandler.getNodeAt(this.drag.pointer);

    this.drag.dragging = true;
    this.drag.selection = [];
    this.drag.translation = Object.assign({}, this.body.view.translation); // copy the object
    this.drag.nodeId = undefined;

    if (event.srcEvent.shiftKey) {
      this.body.selectionBox.show = true;
      const pointer = this.getPointer(event.center);

      this.body.selectionBox.position.start = {
        x: this.canvas._XconvertDOMtoCanvas(pointer.x),
        y: this.canvas._YconvertDOMtoCanvas(pointer.y),
      };
      this.body.selectionBox.position.end = {
        x: this.canvas._XconvertDOMtoCanvas(pointer.x),
        y: this.canvas._YconvertDOMtoCanvas(pointer.y),
      };
    } else if (node !== undefined && this.options.dragNodes === true) {
      this.drag.nodeId = node.id;
      // select the clicked node if not yet selected
      if (node.isSelected() === false) {
        this.selectionHandler.setSelection({ nodes: [node.id] });
      }

      // after select to contain the node
      this.selectionHandler.generateClickEvent(
        "dragStart",
        event,
        this.drag.pointer
      );

      // create an array with the selected nodes and their original location and status
      for (const node of this.selectionHandler.getSelectedNodes()) {
        const s = {
          id: node.id,
          node: node,

          // store original x, y, xFixed and yFixed, make the node temporarily Fixed
          x: node.x,
          y: node.y,
          xFixed: node.options.fixed.x,
          yFixed: node.options.fixed.y,
        };

        node.options.fixed.x = true;
        node.options.fixed.y = true;

        this.drag.selection.push(s);
      }
    } else {
      // fallback if no node is selected and thus the view is dragged.
      this.selectionHandler.generateClickEvent(
        "dragStart",
        event,
        this.drag.pointer,
        undefined,
        true
      );
    }
  }
This function is called by onDragStart.
It is separated out because we can then overload it for the datamanipulation system.
@param {Event} event
@private