gridstack 8.2.0 → 8.2.2

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 (116) hide show
  1. package/README.md +3 -3
  2. package/angular/README.md +21 -21
  3. package/angular/package.json +1 -1
  4. package/angular/projects/demo/src/app/app.component.ts +7 -7
  5. package/angular/projects/demo/src/app/dummy.component.ts +1 -1
  6. package/angular/projects/lib/package.json +1 -1
  7. package/angular/projects/lib/src/lib/base-widget.ts +1 -1
  8. package/angular/projects/lib/src/lib/gridstack-item.component.ts +1 -1
  9. package/angular/projects/lib/src/lib/gridstack.component.ts +1 -1
  10. package/angular/projects/lib/src/lib/gridstack.module.ts +1 -1
  11. package/dist/angular/README.md +21 -21
  12. package/dist/angular/esm2020/lib/base-widget.mjs +2 -2
  13. package/dist/angular/esm2020/lib/gridstack-item.component.mjs +2 -2
  14. package/dist/angular/esm2020/lib/gridstack.component.mjs +2 -2
  15. package/dist/angular/esm2020/lib/gridstack.module.mjs +2 -2
  16. package/dist/angular/fesm2015/gridstack-angular.mjs +4 -4
  17. package/dist/angular/fesm2015/gridstack-angular.mjs.map +1 -1
  18. package/dist/angular/fesm2020/gridstack-angular.mjs +4 -4
  19. package/dist/angular/fesm2020/gridstack-angular.mjs.map +1 -1
  20. package/dist/angular/lib/gridstack-item.component.d.ts +1 -1
  21. package/dist/angular/lib/gridstack.component.d.ts +1 -1
  22. package/dist/angular/package.json +1 -1
  23. package/dist/angular/src/base-widget.ts +1 -1
  24. package/dist/angular/src/gridstack-item.component.ts +1 -1
  25. package/dist/angular/src/gridstack.component.ts +1 -1
  26. package/dist/angular/src/gridstack.module.ts +1 -1
  27. package/dist/dd-base-impl.d.ts +1 -1
  28. package/dist/dd-base-impl.js +1 -1
  29. package/dist/dd-base-impl.js.map +1 -1
  30. package/dist/dd-draggable.d.ts +1 -1
  31. package/dist/dd-draggable.js +1 -2
  32. package/dist/dd-draggable.js.map +1 -1
  33. package/dist/dd-droppable.d.ts +1 -1
  34. package/dist/dd-droppable.js +1 -1
  35. package/dist/dd-droppable.js.map +1 -1
  36. package/dist/dd-element.d.ts +1 -1
  37. package/dist/dd-element.js +1 -1
  38. package/dist/dd-element.js.map +1 -1
  39. package/dist/dd-gridstack.d.ts +1 -1
  40. package/dist/dd-gridstack.js +1 -1
  41. package/dist/dd-gridstack.js.map +1 -1
  42. package/dist/dd-manager.d.ts +1 -1
  43. package/dist/dd-manager.js +1 -1
  44. package/dist/dd-manager.js.map +1 -1
  45. package/dist/dd-resizable-handle.d.ts +1 -1
  46. package/dist/dd-resizable-handle.js +1 -1
  47. package/dist/dd-resizable-handle.js.map +1 -1
  48. package/dist/dd-resizable.d.ts +1 -1
  49. package/dist/dd-resizable.js +1 -1
  50. package/dist/dd-resizable.js.map +1 -1
  51. package/dist/dd-touch.d.ts +1 -1
  52. package/dist/dd-touch.js +1 -1
  53. package/dist/dd-touch.js.map +1 -1
  54. package/dist/es5/dd-base-impl.d.ts +1 -1
  55. package/dist/es5/dd-base-impl.js +1 -1
  56. package/dist/es5/dd-base-impl.js.map +1 -1
  57. package/dist/es5/dd-draggable.d.ts +1 -1
  58. package/dist/es5/dd-draggable.js +1 -2
  59. package/dist/es5/dd-draggable.js.map +1 -1
  60. package/dist/es5/dd-droppable.d.ts +1 -1
  61. package/dist/es5/dd-droppable.js +1 -1
  62. package/dist/es5/dd-droppable.js.map +1 -1
  63. package/dist/es5/dd-element.d.ts +1 -1
  64. package/dist/es5/dd-element.js +1 -1
  65. package/dist/es5/dd-element.js.map +1 -1
  66. package/dist/es5/dd-gridstack.d.ts +1 -1
  67. package/dist/es5/dd-gridstack.js +1 -1
  68. package/dist/es5/dd-gridstack.js.map +1 -1
  69. package/dist/es5/dd-manager.d.ts +1 -1
  70. package/dist/es5/dd-manager.js +1 -1
  71. package/dist/es5/dd-manager.js.map +1 -1
  72. package/dist/es5/dd-resizable-handle.d.ts +1 -1
  73. package/dist/es5/dd-resizable-handle.js +1 -1
  74. package/dist/es5/dd-resizable-handle.js.map +1 -1
  75. package/dist/es5/dd-resizable.d.ts +1 -1
  76. package/dist/es5/dd-resizable.js +1 -1
  77. package/dist/es5/dd-resizable.js.map +1 -1
  78. package/dist/es5/dd-touch.d.ts +1 -1
  79. package/dist/es5/dd-touch.js +1 -1
  80. package/dist/es5/dd-touch.js.map +1 -1
  81. package/dist/es5/gridstack-all.js +1 -3
  82. package/dist/es5/gridstack-all.js.LICENSE.txt +1 -1
  83. package/dist/es5/gridstack-all.js.map +1 -1
  84. package/dist/es5/gridstack-engine.d.ts +1 -1
  85. package/dist/es5/gridstack-engine.js +10 -6
  86. package/dist/es5/gridstack-engine.js.map +1 -1
  87. package/dist/es5/gridstack-poly.js +1 -1
  88. package/dist/es5/gridstack.d.ts +4 -4
  89. package/dist/es5/gridstack.js +58 -59
  90. package/dist/es5/gridstack.js.map +1 -1
  91. package/dist/es5/types.d.ts +2 -4
  92. package/dist/es5/types.js +1 -1
  93. package/dist/es5/types.js.map +1 -1
  94. package/dist/es5/utils.d.ts +1 -1
  95. package/dist/es5/utils.js +3 -3
  96. package/dist/es5/utils.js.map +1 -1
  97. package/dist/gridstack-all.js +1 -3
  98. package/dist/gridstack-all.js.LICENSE.txt +1 -1
  99. package/dist/gridstack-all.js.map +1 -1
  100. package/dist/gridstack-engine.d.ts +1 -1
  101. package/dist/gridstack-engine.js +10 -6
  102. package/dist/gridstack-engine.js.map +1 -1
  103. package/dist/gridstack.css +11 -8
  104. package/dist/gridstack.d.ts +4 -4
  105. package/dist/gridstack.js +57 -59
  106. package/dist/gridstack.js.map +1 -1
  107. package/dist/gridstack.min.css +1 -1
  108. package/dist/src/gridstack.scss +12 -11
  109. package/dist/types.d.ts +2 -4
  110. package/dist/types.js +1 -1
  111. package/dist/types.js.map +1 -1
  112. package/dist/utils.d.ts +1 -1
  113. package/dist/utils.js +3 -3
  114. package/dist/utils.js.map +1 -1
  115. package/doc/CHANGES.md +13 -0
  116. package/package.json +1 -1
