gridstack 7.1.1 → 7.2.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 (94) hide show
  1. package/README.md +3 -2
  2. package/dist/angular/README.md +93 -0
  3. package/dist/angular/gridstack-item.component.ts +54 -0
  4. package/dist/angular/gridstack.component.ts +172 -0
  5. package/dist/dd-base-impl.d.ts +1 -1
  6. package/dist/dd-base-impl.js +1 -1
  7. package/dist/dd-base-impl.js.map +1 -1
  8. package/dist/dd-draggable.d.ts +1 -1
  9. package/dist/dd-draggable.js +8 -5
  10. package/dist/dd-draggable.js.map +1 -1
  11. package/dist/dd-droppable.d.ts +1 -1
  12. package/dist/dd-droppable.js +1 -1
  13. package/dist/dd-droppable.js.map +1 -1
  14. package/dist/dd-element.d.ts +1 -1
  15. package/dist/dd-element.js +1 -1
  16. package/dist/dd-element.js.map +1 -1
  17. package/dist/dd-gridstack.d.ts +1 -3
  18. package/dist/dd-gridstack.js +1 -628
  19. package/dist/dd-gridstack.js.map +1 -1
  20. package/dist/dd-manager.d.ts +1 -1
  21. package/dist/dd-manager.js +1 -1
  22. package/dist/dd-manager.js.map +1 -1
  23. package/dist/dd-resizable-handle.d.ts +1 -1
  24. package/dist/dd-resizable-handle.js +1 -1
  25. package/dist/dd-resizable-handle.js.map +1 -1
  26. package/dist/dd-resizable.d.ts +1 -1
  27. package/dist/dd-resizable.js +1 -1
  28. package/dist/dd-resizable.js.map +1 -1
  29. package/dist/dd-touch.d.ts +1 -1
  30. package/dist/dd-touch.js +1 -1
  31. package/dist/dd-touch.js.map +1 -1
  32. package/dist/es5/dd-base-impl.d.ts +1 -1
  33. package/dist/es5/dd-base-impl.js +1 -1
  34. package/dist/es5/dd-base-impl.js.map +1 -1
  35. package/dist/es5/dd-draggable.d.ts +1 -1
  36. package/dist/es5/dd-draggable.js +8 -5
  37. package/dist/es5/dd-draggable.js.map +1 -1
  38. package/dist/es5/dd-droppable.d.ts +1 -1
  39. package/dist/es5/dd-droppable.js +1 -1
  40. package/dist/es5/dd-droppable.js.map +1 -1
  41. package/dist/es5/dd-element.d.ts +1 -1
  42. package/dist/es5/dd-element.js +1 -1
  43. package/dist/es5/dd-element.js.map +1 -1
  44. package/dist/es5/dd-gridstack.d.ts +1 -3
  45. package/dist/es5/dd-gridstack.js +1 -634
  46. package/dist/es5/dd-gridstack.js.map +1 -1
  47. package/dist/es5/dd-manager.d.ts +1 -1
  48. package/dist/es5/dd-manager.js +1 -1
  49. package/dist/es5/dd-manager.js.map +1 -1
  50. package/dist/es5/dd-resizable-handle.d.ts +1 -1
  51. package/dist/es5/dd-resizable-handle.js +1 -1
  52. package/dist/es5/dd-resizable-handle.js.map +1 -1
  53. package/dist/es5/dd-resizable.d.ts +1 -1
  54. package/dist/es5/dd-resizable.js +1 -1
  55. package/dist/es5/dd-resizable.js.map +1 -1
  56. package/dist/es5/dd-touch.d.ts +1 -1
  57. package/dist/es5/dd-touch.js +1 -1
  58. package/dist/es5/dd-touch.js.map +1 -1
  59. package/dist/es5/gridstack-all.js +1 -1
  60. package/dist/es5/gridstack-all.js.LICENSE.txt +1 -1
  61. package/dist/es5/gridstack-all.js.map +1 -1
  62. package/dist/es5/gridstack-engine.d.ts +1 -1
  63. package/dist/es5/gridstack-engine.js +1 -1
  64. package/dist/es5/gridstack-engine.js.map +1 -1
  65. package/dist/es5/gridstack-poly.js +1 -1
  66. package/dist/es5/gridstack.d.ts +18 -11
  67. package/dist/es5/gridstack.js +672 -65
  68. package/dist/es5/gridstack.js.map +1 -1
  69. package/dist/es5/types.d.ts +16 -6
  70. package/dist/es5/types.js +1 -1
  71. package/dist/es5/types.js.map +1 -1
  72. package/dist/es5/utils.d.ts +1 -1
  73. package/dist/es5/utils.js +1 -1
  74. package/dist/es5/utils.js.map +1 -1
  75. package/dist/gridstack-all.js +1 -1
  76. package/dist/gridstack-all.js.LICENSE.txt +1 -1
  77. package/dist/gridstack-all.js.map +1 -1
  78. package/dist/gridstack-engine.d.ts +1 -1
  79. package/dist/gridstack-engine.js +1 -1
  80. package/dist/gridstack-engine.js.map +1 -1
  81. package/dist/gridstack.css +1 -1
  82. package/dist/gridstack.d.ts +18 -11
  83. package/dist/gridstack.js +659 -64
  84. package/dist/gridstack.js.map +1 -1
  85. package/dist/src/gridstack.scss +1 -7
  86. package/dist/types.d.ts +16 -6
  87. package/dist/types.js +1 -1
  88. package/dist/types.js.map +1 -1
  89. package/dist/utils.d.ts +1 -1
  90. package/dist/utils.js +1 -1
  91. package/dist/utils.js.map +1 -1
  92. package/doc/CHANGES.md +20 -5
  93. package/doc/README.md +0 -3
  94. package/package.json +2 -2
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
2
  /**
3
- * dd-gridstack.ts 7.1.1
3
+ * dd-gridstack.ts 7.2.0
4
4
  * Copyright (c) 2021 Alain Dumesny - see GridStack root license
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.DDGridStack = void 0;
8
- /* eslint-disable @typescript-eslint/no-unused-vars */
9
- const types_1 = require("./types");
10
- const gridstack_1 = require("./gridstack");
11
8
  const utils_1 = require("./utils");
