MCPcopy Index your code
hub / github.com/gridstack/gridstack.js / prepareDragDrop

Method prepareDragDrop

src/gridstack.ts:2713–2819  ·  view source on GitHub ↗

* prepares the element for drag&drop - this is normally called by makeWidget() unless are are delay loading * @param el GridItemHTMLElement of the widget * @param [force=false] *

(el: GridItemHTMLElement, force = false)

Source from the content-addressed store, hash-verified

2711 * @param [force=false]
2712 * */
2713 public prepareDragDrop(el: GridItemHTMLElement, force = false): GridStack {
2714 const node = el?.gridstackNode;
2715 if (!node) return;
2716 const noMove = node.noMove || this.opts.disableDrag;
2717 const noResize = node.noResize || this.opts.disableResize;
2718
2719 // check for disabled grid first
2720 const disable = this.opts.staticGrid || (noMove && noResize);
2721 if (force || disable) {
2722 if (node._initDD) {
2723 this._removeDD(el); // nukes everything instead of just disable, will add some styles back next
2724 delete node._initDD;
2725 }
2726 if (disable) {
2727 el.classList.add('ui-draggable-disabled', 'ui-resizable-disabled'); // add styles one might depend on #1435
2728 return this;
2729 }
2730 }
2731
2732 if (!node._initDD) {
2733 // variables used/cashed between the 3 start/move/end methods, in addition to node passed above
2734 let cellWidth: number;
2735 let cellHeight: number;
2736
2737 /** called when item starts moving/resizing */
2738 const onStartMoving = (event: Event, ui: DDUIData) => {
2739 // trigger any 'dragstart' / 'resizestart' manually
2740 this.triggerEvent(event, event.target as GridItemHTMLElement);
2741 cellWidth = this.cellWidth();
2742 cellHeight = this.getCellHeight(true); // force pixels for calculations
2743
2744 this._onStartMoving(el, event, ui, node, cellWidth, cellHeight);
2745 }
2746
2747 /** called when item is being dragged/resized */
2748 const dragOrResize = (event: MouseEvent, ui: DDUIData) => {
2749 this._dragOrResize(el, event, ui, node, cellWidth, cellHeight);
2750 }
2751
2752 /** called when the item stops moving/resizing */
2753 const onEndMoving = (event: Event) => {
2754 this.placeholder.remove();
2755 delete this.placeholder.gridstackNode;
2756 delete node._moving;
2757 delete node._resizing;
2758 delete node._event;
2759 delete node._lastTried;
2760 const widthChanged = node.w !== node._orig.w;
2761
2762 // if the item has moved to another grid, we're done here
2763 const target: GridItemHTMLElement = event.target as GridItemHTMLElement;
2764 if (!target.gridstackNode || target.gridstackNode.grid !== this) return;
2765
2766 node.el = target;
2767
2768 if (node._isAboutToRemove) {
2769 const grid = el.gridstackNode.grid;
2770 if (grid._gsEventHandler[event.type]) {

Callers 9

makeSubGridMethod · 0.95
setStaticMethod · 0.95
updateMethod · 0.95
_prepareElementMethod · 0.95
movableMethod · 0.95
resizableMethod · 0.95
enableMoveMethod · 0.95
enableResizeMethod · 0.95
createWidgetDivsMethod · 0.80

Calls 4

_removeDDMethod · 0.95
draggableMethod · 0.80
addMethod · 0.45
resizableMethod · 0.45

Tested by

no test coverage detected