package/dist/gridstack.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * GridStack 8.2.0
2
+ * GridStack 8.2.2
3
3
  * https://gridstackjs.com/
4
4
  *
5
5
  * Copyright (c) 2021-2022 Alain Dumesny
@@ -327,6 +327,10 @@ class GridStack {
327
327
  }
328
328
  if (!el)
329
329
  return;
330
+ // if the caller ended up initializing the widget in addRemoveCB, or we stared with one already, skip the rest
331
+ node = el.gridstackNode;
332
+ if (node && el.parentElement === this.el && this.engine.nodes.find(n => n._id === node._id))
333
+ return el;
330
334
  // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos
331
335
  // as the actual value are filled in when _prepareElement() calls el.getAttribute('gs-xyz') before adding the node.
332
336
  // So make sure we load any DOM attributes that are not specified in passed in options (which override)
@@ -341,21 +345,7 @@ class GridStack {
341
345
  else {
342
346
  this.el.appendChild(el);
343
347
  }
344
- // similar to makeWidget() that doesn't read attr again and worse re-create a new node and loose any _id
345
- this._prepareElement(el, true, options);
346
- this._updateContainerHeight();
347
- // see if there is a sub-grid to create
348
- if (node.subGridOpts) {
349
- this.makeSubGrid(node.el, node.subGridOpts, undefined, false); // node.subGrid will be used as option in method, no need to pass
350
- }
351
- // if we're adding an item into 1 column (_prevColumn is set only when going to 1) make sure
352
- // we don't override the larger 12 column layout that was already saved. #1985
353
- if (this._prevColumn && this.opts.column === 1) {
354
- this._ignoreLayoutsNodeChange = true;
355
- }
356
- this._triggerAddEvent();
357
- this._triggerChangeEvent();
358
- delete this._ignoreLayoutsNodeChange;
348
+ this.makeWidget(el, options);
359
349
  return el;
360
350
  }
