gridstack 4.2.4 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +15 -14
  2. package/dist/gridstack-dd.d.ts +1 -1
  3. package/dist/gridstack-dd.js +37 -32
  4. package/dist/gridstack-dd.js.map +1 -1
  5. package/dist/gridstack-ddi.d.ts +1 -1
  6. package/dist/gridstack-ddi.js +2 -1
  7. package/dist/gridstack-ddi.js.map +1 -1
  8. package/dist/gridstack-engine.d.ts +4 -3
  9. package/dist/gridstack-engine.js +25 -14
  10. package/dist/gridstack-engine.js.map +1 -1
  11. package/dist/gridstack-extra.css +800 -530
  12. package/dist/gridstack-extra.min.css +1 -1
  13. package/dist/gridstack-h5.d.ts +1 -1
  14. package/dist/gridstack-h5.js +1 -1
  15. package/dist/gridstack-h5.js.LICENSE.txt +1 -1
  16. package/dist/gridstack-h5.js.map +1 -1
  17. package/dist/gridstack-jq.d.ts +1 -1
  18. package/dist/gridstack-jq.js +1 -1
  19. package/dist/gridstack-jq.js.LICENSE.txt +1 -1
  20. package/dist/gridstack-jq.js.map +1 -1
  21. package/dist/gridstack-poly.js +1 -1
  22. package/dist/gridstack-static.d.ts +1 -1
  23. package/dist/gridstack-static.js +1 -1
  24. package/dist/gridstack-static.js.LICENSE.txt +1 -1
  25. package/dist/gridstack-static.js.map +1 -1
  26. package/dist/gridstack.css +306 -228
  27. package/dist/gridstack.d.ts +10 -5
  28. package/dist/gridstack.js +54 -34
  29. package/dist/gridstack.js.map +1 -1
  30. package/dist/gridstack.min.css +1 -1
  31. package/dist/h5/dd-base-impl.d.ts +2 -2
  32. package/dist/h5/dd-base-impl.js +2 -1
  33. package/dist/h5/dd-base-impl.js.map +1 -1
  34. package/dist/h5/dd-draggable.d.ts +1 -1
  35. package/dist/h5/dd-draggable.js +5 -1
  36. package/dist/h5/dd-draggable.js.map +1 -1
  37. package/dist/h5/dd-droppable.d.ts +1 -1
  38. package/dist/h5/dd-droppable.js +2 -1
  39. package/dist/h5/dd-droppable.js.map +1 -1
  40. package/dist/h5/dd-element.d.ts +1 -1
  41. package/dist/h5/dd-element.js +2 -1
  42. package/dist/h5/dd-element.js.map +1 -1
  43. package/dist/h5/dd-manager.d.ts +1 -1
  44. package/dist/h5/dd-manager.js +2 -1
  45. package/dist/h5/dd-manager.js.map +1 -1
  46. package/dist/h5/dd-resizable-handle.d.ts +1 -1
  47. package/dist/h5/dd-resizable-handle.js +2 -1
  48. package/dist/h5/dd-resizable-handle.js.map +1 -1
  49. package/dist/h5/dd-resizable.d.ts +1 -1
  50. package/dist/h5/dd-resizable.js +2 -1
  51. package/dist/h5/dd-resizable.js.map +1 -1
  52. package/dist/h5/dd-utils.d.ts +1 -1
  53. package/dist/h5/dd-utils.js +2 -1
  54. package/dist/h5/dd-utils.js.map +1 -1
  55. package/dist/h5/gridstack-dd-native.d.ts +1 -1
  56. package/dist/h5/gridstack-dd-native.js +13 -5
  57. package/dist/h5/gridstack-dd-native.js.map +1 -1
  58. package/dist/jq/gridstack-dd-jqueryui.js +20 -5
  59. package/dist/jq/gridstack-dd-jqueryui.js.map +1 -1
  60. package/dist/src/gridstack-extra.scss +7 -5
  61. package/dist/src/gridstack.scss +8 -6
  62. package/dist/types.d.ts +1 -1
  63. package/dist/types.js +1 -1
  64. package/dist/types.js.map +1 -1
  65. package/dist/utils.d.ts +8 -1
  66. package/dist/utils.js +35 -5
  67. package/dist/utils.js.map +1 -1
  68. package/doc/CHANGES.md +28 -0
  69. package/doc/README.md +8 -5
  70. package/package.json +3 -4
package/README.md CHANGED
@@ -189,10 +189,10 @@ GridStack.init( {column: N} );
189
189
  ```html
190
190
  <link href="node_modules/gridstack/dist/gridstack-extra.css" rel="stylesheet"/>
191
191
 
192
- <div class="grid-stack grid-stack-N">...</div>
192
+ <div class="grid-stack">...</div>
193
193
  ```
194
194
 
195
- Note: class `.grid-stack-N` was added and we include `gridstack-extra.css` which defines CSS for grids with custom [2-11] columns. Anything more and you'll need to generate the SASS/CSS yourself (see next).
195
+ Note: class `.grid-stack-N` will automatically be added and we include `gridstack-extra.css` which defines CSS for grids with custom [2-11] columns. Anything more and you'll need to generate the SASS/CSS yourself (see next).
196
196
 