12
9
  const dd_manager_1 = require("./dd-manager");
13
10
  const dd_element_1 = require("./dd-element");
@@ -16,10 +13,6 @@ const dd_element_1 = require("./dd-element");
16
13
  * HTML Native Mouse and Touch Events Drag and Drop functionality.
17
14
  */
18
15
  class DDGridStack {
19
- /** get the global (but static to this code) DD implementation */
20
- static get() {
21
- return dd;
22
- }
23
16
  resizable(el, opts, key, value) {
24
17
  this._getDDElements(el).forEach(dEl => {
25
18
  if (opts === 'disable' || opts === 'enable') {
@@ -129,624 +122,4 @@ class DDGridStack {
129
122
  }
130
123
  }
131
124
  exports.DDGridStack = DDGridStack;
132
- /** global instance */
133
- const dd = new DDGridStack;
134
- /********************************************************************************
135
- * GridStack code that is doing drag&drop extracted here so main class is smaller
136
- * for static grid that don't do any of this work anyway. Saves about 31k (41k -> 72k)
137
- * https://www.typescriptlang.org/docs/handbook/declaration-merging.html
138
- * https://www.typescriptlang.org/docs/handbook/mixins.html
139
- ********************************************************************************/
140
- /** @internal called to add drag over to support widgets being added externally */
141
- gridstack_1.GridStack.prototype._setupAcceptWidget = function () {
142
- // check if we need to disable things
143
- if (this.opts.staticGrid || (!this.opts.acceptWidgets && !this.opts.removable)) {
144
- dd.droppable(this.el, 'destroy');
145
- return this;
146
- }
147
- // vars shared across all methods
148
- let cellHeight, cellWidth;
149
- let onDrag = (event, el, helper) => {
150
- let node = el.gridstackNode;
151
- if (!node)
152
- return;
153
- helper = helper || el;
154
- let parent = this.el.getBoundingClientRect();
155
- let { top, left } = helper.getBoundingClientRect();
156
- left -= parent.left;
157
- top -= parent.top;
158
- let ui = { position: { top, left } };
159
- if (node._temporaryRemoved) {
160
- node.x = Math.max(0, Math.round(left / cellWidth));
161
- node.y = Math.max(0, Math.round(top / cellHeight));
162
- delete node.autoPosition;
163
- this.engine.nodeBoundFix(node);
164
- // 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
165
- if (!this.engine.willItFit(node)) {
166
- node.autoPosition = true; // ignore x,y and try for any slot...
167
- if (!this.engine.willItFit(node)) {
168
- dd.off(el, 'drag'); // stop calling us
169
- return; // full grid or can't grow
170
- }
171
- if (node._willFitPos) {
172
- // use the auto position instead #1687
173
- utils_1.Utils.copyPos(node, node._willFitPos);
174
- delete node._willFitPos;
175
- }
176
- }
177
- // re-use the existing node dragging method
178
- this._onStartMoving(helper, event, ui, node, cellWidth, cellHeight);
179
- }
180
- else {
181
- // re-use the existing node dragging that does so much of the collision detection
182
- this._dragOrResize(helper, event, ui, node, cellWidth, cellHeight);
183
- }
184
- };
185
- dd.droppable(this.el, {
186
- accept: (el) => {
187
- let node = el.gridstackNode;
188
- // set accept drop to true on ourself (which we ignore) so we don't get "can't drop" icon in HTML5 mode while moving
189
- if ((node === null || node === void 0 ? void 0 : node.grid) === this)
190
- return true;
191
- if (!this.opts.acceptWidgets)
192
- return false;
193
- // check for accept method or class matching
194
- let canAccept = true;
195
- if (typeof this.opts.acceptWidgets === 'function') {
196
- canAccept = this.opts.acceptWidgets(el);
197
- }
198
- else {
199
- let selector = (this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets);
200
- canAccept = el.matches(selector);
201
- }
202
- // finally check to make sure we actually have space left #1571
203
- if (canAccept && node && this.opts.maxRow) {
204
- let n = { w: node.w, h: node.h, minW: node.minW, minH: node.minH }; // only width/height matters and autoPosition
205
- canAccept = this.engine.willItFit(n);
206
- }
207
- return canAccept;
208
- }
209
- })
210
- /**
211
- * entering our grid area
212
- */
213
- .on(this.el, 'dropover', (event, el, helper) => {
214
- // console.log(`over ${this.el.gridstack.opts.id} ${count++}`); // TEST
215
- let node = el.gridstackNode;
216
- // ignore drop enter on ourself (unless we temporarily removed) which happens on a simple drag of our item
217
- if ((node === null || node === void 0 ? void 0 : node.grid) === this && !node._temporaryRemoved) {
218
- // delete node._added; // reset this to track placeholder again in case we were over other grid #1484 (dropout doesn't always clear)
219
- return false; // prevent parent from receiving msg (which may be a grid as well)
220
- }
221
- // fix #1578 when dragging fast, we may not get a leave on the previous grid so force one now
222
- if ((node === null || node === void 0 ? void 0 : node.grid) && node.grid !== this && !node._temporaryRemoved) {
223
- // console.log('dropover without leave'); // TEST
224
- let otherGrid = node.grid;
225
- otherGrid._leave(el, helper);
226
- }
227
- // cache cell dimensions (which don't change), position can animate if we removed an item in otherGrid that affects us...
228
- cellWidth = this.cellWidth();
229
- cellHeight = this.getCellHeight(true);
230
- // load any element attributes if we don't have a node
231
- if (!node) { // @ts-ignore private read only on ourself
232
- node = this._readAttr(el);
233
- }
234
- if (!node.grid) {
235
- node._isExternal = true;
236
- el.gridstackNode = node;
237
- }
238
- // calculate the grid size based on element outer size
239
- helper = helper || el;
240
- let w = node.w || Math.round(helper.offsetWidth / cellWidth) || 1;
241
- let h = node.h || Math.round(helper.offsetHeight / cellHeight) || 1;
242
- // if the item came from another grid, make a copy and save the original info in case we go back there
243
- if (node.grid && node.grid !== this) {
244
- // copy the node original values (min/max/id/etc...) but override width/height/other flags which are this grid specific
245
- // console.log('dropover cloning node'); // TEST
246
- if (!el._gridstackNodeOrig)
247
- el._gridstackNodeOrig = node; // shouldn't have multiple nested!
248
- el.gridstackNode = node = Object.assign(Object.assign({}, node), { w, h, grid: this });
249
- this.engine.cleanupNode(node)
250
- .nodeBoundFix(node);
251
- // restore some internal fields we need after clearing them all
252
- node._initDD =
253
- node._isExternal = // DOM needs to be re-parented on a drop
254
- node._temporaryRemoved = true; // so it can be inserted onDrag below
255
- }
256
- else {
257
- node.w = w;
258
- node.h = h;
259
- node._temporaryRemoved = true; // so we can insert it
260
- }
261
- // clear any marked for complete removal (Note: don't check _isAboutToRemove as that is cleared above - just do it)
262
- _itemRemoving(node.el, false);
263
- dd.on(el, 'drag', onDrag);
264
- // make sure this is called at least once when going fast #1578
265
- onDrag(event, el, helper);
266
- return false; // prevent parent from receiving msg (which may be a grid as well)
267
- })
268
- /**
269
- * Leaving our grid area...
270
- */
271
- .on(this.el, 'dropout', (event, el, helper) => {
272
- // console.log(`out ${this.el.gridstack.opts.id} ${count++}`); // TEST
273
- let node = el.gridstackNode;
274
- if (!node)
275
- return false;
276
- // fix #1578 when dragging fast, we might get leave after other grid gets enter (which calls us to clean)
277
- // so skip this one if we're not the active grid really..
278
- if (!node.grid || node.grid === this) {
279
- this._leave(el, helper);
280
- // if we were created as temporary nested grid, go back to before state
281
- if (this._isTemp) {
282
- this.removeAsSubGrid(node);
283
- }
284
- }
285
- return false; // prevent parent from receiving msg (which may be grid as well)
286
- })
287
- /**
288
- * end - releasing the mouse
289
- */
290
- .on(this.el, 'drop', (event, el, helper) => {
291
- var _a, _b;
292
- let node = el.gridstackNode;
293
- // ignore drop on ourself from ourself that didn't come from the outside - dragend will handle the simple move instead
294
- if ((node === null || node === void 0 ? void 0 : node.grid) === this && !node._isExternal)
295
- return false;
296
- let wasAdded = !!this.placeholder.parentElement; // skip items not actually added to us because of constrains, but do cleanup #1419
297
- this.placeholder.remove();
298
- // notify previous grid of removal
299
- // console.log('drop delete _gridstackNodeOrig') // TEST
300
- let origNode = el._gridstackNodeOrig;
301
- delete el._gridstackNodeOrig;
302
- if (wasAdded && (origNode === null || origNode === void 0 ? void 0 : origNode.grid) && origNode.grid !== this) {
303
- let oGrid = origNode.grid;
304
- oGrid.engine.removedNodes.push(origNode);
305
- oGrid._triggerRemoveEvent();
306
- // if it's an empty sub-grid, to get auto-created, nuke it
307
- if (oGrid.parentGridItem && !oGrid.engine.nodes.length && oGrid.opts.subGridDynamic) {
308
- oGrid.removeAsSubGrid();
309
- }
310
- }
311
- if (!node)
312
- return false;
313
- // use existing placeholder node as it's already in our list with drop location
314
- if (wasAdded) {
315
- this.engine.cleanupNode(node); // removes all internal _xyz values
316
- node.grid = this;
317
- }
318
- dd.off(el, 'drag');
319
- // if we made a copy ('helper' which is temp) of the original node then insert a copy, else we move the original node (#1102)
320
- // as the helper will be nuked by jquery-ui otherwise
321
- if (helper !== el) {
322
- helper.remove();
323
- el.gridstackNode = origNode; // original item (left behind) is re-stored to pre dragging as the node now has drop info
324
- if (wasAdded) {
325
- el = el.cloneNode(true);
326
- }
327
- }
328
- else {
329
- el.remove(); // reduce flicker as we change depth here, and size further down
330
- this._removeDD(el);
331
- }
332
- if (!wasAdded)
333
- return false;
334
- el.gridstackNode = node;
335
- node.el = el;
336
- let subGrid = (_b = (_a = node.subGrid) === null || _a === void 0 ? void 0 : _a.el) === null || _b === void 0 ? void 0 : _b.gridstack; // set when actual sub-grid present
337
- // @ts-ignore
338
- utils_1.Utils.copyPos(node, this._readAttr(this.placeholder)); // placeholder values as moving VERY fast can throw things off #1578
339
- utils_1.Utils.removePositioningStyles(el); // @ts-ignore
340
- this._writeAttr(el, node);
341
- this.el.appendChild(el); // @ts-ignore // TODO: now would be ideal time to _removeHelperStyle() overriding floating styles (native only)
342
- if (subGrid) {
343
- subGrid.parentGridItem = node;
344
- if (!subGrid.opts.styleInHead)
345
- subGrid._updateStyles(true); // re-create sub-grid styles now that we've moved
346
- }
347
- this._updateContainerHeight();
348
- this.engine.addedNodes.push(node); // @ts-ignore
349
- this._triggerAddEvent(); // @ts-ignore
350
- this._triggerChangeEvent();
351
- this.engine.endUpdate();
352
- if (this._gsEventHandler['dropped']) {
353
- this._gsEventHandler['dropped'](Object.assign(Object.assign({}, event), { type: 'dropped' }), origNode && origNode.grid ? origNode : undefined, node);
354
- }
355
- // wait till we return out of the drag callback to set the new drag&resize handler or they may get messed up
356
- window.setTimeout(() => {
357
- // IFF we are still there (some application will use as placeholder and insert their real widget instead and better call makeWidget())
358
- if (node.el && node.el.parentElement) {
359
- this._prepareDragDropByNode(node);
360
- }
361
- else {
362
- this.engine.removeNode(node);
363
- }
364
- delete node.grid._isTemp;
365
- });
366
- return false; // prevent parent from receiving msg (which may be grid as well)
367
- });
368
- return this;
369
- };
370
- /** @internal mark item for removal */
371
- function _itemRemoving(el, remove) {
372
- let node = el ? el.gridstackNode : undefined;
373
- if (!node || !node.grid)
374
- return;
375
- remove ? node._isAboutToRemove = true : delete node._isAboutToRemove;
376
- remove ? el.classList.add('grid-stack-item-removing') : el.classList.remove('grid-stack-item-removing');
377
- }
378
- /** @internal called to setup a trash drop zone if the user specifies it */
379
- gridstack_1.GridStack.prototype._setupRemoveDrop = function () {
380
- if (!this.opts.staticGrid && typeof this.opts.removable === 'string') {
381
- let trashEl = document.querySelector(this.opts.removable);
382
- if (!trashEl)
383
- return this;
384
- // only register ONE drop-over/dropout callback for the 'trash', and it will
385
- // update the passed in item and parent grid because the 'trash' is a shared resource anyway,
386
- // and Native DD only has 1 event CB (having a list and technically a per grid removableOptions complicates things greatly)
387
- if (!dd.isDroppable(trashEl)) {
388
- dd.droppable(trashEl, this.opts.removableOptions)
389
- .on(trashEl, 'dropover', (event, el) => _itemRemoving(el, true))
390
- .on(trashEl, 'dropout', (event, el) => _itemRemoving(el, false));
391
- }
392
- }
393
- return this;
394
- };
395
- /**
396
- * call to setup dragging in from the outside (say toolbar), by specifying the class selection and options.
397
- * Called during GridStack.init() as options, but can also be called directly (last param are used) in case the toolbar
398
- * is dynamically create and needs to change later.
399
- **/
400
- gridstack_1.GridStack.setupDragIn = function (dragIn, dragInOptions) {
401
- if ((dragInOptions === null || dragInOptions === void 0 ? void 0 : dragInOptions.pause) !== undefined) {
402
- dd_manager_1.DDManager.pauseDrag = dragInOptions.pause;
403
- }
404
- if (typeof dragIn === 'string') {
405
- dragInOptions = Object.assign(Object.assign({}, types_1.dragInDefaultOptions), (dragInOptions || {}));
406
- utils_1.Utils.getElements(dragIn).forEach(el => {
407
- if (!dd.isDraggable(el))
408
- dd.dragIn(el, dragInOptions);
409
- });
410
- }
411
- };
412
- /** @internal prepares the element for drag&drop **/
413
- gridstack_1.GridStack.prototype._prepareDragDropByNode = function (node) {
414
- let el = node.el;
415
- const noMove = node.noMove || this.opts.disableDrag;
416
- const noResize = node.noResize || this.opts.disableResize;
417
- // check for disabled grid first
418
- if (this.opts.staticGrid || (noMove && noResize)) {
419
- if (node._initDD) {
420
- this._removeDD(el); // nukes everything instead of just disable, will add some styles back next
421
- delete node._initDD;
422
- }
423
- el.classList.add('ui-draggable-disabled', 'ui-resizable-disabled'); // add styles one might depend on #1435
424
- return this;
425
- }
426
- if (!node._initDD) {
427
- // variables used/cashed between the 3 start/move/end methods, in addition to node passed above
428
- let cellWidth;
429
- let cellHeight;
430
- /** called when item starts moving/resizing */
431
- let onStartMoving = (event, ui) => {
432
- // trigger any 'dragstart' / 'resizestart' manually
433
- if (this._gsEventHandler[event.type]) {
434
- this._gsEventHandler[event.type](event, event.target);
435
- }
436
- cellWidth = this.cellWidth();
437
- cellHeight = this.getCellHeight(true); // force pixels for calculations
438
- this._onStartMoving(el, event, ui, node, cellWidth, cellHeight);
439
- };
440
- /** called when item is being dragged/resized */
441
- let dragOrResize = (event, ui) => {
442
- this._dragOrResize(el, event, ui, node, cellWidth, cellHeight);
443
- };
444
- /** called when the item stops moving/resizing */
445
- let onEndMoving = (event) => {
446
- this.placeholder.remove();
447
- delete node._moving;
448
- delete node._event;
449
- delete node._lastTried;
450
- // if the item has moved to another grid, we're done here
451
- let target = event.target;
452
- if (!target.gridstackNode || target.gridstackNode.grid !== this)
453
- return;
454
- node.el = target;
455
- if (node._isAboutToRemove) {
456
- let gridToNotify = el.gridstackNode.grid;
457
- if (gridToNotify._gsEventHandler[event.type]) {
458
- gridToNotify._gsEventHandler[event.type](event, target);
459
- }
460
- this._removeDD(el);
461
- gridToNotify.engine.removedNodes.push(node);
462
- gridToNotify._triggerRemoveEvent();
463
- // break circular links and remove DOM
464
- delete el.gridstackNode;
465
- delete node.el;
466
- el.remove();
467
- }
468
- else {
469
- utils_1.Utils.removePositioningStyles(target);
470
- if (node._temporaryRemoved) {
471
- // got removed - restore item back to before dragging position
472
- utils_1.Utils.copyPos(node, node._orig); // @ts-ignore
473
- this._writePosAttr(target, node);
474
- this.engine.addNode(node);
475
- }
476
- else {
477
- // move to new placeholder location
478
- this._writePosAttr(target, node);
479
- }
480
- if (this._gsEventHandler[event.type]) {
481
- this._gsEventHandler[event.type](event, target);
482
- }
483
- }
484
- // @ts-ignore
485
- this._extraDragRow = 0; // @ts-ignore
486
- this._updateContainerHeight(); // @ts-ignore
487
- this._triggerChangeEvent();
488
- this.engine.endUpdate();
489
- };
490
- dd.draggable(el, {
491
- start: onStartMoving,
492
- stop: onEndMoving,
493
- drag: dragOrResize
494
- }).resizable(el, {
495
- start: onStartMoving,
496
- stop: onEndMoving,
497
- resize: dragOrResize
498
- });
499
- node._initDD = true; // we've set DD support now
500
- }
501
- // finally fine tune move vs resize by disabling any part...
502
- dd.draggable(el, noMove ? 'disable' : 'enable')
503
- .resizable(el, noResize ? 'disable' : 'enable');
504
- return this;
505
- };
506
- /** @internal called when item is starting a drag/resize */
507
- gridstack_1.GridStack.prototype._onStartMoving = function (el, event, ui, node, cellWidth, cellHeight) {
508
- this.engine.cleanNodes()
509
- .beginUpdate(node);
510
- // @ts-ignore
511
- this._writePosAttr(this.placeholder, node);
512
- this.el.appendChild(this.placeholder);
513
- // console.log('_onStartMoving placeholder') // TEST
514
- node.el = this.placeholder;
515
- node._lastUiPosition = ui.position;
516
- node._prevYPix = ui.position.top;
517
- 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)
518
- delete node._lastTried;
519
- if (event.type === 'dropover' && node._temporaryRemoved) {
520
- // console.log('engine.addNode x=' + node.x); // TEST
521
- this.engine.addNode(node); // will add, fix collisions, update attr and clear _temporaryRemoved
522
- node._moving = true; // AFTER, mark as moving object (wanted fix location before)
523
- }
524
- // set the min/max resize info
525
- this.engine.cacheRects(cellWidth, cellHeight, this.opts.marginTop, this.opts.marginRight, this.opts.marginBottom, this.opts.marginLeft);
526
- if (event.type === 'resizestart') {
527
- dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minW || 1))
528
- .resizable(el, 'option', 'minHeight', cellHeight * (node.minH || 1));
529
- if (node.maxW) {
530
- dd.resizable(el, 'option', 'maxWidth', cellWidth * node.maxW);
531
- }
532
- if (node.maxH) {
533
- dd.resizable(el, 'option', 'maxHeight', cellHeight * node.maxH);
534
- }
535
- }
536
- };
537
- /** @internal called when item leaving our area by either cursor dropout event
538
- * or shape is outside our boundaries. remove it from us, and mark temporary if this was
539
- * our item to start with else restore prev node values from prev grid it came from.
540
- **/
541
- gridstack_1.GridStack.prototype._leave = function (el, helper) {
542
- let node = el.gridstackNode;
543
- if (!node)
544
- return;
545
- dd.off(el, 'drag'); // no need to track while being outside
546
- // this gets called when cursor leaves and shape is outside, so only do this once
547
- if (node._temporaryRemoved)
548
- return;
549
- node._temporaryRemoved = true;
550
- this.engine.removeNode(node); // remove placeholder as well, otherwise it's a sign node is not in our list, which is a bigger issue
551
- node.el = node._isExternal && helper ? helper : el; // point back to real item being dragged
552
- if (this.opts.removable === true) { // boolean vs a class string
553
- // item leaving us and we are supposed to remove on leave (no need to drag onto trash) mark it so
554
- _itemRemoving(el, true);
555
- }
556
- // finally if item originally came from another grid, but left us, restore things back to prev info
557
- if (el._gridstackNodeOrig) {
558
- // console.log('leave delete _gridstackNodeOrig') // TEST
559
- el.gridstackNode = el._gridstackNodeOrig;
560
- delete el._gridstackNodeOrig;
561
- }
562
- else if (node._isExternal) {
563
- // item came from outside (like a toolbar) so nuke any node info
564
- delete node.el;
565
- delete el.gridstackNode;
566
- // and restore all nodes back to original
567
- this.engine.restoreInitial();
568
- }
569
- };
570
- /** @internal called when item is being dragged/resized */
571
- gridstack_1.GridStack.prototype._dragOrResize = function (el, event, ui, node, cellWidth, cellHeight) {
572
- 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)
573
- let resizing;
574
- let mLeft = this.opts.marginLeft, mRight = this.opts.marginRight, mTop = this.opts.marginTop, mBottom = this.opts.marginBottom;
575
- // if margins (which are used to pass mid point by) are large relative to cell height/width, reduce them down #1855
576
- let mHeight = Math.round(cellHeight * 0.1), mWidth = Math.round(cellWidth * 0.1);
577
- mLeft = Math.min(mLeft, mWidth);
578
- mRight = Math.min(mRight, mWidth);
579
- mTop = Math.min(mTop, mHeight);
580
- mBottom = Math.min(mBottom, mHeight);
581
- if (event.type === 'drag') {
582
- if (node._temporaryRemoved)
583
- return; // handled by dropover
584
- let distance = ui.position.top - node._prevYPix;
585
- node._prevYPix = ui.position.top;
586
- utils_1.Utils.updateScrollPosition(el, ui.position, distance);
587
- // get new position taking into account the margin in the direction we are moving! (need to pass mid point by margin)
588
- let left = ui.position.left + (ui.position.left > node._lastUiPosition.left ? -mRight : mLeft);
589
- let top = ui.position.top + (ui.position.top > node._lastUiPosition.top ? -mBottom : mTop);
590
- p.x = Math.round(left / cellWidth);
591
- p.y = Math.round(top / cellHeight);
592
- // @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
593
- let prev = this._extraDragRow;
594
- if (this.engine.collide(node, p)) {
595
- let row = this.getRow();
596
- let extra = Math.max(0, (p.y + node.h) - row);
597
- if (this.opts.maxRow && row + extra > this.opts.maxRow) {
598
- extra = Math.max(0, this.opts.maxRow - row);
599
- } // @ts-ignore
600
- this._extraDragRow = extra; // @ts-ignore
601
- }
602
- else
603
- this._extraDragRow = 0; // @ts-ignore
604
- if (this._extraDragRow !== prev)
605
- this._updateContainerHeight();
606
- if (node.x === p.x && node.y === p.y)
607
- return; // skip same
608
- // DON'T skip one we tried as we might have failed because of coverage <50% before
609
- // if (node._lastTried && node._lastTried.x === x && node._lastTried.y === y) return;
610
- }
611
- else if (event.type === 'resize') {
612
- if (p.x < 0)
613
- return;
614
- // Scrolling page if needed
615
- utils_1.Utils.updateScrollResize(event, el, cellHeight);
616
- // get new size
617
- p.w = Math.round((ui.size.width - mLeft) / cellWidth);
618
- p.h = Math.round((ui.size.height - mTop) / cellHeight);
619
- if (node.w === p.w && node.h === p.h)
620
- return;
621
- if (node._lastTried && node._lastTried.w === p.w && node._lastTried.h === p.h)
622
- return; // skip one we tried (but failed)
623
- // if we size on left/top side this might move us, so get possible new position as well
624
- let left = ui.position.left + mLeft;
625
- let top = ui.position.top + mTop;
626
- p.x = Math.round(left / cellWidth);
627
- p.y = Math.round(top / cellHeight);
628
- resizing = true;
629
- }
630
- node._event = event;
631
- node._lastTried = p; // set as last tried (will nuke if we go there)
632
- let rect = {
633
- x: ui.position.left + mLeft,
634
- y: ui.position.top + mTop,
635
- w: (ui.size ? ui.size.width : node.w * cellWidth) - mLeft - mRight,
636
- h: (ui.size ? ui.size.height : node.h * cellHeight) - mTop - mBottom
637
- };
638
- if (this.engine.moveNodeCheck(node, Object.assign(Object.assign({}, p), { cellWidth, cellHeight, rect, resizing }))) {
639
- node._lastUiPosition = ui.position;
640
- this.engine.cacheRects(cellWidth, cellHeight, mTop, mRight, mBottom, mLeft);
641
- delete node._skipDown;
642
- if (resizing && node.subGrid) {
643
- node.subGrid.onParentResize();
644
- } // @ts-ignore
645
- this._extraDragRow = 0; // @ts-ignore
646
- this._updateContainerHeight();
647
- let target = event.target; // @ts-ignore
648
- this._writePosAttr(target, node);
649
- if (this._gsEventHandler[event.type]) {
650
- this._gsEventHandler[event.type](event, target);
651
- }
652
- }
653
- };
654
- /**
655
- * Enables/Disables moving.
656
- * @param els widget or selector to modify.
657
- * @param val if true widget will be draggable.
658
- */
659
- gridstack_1.GridStack.prototype.movable = function (els, val) {
660
- if (this.opts.staticGrid)
661
- return this; // can't move a static grid!
662
- gridstack_1.GridStack.getElements(els).forEach(el => {
663
- let node = el.gridstackNode;
664
- if (!node)
665
- return;
666
- if (val)
667
- delete node.noMove;
668
- else
669
- node.noMove = true;
670
- this._prepareDragDropByNode(node); // init DD if need be, and adjust
671
- });
672
- return this;
673
- };
674
- /**
675
- * Enables/Disables resizing.
676
- * @param els widget or selector to modify
677
- * @param val if true widget will be resizable.
678
- */
679
- gridstack_1.GridStack.prototype.resizable = function (els, val) {
680
- if (this.opts.staticGrid)
681
- return this; // can't resize a static grid!
682
- gridstack_1.GridStack.getElements(els).forEach(el => {
683
- let node = el.gridstackNode;
684
- if (!node)
685
- return;
686
- if (val)
687
- delete node.noResize;
688
- else
689
- node.noResize = true;
690
- this._prepareDragDropByNode(node); // init DD if need be, and adjust
691
- });
692
- return this;
693
- };
694
- /**
695
- * Temporarily disables widgets moving/resizing.
696
- * If you want a more permanent way (which freezes up resources) use `setStatic(true)` instead.
697
- * Note: no-op for static grid
698
- * This is a shortcut for:
699
- * @example
700
- * grid.enableMove(false);
701
- * grid.enableResize(false);
702
- */
703
- gridstack_1.GridStack.prototype.disable = function () {
704
- if (this.opts.staticGrid)
705
- return;
706
- this.enableMove(false);
707
- this.enableResize(false); // @ts-ignore
708
- this._triggerEvent('disable');
709
- return this;
710
- };
711
- /**
712
- * Re-enables widgets moving/resizing - see disable().
713
- * Note: no-op for static grid.
714
- * This is a shortcut for:
715
- * @example
716
- * grid.enableMove(true);
717
- * grid.enableResize(true);
718
- */
719
- gridstack_1.GridStack.prototype.enable = function () {
720
- if (this.opts.staticGrid)
721
- return;
722
- this.enableMove(true);
723
- this.enableResize(true); // @ts-ignore
724
- this._triggerEvent('enable');
725
- return this;
726
- };
727
- /** Enables/disables widget moving. No-op for static grids. */
728
- gridstack_1.GridStack.prototype.enableMove = function (doEnable) {
729
- if (this.opts.staticGrid)
730
- return this; // can't move a static grid!
731
- this.opts.disableDrag = !doEnable; // FIRST before we update children as grid overrides #1658
732
- this.engine.nodes.forEach(n => this.movable(n.el, doEnable));
733
- return this;
734
- };
735
- /** Enables/disables widget resizing. No-op for static grids. */
736
- gridstack_1.GridStack.prototype.enableResize = function (doEnable) {
737
- if (this.opts.staticGrid)
738
- return this; // can't size a static grid!
739
- this.opts.disableResize = !doEnable; // FIRST before we update children as grid overrides #1658
740
- this.engine.nodes.forEach(n => this.resizable(n.el, doEnable));
741
- return this;
742
- };
743
- /** removes any drag&drop present (called during destroy) */
744
- gridstack_1.GridStack.prototype._removeDD = function (el) {
745
- dd.draggable(el, 'destroy').resizable(el, 'destroy');
746
- if (el.gridstackNode) {
747
- delete el.gridstackNode._initDD; // reset our DD init flag
748
- }
749
- delete el.ddElement;
750
- return this;
751
- };
752
125
  //# sourceMappingURL=dd-gridstack.js.map