361
351
  /**
@@ -580,7 +570,7 @@ class GridStack {
580
570
  }
581
571
  // now add/update the widgets
582
572
  items.forEach(w => {
583
- let item = (w.id || w.id === 0) ? this.engine.nodes.find(n => n.id === w.id) : undefined;
573
+ let item = (w.id !== undefined) ? this.engine.nodes.find(n => n.id === w.id) : undefined;
584
574
  if (item) {
585
575
  this.update(item.el, w);
586
576
  if (w.subGridOpts?.children) { // update any sub grid as well
@@ -627,7 +617,7 @@ class GridStack {
627
617
  // else get first cell height
628
618
  let el = this.el.querySelector('.' + this.opts.itemClass);
629
619
  if (el) {
630
- let height = Utils.toNumber(el.getAttribute('gs-h'));
620
+ let height = Utils.toNumber(el.getAttribute('gs-h')) || 1; // since we don't write 1 anymore
631
621
  return Math.round(el.offsetHeight / height);
632
622
  }
633
623
  // else do entire grid and # of rows (but doesn't work if min-height is the actual constrain)
@@ -854,8 +844,19 @@ class GridStack {
854
844
  let el = GridStack.getElement(els);
855
845
  this._prepareElement(el, true, options);
856
846
  this._updateContainerHeight();
847
+ // see if there is a sub-grid to create
848
+ const node = el.gridstackNode;
849
+ if (node.subGridOpts) {
850
+ this.makeSubGrid(el, node.subGridOpts, undefined, false); // node.subGrid will be used as option in method, no need to pass
851
+ }
852
+ // if we're adding an item into 1 column (_prevColumn is set only when going to 1) make sure
853
+ // we don't override the larger 12 column layout that was already saved. #1985
854
+ if (this._prevColumn && this.opts.column === 1) {
855
+ this._ignoreLayoutsNodeChange = true;
856
+ }
857
857
  this._triggerAddEvent();
858
858
  this._triggerChangeEvent();
859
+ delete this._ignoreLayoutsNodeChange;
859
860
  return el;
860
861
  }
861
862
  /**
@@ -996,9 +997,9 @@ class GridStack {
996
997
  * @param recurse true (default) if sub-grids also get updated
997
998
  */