197
197
  See example: [2 grids demo](http://gridstack.github.io/gridstack.js/demo/two.html) with 6 columns
198
198
 
@@ -204,11 +204,11 @@ For instance for 3-column grid you need to rewrite CSS to be:
204
204
 
205
205
  ```css
206
206
  .grid-stack-item[gs-w="3"] { width: 100% }
207
- .grid-stack-item[gs-w="2"] { width: 66.66666667% }
208
- .grid-stack-item[gs-w="1"] { width: 33.33333333% }
207
+ .grid-stack-item[gs-w="2"] { width: 66.67% }
208
+ .grid-stack-item[gs-w="1"] { width: 33.33% }
209
209
 
210
- .grid-stack-item[gs-x="2"] { left: 66.66666667% }
211
- .grid-stack-item[gs-x="1"] { left: 33.33333333% }
210
+ .grid-stack-item[gs-x="2"] { left: 66.67% }
211
+ .grid-stack-item[gs-x="1"] { left: 33.33% }
212
212
  ```
213
213
 
214
214
  For 4-column grid it should be:
@@ -229,23 +229,23 @@ and so on.
229
229
  Better yet, here is a SASS code snippet which can make life much easier (Thanks to @ascendantofrain, [#81](https://github.com/gridstack/gridstack.js/issues/81) and @StefanM98, [#868](https://github.com/gridstack/gridstack.js/issues/868)) and you can use sites like [sassmeister.com](https://www.sassmeister.com/) to generate the CSS for you instead:
230
230
 
231
231
  ```sass
232
+ @use "sass;math";
232
233
  .grid-stack > .grid-stack-item {
233
234
 
234
235
  $gridstack-columns: 12;
235
236
 
236
- min-width: (100% / $gridstack-columns);
237
+ min-width: math.div(100%, $gridstack-columns);
237
238
 
238
- @for $i from 1 through $gridstack-columns {
239
- &[gs-w='#{$i}'] { width: (100% / $gridstack-columns) * $i; }
240
- &[gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; }
241
- &[gs-min-w='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; }
242
- &[gs-max-w='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; }
239
+ @for $i from 0 through $gridstack-columns {
240
+ &[gs-w='#{$i}'] { width: math.div(100%, $gridstack-columns) * $i; }
241
+ &[gs-x='#{$i}'] { left: math.div(100%, $gridstack-columns) * $i; }
242
+ &[gs-min-w='#{$i}'] { min-width: math.div(100%, $gridstack-columns) * $i; }
243
+ &[gs-max-w='#{$i}'] { max-width: math.div(100%, $gridstack-columns) * $i; }
243
244
  }
244
245
  }
245
246
  ```
246
247
 
247
- you can also use the SASS [src/gridstack-extra.scss](https://github.com/gridstack/gridstack.js/tree/master/src/gridstack-extra.scss) included in NPM package and modify to add more columns
248
- and also have the `.grid-stack-N` prefix to support letting the user change columns dynamically.
248
+ you can also use the SASS [src/gridstack-extra.scss](https://github.com/gridstack/gridstack.js/tree/master/src/gridstack-extra.scss) included in NPM package and modify to add more columns.
249
249
 
250
250
  Sample gulp command for 30 columns:
251
251
  ```js
@@ -298,6 +298,7 @@ search for ['gridstack' under NPM](https://www.npmjs.com/search?q=gridstack&rank
298
298
  - **Rails**: [gridstack-js-rails](https://github.com/randoum/gridstack-js-rails)
299
299
  - **React**: see [demo](https://gridstackjs.com/demo/react.html) with [src](https://github.com/gridstack/gridstack.js/tree/master/demo/react.html), or [react-gridstack-example](https://github.com/Inder2108/react-gridstack-example/tree/master/src/App.js), or read on what [hooks to use](https://github.com/gridstack/gridstack.js/issues/735#issuecomment-329888796)
300
300
  - **Vue**: see [demo](https://gridstackjs.com/demo/vue3js.html) with [v3 src](https://github.com/gridstack/gridstack.js/tree/master/demo/vue3js.html) or [v2 src](https://github.com/gridstack/gridstack.js/tree/master/demo/vue2js.html)
301
+ - **Aurelia**: [aurelia-gridstack](https://github.com/aurelia-ui-toolkits/aurelia-gridstack), see [demo](https://aurelia-ui-toolkits.github.io/aurelia-gridstack/)
301
302
 
302
303
  # Migrating
303
304
  ## Migrating to v0.6
@@ -1,5 +1,5 @@
1
1
  /**
2
- * gridstack-dd.ts 4.2.4
2
+ * gridstack-dd.ts 4.3.0
3
3
  * Copyright (c) 2021 Alain Dumesny - see GridStack root license
4
4
  */
5
5
  import { GridStackDDI } from './gridstack-ddi';
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  /**
3
- * gridstack-dd.ts 4.2.4
3
+ * gridstack-dd.ts 4.3.0
4
4
  * Copyright (c) 2021 Alain Dumesny - see GridStack root license
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.GridStackDD = void 0;
7
8
  /* eslint-disable @typescript-eslint/no-unused-vars */
8
9
  const gridstack_ddi_1 = require("./gridstack-ddi");
9
10
  const gridstack_1 = require("./gridstack");
@@ -36,7 +37,7 @@ exports.GridStackDD = GridStackDD;
36
37
  /** @internal called to add drag over to support widgets being added externally */
37
38
  gridstack_1.GridStack.prototype._setupAcceptWidget = function () {
38
39
  // check if we need to disable things
39
- if (this.opts.staticGrid || !this.opts.acceptWidgets) {
40
+ if (this.opts.staticGrid || (!this.opts.acceptWidgets && !this.opts.removable)) {
40
41
  GridStackDD.get().droppable(this.el, 'destroy');
41
42
  return this;
42
43
  }
@@ -126,7 +127,7 @@ gridstack_1.GridStack.prototype._setupAcceptWidget = function () {
126
127
  cellWidth = this.cellWidth();
127
128
  cellHeight = this.getCellHeight(true);
128
129
  // load any element attributes if we don't have a node
129
- if (!node) {
130
+ if (!node) { // @ts-ignore
130
131
  node = this._readAttr(el);
131
132
  }
132
133
  if (!node.grid) {
@@ -219,17 +220,18 @@ gridstack_1.GridStack.prototype._setupAcceptWidget = function () {
219
220
  return false;
220
221
  el.gridstackNode = node;
221
222
  node.el = el;
223
+ // @ts-ignore
222
224
  utils_1.Utils.copyPos(node, this._readAttr(this.placeholder)); // placeholder values as moving VERY fast can throw things off #1578
223
- utils_1.Utils.removePositioningStyles(el);
225
+ utils_1.Utils.removePositioningStyles(el); // @ts-ignore
224
226
  this._writeAttr(el, node);
225
- this.el.appendChild(el);
227
+ this.el.appendChild(el); // @ts-ignore
226
228
  this._updateContainerHeight();
227
- this.engine.addedNodes.push(node);
228
- this._triggerAddEvent();
229
+ this.engine.addedNodes.push(node); // @ts-ignore
230
+ this._triggerAddEvent(); // @ts-ignore
229
231
  this._triggerChangeEvent();
230
232
  this.engine.endUpdate();
231
233
  if (this._gsEventHandler['dropped']) {
232
- this._gsEventHandler['dropped']({ type: 'dropped' }, origNode && origNode.grid ? origNode : undefined, node);
234
+ this._gsEventHandler['dropped'](Object.assign(Object.assign({}, event), { type: 'dropped' }), origNode && origNode.grid ? origNode : undefined, node);
233
235
  }
234
236
  // wait till we return out of the drag callback to set the new drag&resize handler or they may get messed up
235
237
  window.setTimeout(() => {
@@ -354,13 +356,13 @@ gridstack_1.GridStack.prototype._prepareDragDropByNode = function (node) {
354
356
  else {
355
357
  if (!node._temporaryRemoved) {
356
358
  // move to new placeholder location
357
- utils_1.Utils.removePositioningStyles(target);
359
+ utils_1.Utils.removePositioningStyles(target); // @ts-ignore
358
360
  this._writePosAttr(target, node);
359
361
  }
360
362
  else {
361
363
  // got removed - restore item back to before dragging position
362
364
  utils_1.Utils.removePositioningStyles(target);
363
- utils_1.Utils.copyPos(node, node._orig);
365
+ utils_1.Utils.copyPos(node, node._orig); // @ts-ignore
364
366
  this._writePosAttr(target, node);
365
367
  this.engine.addNode(node);
366
368
  }
@@ -368,8 +370,9 @@ gridstack_1.GridStack.prototype._prepareDragDropByNode = function (node) {
368
370
  this._gsEventHandler[event.type](event, target);
369
371
  }
370
372
  }
371
- this._extraDragRow = 0;
372
- this._updateContainerHeight();
373
+ // @ts-ignore
374
+ this._extraDragRow = 0; // @ts-ignore
375
+ this._updateContainerHeight(); // @ts-ignore
373
376
  this._triggerChangeEvent();
374
377
  this.engine.endUpdate();
375
378
  };
@@ -407,6 +410,7 @@ gridstack_1.GridStack.prototype._prepareDragDropByNode = function (node) {
407
410
  gridstack_1.GridStack.prototype._onStartMoving = function (el, event, ui, node, cellWidth, cellHeight) {
408
411
  this.engine.cleanNodes()
409
412
  .beginUpdate(node);
413
+ // @ts-ignore
410
414
  this._writePosAttr(this.placeholder, node);
411
415
  this.el.appendChild(this.placeholder);
412
416
  // TEST console.log('_onStartMoving placeholder')
@@ -471,6 +475,7 @@ gridstack_1.GridStack.prototype._leave = function (el, helper) {
471
475
  gridstack_1.GridStack.prototype._dragOrResize = function (el, event, ui, node, cellWidth, cellHeight) {
472
476
  let p = Object.assign({}, node._orig); // could be undefined (_isExternal) which is ok (drag only set x,y and w,h will default to node value)
473
477
  let resizing;
478
+ const mLeft = this.opts.marginLeft, mRight = this.opts.marginRight, mTop = this.opts.marginTop, mBottom = this.opts.marginBottom;
474
479
  if (event.type === 'drag') {
475
480
  if (node._temporaryRemoved)
476
481
  return; // handled by dropover
@@ -478,22 +483,22 @@ gridstack_1.GridStack.prototype._dragOrResize = function (el, event, ui, node, c
478
483
  node._prevYPix = ui.position.top;
479
484
  utils_1.Utils.updateScrollPosition(el, ui.position, distance);
480
485
  // get new position taking into account the margin in the direction we are moving! (need to pass mid point by margin)
481
- let left = ui.position.left + (ui.position.left > node._lastUiPosition.left ? -this.opts.marginRight : this.opts.marginLeft);
482
- let top = ui.position.top + (ui.position.top > node._lastUiPosition.top ? -this.opts.marginBottom : this.opts.marginTop);
486
+ let left = ui.position.left + (ui.position.left > node._lastUiPosition.left ? -mRight : mLeft);
487
+ let top = ui.position.top + (ui.position.top > node._lastUiPosition.top ? -mBottom : mTop);
483
488
  p.x = Math.round(left / cellWidth);
484
489
  p.y = Math.round(top / cellHeight);
485
- // if we're at the bottom hitting something else, grow the grid so cursor doesn't leave when trying to place below others
490
+ // @ts-ignore// if we're at the bottom hitting something else, grow the grid so cursor doesn't leave when trying to place below others
486
491
  let prev = this._extraDragRow;
487
492
  if (this.engine.collide(node, p)) {
488
493
  let row = this.getRow();
489
494
  let extra = Math.max(0, (p.y + node.h) - row);
490
495
  if (this.opts.maxRow && row + extra > this.opts.maxRow) {
491
496
  extra = Math.max(0, this.opts.maxRow - row);
492
- }
493
- this._extraDragRow = extra;
497
+ } // @ts-ignore
498
+ this._extraDragRow = extra; // @ts-ignore
494
499
  }
495
500
  else
496
- this._extraDragRow = 0;
501
+ this._extraDragRow = 0; // @ts-ignore
497
502
  if (this._extraDragRow !== prev)
498
503
  this._updateContainerHeight();
499
504
  if (node.x === p.x && node.y === p.y)
@@ -507,36 +512,36 @@ gridstack_1.GridStack.prototype._dragOrResize = function (el, event, ui, node, c
507
512
  // Scrolling page if needed
508
513
  utils_1.Utils.updateScrollResize(event, el, cellHeight);
509
514
  // get new size
510
- p.w = Math.round((ui.size.width - this.opts.marginLeft) / cellWidth);
511
- p.h = Math.round((ui.size.height - this.opts.marginTop) / cellHeight);
515
+ p.w = Math.round((ui.size.width - mLeft) / cellWidth);
516
+ p.h = Math.round((ui.size.height - mTop) / cellHeight);
512
517
  if (node.w === p.w && node.h === p.h)
513
518
  return;
514
519
  if (node._lastTried && node._lastTried.w === p.w && node._lastTried.h === p.h)
515
520
  return; // skip one we tried (but failed)
516
521
  // if we size on left/top side this might move us, so get possible new position as well
517
- let left = ui.position.left + this.opts.marginLeft;
518
- let top = ui.position.top + this.opts.marginTop;
522
+ let left = ui.position.left + mLeft;
523
+ let top = ui.position.top + mTop;
519
524
  p.x = Math.round(left / cellWidth);
520
525
  p.y = Math.round(top / cellHeight);
521
526
  resizing = true;
522
527
  }
523
528
  node._lastTried = p; // set as last tried (will nuke if we go there)
524
529
  let rect = {
525
- x: ui.position.left + this.opts.marginLeft,
526
- y: ui.position.top + this.opts.marginTop,
527
- w: (ui.size ? ui.size.width : node.w * cellWidth) - this.opts.marginLeft - this.opts.marginRight,
528
- h: (ui.size ? ui.size.height : node.h * cellHeight) - this.opts.marginTop - this.opts.marginBottom
530
+ x: ui.position.left + mLeft,
531
+ y: ui.position.top + mTop,
532
+ w: (ui.size ? ui.size.width : node.w * cellWidth) - mLeft - mRight,
533
+ h: (ui.size ? ui.size.height : node.h * cellHeight) - mTop - mBottom
529
534
  };
530
535
  if (this.engine.moveNodeCheck(node, Object.assign(Object.assign({}, p), { cellWidth, cellHeight, rect }))) {
531
536
  node._lastUiPosition = ui.position;
532
- this.engine.cacheRects(cellWidth, cellHeight, this.opts.marginTop, this.opts.marginRight, this.opts.marginBottom, this.opts.marginLeft);
537
+ this.engine.cacheRects(cellWidth, cellHeight, mTop, mRight, mBottom, mLeft);
533
538
  delete node._skipDown;
534
539
  if (resizing && node.subGrid) {
535
540
  node.subGrid.onParentResize();
536
- }
537
- this._extraDragRow = 0;
541
+ } // @ts-ignore
542
+ this._extraDragRow = 0; // @ts-ignore
538
543
  this._updateContainerHeight();
539
- let target = event.target;
544
+ let target = event.target; // @ts-ignore
540
545
  this._writePosAttr(target, node);
541
546
  if (this._gsEventHandler[event.type]) {
542
547
  this._gsEventHandler[event.type](event, target);
@@ -596,7 +601,7 @@ gridstack_1.GridStack.prototype.disable = function () {
596
601
  if (this.opts.staticGrid)
597
602
  return;
598
603
  this.enableMove(false);
599
- this.enableResize(false);
604
+ this.enableResize(false); // @ts-ignore
600
605
  this._triggerEvent('disable');
601
606
  return this;
602
607
  };
@@ -612,7 +617,7 @@ gridstack_1.GridStack.prototype.enable = function () {
612
617
  if (this.opts.staticGrid)
613
618
  return;
614
619
  this.enableMove(true);
615
- this.enableResize(true);
620
+ this.enableResize(true); // @ts-ignore
616
621
  this._triggerEvent('enable');
617
622
  return this;
618
623
  };
@@ -1 +1 @@
1
- {"version":3,"file":"gridstack-dd.js","sourceRoot":"","sources":["../src/gridstack-dd.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * gridstack-dd.ts 4.2.4\r\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\r\n */\r\n\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { GridStackDDI } from './gridstack-ddi';\r\nimport { GridItemHTMLElement, GridStackNode, GridStackElement, DDUIData, DDDragInOpt, GridStackPosition } from './types';\r\nimport { GridStack, MousePosition } from './gridstack';\r\nimport { Utils } from './utils';\r\n\r\n/** Drag&Drop drop options */\r\nexport type DDDropOpt = {\r\n /** function or class type that this grid will accept as dropped items (see GridStackOptions.acceptWidgets) */\r\n accept?: (el: GridItemHTMLElement) => boolean;\r\n}\r\n\r\n/** drag&drop options currently called from the main code, but others can be passed in grid options */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | string | any;\r\nexport type DDKey = 'minWidth' | 'minHeight' | 'maxWidth' | 'maxHeight';\r\nexport type DDValue = number | string;\r\n\r\n/** drag&drop events callbacks */\r\nexport type DDCallback = (event: Event, arg2: GridItemHTMLElement, helper?: GridItemHTMLElement) => void;\r\n\r\n/**\r\n * Base class implementing common Grid drag'n'drop functionality, with domain specific subclass (h5 vs jq subclasses)\r\n */\r\nexport abstract class GridStackDD extends GridStackDDI {\r\n\r\n /** override to cast to correct type */\r\n static get(): GridStackDD {\r\n return GridStackDDI.get() as GridStackDD;\r\n }\r\n\r\n /** removes any drag&drop present (called during destroy) */\r\n public remove(el: GridItemHTMLElement): GridStackDD {\r\n this.draggable(el, 'destroy').resizable(el, 'destroy');\r\n if (el.gridstackNode) {\r\n delete el.gridstackNode._initDD; // reset our DD init flag\r\n }\r\n return this;\r\n }\r\n\r\n // APIs that must be implemented by subclasses to do actual darg/drop/resize called by GridStack code below\r\n\r\n public abstract resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD;\r\n\r\n public abstract isResizable(el: HTMLElement): boolean;\r\n\r\n public abstract draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD;\r\n\r\n public abstract dragIn(el: GridStackElement, opts: DDDragInOpt): GridStackDD;\r\n\r\n public abstract isDraggable(el: HTMLElement): boolean;\r\n\r\n public abstract droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDD;\r\n\r\n public abstract isDroppable(el: HTMLElement): boolean;\r\n\r\n public abstract on(el: GridItemHTMLElement, eventName: string, callback: DDCallback): GridStackDD;\r\n\r\n public abstract off(el: GridItemHTMLElement, eventName: string): GridStackDD;\r\n}\r\n\r\n/********************************************************************************\r\n * GridStack code that is doing drag&drop extracted here so main class is smaller\r\n * for static grid that don't do any of this work anyway. Saves about 10k.\r\n * TODO: no code hint in code below as this is <any> so look at alternatives ?\r\n * https://www.typescriptlang.org/docs/handbook/declaration-merging.html\r\n * https://www.typescriptlang.org/docs/handbook/mixins.html\r\n ********************************************************************************/\r\n\r\n/** @internal called to add drag over to support widgets being added externally */\r\nGridStack.prototype._setupAcceptWidget = function(): GridStack {\r\n\r\n // check if we need to disable things\r\n if (this.opts.staticGrid || !this.opts.acceptWidgets) {\r\n GridStackDD.get().droppable(this.el, 'destroy');\r\n return this;\r\n }\r\n\r\n // vars shared across all methods\r\n let gridPos: MousePosition;\r\n let cellHeight: number, cellWidth: number;\r\n\r\n let onDrag = (event: DragEvent, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n let node = el.gridstackNode;\r\n if (!node) return;\r\n\r\n helper = helper || el;\r\n let rec = helper.getBoundingClientRect();\r\n let left = rec.left - gridPos.left;\r\n let top = rec.top - gridPos.top;\r\n let ui: DDUIData = {position: {top, left}};\r\n\r\n if (node._temporaryRemoved) {\r\n node.x = Math.max(0, Math.round(left / cellWidth));\r\n node.y = Math.max(0, Math.round(top / cellHeight));\r\n delete node.autoPosition;\r\n this.engine.nodeBoundFix(node);\r\n\r\n // don't accept *initial* location if doesn't fit #1419 (locked drop region, or can't grow), but maybe try if it will go somewhere\r\n if (!this.engine.willItFit(node)) {\r\n node.autoPosition = true; // ignore x,y and try for any slot...\r\n if (!this.engine.willItFit(node)) {\r\n GridStackDD.get().off(el, 'drag'); // stop calling us\r\n return; // full grid or can't grow\r\n }\r\n if (node._willFitPos) {\r\n // use the auto position instead #1687\r\n Utils.copyPos(node, node._willFitPos);\r\n delete node._willFitPos;\r\n }\r\n }\r\n\r\n // re-use the existing node dragging method\r\n this._onStartMoving(helper, event, ui, node, cellWidth, cellHeight);\r\n } else {\r\n // re-use the existing node dragging that does so much of the collision detection\r\n this._dragOrResize(helper, event, ui, node, cellWidth, cellHeight);\r\n }\r\n }\r\n\r\n GridStackDD.get()\r\n .droppable(this.el, {\r\n accept: (el: GridItemHTMLElement) => {\r\n let node: GridStackNode = el.gridstackNode;\r\n // set accept drop to true on ourself (which we ignore) so we don't get \"can't drop\" icon in HTML5 mode while moving\r\n if (node && node.grid === this) return true;\r\n if (!this.opts.acceptWidgets) return false;\r\n // check for accept method or class matching\r\n let canAccept = true;\r\n if (typeof this.opts.acceptWidgets === 'function') {\r\n canAccept = this.opts.acceptWidgets(el);\r\n } else {\r\n let selector = (this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets as string);\r\n canAccept = el.matches(selector);\r\n }\r\n // finally check to make sure we actually have space left #1571\r\n if (canAccept && node && this.opts.maxRow) {\r\n let n = {w: node.w, h: node.h, minW: node.minW, minH: node.minH}; // only width/height matters and autoPosition\r\n canAccept = this.engine.willItFit(n);\r\n }\r\n return canAccept;\r\n }\r\n })\r\n /**\r\n * entering our grid area\r\n */\r\n .on(this.el, 'dropover', (event: Event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n let node = el.gridstackNode;\r\n // ignore drop enter on ourself (unless we temporarily removed) which happens on a simple drag of our item\r\n if (node && node.grid === this && !node._temporaryRemoved) {\r\n // delete node._added; // reset this to track placeholder again in case we were over other grid #1484 (dropout doesn't always clear)\r\n return false; // prevent parent from receiving msg (which may be a grid as well)\r\n }\r\n\r\n // fix #1578 when dragging fast, we may not get a leave on the previous grid so force one now\r\n if (node && node.grid && node.grid !== this && !node._temporaryRemoved) {\r\n // TEST console.log('dropover without leave');\r\n let otherGrid = node.grid;\r\n otherGrid._leave(el, helper);\r\n }\r\n\r\n // get grid screen coordinates and cell dimensions\r\n let box = this.el.getBoundingClientRect();\r\n gridPos = {top: box.top, left: box.left};\r\n cellWidth = this.cellWidth();\r\n cellHeight = this.getCellHeight(true);\r\n\r\n // load any element attributes if we don't have a node\r\n if (!node) {\r\n node = this._readAttr(el);\r\n }\r\n if (!node.grid) {\r\n node._isExternal = true;\r\n el.gridstackNode = node;\r\n }\r\n\r\n // calculate the grid size based on element outer size\r\n helper = helper || el;\r\n let w = node.w || Math.round(helper.offsetWidth / cellWidth) || 1;\r\n let h = node.h || Math.round(helper.offsetHeight / cellHeight) || 1;\r\n\r\n // if the item came from another grid, make a copy and save the original info in case we go back there\r\n if (node.grid && node.grid !== this) {\r\n // copy the node original values (min/max/id/etc...) but override width/height/other flags which are this grid specific\r\n // TEST console.log('dropover cloning node');\r\n if (!el._gridstackNodeOrig) el._gridstackNodeOrig = node; // shouldn't have multiple nested!\r\n el.gridstackNode = node = {...node, w, h, grid: this};\r\n this.engine.cleanupNode(node)\r\n .nodeBoundFix(node);\r\n // restore some internal fields we need after clearing them all\r\n node._initDD =\r\n node._isExternal = // DOM needs to be re-parented on a drop\r\n node._temporaryRemoved = true; // so it can be inserted onDrag below\r\n } else {\r\n node.w = w; node.h = h;\r\n node._temporaryRemoved = true; // so we can insert it\r\n }\r\n\r\n // clear any marked for complete removal (Note: don't check _isAboutToRemove as that is cleared above - just do it)\r\n _itemRemoving(node.el, false);\r\n\r\n GridStackDD.get().on(el, 'drag', onDrag);\r\n // make sure this is called at least once when going fast #1578\r\n onDrag(event as DragEvent, el, helper);\r\n return false; // prevent parent from receiving msg (which may be a grid as well)\r\n })\r\n /**\r\n * Leaving our grid area...\r\n */\r\n .on(this.el, 'dropout', (event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n let node = el.gridstackNode;\r\n // fix #1578 when dragging fast, we might get leave after other grid gets enter (which calls us to clean)\r\n // so skip this one if we're not the active grid really..\r\n if (!node.grid || node.grid === this) {\r\n this._leave(el, helper);\r\n }\r\n return false; // prevent parent from receiving msg (which may be grid as well)\r\n })\r\n /**\r\n * end - releasing the mouse\r\n */\r\n .on(this.el, 'drop', (event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n let node = el.gridstackNode;\r\n // ignore drop on ourself from ourself that didn't come from the outside - dragend will handle the simple move instead\r\n if (node && node.grid === this && !node._isExternal) return false;\r\n\r\n let wasAdded = !!this.placeholder.parentElement; // skip items not actually added to us because of constrains, but do cleanup #1419\r\n this.placeholder.remove();\r\n\r\n // notify previous grid of removal\r\n // TEST console.log('drop delete _gridstackNodeOrig')\r\n let origNode = el._gridstackNodeOrig;\r\n delete el._gridstackNodeOrig;\r\n if (wasAdded && origNode && origNode.grid && origNode.grid !== this) {\r\n let oGrid = origNode.grid;\r\n oGrid.engine.removedNodes.push(origNode);\r\n oGrid._triggerRemoveEvent();\r\n }\r\n\r\n if (!node) return false;\r\n\r\n // use existing placeholder node as it's already in our list with drop location\r\n if (wasAdded) {\r\n this.engine.cleanupNode(node); // removes all internal _xyz values\r\n node.grid = this;\r\n }\r\n GridStackDD.get().off(el, 'drag');\r\n // if we made a copy ('helper' which is temp) of the original node then insert a copy, else we move the original node (#1102)\r\n // as the helper will be nuked by jquery-ui otherwise\r\n if (helper !== el) {\r\n helper.remove();\r\n el.gridstackNode = origNode; // original item (left behind) is re-stored to pre dragging as the node now has drop info\r\n if (wasAdded) {\r\n el = el.cloneNode(true) as GridItemHTMLElement;\r\n }\r\n } else {\r\n el.remove(); // reduce flicker as we change depth here, and size further down\r\n GridStackDD.get().remove(el);\r\n }\r\n if (!wasAdded) return false;\r\n el.gridstackNode = node;\r\n node.el = el;\r\n\r\n Utils.copyPos(node, this._readAttr(this.placeholder)); // placeholder values as moving VERY fast can throw things off #1578\r\n Utils.removePositioningStyles(el);\r\n this._writeAttr(el, node);\r\n this.el.appendChild(el);\r\n this._updateContainerHeight();\r\n this.engine.addedNodes.push(node);\r\n this._triggerAddEvent();\r\n this._triggerChangeEvent();\r\n\r\n this.engine.endUpdate();\r\n if (this._gsEventHandler['dropped']) {\r\n this._gsEventHandler['dropped']({type: 'dropped'}, origNode && origNode.grid ? origNode : undefined, node);\r\n }\r\n\r\n // wait till we return out of the drag callback to set the new drag&resize handler or they may get messed up\r\n window.setTimeout(() => {\r\n // IFF we are still there (some application will use as placeholder and insert their real widget instead and better call makeWidget())\r\n if (node.el && node.el.parentElement) {\r\n this._prepareDragDropByNode(node);\r\n } else {\r\n this.engine.removeNode(node);\r\n }\r\n });\r\n\r\n return false; // prevent parent from receiving msg (which may be grid as well)\r\n });\r\n return this;\r\n}\r\n\r\n/** @internal mark item for removal */\r\nfunction _itemRemoving(el: GridItemHTMLElement, remove: boolean) {\r\n let node = el ? el.gridstackNode : undefined;\r\n if (!node || !node.grid) return;\r\n remove ? node._isAboutToRemove = true : delete node._isAboutToRemove;\r\n remove ? el.classList.add('grid-stack-item-removing') : el.classList.remove('grid-stack-item-removing');\r\n}\r\n\r\n/** @internal called to setup a trash drop zone if the user specifies it */\r\nGridStack.prototype._setupRemoveDrop = function(): GridStack {\r\n if (!this.opts.staticGrid && typeof this.opts.removable === 'string') {\r\n let trashEl = document.querySelector(this.opts.removable) as HTMLElement;\r\n if (!trashEl) return this;\r\n // only register ONE drop-over/dropout callback for the 'trash', and it will\r\n // update the passed in item and parent grid because the 'trash' is a shared resource anyway,\r\n // and Native DD only has 1 event CB (having a list and technically a per grid removableOptions complicates things greatly)\r\n if (!GridStackDD.get().isDroppable(trashEl)) {\r\n GridStackDD.get().droppable(trashEl, this.opts.removableOptions)\r\n .on(trashEl, 'dropover', (event, el) => _itemRemoving(el, true))\r\n .on(trashEl, 'dropout', (event, el) => _itemRemoving(el, false));\r\n }\r\n }\r\n return this;\r\n}\r\n\r\n/**\r\n * call to setup dragging in from the outside (say toolbar), by specifying the class selection and options.\r\n * Called during GridStack.init() as options, but can also be called directly (last param are cached) in case the toolbar\r\n * is dynamically create and needs to change later.\r\n **/\r\nGridStack.setupDragIn = function(_dragIn?: string, _dragInOptions?: DDDragInOpt) {\r\n let dragIn: string;\r\n let dragInOptions: DDDragInOpt;\r\n const dragInDefaultOptions: DDDragInOpt = {\r\n revert: 'invalid',\r\n handle: '.grid-stack-item-content',\r\n scroll: false,\r\n appendTo: 'body'\r\n };\r\n\r\n // cache in the passed in values (form grid init?) so they don't have to resend them each time\r\n if (_dragIn) {\r\n dragIn = _dragIn;\r\n dragInOptions = {...dragInDefaultOptions, ...(_dragInOptions || {})};\r\n }\r\n if (typeof dragIn !== 'string') return;\r\n let dd = GridStackDD.get();\r\n Utils.getElements(dragIn).forEach(el => {\r\n if (!dd.isDraggable(el)) dd.dragIn(el, dragInOptions);\r\n });\r\n}\r\n\r\n/** @internal prepares the element for drag&drop **/\r\nGridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): GridStack {\r\n let el = node.el;\r\n let dd = GridStackDD.get();\r\n\r\n // check for disabled grid first\r\n if (this.opts.staticGrid || ((node.noMove || this.opts.disableDrag) && (node.noResize || this.opts.disableResize))) {\r\n if (node._initDD) {\r\n dd.remove(el); // nukes everything instead of just disable, will add some styles back next\r\n delete node._initDD;\r\n }\r\n el.classList.add('ui-draggable-disabled', 'ui-resizable-disabled'); // add styles one might depend on #1435\r\n return this;\r\n }\r\n\r\n if (!node._initDD) {\r\n // variables used/cashed between the 3 start/move/end methods, in addition to node passed above\r\n let cellWidth: number;\r\n let cellHeight: number;\r\n\r\n /** called when item starts moving/resizing */\r\n let onStartMoving = (event: Event, ui: DDUIData) => {\r\n // trigger any 'dragstart' / 'resizestart' manually\r\n if (this._gsEventHandler[event.type]) {\r\n this._gsEventHandler[event.type](event, event.target);\r\n }\r\n cellWidth = this.cellWidth();\r\n cellHeight = this.getCellHeight(true); // force pixels for calculations\r\n\r\n this._onStartMoving(el, event, ui, node, cellWidth, cellHeight);\r\n }\r\n\r\n /** called when item is being dragged/resized */\r\n let dragOrResize = (event: Event, ui: DDUIData) => {\r\n this._dragOrResize(el, event, ui, node, cellWidth, cellHeight);\r\n }\r\n\r\n /** called when the item stops moving/resizing */\r\n let onEndMoving = (event: Event) => {\r\n this.placeholder.remove();\r\n delete node._moving;\r\n delete node._lastTried;\r\n\r\n // if the item has moved to another grid, we're done here\r\n let target: GridItemHTMLElement = event.target as GridItemHTMLElement;\r\n if (!target.gridstackNode || target.gridstackNode.grid !== this) return;\r\n\r\n node.el = target;\r\n\r\n if (node._isAboutToRemove) {\r\n let gridToNotify = el.gridstackNode.grid;\r\n if (gridToNotify._gsEventHandler[event.type]) {\r\n gridToNotify._gsEventHandler[event.type](event, target);\r\n }\r\n dd.remove(el);\r\n gridToNotify.engine.removedNodes.push(node);\r\n gridToNotify._triggerRemoveEvent();\r\n // break circular links and remove DOM\r\n delete el.gridstackNode;\r\n delete node.el;\r\n el.remove();\r\n } else {\r\n if (!node._temporaryRemoved) {\r\n // move to new placeholder location\r\n Utils.removePositioningStyles(target);\r\n this._writePosAttr(target, node);\r\n } else {\r\n // got removed - restore item back to before dragging position\r\n Utils.removePositioningStyles(target);\r\n Utils.copyPos(node, node._orig);\r\n this._writePosAttr(target, node);\r\n this.engine.addNode(node);\r\n }\r\n if (this._gsEventHandler[event.type]) {\r\n this._gsEventHandler[event.type](event, target);\r\n }\r\n }\r\n\r\n this._extraDragRow = 0;\r\n this._updateContainerHeight();\r\n this._triggerChangeEvent();\r\n\r\n this.engine.endUpdate();\r\n }\r\n\r\n dd.draggable(el, {\r\n start: onStartMoving,\r\n stop: onEndMoving,\r\n drag: dragOrResize\r\n }).resizable(el, {\r\n start: onStartMoving,\r\n stop: onEndMoving,\r\n resize: dragOrResize\r\n });\r\n node._initDD = true; // we've set DD support now\r\n }\r\n\r\n // finally fine tune move vs resize by disabling any part...\r\n if (node.noMove || this.opts.disableDrag) {\r\n dd.draggable(el, 'disable');\r\n el.classList.add('ui-draggable-disabled');\r\n } else {\r\n dd.draggable(el, 'enable');\r\n el.classList.remove('ui-draggable-disabled');\r\n }\r\n if (node.noResize || this.opts.disableResize) {\r\n dd.resizable(el, 'disable');\r\n el.classList.add('ui-resizable-disabled');\r\n } else {\r\n dd.resizable(el, 'enable');\r\n el.classList.remove('ui-resizable-disabled');\r\n }\r\n\r\n return this;\r\n}\r\n\r\n/** @internal called when item is starting a drag/resize */\r\nGridStack.prototype._onStartMoving = function(el: GridItemHTMLElement, event: Event, ui: DDUIData, node: GridStackNode, cellWidth: number, cellHeight: number) {\r\n this.engine.cleanNodes()\r\n .beginUpdate(node);\r\n\r\n this._writePosAttr(this.placeholder, node)\r\n this.el.appendChild(this.placeholder);\r\n // TEST console.log('_onStartMoving placeholder')\r\n\r\n node.el = this.placeholder;\r\n node._lastUiPosition = ui.position;\r\n node._prevYPix = ui.position.top;\r\n node._moving = (event.type === 'dragstart'); // 'dropover' are not initially moving so they can go exactly where they enter (will push stuff out of the way)\r\n delete node._lastTried;\r\n\r\n if (event.type === 'dropover' && node._temporaryRemoved) {\r\n // TEST console.log('engine.addNode x=' + node.x);\r\n this.engine.addNode(node); // will add, fix collisions, update attr and clear _temporaryRemoved\r\n node._moving = true; // AFTER, mark as moving object (wanted fix location before)\r\n }\r\n\r\n // set the min/max resize info\r\n this.engine.cacheRects(cellWidth, cellHeight, this.opts.marginTop, this.opts.marginRight, this.opts.marginBottom, this.opts.marginLeft);\r\n if (event.type === 'resizestart') {\r\n let dd = GridStackDD.get()\r\n .resizable(el, 'option', 'minWidth', cellWidth * (node.minW || 1))\r\n .resizable(el, 'option', 'minHeight', cellHeight * (node.minH || 1));\r\n if (node.maxW) { dd.resizable(el, 'option', 'maxWidth', cellWidth * node.maxW); }\r\n if (node.maxH) { dd.resizable(el, 'option', 'maxHeight', cellHeight * node.maxH); }\r\n }\r\n}\r\n\r\n/** @internal called when item leaving our area by either cursor dropout event\r\n * or shape is outside our boundaries. remove it from us, and mark temporary if this was\r\n * our item to start with else restore prev node values from prev grid it came from.\r\n **/\r\nGridStack.prototype._leave = function(el: GridItemHTMLElement, helper?: GridItemHTMLElement) {\r\n let node = el.gridstackNode;\r\n if (!node) return;\r\n\r\n GridStackDD.get().off(el, 'drag'); // no need to track while being outside\r\n\r\n // this gets called when cursor leaves and shape is outside, so only do this once\r\n if (node._temporaryRemoved) return;\r\n node._temporaryRemoved = true;\r\n\r\n this.engine.removeNode(node); // remove placeholder as well, otherwise it's a sign node is not in our list, which is a bigger issue\r\n node.el = node._isExternal && helper ? helper : el; // point back to real item being dragged\r\n\r\n if (this.opts.removable === true) { // boolean vs a class string\r\n // item leaving us and we are supposed to remove on leave (no need to drag onto trash) mark it so\r\n _itemRemoving(el, true);\r\n }\r\n\r\n // finally if item originally came from another grid, but left us, restore things back to prev info\r\n if (el._gridstackNodeOrig) {\r\n // TEST console.log('leave delete _gridstackNodeOrig')\r\n el.gridstackNode = el._gridstackNodeOrig;\r\n delete el._gridstackNodeOrig;\r\n } else if (node._isExternal) {\r\n // item came from outside (like a toolbar) so nuke any node info\r\n delete node.el;\r\n delete el.gridstackNode;\r\n // and restore all nodes back to original\r\n this.engine.restoreInitial();\r\n }\r\n}\r\n\r\n/** @internal called when item is being dragged/resized */\r\nGridStack.prototype._dragOrResize = function(el: GridItemHTMLElement, event: Event, ui: DDUIData, node: GridStackNode, cellWidth: number, cellHeight: number) {\r\n let p = {...node._orig}; // could be undefined (_isExternal) which is ok (drag only set x,y and w,h will default to node value)\r\n let resizing: boolean;\r\n\r\n if (event.type === 'drag') {\r\n if (node._temporaryRemoved) return; // handled by dropover\r\n let distance = ui.position.top - node._prevYPix;\r\n node._prevYPix = ui.position.top;\r\n Utils.updateScrollPosition(el, ui.position, distance);\r\n\r\n // get new position taking into account the margin in the direction we are moving! (need to pass mid point by margin)\r\n let left = ui.position.left + (ui.position.left > node._lastUiPosition.left ? -this.opts.marginRight : this.opts.marginLeft);\r\n let top = ui.position.top + (ui.position.top > node._lastUiPosition.top ? -this.opts.marginBottom : this.opts.marginTop);\r\n p.x = Math.round(left / cellWidth);\r\n p.y = Math.round(top / cellHeight);\r\n\r\n // if we're at the bottom hitting something else, grow the grid so cursor doesn't leave when trying to place below others\r\n let prev = this._extraDragRow;\r\n if (this.engine.collide(node, p)) {\r\n let row = this.getRow();\r\n let extra = Math.max(0, (p.y + node.h) - row);\r\n if (this.opts.maxRow && row + extra > this.opts.maxRow) {\r\n extra = Math.max(0, this.opts.maxRow - row);\r\n }\r\n this._extraDragRow = extra;\r\n } else this._extraDragRow = 0;\r\n if (this._extraDragRow !== prev) this._updateContainerHeight();\r\n\r\n if (node.x === p.x && node.y === p.y) return; // skip same\r\n // DON'T skip one we tried as we might have failed because of coverage <50% before\r\n // if (node._lastTried && node._lastTried.x === x && node._lastTried.y === y) return;\r\n } else if (event.type === 'resize') {\r\n if (p.x < 0) return;\r\n // Scrolling page if needed\r\n Utils.updateScrollResize(event as MouseEvent, el, cellHeight);\r\n\r\n // get new size\r\n p.w = Math.round((ui.size.width - this.opts.marginLeft) / cellWidth);\r\n p.h = Math.round((ui.size.height - this.opts.marginTop) / cellHeight);\r\n if (node.w === p.w && node.h === p.h) return;\r\n if (node._lastTried && node._lastTried.w === p.w && node._lastTried.h === p.h) return; // skip one we tried (but failed)\r\n\r\n // if we size on left/top side this might move us, so get possible new position as well\r\n let left = ui.position.left + this.opts.marginLeft;\r\n let top = ui.position.top + this.opts.marginTop;\r\n p.x = Math.round(left / cellWidth);\r\n p.y = Math.round(top / cellHeight);\r\n\r\n resizing = true;\r\n }\r\n\r\n node._lastTried = p; // set as last tried (will nuke if we go there)\r\n let rect: GridStackPosition = { // screen pix of the dragged box\r\n x: ui.position.left + this.opts.marginLeft,\r\n y: ui.position.top + this.opts.marginTop,\r\n w: (ui.size ? ui.size.width : node.w * cellWidth) - this.opts.marginLeft - this.opts.marginRight,\r\n h: (ui.size ? ui.size.height : node.h * cellHeight) - this.opts.marginTop - this.opts.marginBottom\r\n };\r\n if (this.engine.moveNodeCheck(node, {...p, cellWidth, cellHeight, rect})) {\r\n node._lastUiPosition = ui.position;\r\n this.engine.cacheRects(cellWidth, cellHeight, this.opts.marginTop, this.opts.marginRight, this.opts.marginBottom, this.opts.marginLeft);\r\n delete node._skipDown;\r\n if (resizing && node.subGrid) { (node.subGrid as GridStack).onParentResize(); }\r\n this._extraDragRow = 0;\r\n this._updateContainerHeight();\r\n\r\n let target = event.target as GridItemHTMLElement;\r\n this._writePosAttr(target, node);\r\n if (this._gsEventHandler[event.type]) {\r\n this._gsEventHandler[event.type](event, target);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Enables/Disables moving.\r\n * @param els widget or selector to modify.\r\n * @param val if true widget will be draggable.\r\n */\r\nGridStack.prototype.movable = function(els: GridStackElement, val: boolean): GridStack {\r\n if (this.opts.staticGrid) return this; // can't move a static grid!\r\n GridStack.getElements(els).forEach(el => {\r\n let node = el.gridstackNode;\r\n if (!node) return;\r\n if (val) delete node.noMove; else node.noMove = true;\r\n this._prepareDragDropByNode(node); // init DD if need be, and adjust\r\n });\r\n return this;\r\n}\r\n\r\n/**\r\n * Enables/Disables resizing.\r\n * @param els widget or selector to modify\r\n * @param val if true widget will be resizable.\r\n */\r\nGridStack.prototype.resizable = function(els: GridStackElement, val: boolean): GridStack {\r\n if (this.opts.staticGrid) return this; // can't resize a static grid!\r\n GridStack.getElements(els).forEach(el => {\r\n let node = el.gridstackNode;\r\n if (!node) return;\r\n if (val) delete node.noResize; else node.noResize = true;\r\n this._prepareDragDropByNode(node); // init DD if need be, and adjust\r\n });\r\n return this;\r\n}\r\n\r\n\r\n/**\r\n * Temporarily disables widgets moving/resizing.\r\n * If you want a more permanent way (which freezes up resources) use `setStatic(true)` instead.\r\n * Note: no-op for static grid\r\n * This is a shortcut for:\r\n * @example\r\n * grid.enableMove(false);\r\n * grid.enableResize(false);\r\n */\r\nGridStack.prototype.disable = function(): GridStack {\r\n if (this.opts.staticGrid) return;\r\n this.enableMove(false);\r\n this.enableResize(false);\r\n this._triggerEvent('disable');\r\n return this;\r\n}\r\n\r\n/**\r\n * Re-enables widgets moving/resizing - see disable().\r\n * Note: no-op for static grid.\r\n * This is a shortcut for:\r\n * @example\r\n * grid.enableMove(true);\r\n * grid.enableResize(true);\r\n */\r\nGridStack.prototype.enable = function(): GridStack {\r\n if (this.opts.staticGrid) return;\r\n this.enableMove(true);\r\n this.enableResize(true);\r\n this._triggerEvent('enable');\r\n return this;\r\n}\r\n\r\n/** Enables/disables widget moving. No-op for static grids. */\r\nGridStack.prototype.enableMove = function(doEnable: boolean): GridStack {\r\n if (this.opts.staticGrid) return this; // can't move a static grid!\r\n this.opts.disableDrag = !doEnable; // FIRST before we update children as grid overrides #1658\r\n this.engine.nodes.forEach(n => this.movable(n.el, doEnable));\r\n return this;\r\n}\r\n\r\n/** Enables/disables widget resizing. No-op for static grids. */\r\nGridStack.prototype.enableResize = function(doEnable: boolean): GridStack {\r\n if (this.opts.staticGrid) return this; // can't size a static grid!\r\n this.opts.disableResize = !doEnable; // FIRST before we update children as grid overrides #1658\r\n this.engine.nodes.forEach(n => this.resizable(n.el, doEnable));\r\n return this;\r\n}\r\n"]}
1
+ {"version":3,"file":"gridstack-dd.js","sourceRoot":"","sources":["../src/gridstack-dd.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * gridstack-dd.ts 4.3.0\r\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\r\n */\r\n\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { GridStackDDI } from './gridstack-ddi';\r\nimport { GridItemHTMLElement, GridStackNode, GridStackElement, DDUIData, DDDragInOpt, GridStackPosition } from './types';\r\nimport { GridStack, MousePosition } from './gridstack';\r\nimport { Utils } from './utils';\r\n\r\n/** Drag&Drop drop options */\r\nexport type DDDropOpt = {\r\n /** function or class type that this grid will accept as dropped items (see GridStackOptions.acceptWidgets) */\r\n accept?: (el: GridItemHTMLElement) => boolean;\r\n}\r\n\r\n/** drag&drop options currently called from the main code, but others can be passed in grid options */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | string | any;\r\nexport type DDKey = 'minWidth' | 'minHeight' | 'maxWidth' | 'maxHeight';\r\nexport type DDValue = number | string;\r\n\r\n/** drag&drop events callbacks */\r\nexport type DDCallback = (event: Event, arg2: GridItemHTMLElement, helper?: GridItemHTMLElement) => void;\r\n\r\n/**\r\n * Base class implementing common Grid drag'n'drop functionality, with domain specific subclass (h5 vs jq subclasses)\r\n */\r\nexport abstract class GridStackDD extends GridStackDDI {\r\n\r\n /** override to cast to correct type */\r\n static get(): GridStackDD {\r\n return GridStackDDI.get() as GridStackDD;\r\n }\r\n\r\n /** removes any drag&drop present (called during destroy) */\r\n public remove(el: GridItemHTMLElement): GridStackDD {\r\n this.draggable(el, 'destroy').resizable(el, 'destroy');\r\n if (el.gridstackNode) {\r\n delete el.gridstackNode._initDD; // reset our DD init flag\r\n }\r\n return this;\r\n }\r\n\r\n // APIs that must be implemented by subclasses to do actual darg/drop/resize called by GridStack code below\r\n\r\n public abstract resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD;\r\n\r\n public abstract isResizable(el: HTMLElement): boolean;\r\n\r\n public abstract draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD;\r\n\r\n public abstract dragIn(el: GridStackElement, opts: DDDragInOpt): GridStackDD;\r\n\r\n public abstract isDraggable(el: HTMLElement): boolean;\r\n\r\n public abstract droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDD;\r\n\r\n public abstract isDroppable(el: HTMLElement): boolean;\r\n\r\n public abstract on(el: GridItemHTMLElement, eventName: string, callback: DDCallback): GridStackDD;\r\n\r\n public abstract off(el: GridItemHTMLElement, eventName: string): GridStackDD;\r\n}\r\n\r\n/********************************************************************************\r\n * GridStack code that is doing drag&drop extracted here so main class is smaller\r\n * for static grid that don't do any of this work anyway. Saves about 10k.\r\n * TODO: no code hint in code below as this is <any> so look at alternatives ?\r\n * https://www.typescriptlang.org/docs/handbook/declaration-merging.html\r\n * https://www.typescriptlang.org/docs/handbook/mixins.html\r\n ********************************************************************************/\r\n\r\n/** @internal called to add drag over to support widgets being added externally */\r\nGridStack.prototype._setupAcceptWidget = function(this: GridStack): GridStack {\r\n\r\n // check if we need to disable things\r\n if (this.opts.staticGrid || (!this.opts.acceptWidgets && !this.opts.removable)) {\r\n GridStackDD.get().droppable(this.el, 'destroy');\r\n return this;\r\n }\r\n\r\n // vars shared across all methods\r\n let gridPos: MousePosition;\r\n let cellHeight: number, cellWidth: number;\r\n\r\n let onDrag = (event: DragEvent, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n let node = el.gridstackNode;\r\n if (!node) return;\r\n\r\n helper = helper || el;\r\n let rec = helper.getBoundingClientRect();\r\n let left = rec.left - gridPos.left;\r\n let top = rec.top - gridPos.top;\r\n let ui: DDUIData = {position: {top, left}};\r\n\r\n if (node._temporaryRemoved) {\r\n node.x = Math.max(0, Math.round(left / cellWidth));\r\n node.y = Math.max(0, Math.round(top / cellHeight));\r\n delete node.autoPosition;\r\n this.engine.nodeBoundFix(node);\r\n\r\n // don't accept *initial* location if doesn't fit #1419 (locked drop region, or can't grow), but maybe try if it will go somewhere\r\n if (!this.engine.willItFit(node)) {\r\n node.autoPosition = true; // ignore x,y and try for any slot...\r\n if (!this.engine.willItFit(node)) {\r\n GridStackDD.get().off(el, 'drag'); // stop calling us\r\n return; // full grid or can't grow\r\n }\r\n if (node._willFitPos) {\r\n // use the auto position instead #1687\r\n Utils.copyPos(node, node._willFitPos);\r\n delete node._willFitPos;\r\n }\r\n }\r\n\r\n // re-use the existing node dragging method\r\n this._onStartMoving(helper, event, ui, node, cellWidth, cellHeight);\r\n } else {\r\n // re-use the existing node dragging that does so much of the collision detection\r\n this._dragOrResize(helper, event, ui, node, cellWidth, cellHeight);\r\n }\r\n }\r\n\r\n GridStackDD.get()\r\n .droppable(this.el, {\r\n accept: (el: GridItemHTMLElement) => {\r\n let node: GridStackNode = el.gridstackNode;\r\n // set accept drop to true on ourself (which we ignore) so we don't get \"can't drop\" icon in HTML5 mode while moving\r\n if (node && node.grid === this) return true;\r\n if (!this.opts.acceptWidgets) return false;\r\n // check for accept method or class matching\r\n let canAccept = true;\r\n if (typeof this.opts.acceptWidgets === 'function') {\r\n canAccept = this.opts.acceptWidgets(el);\r\n } else {\r\n let selector = (this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets as string);\r\n canAccept = el.matches(selector);\r\n }\r\n // finally check to make sure we actually have space left #1571\r\n if (canAccept && node && this.opts.maxRow) {\r\n let n = {w: node.w, h: node.h, minW: node.minW, minH: node.minH}; // only width/height matters and autoPosition\r\n canAccept = this.engine.willItFit(n);\r\n }\r\n return canAccept;\r\n }\r\n })\r\n /**\r\n * entering our grid area\r\n */\r\n .on(this.el, 'dropover', (event: Event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n let node = el.gridstackNode;\r\n // ignore drop enter on ourself (unless we temporarily removed) which happens on a simple drag of our item\r\n if (node && node.grid === this && !node._temporaryRemoved) {\r\n // delete node._added; // reset this to track placeholder again in case we were over other grid #1484 (dropout doesn't always clear)\r\n return false; // prevent parent from receiving msg (which may be a grid as well)\r\n }\r\n\r\n // fix #1578 when dragging fast, we may not get a leave on the previous grid so force one now\r\n if (node && node.grid && node.grid !== this && !node._temporaryRemoved) {\r\n // TEST console.log('dropover without leave');\r\n let otherGrid = node.grid;\r\n otherGrid._leave(el, helper);\r\n }\r\n\r\n // get grid screen coordinates and cell dimensions\r\n let box = this.el.getBoundingClientRect();\r\n gridPos = {top: box.top, left: box.left};\r\n cellWidth = this.cellWidth();\r\n cellHeight = this.getCellHeight(true);\r\n\r\n // load any element attributes if we don't have a node\r\n if (!node) {// @ts-ignore\r\n node = this._readAttr(el);\r\n }\r\n if (!node.grid) {\r\n node._isExternal = true;\r\n el.gridstackNode = node;\r\n }\r\n\r\n // calculate the grid size based on element outer size\r\n helper = helper || el;\r\n let w = node.w || Math.round(helper.offsetWidth / cellWidth) || 1;\r\n let h = node.h || Math.round(helper.offsetHeight / cellHeight) || 1;\r\n\r\n // if the item came from another grid, make a copy and save the original info in case we go back there\r\n if (node.grid && node.grid !== this) {\r\n // copy the node original values (min/max/id/etc...) but override width/height/other flags which are this grid specific\r\n // TEST console.log('dropover cloning node');\r\n if (!el._gridstackNodeOrig) el._gridstackNodeOrig = node; // shouldn't have multiple nested!\r\n el.gridstackNode = node = {...node, w, h, grid: this};\r\n this.engine.cleanupNode(node)\r\n .nodeBoundFix(node);\r\n // restore some internal fields we need after clearing them all\r\n node._initDD =\r\n node._isExternal = // DOM needs to be re-parented on a drop\r\n node._temporaryRemoved = true; // so it can be inserted onDrag below\r\n } else {\r\n node.w = w; node.h = h;\r\n node._temporaryRemoved = true; // so we can insert it\r\n }\r\n\r\n // clear any marked for complete removal (Note: don't check _isAboutToRemove as that is cleared above - just do it)\r\n _itemRemoving(node.el, false);\r\n\r\n GridStackDD.get().on(el, 'drag', onDrag);\r\n // make sure this is called at least once when going fast #1578\r\n onDrag(event as DragEvent, el, helper);\r\n return false; // prevent parent from receiving msg (which may be a grid as well)\r\n })\r\n /**\r\n * Leaving our grid area...\r\n */\r\n .on(this.el, 'dropout', (event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n let node = el.gridstackNode;\r\n // fix #1578 when dragging fast, we might get leave after other grid gets enter (which calls us to clean)\r\n // so skip this one if we're not the active grid really..\r\n if (!node.grid || node.grid === this) {\r\n this._leave(el, helper);\r\n }\r\n return false; // prevent parent from receiving msg (which may be grid as well)\r\n })\r\n /**\r\n * end - releasing the mouse\r\n */\r\n .on(this.el, 'drop', (event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => {\r\n let node = el.gridstackNode;\r\n // ignore drop on ourself from ourself that didn't come from the outside - dragend will handle the simple move instead\r\n if (node && node.grid === this && !node._isExternal) return false;\r\n\r\n let wasAdded = !!this.placeholder.parentElement; // skip items not actually added to us because of constrains, but do cleanup #1419\r\n this.placeholder.remove();\r\n\r\n // notify previous grid of removal\r\n // TEST console.log('drop delete _gridstackNodeOrig')\r\n let origNode = el._gridstackNodeOrig;\r\n delete el._gridstackNodeOrig;\r\n if (wasAdded && origNode && origNode.grid && origNode.grid !== this) {\r\n let oGrid = origNode.grid;\r\n oGrid.engine.removedNodes.push(origNode);\r\n oGrid._triggerRemoveEvent();\r\n }\r\n\r\n if (!node) return false;\r\n\r\n // use existing placeholder node as it's already in our list with drop location\r\n if (wasAdded) {\r\n this.engine.cleanupNode(node); // removes all internal _xyz values\r\n node.grid = this;\r\n }\r\n GridStackDD.get().off(el, 'drag');\r\n // if we made a copy ('helper' which is temp) of the original node then insert a copy, else we move the original node (#1102)\r\n // as the helper will be nuked by jquery-ui otherwise\r\n if (helper !== el) {\r\n helper.remove();\r\n el.gridstackNode = origNode; // original item (left behind) is re-stored to pre dragging as the node now has drop info\r\n if (wasAdded) {\r\n el = el.cloneNode(true) as GridItemHTMLElement;\r\n }\r\n } else {\r\n el.remove(); // reduce flicker as we change depth here, and size further down\r\n GridStackDD.get().remove(el);\r\n }\r\n if (!wasAdded) return false;\r\n el.gridstackNode = node;\r\n node.el = el;\r\n // @ts-ignore\r\n Utils.copyPos(node, this._readAttr(this.placeholder)); // placeholder values as moving VERY fast can throw things off #1578\r\n Utils.removePositioningStyles(el);// @ts-ignore\r\n this._writeAttr(el, node);\r\n this.el.appendChild(el);// @ts-ignore\r\n this._updateContainerHeight();\r\n this.engine.addedNodes.push(node);// @ts-ignore\r\n this._triggerAddEvent();// @ts-ignore\r\n this._triggerChangeEvent();\r\n\r\n this.engine.endUpdate();\r\n if (this._gsEventHandler['dropped']) {\r\n this._gsEventHandler['dropped']({...event, type: 'dropped'}, origNode && origNode.grid ? origNode : undefined, node);\r\n }\r\n\r\n // wait till we return out of the drag callback to set the new drag&resize handler or they may get messed up\r\n window.setTimeout(() => {\r\n // IFF we are still there (some application will use as placeholder and insert their real widget instead and better call makeWidget())\r\n if (node.el && node.el.parentElement) {\r\n this._prepareDragDropByNode(node);\r\n } else {\r\n this.engine.removeNode(node);\r\n }\r\n });\r\n\r\n return false; // prevent parent from receiving msg (which may be grid as well)\r\n });\r\n return this;\r\n}\r\n\r\n/** @internal mark item for removal */\r\nfunction _itemRemoving(el: GridItemHTMLElement, remove: boolean) {\r\n let node = el ? el.gridstackNode : undefined;\r\n if (!node || !node.grid) return;\r\n remove ? node._isAboutToRemove = true : delete node._isAboutToRemove;\r\n remove ? el.classList.add('grid-stack-item-removing') : el.classList.remove('grid-stack-item-removing');\r\n}\r\n\r\n/** @internal called to setup a trash drop zone if the user specifies it */\r\nGridStack.prototype._setupRemoveDrop = function(this: GridStack): GridStack {\r\n if (!this.opts.staticGrid && typeof this.opts.removable === 'string') {\r\n let trashEl = document.querySelector(this.opts.removable) as HTMLElement;\r\n if (!trashEl) return this;\r\n // only register ONE drop-over/dropout callback for the 'trash', and it will\r\n // update the passed in item and parent grid because the 'trash' is a shared resource anyway,\r\n // and Native DD only has 1 event CB (having a list and technically a per grid removableOptions complicates things greatly)\r\n if (!GridStackDD.get().isDroppable(trashEl)) {\r\n GridStackDD.get().droppable(trashEl, this.opts.removableOptions)\r\n .on(trashEl, 'dropover', (event, el) => _itemRemoving(el, true))\r\n .on(trashEl, 'dropout', (event, el) => _itemRemoving(el, false));\r\n }\r\n }\r\n return this;\r\n}\r\n\r\n/**\r\n * call to setup dragging in from the outside (say toolbar), by specifying the class selection and options.\r\n * Called during GridStack.init() as options, but can also be called directly (last param are cached) in case the toolbar\r\n * is dynamically create and needs to change later.\r\n **/\r\nGridStack.setupDragIn = function(this: GridStack, _dragIn?: string, _dragInOptions?: DDDragInOpt) {\r\n let dragIn: string;\r\n let dragInOptions: DDDragInOpt;\r\n const dragInDefaultOptions: DDDragInOpt = {\r\n revert: 'invalid',\r\n handle: '.grid-stack-item-content',\r\n scroll: false,\r\n appendTo: 'body'\r\n };\r\n\r\n // cache in the passed in values (form grid init?) so they don't have to resend them each time\r\n if (_dragIn) {\r\n dragIn = _dragIn;\r\n dragInOptions = {...dragInDefaultOptions, ...(_dragInOptions || {})};\r\n }\r\n if (typeof dragIn !== 'string') return;\r\n let dd = GridStackDD.get();\r\n Utils.getElements(dragIn).forEach(el => {\r\n if (!dd.isDraggable(el)) dd.dragIn(el, dragInOptions);\r\n });\r\n}\r\n\r\n/** @internal prepares the element for drag&drop **/\r\nGridStack.prototype._prepareDragDropByNode = function(this: GridStack, node: GridStackNode): GridStack {\r\n let el = node.el;\r\n let dd = GridStackDD.get();\r\n\r\n // check for disabled grid first\r\n if (this.opts.staticGrid || ((node.noMove || this.opts.disableDrag) && (node.noResize || this.opts.disableResize))) {\r\n if (node._initDD) {\r\n dd.remove(el); // nukes everything instead of just disable, will add some styles back next\r\n delete node._initDD;\r\n }\r\n el.classList.add('ui-draggable-disabled', 'ui-resizable-disabled'); // add styles one might depend on #1435\r\n return this;\r\n }\r\n\r\n if (!node._initDD) {\r\n // variables used/cashed between the 3 start/move/end methods, in addition to node passed above\r\n let cellWidth: number;\r\n let cellHeight: number;\r\n\r\n /** called when item starts moving/resizing */\r\n let onStartMoving = (event: Event, ui: DDUIData) => {\r\n // trigger any 'dragstart' / 'resizestart' manually\r\n if (this._gsEventHandler[event.type]) {\r\n this._gsEventHandler[event.type](event, event.target);\r\n }\r\n cellWidth = this.cellWidth();\r\n cellHeight = this.getCellHeight(true); // force pixels for calculations\r\n\r\n this._onStartMoving(el, event, ui, node, cellWidth, cellHeight);\r\n }\r\n\r\n /** called when item is being dragged/resized */\r\n let dragOrResize = (event: Event, ui: DDUIData) => {\r\n this._dragOrResize(el, event, ui, node, cellWidth, cellHeight);\r\n }\r\n\r\n /** called when the item stops moving/resizing */\r\n let onEndMoving = (event: Event) => {\r\n this.placeholder.remove();\r\n delete node._moving;\r\n delete node._lastTried;\r\n\r\n // if the item has moved to another grid, we're done here\r\n let target: GridItemHTMLElement = event.target as GridItemHTMLElement;\r\n if (!target.gridstackNode || target.gridstackNode.grid !== this) return;\r\n\r\n node.el = target;\r\n\r\n if (node._isAboutToRemove) {\r\n let gridToNotify = el.gridstackNode.grid;\r\n if (gridToNotify._gsEventHandler[event.type]) {\r\n gridToNotify._gsEventHandler[event.type](event, target);\r\n }\r\n dd.remove(el);\r\n gridToNotify.engine.removedNodes.push(node);\r\n gridToNotify._triggerRemoveEvent();\r\n // break circular links and remove DOM\r\n delete el.gridstackNode;\r\n delete node.el;\r\n el.remove();\r\n } else {\r\n if (!node._temporaryRemoved) {\r\n // move to new placeholder location\r\n Utils.removePositioningStyles(target);// @ts-ignore\r\n this._writePosAttr(target, node);\r\n } else {\r\n // got removed - restore item back to before dragging position\r\n Utils.removePositioningStyles(target);\r\n Utils.copyPos(node, node._orig);// @ts-ignore\r\n this._writePosAttr(target, node);\r\n this.engine.addNode(node);\r\n }\r\n if (this._gsEventHandler[event.type]) {\r\n this._gsEventHandler[event.type](event, target);\r\n }\r\n }\r\n // @ts-ignore\r\n this._extraDragRow = 0;// @ts-ignore\r\n this._updateContainerHeight();// @ts-ignore\r\n this._triggerChangeEvent();\r\n\r\n this.engine.endUpdate();\r\n }\r\n\r\n dd.draggable(el, {\r\n start: onStartMoving,\r\n stop: onEndMoving,\r\n drag: dragOrResize\r\n }).resizable(el, {\r\n start: onStartMoving,\r\n stop: onEndMoving,\r\n resize: dragOrResize\r\n });\r\n node._initDD = true; // we've set DD support now\r\n }\r\n\r\n // finally fine tune move vs resize by disabling any part...\r\n if (node.noMove || this.opts.disableDrag) {\r\n dd.draggable(el, 'disable');\r\n el.classList.add('ui-draggable-disabled');\r\n } else {\r\n dd.draggable(el, 'enable');\r\n el.classList.remove('ui-draggable-disabled');\r\n }\r\n if (node.noResize || this.opts.disableResize) {\r\n dd.resizable(el, 'disable');\r\n el.classList.add('ui-resizable-disabled');\r\n } else {\r\n dd.resizable(el, 'enable');\r\n el.classList.remove('ui-resizable-disabled');\r\n }\r\n\r\n return this;\r\n}\r\n\r\n/** @internal called when item is starting a drag/resize */\r\nGridStack.prototype._onStartMoving = function(this: GridStack, el: GridItemHTMLElement, event: Event, ui: DDUIData, node: GridStackNode, cellWidth: number, cellHeight: number) {\r\n this.engine.cleanNodes()\r\n .beginUpdate(node);\r\n // @ts-ignore\r\n this._writePosAttr(this.placeholder, node)\r\n this.el.appendChild(this.placeholder);\r\n // TEST console.log('_onStartMoving placeholder')\r\n\r\n node.el = this.placeholder;\r\n node._lastUiPosition = ui.position;\r\n node._prevYPix = ui.position.top;\r\n node._moving = (event.type === 'dragstart'); // 'dropover' are not initially moving so they can go exactly where they enter (will push stuff out of the way)\r\n delete node._lastTried;\r\n\r\n if (event.type === 'dropover' && node._temporaryRemoved) {\r\n // TEST console.log('engine.addNode x=' + node.x);\r\n this.engine.addNode(node); // will add, fix collisions, update attr and clear _temporaryRemoved\r\n node._moving = true; // AFTER, mark as moving object (wanted fix location before)\r\n }\r\n\r\n // set the min/max resize info\r\n this.engine.cacheRects(cellWidth, cellHeight, this.opts.marginTop as number, this.opts.marginRight as number, this.opts.marginBottom as number, this.opts.marginLeft as number);\r\n if (event.type === 'resizestart') {\r\n let dd = GridStackDD.get()\r\n .resizable(el, 'option', 'minWidth', cellWidth * (node.minW || 1))\r\n .resizable(el, 'option', 'minHeight', cellHeight * (node.minH || 1));\r\n if (node.maxW) { dd.resizable(el, 'option', 'maxWidth', cellWidth * node.maxW); }\r\n if (node.maxH) { dd.resizable(el, 'option', 'maxHeight', cellHeight * node.maxH); }\r\n }\r\n}\r\n\r\n/** @internal called when item leaving our area by either cursor dropout event\r\n * or shape is outside our boundaries. remove it from us, and mark temporary if this was\r\n * our item to start with else restore prev node values from prev grid it came from.\r\n **/\r\nGridStack.prototype._leave = function(this: GridStack, el: GridItemHTMLElement, helper?: GridItemHTMLElement) {\r\n let node = el.gridstackNode;\r\n if (!node) return;\r\n\r\n GridStackDD.get().off(el, 'drag'); // no need to track while being outside\r\n\r\n // this gets called when cursor leaves and shape is outside, so only do this once\r\n if (node._temporaryRemoved) return;\r\n node._temporaryRemoved = true;\r\n\r\n this.engine.removeNode(node); // remove placeholder as well, otherwise it's a sign node is not in our list, which is a bigger issue\r\n node.el = node._isExternal && helper ? helper : el; // point back to real item being dragged\r\n\r\n if (this.opts.removable === true) { // boolean vs a class string\r\n // item leaving us and we are supposed to remove on leave (no need to drag onto trash) mark it so\r\n _itemRemoving(el, true);\r\n }\r\n\r\n // finally if item originally came from another grid, but left us, restore things back to prev info\r\n if (el._gridstackNodeOrig) {\r\n // TEST console.log('leave delete _gridstackNodeOrig')\r\n el.gridstackNode = el._gridstackNodeOrig;\r\n delete el._gridstackNodeOrig;\r\n } else if (node._isExternal) {\r\n // item came from outside (like a toolbar) so nuke any node info\r\n delete node.el;\r\n delete el.gridstackNode;\r\n // and restore all nodes back to original\r\n this.engine.restoreInitial();\r\n }\r\n}\r\n\r\n/** @internal called when item is being dragged/resized */\r\nGridStack.prototype._dragOrResize = function(this: GridStack, el: GridItemHTMLElement, event: Event, ui: DDUIData, node: GridStackNode, cellWidth: number, cellHeight: number) {\r\n let p = {...node._orig}; // could be undefined (_isExternal) which is ok (drag only set x,y and w,h will default to node value)\r\n let resizing: boolean;\r\n const mLeft = this.opts.marginLeft as number,\r\n mRight = this.opts.marginRight as number,\r\n mTop = this.opts.marginTop as number,\r\n mBottom = this.opts.marginBottom as number;\r\n\r\n if (event.type === 'drag') {\r\n if (node._temporaryRemoved) return; // handled by dropover\r\n let distance = ui.position.top - node._prevYPix;\r\n node._prevYPix = ui.position.top;\r\n Utils.updateScrollPosition(el, ui.position, distance);\r\n\r\n // get new position taking into account the margin in the direction we are moving! (need to pass mid point by margin)\r\n let left = ui.position.left + (ui.position.left > node._lastUiPosition.left ? -mRight : mLeft);\r\n let top = ui.position.top + (ui.position.top > node._lastUiPosition.top ? -mBottom : mTop);\r\n p.x = Math.round(left / cellWidth);\r\n p.y = Math.round(top / cellHeight);\r\n\r\n // @ts-ignore// if we're at the bottom hitting something else, grow the grid so cursor doesn't leave when trying to place below others\r\n let prev = this._extraDragRow;\r\n if (this.engine.collide(node, p)) {\r\n let row = this.getRow();\r\n let extra = Math.max(0, (p.y + node.h) - row);\r\n if (this.opts.maxRow && row + extra > this.opts.maxRow) {\r\n extra = Math.max(0, this.opts.maxRow - row);\r\n }// @ts-ignore\r\n this._extraDragRow = extra;// @ts-ignore\r\n } else this._extraDragRow = 0;// @ts-ignore\r\n if (this._extraDragRow !== prev) this._updateContainerHeight();\r\n\r\n if (node.x === p.x && node.y === p.y) return; // skip same\r\n // DON'T skip one we tried as we might have failed because of coverage <50% before\r\n // if (node._lastTried && node._lastTried.x === x && node._lastTried.y === y) return;\r\n } else if (event.type === 'resize') {\r\n if (p.x < 0) return;\r\n // Scrolling page if needed\r\n Utils.updateScrollResize(event as MouseEvent, el, cellHeight);\r\n\r\n // get new size\r\n p.w = Math.round((ui.size.width - mLeft) / cellWidth);\r\n p.h = Math.round((ui.size.height - mTop) / cellHeight);\r\n if (node.w === p.w && node.h === p.h) return;\r\n if (node._lastTried && node._lastTried.w === p.w && node._lastTried.h === p.h) return; // skip one we tried (but failed)\r\n\r\n // if we size on left/top side this might move us, so get possible new position as well\r\n let left = ui.position.left + mLeft;\r\n let top = ui.position.top + mTop;\r\n p.x = Math.round(left / cellWidth);\r\n p.y = Math.round(top / cellHeight);\r\n\r\n resizing = true;\r\n }\r\n\r\n node._lastTried = p; // set as last tried (will nuke if we go there)\r\n let rect: GridStackPosition = { // screen pix of the dragged box\r\n x: ui.position.left + mLeft,\r\n y: ui.position.top + mTop,\r\n w: (ui.size ? ui.size.width : node.w * cellWidth) - mLeft - mRight,\r\n h: (ui.size ? ui.size.height : node.h * cellHeight) - mTop - mBottom\r\n };\r\n if (this.engine.moveNodeCheck(node, {...p, cellWidth, cellHeight, rect})) {\r\n node._lastUiPosition = ui.position;\r\n this.engine.cacheRects(cellWidth, cellHeight, mTop, mRight, mBottom, mLeft);\r\n delete node._skipDown;\r\n if (resizing && node.subGrid) { (node.subGrid as GridStack).onParentResize(); }// @ts-ignore\r\n this._extraDragRow = 0;// @ts-ignore\r\n this._updateContainerHeight();\r\n\r\n let target = event.target as GridItemHTMLElement;// @ts-ignore\r\n this._writePosAttr(target, node);\r\n if (this._gsEventHandler[event.type]) {\r\n this._gsEventHandler[event.type](event, target);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Enables/Disables moving.\r\n * @param els widget or selector to modify.\r\n * @param val if true widget will be draggable.\r\n */\r\nGridStack.prototype.movable = function(this: GridStack, els: GridStackElement, val: boolean): GridStack {\r\n if (this.opts.staticGrid) return this; // can't move a static grid!\r\n GridStack.getElements(els).forEach(el => {\r\n let node = el.gridstackNode;\r\n if (!node) return;\r\n if (val) delete node.noMove; else node.noMove = true;\r\n this._prepareDragDropByNode(node); // init DD if need be, and adjust\r\n });\r\n return this;\r\n}\r\n\r\n/**\r\n * Enables/Disables resizing.\r\n * @param els widget or selector to modify\r\n * @param val if true widget will be resizable.\r\n */\r\nGridStack.prototype.resizable = function(this: GridStack, els: GridStackElement, val: boolean): GridStack {\r\n if (this.opts.staticGrid) return this; // can't resize a static grid!\r\n GridStack.getElements(els).forEach(el => {\r\n let node = el.gridstackNode;\r\n if (!node) return;\r\n if (val) delete node.noResize; else node.noResize = true;\r\n this._prepareDragDropByNode(node); // init DD if need be, and adjust\r\n });\r\n return this;\r\n}\r\n\r\n\r\n/**\r\n * Temporarily disables widgets moving/resizing.\r\n * If you want a more permanent way (which freezes up resources) use `setStatic(true)` instead.\r\n * Note: no-op for static grid\r\n * This is a shortcut for:\r\n * @example\r\n * grid.enableMove(false);\r\n * grid.enableResize(false);\r\n */\r\nGridStack.prototype.disable = function(this: GridStack): GridStack {\r\n if (this.opts.staticGrid) return;\r\n this.enableMove(false);\r\n this.enableResize(false);// @ts-ignore\r\n this._triggerEvent('disable');\r\n return this;\r\n}\r\n\r\n/**\r\n * Re-enables widgets moving/resizing - see disable().\r\n * Note: no-op for static grid.\r\n * This is a shortcut for:\r\n * @example\r\n * grid.enableMove(true);\r\n * grid.enableResize(true);\r\n */\r\nGridStack.prototype.enable = function(this: GridStack): GridStack {\r\n if (this.opts.staticGrid) return;\r\n this.enableMove(true);\r\n this.enableResize(true);// @ts-ignore\r\n this._triggerEvent('enable');\r\n return this;\r\n}\r\n\r\n/** Enables/disables widget moving. No-op for static grids. */\r\nGridStack.prototype.enableMove = function(this: GridStack, doEnable: boolean): GridStack {\r\n if (this.opts.staticGrid) return this; // can't move a static grid!\r\n this.opts.disableDrag = !doEnable; // FIRST before we update children as grid overrides #1658\r\n this.engine.nodes.forEach(n => this.movable(n.el, doEnable));\r\n return this;\r\n}\r\n\r\n/** Enables/disables widget resizing. No-op for static grids. */\r\nGridStack.prototype.enableResize = function(this: GridStack, doEnable: boolean): GridStack {\r\n if (this.opts.staticGrid) return this; // can't size a static grid!\r\n this.opts.disableResize = !doEnable; // FIRST before we update children as grid overrides #1658\r\n this.engine.nodes.forEach(n => this.resizable(n.el, doEnable));\r\n return this;\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * gridstack-ddi.ts 4.2.4
2
+ * gridstack-ddi.ts 4.3.0
3
3
  * Copyright (c) 2021 Alain Dumesny - see GridStack root license
4
4
  */
5
5
  import { GridItemHTMLElement } from './types';
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  /**
3
- * gridstack-ddi.ts 4.2.4
3
+ * gridstack-ddi.ts 4.3.0
4
4
  * Copyright (c) 2021 Alain Dumesny - see GridStack root license
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.GridStackDDI = void 0;
7
8
  /**
8
9
  * Abstract Partial Interface API for drag'n'drop plugin - look at GridStackDD and HTML5 / Jquery implementation versions
9
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"gridstack-ddi.js","sourceRoot":"","sources":["../src/gridstack-ddi.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAIH;;GAEG;AACH,MAAa,YAAY;IAIvB,gFAAgF;IAChF,MAAM,CAAC,cAAc,CAAC,WAAgC;QACpD,YAAY,CAAC,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QACrC,OAAO,YAAY,CAAC,GAAG,CAAC;IAC1B,CAAC;IAED,+CAA+C;IAC/C,MAAM,CAAC,GAAG;QACR,OAAO,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;IAED,4DAA4D;IAC5D,gEAAgE;IACzD,MAAM,CAAC,EAAuB;QACnC,OAAO,IAAI,CAAC,CAAC,yBAAyB;IACxC,CAAC;CACF;AApBD,oCAoBC","sourcesContent":["/**\r\n * gridstack-ddi.ts 4.2.4\r\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\r\n */\r\n\r\nimport { GridItemHTMLElement } from './types';\r\n\r\n/**\r\n * Abstract Partial Interface API for drag'n'drop plugin - look at GridStackDD and HTML5 / Jquery implementation versions\r\n */\r\nexport class GridStackDDI {\r\n\r\n protected static ddi: GridStackDDI;\r\n\r\n /** call this method to register your plugin instead of the default no-op one */\r\n static registerPlugin(pluginClass: typeof GridStackDDI): GridStackDDI {\r\n GridStackDDI.ddi = new pluginClass();\r\n return GridStackDDI.ddi;\r\n }\r\n\r\n /** get the current registered plugin to use */\r\n static get(): GridStackDDI {\r\n return GridStackDDI.ddi || GridStackDDI.registerPlugin(GridStackDDI);\r\n }\r\n\r\n /** removes any drag&drop present (called during destroy) */\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n public remove(el: GridItemHTMLElement): GridStackDDI {\r\n return this; // no-op for static grids\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"gridstack-ddi.js","sourceRoot":"","sources":["../src/gridstack-ddi.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH;;GAEG;AACH,MAAa,YAAY;IAIvB,gFAAgF;IAChF,MAAM,CAAC,cAAc,CAAC,WAAgC;QACpD,YAAY,CAAC,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QACrC,OAAO,YAAY,CAAC,GAAG,CAAC;IAC1B,CAAC;IAED,+CAA+C;IAC/C,MAAM,CAAC,GAAG;QACR,OAAO,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;IAED,4DAA4D;IAC5D,gEAAgE;IACzD,MAAM,CAAC,EAAuB;QACnC,OAAO,IAAI,CAAC,CAAC,yBAAyB;IACxC,CAAC;CACF;AApBD,oCAoBC","sourcesContent":["/**\r\n * gridstack-ddi.ts 4.3.0\r\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\r\n */\r\n\r\nimport { GridItemHTMLElement } from './types';\r\n\r\n/**\r\n * Abstract Partial Interface API for drag'n'drop plugin - look at GridStackDD and HTML5 / Jquery implementation versions\r\n */\r\nexport class GridStackDDI {\r\n\r\n protected static ddi: GridStackDDI;\r\n\r\n /** call this method to register your plugin instead of the default no-op one */\r\n static registerPlugin(pluginClass: typeof GridStackDDI): GridStackDDI {\r\n GridStackDDI.ddi = new pluginClass();\r\n return GridStackDDI.ddi;\r\n }\r\n\r\n /** get the current registered plugin to use */\r\n static get(): GridStackDDI {\r\n return GridStackDDI.ddi || GridStackDDI.registerPlugin(GridStackDDI);\r\n }\r\n\r\n /** removes any drag&drop present (called during destroy) */\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n public remove(el: GridItemHTMLElement): GridStackDDI {\r\n return this; // no-op for static grids\r\n }\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * gridstack-engine.ts 4.2.4
2
+ * gridstack-engine.ts 4.3.0
3
3
  * Copyright (c) 2021 Alain Dumesny - see GridStack root license
4
4
  */
5
5
  import { GridStackNode, GridStackPosition, GridStackMoveOpts } from './types';
@@ -43,8 +43,9 @@ export declare class GridStackEngine {
43
43
  /** re-layout grid items to reclaim any empty space */
44
44
  compact(): GridStackEngine;
45
45
  /** enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) */
46
+ set float(val: boolean);
46
47
  /** float getter method */
47
- float: boolean;
48
+ get float(): boolean;
48
49
  /**
49
50
  * given a random node, makes sure it's coordinates/values are valid in the current grid
50
51
  * @param node to adjust
@@ -71,7 +72,7 @@ export declare class GridStackEngine {
71
72
  getRow(): number;
72
73
  beginUpdate(node: GridStackNode): GridStackEngine;
73
74
  endUpdate(): GridStackEngine;
74
- /** saves the current layout returning a list of widgets for serialization */
75
+ /** saves a copy of the current layout returning a list of widgets for serialization */
75
76
  save(saveElement?: boolean): GridStackNode[];
76
77
  /**
77
78
  * call to cache the given layout internally to the given location so we can restore back when column changes size