* 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)
| 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]) { |
no test coverage detected