998
999
  setStatic(val, updateClass = true, recurse = true) {
999
- if (this.opts.staticGrid === val)
1000
+ if (!!this.opts.staticGrid === val)
1000
1001
  return this;
1001
- this.opts.staticGrid = val;
1002
+ val ? this.opts.staticGrid = true : delete this.opts.staticGrid;
1002
1003
  this._setupRemoveDrop();
1003
1004
  this._setupAcceptWidget();
1004
1005
  this.engine.nodes.forEach(n => {
@@ -1313,16 +1314,12 @@ class GridStack {
1313
1314
  return this;
1314
1315
  }
1315
1316
  /** @internal call to read any default attributes from element */
1316
- _readAttr(el) {
1317
+ _readAttr(el, clearDefaultAttr = true) {
1317
1318
  let n = {};
1318
1319
  n.x = Utils.toNumber(el.getAttribute('gs-x'));
1319
1320
  n.y = Utils.toNumber(el.getAttribute('gs-y'));
1320
1321
  n.w = Utils.toNumber(el.getAttribute('gs-w'));
1321
1322
  n.h = Utils.toNumber(el.getAttribute('gs-h'));
1322
- if (!(n.w > 1))
1323
- el.removeAttribute('gs-w');
1324
- if (!(n.h > 1))
1325
- el.removeAttribute('gs-h');
1326
1323
  n.autoPosition = Utils.toBool(el.getAttribute('gs-auto-position'));
1327
1324
  n.noResize = Utils.toBool(el.getAttribute('gs-no-resize'));
1328
1325
  n.noMove = Utils.toBool(el.getAttribute('gs-no-move'));
@@ -1330,17 +1327,24 @@ class GridStack {
1330
1327
  n.id = el.getAttribute('gs-id');
1331
1328
  // read but never written out
1332
1329
  n.maxW = Utils.toNumber(el.getAttribute('gs-max-w'));
1333
- if (n.maxW)
1334
- el.removeAttribute('gs-max-w');
1335
1330
  n.minW = Utils.toNumber(el.getAttribute('gs-min-w'));
1336
- if (n.minW)
1337
- el.removeAttribute('gs-min-w');
1338
1331
  n.maxH = Utils.toNumber(el.getAttribute('gs-max-h'));
1339
- if (n.maxH)
1340
- el.removeAttribute('gs-max-h');
1341
1332
  n.minH = Utils.toNumber(el.getAttribute('gs-min-h'));
1342
- if (n.minH)
1343
- el.removeAttribute('gs-min-h');
1333
+ // v8.x optimization to reduce un-needed attr that don't render or are default CSS
1334
+ if (clearDefaultAttr) {
1335
+ if (n.w === 1)
1336
+ el.removeAttribute('gs-w');
1337
+ if (n.h === 1)
1338
+ el.removeAttribute('gs-h');
1339
+ if (n.maxW)
1340
+ el.removeAttribute('gs-max-w');
1341
+ if (n.minW)
1342
+ el.removeAttribute('gs-min-w');
1343
+ if (n.maxH)
1344
+ el.removeAttribute('gs-max-h');
1345
+ if (n.minH)
1346
+ el.removeAttribute('gs-min-h');
1347
+ }
1344
1348
  // remove any key not found (null or false which is default)
1345
1349
  for (const key in n) {
1346
1350
  if (!n.hasOwnProperty(key))
@@ -1531,40 +1535,34 @@ class GridStack {
1531
1535
  * Enables/Disables dragging by the user of specific grid element. If you want all items, and have it affect future items, use enableMove() instead. No-op for static grids.
1532
1536
  * IF you are looking to prevent an item from moving (due to being pushed around by another during collision) use locked property instead.
1533
1537
  * @param els widget or selector to modify.
1534
- * @param val if true widget will be draggable.
1538
+ * @param val if true widget will be draggable, assuming the parent grid isn't noMove or static.
1535
1539
  */
1536
1540
  movable(els, val) {
1537
1541
  if (this.opts.staticGrid)
1538
1542
  return this; // can't move a static grid!
1539
1543
  GridStack.getElements(els).forEach(el => {
1540
- let node = el.gridstackNode;
1541
- if (!node)
1544
+ let n = el.gridstackNode;
1545
+ if (!n)
1542
1546
  return;
1543
- if (val)
1544
- delete node.noMove;
1545
- else
1546
- node.noMove = true;
1547
- this._prepareDragDropByNode(node); // init DD if need be, and adjust
1547
+ val ? delete n.noMove : n.noMove = true;
1548
+ this._prepareDragDropByNode(n); // init DD if need be, and adjust
1548
1549
  });
1549
1550
  return this;
1550
1551
  }
1551
1552
  /**
1552
1553
  * Enables/Disables user resizing of specific grid element. If you want all items, and have it affect future items, use enableResize() instead. No-op for static grids.
1553
1554
  * @param els widget or selector to modify
1554
- * @param val if true widget will be resizable.
1555
+ * @param val if true widget will be resizable, assuming the parent grid isn't noResize or static.
1555
1556
  */
1556
1557
  resizable(els, val) {
1557
1558
  if (this.opts.staticGrid)
1558
1559
  return this; // can't resize a static grid!
1559
1560
  GridStack.getElements(els).forEach(el => {
1560
- let node = el.gridstackNode;
1561
- if (!node)
1561
+ let n = el.gridstackNode;
1562
+ if (!n)
1562
1563
  return;
1563
- if (val)
1564
- delete node.noResize;
1565
- else
1566
- node.noResize = true;
1567
- this._prepareDragDropByNode(node); // init DD if need be, and adjust
1564
+ val ? delete n.noResize : n.noResize = true;
1565
+ this._prepareDragDropByNode(n); // init DD if need be, and adjust
1568
1566
  });
1569
1567
  return this;
1570
1568
  }
@@ -1582,7 +1580,7 @@ class GridStack {
1582
1580
  if (this.opts.staticGrid)
1583
1581
  return;
1584
1582
  this.enableMove(false, recurse);
1585
- this.enableResize(false, recurse); // @ts-ignore
1583
+ this.enableResize(false, recurse);
1586
1584
  this._triggerEvent('disable');
1587
1585
  return this;
1588
1586
  }
@@ -1599,20 +1597,20 @@ class GridStack {
1599
1597
  if (this.opts.staticGrid)
1600
1598
  return;
1601
1599
  this.enableMove(true, recurse);
1602
- this.enableResize(true, recurse); // @ts-ignore
1600
+ this.enableResize(true, recurse);
1603
1601
  this._triggerEvent('enable');
1604
1602
  return this;
1605
1603
  }
1606
1604
  /**
1607
- * Enables/disables widget moving. No-op for static grids.
1605
+ * Enables/disables widget moving. No-op for static grids, and locally defined items still overrule
1608
1606
  * @param recurse true (default) if sub-grids also get updated
1609
1607
  */
1610
1608
  enableMove(doEnable, recurse = true) {
1611
1609
  if (this.opts.staticGrid)
1612
1610
  return this; // can't move a static grid!
1613
- this.opts.disableDrag = !doEnable; // FIRST before we update children as grid overrides #1658
1611
+ doEnable ? delete this.opts.disableDrag : this.opts.disableDrag = true; // FIRST before we update children as grid overrides #1658
1614
1612
  this.engine.nodes.forEach(n => {
1615
- this.movable(n.el, doEnable);
1613
+ this._prepareDragDropByNode(n);
1616
1614
  if (n.subGrid && recurse)
1617
1615
  n.subGrid.enableMove(doEnable, recurse);
1618
1616
  });
@@ -1625,9 +1623,9 @@ class GridStack {
1625
1623
  enableResize(doEnable, recurse = true) {
1626
1624
  if (this.opts.staticGrid)
1627
1625
  return this; // can't size a static grid!
1628
- this.opts.disableResize = !doEnable; // FIRST before we update children as grid overrides #1658
1626
+ doEnable ? delete this.opts.disableResize : this.opts.disableResize = true; // FIRST before we update children as grid overrides #1658
1629
1627
  this.engine.nodes.forEach(n => {
1630
- this.resizable(n.el, doEnable);
1628
+ this._prepareDragDropByNode(n);
1631
1629
  if (n.subGrid && recurse)
1632
1630
  n.subGrid.enableResize(doEnable, recurse);
1633
1631
  });
@@ -1733,8 +1731,8 @@ class GridStack {
1733
1731
  cellWidth = this.cellWidth();
1734
1732
  cellHeight = this.getCellHeight(true);
1735
1733
  // load any element attributes if we don't have a node
1736
- if (!node) { // @ts-ignore private read only on ourself
1737
- node = this._readAttr(el);
1734
+ if (!node) {
1735
+ node = this._readAttr(el, false); // don't wipe external (e.g. drag toolbar) attr #2354
1738
1736
  }
1739
1737
  if (!node.grid) {
1740
1738
  node._isExternal = true;
@@ -2147,6 +2145,6 @@ class GridStack {
2147
2145
  GridStack.Utils = Utils;
2148
2146
  /** scoping so users can call new GridStack.Engine(12) for example */
2149
2147
  GridStack.Engine = GridStackEngine;
2150
- GridStack.GDRev = '8.2.0';
2148
+ GridStack.GDRev = '8.2.2';
2151
2149
  export { GridStack };
2152
2150
  //# sourceMappingURL=gridstack.js.map