gridstack 7.1.2 → 7.2.1
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.
- package/dist/angular/README.md +46 -10
- package/dist/angular/gridstack-item.component.ts +7 -14
- package/dist/angular/gridstack.component.ts +78 -71
- package/dist/dd-base-impl.d.ts +1 -1
- package/dist/dd-base-impl.js +1 -1
- package/dist/dd-base-impl.js.map +1 -1
- package/dist/dd-draggable.d.ts +1 -1
- package/dist/dd-draggable.js +9 -5
- package/dist/dd-draggable.js.map +1 -1
- package/dist/dd-droppable.d.ts +1 -1
- package/dist/dd-droppable.js +1 -1
- package/dist/dd-droppable.js.map +1 -1
- package/dist/dd-element.d.ts +1 -1
- package/dist/dd-element.js +1 -1
- package/dist/dd-element.js.map +1 -1
- package/dist/dd-gridstack.d.ts +1 -1
- package/dist/dd-gridstack.js +1 -1
- package/dist/dd-gridstack.js.map +1 -1
- package/dist/dd-manager.d.ts +1 -1
- package/dist/dd-manager.js +1 -1
- package/dist/dd-manager.js.map +1 -1
- package/dist/dd-resizable-handle.d.ts +1 -1
- package/dist/dd-resizable-handle.js +1 -1
- package/dist/dd-resizable-handle.js.map +1 -1
- package/dist/dd-resizable.d.ts +1 -1
- package/dist/dd-resizable.js +1 -1
- package/dist/dd-resizable.js.map +1 -1
- package/dist/dd-touch.d.ts +1 -1
- package/dist/dd-touch.js +1 -1
- package/dist/dd-touch.js.map +1 -1
- package/dist/es5/dd-base-impl.d.ts +1 -1
- package/dist/es5/dd-base-impl.js +1 -1
- package/dist/es5/dd-base-impl.js.map +1 -1
- package/dist/es5/dd-draggable.d.ts +1 -1
- package/dist/es5/dd-draggable.js +9 -5
- package/dist/es5/dd-draggable.js.map +1 -1
- package/dist/es5/dd-droppable.d.ts +1 -1
- package/dist/es5/dd-droppable.js +1 -1
- package/dist/es5/dd-droppable.js.map +1 -1
- package/dist/es5/dd-element.d.ts +1 -1
- package/dist/es5/dd-element.js +1 -1
- package/dist/es5/dd-element.js.map +1 -1
- package/dist/es5/dd-gridstack.d.ts +1 -1
- package/dist/es5/dd-gridstack.js +1 -1
- package/dist/es5/dd-gridstack.js.map +1 -1
- package/dist/es5/dd-manager.d.ts +1 -1
- package/dist/es5/dd-manager.js +1 -1
- package/dist/es5/dd-manager.js.map +1 -1
- package/dist/es5/dd-resizable-handle.d.ts +1 -1
- package/dist/es5/dd-resizable-handle.js +1 -1
- package/dist/es5/dd-resizable-handle.js.map +1 -1
- package/dist/es5/dd-resizable.d.ts +1 -1
- package/dist/es5/dd-resizable.js +1 -1
- package/dist/es5/dd-resizable.js.map +1 -1
- package/dist/es5/dd-touch.d.ts +1 -1
- package/dist/es5/dd-touch.js +1 -1
- package/dist/es5/dd-touch.js.map +1 -1
- package/dist/es5/gridstack-all.js +1 -1
- package/dist/es5/gridstack-all.js.LICENSE.txt +1 -1
- package/dist/es5/gridstack-all.js.map +1 -1
- package/dist/es5/gridstack-engine.d.ts +1 -1
- package/dist/es5/gridstack-engine.js +1 -1
- package/dist/es5/gridstack-engine.js.map +1 -1
- package/dist/es5/gridstack-poly.js +1 -1
- package/dist/es5/gridstack.d.ts +3 -5
- package/dist/es5/gridstack.js +34 -29
- package/dist/es5/gridstack.js.map +1 -1
- package/dist/es5/types.d.ts +10 -3
- package/dist/es5/types.js +1 -1
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/utils.d.ts +1 -1
- package/dist/es5/utils.js +1 -1
- package/dist/es5/utils.js.map +1 -1
- package/dist/gridstack-all.js +1 -1
- package/dist/gridstack-all.js.LICENSE.txt +1 -1
- package/dist/gridstack-all.js.map +1 -1
- package/dist/gridstack-engine.d.ts +1 -1
- package/dist/gridstack-engine.js +1 -1
- package/dist/gridstack-engine.js.map +1 -1
- package/dist/gridstack.css +1 -1
- package/dist/gridstack.d.ts +3 -5
- package/dist/gridstack.js +33 -28
- package/dist/gridstack.js.map +1 -1
- package/dist/src/gridstack.scss +1 -7
- package/dist/types.d.ts +10 -3
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/doc/CHANGES.md +12 -0
- package/doc/README.md +0 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridstack-engine.js","sourceRoot":"","sources":["../../src/gridstack-engine.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * gridstack-engine.ts 7.1.2\n * Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license\n */\n\nimport { Utils } from './utils';\nimport { GridStackNode, ColumnOptions, GridStackPosition, GridStackMoveOpts } from './types';\n\n/** callback to update the DOM attributes since this class is generic (no HTML or other info) for items that changed - see _notify() */\ntype OnChangeCB = (nodes: GridStackNode[]) => void;\n\n/** options used during creation - similar to GridStackOptions */\nexport interface GridStackEngineOptions {\n column?: number;\n maxRow?: number;\n float?: boolean;\n nodes?: GridStackNode[];\n onChange?: OnChangeCB;\n}\n\n/**\n * Defines the GridStack engine that does most no DOM grid manipulation.\n * See GridStack methods and vars for descriptions.\n *\n * NOTE: values should not be modified directly - call the main GridStack API instead\n */\nexport class GridStackEngine {\n public column: number;\n public maxRow: number;\n public nodes: GridStackNode[];\n public addedNodes: GridStackNode[] = [];\n public removedNodes: GridStackNode[] = [];\n public batchMode: boolean;\n /** @internal callback to update the DOM attributes */\n protected onChange: OnChangeCB;\n /** @internal */\n protected _float: boolean;\n /** @internal */\n protected _prevFloat: boolean;\n /** @internal cached layouts of difference column count so we can restore back (eg 12 -> 1 -> 12) */\n protected _layouts?: GridStackNode[][]; // maps column # to array of values nodes\n /** @internal true while we are resizing widgets during column resize to skip certain parts */\n protected _inColumnResize: boolean;\n /** @internal true if we have some items locked */\n protected _hasLocked: boolean;\n /** @internal unique global internal _id counter NOT starting at 0 */\n public static _idSeq = 1;\n\n public constructor(opts: GridStackEngineOptions = {}) {\n this.column = opts.column || 12;\n this.maxRow = opts.maxRow;\n this._float = opts.float;\n this.nodes = opts.nodes || [];\n this.onChange = opts.onChange;\n }\n\n public batchUpdate(flag = true): GridStackEngine {\n if (!!this.batchMode === flag) return this;\n this.batchMode = flag;\n if (flag) {\n this._prevFloat = this._float;\n this._float = true; // let things go anywhere for now... will restore and possibly reposition later\n this.saveInitial(); // since begin update (which is called multiple times) won't do this\n } else {\n this._float = this._prevFloat;\n delete this._prevFloat;\n this._packNodes()._notify();\n }\n return this;\n }\n\n // use entire row for hitting area (will use bottom reverse sorted first) if we not actively moving DOWN and didn't already skip\n protected _useEntireRowArea(node: GridStackNode, nn: GridStackPosition): boolean {\n return !this.float && !this._hasLocked && (!node._moving || node._skipDown || nn.y <= node.y);\n }\n\n /** @internal fix collision on given 'node', going to given new location 'nn', with optional 'collide' node already found.\n * return true if we moved. */\n protected _fixCollisions(node: GridStackNode, nn = node, collide?: GridStackNode, opt: GridStackMoveOpts = {}): boolean {\n this.sortNodes(-1); // from last to first, so recursive collision move items in the right order\n\n collide = collide || this.collide(node, nn); // REAL area collide for swap and skip if none...\n if (!collide) return false;\n\n // swap check: if we're actively moving in gravity mode, see if we collide with an object the same size\n if (node._moving && !opt.nested && !this.float) {\n if (this.swap(node, collide)) return true;\n }\n\n // during while() collisions MAKE SURE to check entire row so larger items don't leap frog small ones (push them all down starting last in grid)\n let area = nn;\n if (this._useEntireRowArea(node, nn)) {\n area = {x: 0, w: this.column, y: nn.y, h: nn.h};\n collide = this.collide(node, area, opt.skip); // force new hit\n }\n\n let didMove = false;\n let newOpt: GridStackMoveOpts = {nested: true, pack: false};\n while (collide = collide || this.collide(node, area, opt.skip)) { // could collide with more than 1 item... so repeat for each\n let moved: boolean;\n // if colliding with a locked item OR moving down with top gravity (and collide could move up) -> skip past the collide,\n // but remember that skip down so we only do this once (and push others otherwise).\n if (collide.locked || node._moving && !node._skipDown && nn.y > node.y && !this.float &&\n // can take space we had, or before where we're going\n (!this.collide(collide, {...collide, y: node.y}, node) || !this.collide(collide, {...collide, y: nn.y - collide.h}, node))) {\n node._skipDown = (node._skipDown || nn.y > node.y);\n moved = this.moveNode(node, {...nn, y: collide.y + collide.h, ...newOpt});\n if (collide.locked && moved) {\n Utils.copyPos(nn, node); // moving after lock become our new desired location\n } else if (!collide.locked && moved && opt.pack) {\n // we moved after and will pack: do it now and keep the original drop location, but past the old collide to see what else we might push way\n this._packNodes();\n nn.y = collide.y + collide.h;\n Utils.copyPos(node, nn);\n }\n didMove = didMove || moved;\n } else {\n // move collide down *after* where we will be, ignoring where we are now (don't collide with us)\n moved = this.moveNode(collide, {...collide, y: nn.y + nn.h, skip: node, ...newOpt});\n }\n if (!moved) { return didMove; } // break inf loop if we couldn't move after all (ex: maxRow, fixed)\n collide = undefined;\n }\n return didMove;\n }\n\n /** return the nodes that intercept the given node. Optionally a different area can be used, as well as a second node to skip */\n public collide(skip: GridStackNode, area = skip, skip2?: GridStackNode): GridStackNode {\n return this.nodes.find(n => n !== skip && n !== skip2 && Utils.isIntercepted(n, area));\n }\n public collideAll(skip: GridStackNode, area = skip, skip2?: GridStackNode): GridStackNode[] {\n return this.nodes.filter(n => n !== skip && n !== skip2 && Utils.isIntercepted(n, area));\n }\n\n /** does a pixel coverage collision based on where we started, returning the node that has the most coverage that is >50% mid line */\n protected directionCollideCoverage(node: GridStackNode, o: GridStackMoveOpts, collides: GridStackNode[]): GridStackNode {\n if (!o.rect || !node._rect) return;\n let r0 = node._rect; // where started\n let r = {...o.rect}; // where we are\n\n // update dragged rect to show where it's coming from (above or below, etc...)\n if (r.y > r0.y) {\n r.h += r.y - r0.y;\n r.y = r0.y;\n } else {\n r.h += r0.y - r.y;\n }\n if (r.x > r0.x) {\n r.w += r.x - r0.x;\n r.x = r0.x;\n } else {\n r.w += r0.x - r.x;\n }\n\n let collide: GridStackNode;\n collides.forEach(n => {\n if (n.locked || !n._rect) return;\n let r2 = n._rect; // overlapping target\n let yOver = Number.MAX_VALUE, xOver = Number.MAX_VALUE, overMax = 0.5; // need >50%\n // depending on which side we started from, compute the overlap % of coverage\n // (ex: from above/below we only compute the max horizontal line coverage)\n if (r0.y < r2.y) { // from above\n yOver = ((r.y + r.h) - r2.y) / r2.h;\n } else if (r0.y+r0.h > r2.y+r2.h) { // from below\n yOver = ((r2.y + r2.h) - r.y) / r2.h;\n }\n if (r0.x < r2.x) { // from the left\n xOver = ((r.x + r.w) - r2.x) / r2.w;\n } else if (r0.x+r0.w > r2.x+r2.w) { // from the right\n xOver = ((r2.x + r2.w) - r.x) / r2.w;\n }\n let over = Math.min(xOver, yOver);\n if (over > overMax) {\n overMax = over;\n collide = n;\n }\n });\n o.collide = collide; // save it so we don't have to find it again\n return collide;\n }\n\n /** does a pixel coverage returning the node that has the most coverage by area */\n /*\n protected collideCoverage(r: GridStackPosition, collides: GridStackNode[]): {collide: GridStackNode, over: number} {\n let collide: GridStackNode;\n let overMax = 0;\n collides.forEach(n => {\n if (n.locked || !n._rect) return;\n let over = Utils.areaIntercept(r, n._rect);\n if (over > overMax) {\n overMax = over;\n collide = n;\n }\n });\n return {collide, over: overMax};\n }\n */\n\n /** called to cache the nodes pixel rectangles used for collision detection during drag */\n public cacheRects(w: number, h: number, top: number, right: number, bottom: number, left: number): GridStackEngine\n {\n this.nodes.forEach(n =>\n n._rect = {\n y: n.y * h + top,\n x: n.x * w + left,\n w: n.w * w - left - right,\n h: n.h * h - top - bottom\n }\n );\n return this;\n }\n\n /** called to possibly swap between 2 nodes (same size or column, not locked, touching), returning true if successful */\n public swap(a: GridStackNode, b: GridStackNode): boolean {\n if (!b || b.locked || !a || a.locked) return false;\n\n function _doSwap(): true { // assumes a is before b IFF they have different height (put after rather than exact swap)\n let x = b.x, y = b.y;\n b.x = a.x; b.y = a.y; // b -> a position\n if (a.h != b.h) {\n a.x = x; a.y = b.y + b.h; // a -> goes after b\n } else if (a.w != b.w) {\n a.x = b.x + b.w; a.y = y; // a -> goes after b\n } else {\n a.x = x; a.y = y; // a -> old b position\n }\n a._dirty = b._dirty = true;\n return true;\n }\n let touching: boolean; // remember if we called it (vs undefined)\n\n // same size and same row or column, and touching\n if (a.w === b.w && a.h === b.h && (a.x === b.x || a.y === b.y) && (touching = Utils.isTouching(a, b)))\n return _doSwap();\n if (touching === false) return; // IFF ran test and fail, bail out\n\n // check for taking same columns (but different height) and touching\n if (a.w === b.w && a.x === b.x && (touching || (touching = Utils.isTouching(a, b)))) {\n if (b.y < a.y) { let t = a; a = b; b = t; } // swap a <-> b vars so a is first\n return _doSwap();\n }\n if (touching === false) return;\n\n // check if taking same row (but different width) and touching\n if (a.h === b.h && a.y === b.y && (touching || (touching = Utils.isTouching(a, b)))) {\n if (b.x < a.x) { let t = a; a = b; b = t; } // swap a <-> b vars so a is first\n return _doSwap();\n }\n return false;\n }\n\n public isAreaEmpty(x: number, y: number, w: number, h: number): boolean {\n let nn: GridStackNode = {x: x || 0, y: y || 0, w: w || 1, h: h || 1};\n return !this.collide(nn);\n }\n\n /** re-layout grid items to reclaim any empty space */\n public compact(): GridStackEngine {\n if (this.nodes.length === 0) return this;\n this.batchUpdate()\n .sortNodes();\n let copyNodes = this.nodes;\n this.nodes = []; // pretend we have no nodes to conflict layout to start with...\n copyNodes.forEach(node => {\n if (!node.locked) {\n node.autoPosition = true;\n }\n this.addNode(node, false); // 'false' for add event trigger\n node._dirty = true; // will force attr update\n });\n return this.batchUpdate(false);\n }\n\n /** enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) */\n public set float(val: boolean) {\n if (this._float === val) return;\n this._float = val || false;\n if (!val) {\n this._packNodes()._notify();\n }\n }\n\n /** float getter method */\n public get float(): boolean { return this._float || false; }\n\n /** sort the nodes array from first to last, or reverse. Called during collision/placement to force an order */\n public sortNodes(dir?: -1 | 1): GridStackEngine {\n this.nodes = Utils.sort(this.nodes, dir, this.column);\n return this;\n }\n\n /** @internal called to top gravity pack the items back OR revert back to original Y positions when floating */\n protected _packNodes(): GridStackEngine {\n if (this.batchMode) { return this; }\n this.sortNodes(); // first to last\n\n if (this.float) {\n // restore original Y pos\n this.nodes.forEach(n => {\n if (n._updating || n._orig === undefined || n.y === n._orig.y) return;\n let newY = n.y;\n while (newY > n._orig.y) {\n --newY;\n let collide = this.collide(n, {x: n.x, y: newY, w: n.w, h: n.h});\n if (!collide) {\n n._dirty = true;\n n.y = newY;\n }\n }\n });\n } else {\n // top gravity pack\n this.nodes.forEach((n, i) => {\n if (n.locked) return;\n while (n.y > 0) {\n let newY = i === 0 ? 0 : n.y - 1;\n let canBeMoved = i === 0 || !this.collide(n, {x: n.x, y: newY, w: n.w, h: n.h});\n if (!canBeMoved) break;\n // Note: must be dirty (from last position) for GridStack::OnChange CB to update positions\n // and move items back. The user 'change' CB should detect changes from the original\n // starting position instead.\n n._dirty = (n.y !== newY);\n n.y = newY;\n }\n });\n }\n return this;\n }\n\n /**\n * given a random node, makes sure it's coordinates/values are valid in the current grid\n * @param node to adjust\n * @param resizing if out of bound, resize down or move into the grid to fit ?\n */\n public prepareNode(node: GridStackNode, resizing?: boolean): GridStackNode {\n node = node || {};\n node._id = node._id || GridStackEngine._idSeq++;\n\n // if we're missing position, have the grid position us automatically (before we set them to 0,0)\n if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) {\n node.autoPosition = true;\n }\n\n // assign defaults for missing required fields\n let defaults: GridStackNode = { x: 0, y: 0, w: 1, h: 1};\n Utils.defaults(node, defaults);\n\n if (!node.autoPosition) { delete node.autoPosition; }\n if (!node.noResize) { delete node.noResize; }\n if (!node.noMove) { delete node.noMove; }\n\n // check for NaN (in case messed up strings were passed. can't do parseInt() || defaults.x above as 0 is valid #)\n if (typeof node.x == 'string') { node.x = Number(node.x); }\n if (typeof node.y == 'string') { node.y = Number(node.y); }\n if (typeof node.w == 'string') { node.w = Number(node.w); }\n if (typeof node.h == 'string') { node.h = Number(node.h); }\n if (isNaN(node.x)) { node.x = defaults.x; node.autoPosition = true; }\n if (isNaN(node.y)) { node.y = defaults.y; node.autoPosition = true; }\n if (isNaN(node.w)) { node.w = defaults.w; }\n if (isNaN(node.h)) { node.h = defaults.h; }\n\n return this.nodeBoundFix(node, resizing);\n }\n\n /** part2 of preparing a node to fit inside our grid - checks for x,y,w from grid dimensions */\n public nodeBoundFix(node: GridStackNode, resizing?: boolean): GridStackNode {\n\n let before = node._orig || Utils.copyPos({}, node);\n\n if (node.maxW) { node.w = Math.min(node.w, node.maxW); }\n if (node.maxH) { node.h = Math.min(node.h, node.maxH); }\n if (node.minW && node.minW <= this.column) { node.w = Math.max(node.w, node.minW); }\n if (node.minH) { node.h = Math.max(node.h, node.minH); }\n\n // if user loaded a larger than allowed widget for current # of columns (or force 1 column mode),\n // remember it's position & width so we can restore back (1 -> 12 column) #1655 #1985\n // IFF we're not in the middle of column resizing!\n const saveOrig = this.column === 1 || node.x + node.w > this.column;\n if (saveOrig && this.column < 12 && !this._inColumnResize && !node.autoPosition && node._id && this.findCacheLayout(node, 12) === -1) {\n let copy = {...node}; // need _id + positions\n copy.x = Math.min(11, copy.x);\n copy.w = Math.min(12, copy.w);\n this.cacheOneLayout(copy, 12);\n }\n\n if (node.w > this.column) {\n node.w = this.column;\n } else if (node.w < 1) {\n node.w = 1;\n }\n\n if (this.maxRow && node.h > this.maxRow) {\n node.h = this.maxRow;\n } else if (node.h < 1) {\n node.h = 1;\n }\n\n if (node.x < 0) {\n node.x = 0;\n }\n if (node.y < 0) {\n node.y = 0;\n }\n\n if (node.x + node.w > this.column) {\n if (resizing) {\n node.w = this.column - node.x;\n } else {\n node.x = this.column - node.w;\n }\n }\n if (this.maxRow && node.y + node.h > this.maxRow) {\n if (resizing) {\n node.h = this.maxRow - node.y;\n } else {\n node.y = this.maxRow - node.h;\n }\n }\n\n if (!Utils.samePos(node, before)) {\n node._dirty = true;\n }\n\n return node;\n }\n\n /** returns a list of modified nodes from their original values */\n public getDirtyNodes(verify?: boolean): GridStackNode[] {\n // compare original x,y,w,h instead as _dirty can be a temporary state\n if (verify) {\n return this.nodes.filter(n => n._dirty && !Utils.samePos(n, n._orig));\n }\n return this.nodes.filter(n => n._dirty);\n }\n\n /** @internal call this to call onChange callback with dirty nodes so DOM can be updated */\n protected _notify(removedNodes?: GridStackNode[]): GridStackEngine {\n if (this.batchMode || !this.onChange) return this;\n let dirtyNodes = (removedNodes || []).concat(this.getDirtyNodes());\n this.onChange(dirtyNodes);\n return this;\n }\n\n /** @internal remove dirty and last tried info */\n public cleanNodes(): GridStackEngine {\n if (this.batchMode) return this;\n this.nodes.forEach(n => {\n delete n._dirty;\n delete n._lastTried;\n });\n return this;\n }\n\n /** @internal called to save initial position/size to track real dirty state.\n * Note: should be called right after we call change event (so next API is can detect changes)\n * as well as right before we start move/resize/enter (so we can restore items to prev values) */\n public saveInitial(): GridStackEngine {\n this.nodes.forEach(n => {\n n._orig = Utils.copyPos({}, n);\n delete n._dirty;\n });\n this._hasLocked = this.nodes.some(n => n.locked);\n return this;\n }\n\n /** @internal restore all the nodes back to initial values (called when we leave) */\n public restoreInitial(): GridStackEngine {\n this.nodes.forEach(n => {\n if (Utils.samePos(n, n._orig)) return;\n Utils.copyPos(n, n._orig);\n n._dirty = true;\n });\n this._notify();\n return this;\n }\n\n /** find the first available empty spot for the given node width/height, updating the x,y attributes. return true if found */\n public findEmptyPosition(node: GridStackNode): boolean {\n this.sortNodes();\n let found = false;\n for (let i = 0; !found; ++i) {\n let x = i % this.column;\n let y = Math.floor(i / this.column);\n if (x + node.w > this.column) {\n continue;\n }\n let box = {x, y, w: node.w, h: node.h};\n if (!this.nodes.find(n => Utils.isIntercepted(box, n))) {\n node.x = x;\n node.y = y;\n found = true;\n }\n }\n return found;\n }\n\n /** call to add the given node to our list, fixing collision and re-packing */\n public addNode(node: GridStackNode, triggerAddEvent = false): GridStackNode {\n let dup = this.nodes.find(n => n._id === node._id);\n if (dup) return dup; // prevent inserting twice! return it instead.\n\n // skip prepareNode if we're in middle of column resize (not new) but do check for bounds!\n node = this._inColumnResize ? this.nodeBoundFix(node) : this.prepareNode(node);\n delete node._temporaryRemoved;\n delete node._removeDOM;\n\n if (node.autoPosition && this.findEmptyPosition(node)) {\n delete node.autoPosition; // found our slot\n }\n\n this.nodes.push(node);\n if (triggerAddEvent) { this.addedNodes.push(node); }\n\n this._fixCollisions(node);\n if (!this.batchMode) { this._packNodes()._notify(); }\n return node;\n }\n\n public removeNode(node: GridStackNode, removeDOM = true, triggerEvent = false): GridStackEngine {\n if (!this.nodes.find(n => n === node)) {\n // TEST console.log(`Error: GridStackEngine.removeNode() node._id=${node._id} not found!`)\n return this;\n }\n if (triggerEvent) { // we wait until final drop to manually track removed items (rather than during drag)\n this.removedNodes.push(node);\n }\n if (removeDOM) node._removeDOM = true; // let CB remove actual HTML (used to set _id to null, but then we loose layout info)\n // don't use 'faster' .splice(findIndex(),1) in case node isn't in our list, or in multiple times.\n this.nodes = this.nodes.filter(n => n !== node);\n return this._packNodes()\n ._notify([node]);\n }\n\n public removeAll(removeDOM = true): GridStackEngine {\n delete this._layouts;\n if (this.nodes.length === 0) return this;\n removeDOM && this.nodes.forEach(n => n._removeDOM = true); // let CB remove actual HTML (used to set _id to null, but then we loose layout info)\n this.removedNodes = this.nodes;\n this.nodes = [];\n return this._notify(this.removedNodes);\n }\n\n /** checks if item can be moved (layout constrain) vs moveNode(), returning true if was able to move.\n * In more complicated cases (maxRow) it will attempt at moving the item and fixing\n * others in a clone first, then apply those changes if still within specs. */\n public moveNodeCheck(node: GridStackNode, o: GridStackMoveOpts): boolean {\n // if (node.locked) return false;\n if (!this.changedPosConstrain(node, o)) return false;\n o.pack = true;\n\n // simpler case: move item directly...\n if (!this.maxRow) {\n return this.moveNode(node, o);\n }\n\n // complex case: create a clone with NO maxRow (will check for out of bounds at the end)\n let clonedNode: GridStackNode;\n let clone = new GridStackEngine({\n column: this.column,\n float: this.float,\n nodes: this.nodes.map(n => {\n if (n === node) {\n clonedNode = {...n};\n return clonedNode;\n }\n return {...n};\n })\n });\n if (!clonedNode) return false;\n\n // check if we're covering 50% collision and could move\n let canMove = clone.moveNode(clonedNode, o) && clone.getRow() <= this.maxRow;\n // else check if we can force a swap (float=true, or different shapes) on non-resize\n if (!canMove && !o.resizing && o.collide) {\n let collide = o.collide.el.gridstackNode; // find the source node the clone collided with at 50%\n if (this.swap(node, collide)) { // swaps and mark dirty\n this._notify();\n return true;\n }\n }\n if (!canMove) return false;\n\n // if clone was able to move, copy those mods over to us now instead of caller trying to do this all over!\n // Note: we can't use the list directly as elements and other parts point to actual node, so copy content\n clone.nodes.filter(n => n._dirty).forEach(c => {\n let n = this.nodes.find(a => a._id === c._id);\n if (!n) return;\n Utils.copyPos(n, c);\n n._dirty = true;\n });\n this._notify();\n return true;\n }\n\n /** return true if can fit in grid height constrain only (always true if no maxRow) */\n public willItFit(node: GridStackNode): boolean {\n delete node._willFitPos;\n if (!this.maxRow) return true;\n // create a clone with NO maxRow and check if still within size\n let clone = new GridStackEngine({\n column: this.column,\n float: this.float,\n nodes: this.nodes.map(n => {return {...n}})\n });\n let n = {...node}; // clone node so we don't mod any settings on it but have full autoPosition and min/max as well! #1687\n this.cleanupNode(n);\n delete n.el; delete n._id; delete n.content; delete n.grid;\n clone.addNode(n);\n if (clone.getRow() <= this.maxRow) {\n node._willFitPos = Utils.copyPos({}, n);\n return true;\n }\n return false;\n }\n\n /** true if x,y or w,h are different after clamping to min/max */\n public changedPosConstrain(node: GridStackNode, p: GridStackPosition): boolean {\n // first make sure w,h are set for caller\n p.w = p.w || node.w;\n p.h = p.h || node.h;\n if (node.x !== p.x || node.y !== p.y) return true;\n // check constrained w,h\n if (node.maxW) { p.w = Math.min(p.w, node.maxW); }\n if (node.maxH) { p.h = Math.min(p.h, node.maxH); }\n if (node.minW) { p.w = Math.max(p.w, node.minW); }\n if (node.minH) { p.h = Math.max(p.h, node.minH); }\n return (node.w !== p.w || node.h !== p.h);\n }\n\n /** return true if the passed in node was actually moved (checks for no-op and locked) */\n public moveNode(node: GridStackNode, o: GridStackMoveOpts): boolean {\n if (!node || /*node.locked ||*/ !o) return false;\n let wasUndefinedPack: boolean;\n if (o.pack === undefined) {\n wasUndefinedPack = o.pack = true;\n }\n\n // constrain the passed in values and check if we're still changing our node\n if (typeof o.x !== 'number') { o.x = node.x; }\n if (typeof o.y !== 'number') { o.y = node.y; }\n if (typeof o.w !== 'number') { o.w = node.w; }\n if (typeof o.h !== 'number') { o.h = node.h; }\n let resizing = (node.w !== o.w || node.h !== o.h);\n let nn: GridStackNode = Utils.copyPos({}, node, true); // get min/max out first, then opt positions next\n Utils.copyPos(nn, o);\n nn = this.nodeBoundFix(nn, resizing);\n Utils.copyPos(o, nn);\n\n if (Utils.samePos(node, o)) return false;\n let prevPos: GridStackPosition = Utils.copyPos({}, node);\n\n // check if we will need to fix collision at our new location\n let collides = this.collideAll(node, nn, o.skip);\n let needToMove = true;\n if (collides.length) {\n let activeDrag = node._moving && !o.nested;\n // check to make sure we actually collided over 50% surface area while dragging\n let collide = activeDrag ? this.directionCollideCoverage(node, o, collides) : collides[0];\n // if we're enabling creation of sub-grids on the fly, see if we're covering 80% of either one, if we didn't already do that\n if (activeDrag && collide && node.grid?.opts?.subGridDynamic && !node.grid._isTemp) {\n let over = Utils.areaIntercept(o.rect, collide._rect);\n let a1 = Utils.area(o.rect);\n let a2 = Utils.area(collide._rect);\n let perc = over / (a1 < a2 ? a1 : a2);\n if (perc > .8) {\n collide.grid.makeSubGrid(collide.el, undefined, node);\n collide = undefined;\n }\n }\n\n if (collide) {\n needToMove = !this._fixCollisions(node, nn, collide, o); // check if already moved...\n } else {\n needToMove = false; // we didn't cover >50% for a move, skip...\n if (wasUndefinedPack) delete o.pack;\n }\n }\n\n // now move (to the original ask vs the collision version which might differ) and repack things\n if (needToMove) {\n node._dirty = true;\n Utils.copyPos(node, nn);\n }\n if (o.pack) {\n this._packNodes()\n ._notify();\n }\n return !Utils.samePos(node, prevPos); // pack might have moved things back\n }\n\n public getRow(): number {\n return this.nodes.reduce((row, n) => Math.max(row, n.y + n.h), 0);\n }\n\n public beginUpdate(node: GridStackNode): GridStackEngine {\n if (!node._updating) {\n node._updating = true;\n delete node._skipDown;\n if (!this.batchMode) this.saveInitial();\n }\n return this;\n }\n\n public endUpdate(): GridStackEngine {\n let n = this.nodes.find(n => n._updating);\n if (n) {\n delete n._updating;\n delete n._skipDown;\n }\n return this;\n }\n\n /** saves a copy of the largest column layout (eg 12 even when rendering oneColumnMode) so we don't loose orig layout,\n * returning a list of widgets for serialization */\n public save(saveElement = true): GridStackNode[] {\n // use the highest layout for any saved info so we can have full detail on reload #1849\n let len = this._layouts?.length;\n let layout = len && this.column !== (len - 1) ? this._layouts[len - 1] : null;\n let list: GridStackNode[] = [];\n this.sortNodes();\n this.nodes.forEach(n => {\n let wl = layout?.find(l => l._id === n._id);\n let w: GridStackNode = {...n};\n // use layout info instead if set\n if (wl) { w.x = wl.x; w.y = wl.y; w.w = wl.w; }\n Utils.removeInternalForSave(w, !saveElement);\n list.push(w);\n });\n return list;\n }\n\n /** @internal called whenever a node is added or moved - updates the cached layouts */\n public layoutsNodesChange(nodes: GridStackNode[]): GridStackEngine {\n if (!this._layouts || this._inColumnResize) return this;\n // remove smaller layouts - we will re-generate those on the fly... larger ones need to update\n this._layouts.forEach((layout, column) => {\n if (!layout || column === this.column) return this;\n if (column < this.column) {\n this._layouts[column] = undefined;\n }\n else {\n // we save the original x,y,w (h isn't cached) to see what actually changed to propagate better.\n // NOTE: we don't need to check against out of bound scaling/moving as that will be done when using those cache values. #1785\n let ratio = column / this.column;\n nodes.forEach(node => {\n if (!node._orig) return; // didn't change (newly added ?)\n let n = layout.find(l => l._id === node._id);\n if (!n) return; // no cache for new nodes. Will use those values.\n // Y changed, push down same amount\n // TODO: detect doing item 'swaps' will help instead of move (especially in 1 column mode)\n if (node.y !== node._orig.y) {\n n.y += (node.y - node._orig.y);\n }\n // X changed, scale from new position\n if (node.x !== node._orig.x) {\n n.x = Math.round(node.x * ratio);\n }\n // width changed, scale from new width\n if (node.w !== node._orig.w) {\n n.w = Math.round(node.w * ratio);\n }\n // ...height always carries over from cache\n });\n }\n });\n return this;\n }\n\n /**\n * @internal Called to scale the widget width & position up/down based on the column change.\n * Note we store previous layouts (especially original ones) to make it possible to go\n * from say 12 -> 1 -> 12 and get back to where we were.\n *\n * @param prevColumn previous number of columns\n * @param column new column number\n * @param nodes different sorted list (ex: DOM order) instead of current list\n * @param layout specify the type of re-layout that will happen (position, size, etc...).\n * Note: items will never be outside of the current column boundaries. default (moveScale). Ignored for 1 column\n */\n public updateNodeWidths(prevColumn: number, column: number, nodes: GridStackNode[], layout: ColumnOptions = 'moveScale'): GridStackEngine {\n if (!this.nodes.length || !column || prevColumn === column) return this;\n\n // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data\n this.cacheLayout(this.nodes, prevColumn);\n this.batchUpdate(); // do this EARLY as it will call saveInitial() so we can detect where we started for _dirty and collision\n let newNodes: GridStackNode[] = [];\n\n // if we're going to 1 column and using DOM order rather than default sorting, then generate that layout\n let domOrder = false;\n if (column === 1 && nodes?.length) {\n domOrder = true;\n let top = 0;\n nodes.forEach(n => {\n n.x = 0;\n n.w = 1;\n n.y = Math.max(n.y, top);\n top = n.y + n.h;\n });\n newNodes = nodes;\n nodes = [];\n } else {\n nodes = Utils.sort(this.nodes, -1, prevColumn); // current column reverse sorting so we can insert last to front (limit collision)\n }\n\n // see if we have cached previous layout IFF we are going up in size (restore) otherwise always\n // generate next size down from where we are (looks more natural as you gradually size down).\n let cacheNodes: GridStackNode[] = [];\n if (column > prevColumn) {\n cacheNodes = this._layouts[column] || [];\n // ...if not, start with the largest layout (if not already there) as down-scaling is more accurate\n // by pretending we came from that larger column by assigning those values as starting point\n let lastIndex = this._layouts.length - 1;\n if (!cacheNodes.length && prevColumn !== lastIndex && this._layouts[lastIndex]?.length) {\n prevColumn = lastIndex;\n this._layouts[lastIndex].forEach(cacheNode => {\n let n = nodes.find(n => n._id === cacheNode._id);\n if (n) {\n // still current, use cache info positions\n n.x = cacheNode.x;\n n.y = cacheNode.y;\n n.w = cacheNode.w;\n }\n });\n }\n }\n\n // if we found cache re-use those nodes that are still current\n cacheNodes.forEach(cacheNode => {\n let j = nodes.findIndex(n => n._id === cacheNode._id);\n if (j !== -1) {\n // still current, use cache info positions\n nodes[j].x = cacheNode.x;\n nodes[j].y = cacheNode.y;\n nodes[j].w = cacheNode.w;\n newNodes.push(nodes[j]);\n nodes.splice(j, 1);\n }\n });\n // ...and add any extra non-cached ones\n if (nodes.length) {\n if (typeof layout === 'function') {\n layout(column, prevColumn, newNodes, nodes);\n } else if (!domOrder) {\n let ratio = column / prevColumn;\n let move = (layout === 'move' || layout === 'moveScale');\n let scale = (layout === 'scale' || layout === 'moveScale');\n nodes.forEach(node => {\n // NOTE: x + w could be outside of the grid, but addNode() below will handle that\n node.x = (column === 1 ? 0 : (move ? Math.round(node.x * ratio) : Math.min(node.x, column - 1)));\n node.w = ((column === 1 || prevColumn === 1) ? 1 :\n scale ? (Math.round(node.w * ratio) || 1) : (Math.min(node.w, column)));\n newNodes.push(node);\n });\n nodes = [];\n }\n }\n\n // finally re-layout them in reverse order (to get correct placement)\n if (!domOrder) newNodes = Utils.sort(newNodes, -1, column);\n this._inColumnResize = true; // prevent cache update\n this.nodes = []; // pretend we have no nodes to start with (add() will use same structures) to simplify layout\n newNodes.forEach(node => {\n this.addNode(node, false); // 'false' for add event trigger\n delete node._orig; // make sure the commit doesn't try to restore things back to original\n });\n this.batchUpdate(false);\n delete this._inColumnResize;\n return this;\n }\n\n /**\n * call to cache the given layout internally to the given location so we can restore back when column changes size\n * @param nodes list of nodes\n * @param column corresponding column index to save it under\n * @param clear if true, will force other caches to be removed (default false)\n */\n public cacheLayout(nodes: GridStackNode[], column: number, clear = false): GridStackEngine {\n let copy: GridStackNode[] = [];\n nodes.forEach((n, i) => {\n n._id = n._id || GridStackEngine._idSeq++; // make sure we have an id in case this is new layout, else re-use id already set\n copy[i] = {x: n.x, y: n.y, w: n.w, _id: n._id} // only thing we change is x,y,w and id to find it back\n });\n this._layouts = clear ? [] : this._layouts || []; // use array to find larger quick\n this._layouts[column] = copy;\n return this;\n }\n\n /**\n * call to cache the given node layout internally to the given location so we can restore back when column changes size\n * @param node single node to cache\n * @param column corresponding column index to save it under\n */\n public cacheOneLayout(n: GridStackNode, column: number): GridStackEngine {\n n._id = n._id || GridStackEngine._idSeq++;\n let layout: GridStackNode = {x: n.x, y: n.y, w: n.w, _id: n._id}\n this._layouts = this._layouts || [];\n this._layouts[column] = this._layouts[column] || [];\n let index = this.findCacheLayout(n, column);\n if (index === -1)\n this._layouts[column].push(layout);\n else\n this._layouts[column][index] = layout;\n return this;\n }\n\n protected findCacheLayout(n: GridStackNode, column: number): number {\n return this._layouts?.[column]?.findIndex(l => l._id === n._id) ?? -1;\n }\n\n\n /** called to remove all internal values but the _id */\n public cleanupNode(node: GridStackNode): GridStackEngine {\n for (let prop in node) {\n if (prop[0] === '_' && prop !== '_id') delete node[prop];\n }\n return this;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"gridstack-engine.js","sourceRoot":"","sources":["../../src/gridstack-engine.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * gridstack-engine.ts 7.2.1\n * Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license\n */\n\nimport { Utils } from './utils';\nimport { GridStackNode, ColumnOptions, GridStackPosition, GridStackMoveOpts } from './types';\n\n/** callback to update the DOM attributes since this class is generic (no HTML or other info) for items that changed - see _notify() */\ntype OnChangeCB = (nodes: GridStackNode[]) => void;\n\n/** options used during creation - similar to GridStackOptions */\nexport interface GridStackEngineOptions {\n column?: number;\n maxRow?: number;\n float?: boolean;\n nodes?: GridStackNode[];\n onChange?: OnChangeCB;\n}\n\n/**\n * Defines the GridStack engine that does most no DOM grid manipulation.\n * See GridStack methods and vars for descriptions.\n *\n * NOTE: values should not be modified directly - call the main GridStack API instead\n */\nexport class GridStackEngine {\n public column: number;\n public maxRow: number;\n public nodes: GridStackNode[];\n public addedNodes: GridStackNode[] = [];\n public removedNodes: GridStackNode[] = [];\n public batchMode: boolean;\n /** @internal callback to update the DOM attributes */\n protected onChange: OnChangeCB;\n /** @internal */\n protected _float: boolean;\n /** @internal */\n protected _prevFloat: boolean;\n /** @internal cached layouts of difference column count so we can restore back (eg 12 -> 1 -> 12) */\n protected _layouts?: GridStackNode[][]; // maps column # to array of values nodes\n /** @internal true while we are resizing widgets during column resize to skip certain parts */\n protected _inColumnResize: boolean;\n /** @internal true if we have some items locked */\n protected _hasLocked: boolean;\n /** @internal unique global internal _id counter NOT starting at 0 */\n public static _idSeq = 1;\n\n public constructor(opts: GridStackEngineOptions = {}) {\n this.column = opts.column || 12;\n this.maxRow = opts.maxRow;\n this._float = opts.float;\n this.nodes = opts.nodes || [];\n this.onChange = opts.onChange;\n }\n\n public batchUpdate(flag = true): GridStackEngine {\n if (!!this.batchMode === flag) return this;\n this.batchMode = flag;\n if (flag) {\n this._prevFloat = this._float;\n this._float = true; // let things go anywhere for now... will restore and possibly reposition later\n this.saveInitial(); // since begin update (which is called multiple times) won't do this\n } else {\n this._float = this._prevFloat;\n delete this._prevFloat;\n this._packNodes()._notify();\n }\n return this;\n }\n\n // use entire row for hitting area (will use bottom reverse sorted first) if we not actively moving DOWN and didn't already skip\n protected _useEntireRowArea(node: GridStackNode, nn: GridStackPosition): boolean {\n return !this.float && !this._hasLocked && (!node._moving || node._skipDown || nn.y <= node.y);\n }\n\n /** @internal fix collision on given 'node', going to given new location 'nn', with optional 'collide' node already found.\n * return true if we moved. */\n protected _fixCollisions(node: GridStackNode, nn = node, collide?: GridStackNode, opt: GridStackMoveOpts = {}): boolean {\n this.sortNodes(-1); // from last to first, so recursive collision move items in the right order\n\n collide = collide || this.collide(node, nn); // REAL area collide for swap and skip if none...\n if (!collide) return false;\n\n // swap check: if we're actively moving in gravity mode, see if we collide with an object the same size\n if (node._moving && !opt.nested && !this.float) {\n if (this.swap(node, collide)) return true;\n }\n\n // during while() collisions MAKE SURE to check entire row so larger items don't leap frog small ones (push them all down starting last in grid)\n let area = nn;\n if (this._useEntireRowArea(node, nn)) {\n area = {x: 0, w: this.column, y: nn.y, h: nn.h};\n collide = this.collide(node, area, opt.skip); // force new hit\n }\n\n let didMove = false;\n let newOpt: GridStackMoveOpts = {nested: true, pack: false};\n while (collide = collide || this.collide(node, area, opt.skip)) { // could collide with more than 1 item... so repeat for each\n let moved: boolean;\n // if colliding with a locked item OR moving down with top gravity (and collide could move up) -> skip past the collide,\n // but remember that skip down so we only do this once (and push others otherwise).\n if (collide.locked || node._moving && !node._skipDown && nn.y > node.y && !this.float &&\n // can take space we had, or before where we're going\n (!this.collide(collide, {...collide, y: node.y}, node) || !this.collide(collide, {...collide, y: nn.y - collide.h}, node))) {\n node._skipDown = (node._skipDown || nn.y > node.y);\n moved = this.moveNode(node, {...nn, y: collide.y + collide.h, ...newOpt});\n if (collide.locked && moved) {\n Utils.copyPos(nn, node); // moving after lock become our new desired location\n } else if (!collide.locked && moved && opt.pack) {\n // we moved after and will pack: do it now and keep the original drop location, but past the old collide to see what else we might push way\n this._packNodes();\n nn.y = collide.y + collide.h;\n Utils.copyPos(node, nn);\n }\n didMove = didMove || moved;\n } else {\n // move collide down *after* where we will be, ignoring where we are now (don't collide with us)\n moved = this.moveNode(collide, {...collide, y: nn.y + nn.h, skip: node, ...newOpt});\n }\n if (!moved) { return didMove; } // break inf loop if we couldn't move after all (ex: maxRow, fixed)\n collide = undefined;\n }\n return didMove;\n }\n\n /** return the nodes that intercept the given node. Optionally a different area can be used, as well as a second node to skip */\n public collide(skip: GridStackNode, area = skip, skip2?: GridStackNode): GridStackNode {\n return this.nodes.find(n => n !== skip && n !== skip2 && Utils.isIntercepted(n, area));\n }\n public collideAll(skip: GridStackNode, area = skip, skip2?: GridStackNode): GridStackNode[] {\n return this.nodes.filter(n => n !== skip && n !== skip2 && Utils.isIntercepted(n, area));\n }\n\n /** does a pixel coverage collision based on where we started, returning the node that has the most coverage that is >50% mid line */\n protected directionCollideCoverage(node: GridStackNode, o: GridStackMoveOpts, collides: GridStackNode[]): GridStackNode {\n if (!o.rect || !node._rect) return;\n let r0 = node._rect; // where started\n let r = {...o.rect}; // where we are\n\n // update dragged rect to show where it's coming from (above or below, etc...)\n if (r.y > r0.y) {\n r.h += r.y - r0.y;\n r.y = r0.y;\n } else {\n r.h += r0.y - r.y;\n }\n if (r.x > r0.x) {\n r.w += r.x - r0.x;\n r.x = r0.x;\n } else {\n r.w += r0.x - r.x;\n }\n\n let collide: GridStackNode;\n collides.forEach(n => {\n if (n.locked || !n._rect) return;\n let r2 = n._rect; // overlapping target\n let yOver = Number.MAX_VALUE, xOver = Number.MAX_VALUE, overMax = 0.5; // need >50%\n // depending on which side we started from, compute the overlap % of coverage\n // (ex: from above/below we only compute the max horizontal line coverage)\n if (r0.y < r2.y) { // from above\n yOver = ((r.y + r.h) - r2.y) / r2.h;\n } else if (r0.y+r0.h > r2.y+r2.h) { // from below\n yOver = ((r2.y + r2.h) - r.y) / r2.h;\n }\n if (r0.x < r2.x) { // from the left\n xOver = ((r.x + r.w) - r2.x) / r2.w;\n } else if (r0.x+r0.w > r2.x+r2.w) { // from the right\n xOver = ((r2.x + r2.w) - r.x) / r2.w;\n }\n let over = Math.min(xOver, yOver);\n if (over > overMax) {\n overMax = over;\n collide = n;\n }\n });\n o.collide = collide; // save it so we don't have to find it again\n return collide;\n }\n\n /** does a pixel coverage returning the node that has the most coverage by area */\n /*\n protected collideCoverage(r: GridStackPosition, collides: GridStackNode[]): {collide: GridStackNode, over: number} {\n let collide: GridStackNode;\n let overMax = 0;\n collides.forEach(n => {\n if (n.locked || !n._rect) return;\n let over = Utils.areaIntercept(r, n._rect);\n if (over > overMax) {\n overMax = over;\n collide = n;\n }\n });\n return {collide, over: overMax};\n }\n */\n\n /** called to cache the nodes pixel rectangles used for collision detection during drag */\n public cacheRects(w: number, h: number, top: number, right: number, bottom: number, left: number): GridStackEngine\n {\n this.nodes.forEach(n =>\n n._rect = {\n y: n.y * h + top,\n x: n.x * w + left,\n w: n.w * w - left - right,\n h: n.h * h - top - bottom\n }\n );\n return this;\n }\n\n /** called to possibly swap between 2 nodes (same size or column, not locked, touching), returning true if successful */\n public swap(a: GridStackNode, b: GridStackNode): boolean {\n if (!b || b.locked || !a || a.locked) return false;\n\n function _doSwap(): true { // assumes a is before b IFF they have different height (put after rather than exact swap)\n let x = b.x, y = b.y;\n b.x = a.x; b.y = a.y; // b -> a position\n if (a.h != b.h) {\n a.x = x; a.y = b.y + b.h; // a -> goes after b\n } else if (a.w != b.w) {\n a.x = b.x + b.w; a.y = y; // a -> goes after b\n } else {\n a.x = x; a.y = y; // a -> old b position\n }\n a._dirty = b._dirty = true;\n return true;\n }\n let touching: boolean; // remember if we called it (vs undefined)\n\n // same size and same row or column, and touching\n if (a.w === b.w && a.h === b.h && (a.x === b.x || a.y === b.y) && (touching = Utils.isTouching(a, b)))\n return _doSwap();\n if (touching === false) return; // IFF ran test and fail, bail out\n\n // check for taking same columns (but different height) and touching\n if (a.w === b.w && a.x === b.x && (touching || (touching = Utils.isTouching(a, b)))) {\n if (b.y < a.y) { let t = a; a = b; b = t; } // swap a <-> b vars so a is first\n return _doSwap();\n }\n if (touching === false) return;\n\n // check if taking same row (but different width) and touching\n if (a.h === b.h && a.y === b.y && (touching || (touching = Utils.isTouching(a, b)))) {\n if (b.x < a.x) { let t = a; a = b; b = t; } // swap a <-> b vars so a is first\n return _doSwap();\n }\n return false;\n }\n\n public isAreaEmpty(x: number, y: number, w: number, h: number): boolean {\n let nn: GridStackNode = {x: x || 0, y: y || 0, w: w || 1, h: h || 1};\n return !this.collide(nn);\n }\n\n /** re-layout grid items to reclaim any empty space */\n public compact(): GridStackEngine {\n if (this.nodes.length === 0) return this;\n this.batchUpdate()\n .sortNodes();\n let copyNodes = this.nodes;\n this.nodes = []; // pretend we have no nodes to conflict layout to start with...\n copyNodes.forEach(node => {\n if (!node.locked) {\n node.autoPosition = true;\n }\n this.addNode(node, false); // 'false' for add event trigger\n node._dirty = true; // will force attr update\n });\n return this.batchUpdate(false);\n }\n\n /** enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) */\n public set float(val: boolean) {\n if (this._float === val) return;\n this._float = val || false;\n if (!val) {\n this._packNodes()._notify();\n }\n }\n\n /** float getter method */\n public get float(): boolean { return this._float || false; }\n\n /** sort the nodes array from first to last, or reverse. Called during collision/placement to force an order */\n public sortNodes(dir?: -1 | 1): GridStackEngine {\n this.nodes = Utils.sort(this.nodes, dir, this.column);\n return this;\n }\n\n /** @internal called to top gravity pack the items back OR revert back to original Y positions when floating */\n protected _packNodes(): GridStackEngine {\n if (this.batchMode) { return this; }\n this.sortNodes(); // first to last\n\n if (this.float) {\n // restore original Y pos\n this.nodes.forEach(n => {\n if (n._updating || n._orig === undefined || n.y === n._orig.y) return;\n let newY = n.y;\n while (newY > n._orig.y) {\n --newY;\n let collide = this.collide(n, {x: n.x, y: newY, w: n.w, h: n.h});\n if (!collide) {\n n._dirty = true;\n n.y = newY;\n }\n }\n });\n } else {\n // top gravity pack\n this.nodes.forEach((n, i) => {\n if (n.locked) return;\n while (n.y > 0) {\n let newY = i === 0 ? 0 : n.y - 1;\n let canBeMoved = i === 0 || !this.collide(n, {x: n.x, y: newY, w: n.w, h: n.h});\n if (!canBeMoved) break;\n // Note: must be dirty (from last position) for GridStack::OnChange CB to update positions\n // and move items back. The user 'change' CB should detect changes from the original\n // starting position instead.\n n._dirty = (n.y !== newY);\n n.y = newY;\n }\n });\n }\n return this;\n }\n\n /**\n * given a random node, makes sure it's coordinates/values are valid in the current grid\n * @param node to adjust\n * @param resizing if out of bound, resize down or move into the grid to fit ?\n */\n public prepareNode(node: GridStackNode, resizing?: boolean): GridStackNode {\n node = node || {};\n node._id = node._id || GridStackEngine._idSeq++;\n\n // if we're missing position, have the grid position us automatically (before we set them to 0,0)\n if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) {\n node.autoPosition = true;\n }\n\n // assign defaults for missing required fields\n let defaults: GridStackNode = { x: 0, y: 0, w: 1, h: 1};\n Utils.defaults(node, defaults);\n\n if (!node.autoPosition) { delete node.autoPosition; }\n if (!node.noResize) { delete node.noResize; }\n if (!node.noMove) { delete node.noMove; }\n\n // check for NaN (in case messed up strings were passed. can't do parseInt() || defaults.x above as 0 is valid #)\n if (typeof node.x == 'string') { node.x = Number(node.x); }\n if (typeof node.y == 'string') { node.y = Number(node.y); }\n if (typeof node.w == 'string') { node.w = Number(node.w); }\n if (typeof node.h == 'string') { node.h = Number(node.h); }\n if (isNaN(node.x)) { node.x = defaults.x; node.autoPosition = true; }\n if (isNaN(node.y)) { node.y = defaults.y; node.autoPosition = true; }\n if (isNaN(node.w)) { node.w = defaults.w; }\n if (isNaN(node.h)) { node.h = defaults.h; }\n\n return this.nodeBoundFix(node, resizing);\n }\n\n /** part2 of preparing a node to fit inside our grid - checks for x,y,w from grid dimensions */\n public nodeBoundFix(node: GridStackNode, resizing?: boolean): GridStackNode {\n\n let before = node._orig || Utils.copyPos({}, node);\n\n if (node.maxW) { node.w = Math.min(node.w, node.maxW); }\n if (node.maxH) { node.h = Math.min(node.h, node.maxH); }\n if (node.minW && node.minW <= this.column) { node.w = Math.max(node.w, node.minW); }\n if (node.minH) { node.h = Math.max(node.h, node.minH); }\n\n // if user loaded a larger than allowed widget for current # of columns (or force 1 column mode),\n // remember it's position & width so we can restore back (1 -> 12 column) #1655 #1985\n // IFF we're not in the middle of column resizing!\n const saveOrig = this.column === 1 || node.x + node.w > this.column;\n if (saveOrig && this.column < 12 && !this._inColumnResize && !node.autoPosition && node._id && this.findCacheLayout(node, 12) === -1) {\n let copy = {...node}; // need _id + positions\n copy.x = Math.min(11, copy.x);\n copy.w = Math.min(12, copy.w);\n this.cacheOneLayout(copy, 12);\n }\n\n if (node.w > this.column) {\n node.w = this.column;\n } else if (node.w < 1) {\n node.w = 1;\n }\n\n if (this.maxRow && node.h > this.maxRow) {\n node.h = this.maxRow;\n } else if (node.h < 1) {\n node.h = 1;\n }\n\n if (node.x < 0) {\n node.x = 0;\n }\n if (node.y < 0) {\n node.y = 0;\n }\n\n if (node.x + node.w > this.column) {\n if (resizing) {\n node.w = this.column - node.x;\n } else {\n node.x = this.column - node.w;\n }\n }\n if (this.maxRow && node.y + node.h > this.maxRow) {\n if (resizing) {\n node.h = this.maxRow - node.y;\n } else {\n node.y = this.maxRow - node.h;\n }\n }\n\n if (!Utils.samePos(node, before)) {\n node._dirty = true;\n }\n\n return node;\n }\n\n /** returns a list of modified nodes from their original values */\n public getDirtyNodes(verify?: boolean): GridStackNode[] {\n // compare original x,y,w,h instead as _dirty can be a temporary state\n if (verify) {\n return this.nodes.filter(n => n._dirty && !Utils.samePos(n, n._orig));\n }\n return this.nodes.filter(n => n._dirty);\n }\n\n /** @internal call this to call onChange callback with dirty nodes so DOM can be updated */\n protected _notify(removedNodes?: GridStackNode[]): GridStackEngine {\n if (this.batchMode || !this.onChange) return this;\n let dirtyNodes = (removedNodes || []).concat(this.getDirtyNodes());\n this.onChange(dirtyNodes);\n return this;\n }\n\n /** @internal remove dirty and last tried info */\n public cleanNodes(): GridStackEngine {\n if (this.batchMode) return this;\n this.nodes.forEach(n => {\n delete n._dirty;\n delete n._lastTried;\n });\n return this;\n }\n\n /** @internal called to save initial position/size to track real dirty state.\n * Note: should be called right after we call change event (so next API is can detect changes)\n * as well as right before we start move/resize/enter (so we can restore items to prev values) */\n public saveInitial(): GridStackEngine {\n this.nodes.forEach(n => {\n n._orig = Utils.copyPos({}, n);\n delete n._dirty;\n });\n this._hasLocked = this.nodes.some(n => n.locked);\n return this;\n }\n\n /** @internal restore all the nodes back to initial values (called when we leave) */\n public restoreInitial(): GridStackEngine {\n this.nodes.forEach(n => {\n if (Utils.samePos(n, n._orig)) return;\n Utils.copyPos(n, n._orig);\n n._dirty = true;\n });\n this._notify();\n return this;\n }\n\n /** find the first available empty spot for the given node width/height, updating the x,y attributes. return true if found */\n public findEmptyPosition(node: GridStackNode): boolean {\n this.sortNodes();\n let found = false;\n for (let i = 0; !found; ++i) {\n let x = i % this.column;\n let y = Math.floor(i / this.column);\n if (x + node.w > this.column) {\n continue;\n }\n let box = {x, y, w: node.w, h: node.h};\n if (!this.nodes.find(n => Utils.isIntercepted(box, n))) {\n node.x = x;\n node.y = y;\n found = true;\n }\n }\n return found;\n }\n\n /** call to add the given node to our list, fixing collision and re-packing */\n public addNode(node: GridStackNode, triggerAddEvent = false): GridStackNode {\n let dup = this.nodes.find(n => n._id === node._id);\n if (dup) return dup; // prevent inserting twice! return it instead.\n\n // skip prepareNode if we're in middle of column resize (not new) but do check for bounds!\n node = this._inColumnResize ? this.nodeBoundFix(node) : this.prepareNode(node);\n delete node._temporaryRemoved;\n delete node._removeDOM;\n\n if (node.autoPosition && this.findEmptyPosition(node)) {\n delete node.autoPosition; // found our slot\n }\n\n this.nodes.push(node);\n if (triggerAddEvent) { this.addedNodes.push(node); }\n\n this._fixCollisions(node);\n if (!this.batchMode) { this._packNodes()._notify(); }\n return node;\n }\n\n public removeNode(node: GridStackNode, removeDOM = true, triggerEvent = false): GridStackEngine {\n if (!this.nodes.find(n => n === node)) {\n // TEST console.log(`Error: GridStackEngine.removeNode() node._id=${node._id} not found!`)\n return this;\n }\n if (triggerEvent) { // we wait until final drop to manually track removed items (rather than during drag)\n this.removedNodes.push(node);\n }\n if (removeDOM) node._removeDOM = true; // let CB remove actual HTML (used to set _id to null, but then we loose layout info)\n // don't use 'faster' .splice(findIndex(),1) in case node isn't in our list, or in multiple times.\n this.nodes = this.nodes.filter(n => n !== node);\n return this._packNodes()\n ._notify([node]);\n }\n\n public removeAll(removeDOM = true): GridStackEngine {\n delete this._layouts;\n if (this.nodes.length === 0) return this;\n removeDOM && this.nodes.forEach(n => n._removeDOM = true); // let CB remove actual HTML (used to set _id to null, but then we loose layout info)\n this.removedNodes = this.nodes;\n this.nodes = [];\n return this._notify(this.removedNodes);\n }\n\n /** checks if item can be moved (layout constrain) vs moveNode(), returning true if was able to move.\n * In more complicated cases (maxRow) it will attempt at moving the item and fixing\n * others in a clone first, then apply those changes if still within specs. */\n public moveNodeCheck(node: GridStackNode, o: GridStackMoveOpts): boolean {\n // if (node.locked) return false;\n if (!this.changedPosConstrain(node, o)) return false;\n o.pack = true;\n\n // simpler case: move item directly...\n if (!this.maxRow) {\n return this.moveNode(node, o);\n }\n\n // complex case: create a clone with NO maxRow (will check for out of bounds at the end)\n let clonedNode: GridStackNode;\n let clone = new GridStackEngine({\n column: this.column,\n float: this.float,\n nodes: this.nodes.map(n => {\n if (n === node) {\n clonedNode = {...n};\n return clonedNode;\n }\n return {...n};\n })\n });\n if (!clonedNode) return false;\n\n // check if we're covering 50% collision and could move\n let canMove = clone.moveNode(clonedNode, o) && clone.getRow() <= this.maxRow;\n // else check if we can force a swap (float=true, or different shapes) on non-resize\n if (!canMove && !o.resizing && o.collide) {\n let collide = o.collide.el.gridstackNode; // find the source node the clone collided with at 50%\n if (this.swap(node, collide)) { // swaps and mark dirty\n this._notify();\n return true;\n }\n }\n if (!canMove) return false;\n\n // if clone was able to move, copy those mods over to us now instead of caller trying to do this all over!\n // Note: we can't use the list directly as elements and other parts point to actual node, so copy content\n clone.nodes.filter(n => n._dirty).forEach(c => {\n let n = this.nodes.find(a => a._id === c._id);\n if (!n) return;\n Utils.copyPos(n, c);\n n._dirty = true;\n });\n this._notify();\n return true;\n }\n\n /** return true if can fit in grid height constrain only (always true if no maxRow) */\n public willItFit(node: GridStackNode): boolean {\n delete node._willFitPos;\n if (!this.maxRow) return true;\n // create a clone with NO maxRow and check if still within size\n let clone = new GridStackEngine({\n column: this.column,\n float: this.float,\n nodes: this.nodes.map(n => {return {...n}})\n });\n let n = {...node}; // clone node so we don't mod any settings on it but have full autoPosition and min/max as well! #1687\n this.cleanupNode(n);\n delete n.el; delete n._id; delete n.content; delete n.grid;\n clone.addNode(n);\n if (clone.getRow() <= this.maxRow) {\n node._willFitPos = Utils.copyPos({}, n);\n return true;\n }\n return false;\n }\n\n /** true if x,y or w,h are different after clamping to min/max */\n public changedPosConstrain(node: GridStackNode, p: GridStackPosition): boolean {\n // first make sure w,h are set for caller\n p.w = p.w || node.w;\n p.h = p.h || node.h;\n if (node.x !== p.x || node.y !== p.y) return true;\n // check constrained w,h\n if (node.maxW) { p.w = Math.min(p.w, node.maxW); }\n if (node.maxH) { p.h = Math.min(p.h, node.maxH); }\n if (node.minW) { p.w = Math.max(p.w, node.minW); }\n if (node.minH) { p.h = Math.max(p.h, node.minH); }\n return (node.w !== p.w || node.h !== p.h);\n }\n\n /** return true if the passed in node was actually moved (checks for no-op and locked) */\n public moveNode(node: GridStackNode, o: GridStackMoveOpts): boolean {\n if (!node || /*node.locked ||*/ !o) return false;\n let wasUndefinedPack: boolean;\n if (o.pack === undefined) {\n wasUndefinedPack = o.pack = true;\n }\n\n // constrain the passed in values and check if we're still changing our node\n if (typeof o.x !== 'number') { o.x = node.x; }\n if (typeof o.y !== 'number') { o.y = node.y; }\n if (typeof o.w !== 'number') { o.w = node.w; }\n if (typeof o.h !== 'number') { o.h = node.h; }\n let resizing = (node.w !== o.w || node.h !== o.h);\n let nn: GridStackNode = Utils.copyPos({}, node, true); // get min/max out first, then opt positions next\n Utils.copyPos(nn, o);\n nn = this.nodeBoundFix(nn, resizing);\n Utils.copyPos(o, nn);\n\n if (Utils.samePos(node, o)) return false;\n let prevPos: GridStackPosition = Utils.copyPos({}, node);\n\n // check if we will need to fix collision at our new location\n let collides = this.collideAll(node, nn, o.skip);\n let needToMove = true;\n if (collides.length) {\n let activeDrag = node._moving && !o.nested;\n // check to make sure we actually collided over 50% surface area while dragging\n let collide = activeDrag ? this.directionCollideCoverage(node, o, collides) : collides[0];\n // if we're enabling creation of sub-grids on the fly, see if we're covering 80% of either one, if we didn't already do that\n if (activeDrag && collide && node.grid?.opts?.subGridDynamic && !node.grid._isTemp) {\n let over = Utils.areaIntercept(o.rect, collide._rect);\n let a1 = Utils.area(o.rect);\n let a2 = Utils.area(collide._rect);\n let perc = over / (a1 < a2 ? a1 : a2);\n if (perc > .8) {\n collide.grid.makeSubGrid(collide.el, undefined, node);\n collide = undefined;\n }\n }\n\n if (collide) {\n needToMove = !this._fixCollisions(node, nn, collide, o); // check if already moved...\n } else {\n needToMove = false; // we didn't cover >50% for a move, skip...\n if (wasUndefinedPack) delete o.pack;\n }\n }\n\n // now move (to the original ask vs the collision version which might differ) and repack things\n if (needToMove) {\n node._dirty = true;\n Utils.copyPos(node, nn);\n }\n if (o.pack) {\n this._packNodes()\n ._notify();\n }\n return !Utils.samePos(node, prevPos); // pack might have moved things back\n }\n\n public getRow(): number {\n return this.nodes.reduce((row, n) => Math.max(row, n.y + n.h), 0);\n }\n\n public beginUpdate(node: GridStackNode): GridStackEngine {\n if (!node._updating) {\n node._updating = true;\n delete node._skipDown;\n if (!this.batchMode) this.saveInitial();\n }\n return this;\n }\n\n public endUpdate(): GridStackEngine {\n let n = this.nodes.find(n => n._updating);\n if (n) {\n delete n._updating;\n delete n._skipDown;\n }\n return this;\n }\n\n /** saves a copy of the largest column layout (eg 12 even when rendering oneColumnMode) so we don't loose orig layout,\n * returning a list of widgets for serialization */\n public save(saveElement = true): GridStackNode[] {\n // use the highest layout for any saved info so we can have full detail on reload #1849\n let len = this._layouts?.length;\n let layout = len && this.column !== (len - 1) ? this._layouts[len - 1] : null;\n let list: GridStackNode[] = [];\n this.sortNodes();\n this.nodes.forEach(n => {\n let wl = layout?.find(l => l._id === n._id);\n let w: GridStackNode = {...n};\n // use layout info instead if set\n if (wl) { w.x = wl.x; w.y = wl.y; w.w = wl.w; }\n Utils.removeInternalForSave(w, !saveElement);\n list.push(w);\n });\n return list;\n }\n\n /** @internal called whenever a node is added or moved - updates the cached layouts */\n public layoutsNodesChange(nodes: GridStackNode[]): GridStackEngine {\n if (!this._layouts || this._inColumnResize) return this;\n // remove smaller layouts - we will re-generate those on the fly... larger ones need to update\n this._layouts.forEach((layout, column) => {\n if (!layout || column === this.column) return this;\n if (column < this.column) {\n this._layouts[column] = undefined;\n }\n else {\n // we save the original x,y,w (h isn't cached) to see what actually changed to propagate better.\n // NOTE: we don't need to check against out of bound scaling/moving as that will be done when using those cache values. #1785\n let ratio = column / this.column;\n nodes.forEach(node => {\n if (!node._orig) return; // didn't change (newly added ?)\n let n = layout.find(l => l._id === node._id);\n if (!n) return; // no cache for new nodes. Will use those values.\n // Y changed, push down same amount\n // TODO: detect doing item 'swaps' will help instead of move (especially in 1 column mode)\n if (node.y !== node._orig.y) {\n n.y += (node.y - node._orig.y);\n }\n // X changed, scale from new position\n if (node.x !== node._orig.x) {\n n.x = Math.round(node.x * ratio);\n }\n // width changed, scale from new width\n if (node.w !== node._orig.w) {\n n.w = Math.round(node.w * ratio);\n }\n // ...height always carries over from cache\n });\n }\n });\n return this;\n }\n\n /**\n * @internal Called to scale the widget width & position up/down based on the column change.\n * Note we store previous layouts (especially original ones) to make it possible to go\n * from say 12 -> 1 -> 12 and get back to where we were.\n *\n * @param prevColumn previous number of columns\n * @param column new column number\n * @param nodes different sorted list (ex: DOM order) instead of current list\n * @param layout specify the type of re-layout that will happen (position, size, etc...).\n * Note: items will never be outside of the current column boundaries. default (moveScale). Ignored for 1 column\n */\n public updateNodeWidths(prevColumn: number, column: number, nodes: GridStackNode[], layout: ColumnOptions = 'moveScale'): GridStackEngine {\n if (!this.nodes.length || !column || prevColumn === column) return this;\n\n // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data\n this.cacheLayout(this.nodes, prevColumn);\n this.batchUpdate(); // do this EARLY as it will call saveInitial() so we can detect where we started for _dirty and collision\n let newNodes: GridStackNode[] = [];\n\n // if we're going to 1 column and using DOM order rather than default sorting, then generate that layout\n let domOrder = false;\n if (column === 1 && nodes?.length) {\n domOrder = true;\n let top = 0;\n nodes.forEach(n => {\n n.x = 0;\n n.w = 1;\n n.y = Math.max(n.y, top);\n top = n.y + n.h;\n });\n newNodes = nodes;\n nodes = [];\n } else {\n nodes = Utils.sort(this.nodes, -1, prevColumn); // current column reverse sorting so we can insert last to front (limit collision)\n }\n\n // see if we have cached previous layout IFF we are going up in size (restore) otherwise always\n // generate next size down from where we are (looks more natural as you gradually size down).\n let cacheNodes: GridStackNode[] = [];\n if (column > prevColumn) {\n cacheNodes = this._layouts[column] || [];\n // ...if not, start with the largest layout (if not already there) as down-scaling is more accurate\n // by pretending we came from that larger column by assigning those values as starting point\n let lastIndex = this._layouts.length - 1;\n if (!cacheNodes.length && prevColumn !== lastIndex && this._layouts[lastIndex]?.length) {\n prevColumn = lastIndex;\n this._layouts[lastIndex].forEach(cacheNode => {\n let n = nodes.find(n => n._id === cacheNode._id);\n if (n) {\n // still current, use cache info positions\n n.x = cacheNode.x;\n n.y = cacheNode.y;\n n.w = cacheNode.w;\n }\n });\n }\n }\n\n // if we found cache re-use those nodes that are still current\n cacheNodes.forEach(cacheNode => {\n let j = nodes.findIndex(n => n._id === cacheNode._id);\n if (j !== -1) {\n // still current, use cache info positions\n nodes[j].x = cacheNode.x;\n nodes[j].y = cacheNode.y;\n nodes[j].w = cacheNode.w;\n newNodes.push(nodes[j]);\n nodes.splice(j, 1);\n }\n });\n // ...and add any extra non-cached ones\n if (nodes.length) {\n if (typeof layout === 'function') {\n layout(column, prevColumn, newNodes, nodes);\n } else if (!domOrder) {\n let ratio = column / prevColumn;\n let move = (layout === 'move' || layout === 'moveScale');\n let scale = (layout === 'scale' || layout === 'moveScale');\n nodes.forEach(node => {\n // NOTE: x + w could be outside of the grid, but addNode() below will handle that\n node.x = (column === 1 ? 0 : (move ? Math.round(node.x * ratio) : Math.min(node.x, column - 1)));\n node.w = ((column === 1 || prevColumn === 1) ? 1 :\n scale ? (Math.round(node.w * ratio) || 1) : (Math.min(node.w, column)));\n newNodes.push(node);\n });\n nodes = [];\n }\n }\n\n // finally re-layout them in reverse order (to get correct placement)\n if (!domOrder) newNodes = Utils.sort(newNodes, -1, column);\n this._inColumnResize = true; // prevent cache update\n this.nodes = []; // pretend we have no nodes to start with (add() will use same structures) to simplify layout\n newNodes.forEach(node => {\n this.addNode(node, false); // 'false' for add event trigger\n delete node._orig; // make sure the commit doesn't try to restore things back to original\n });\n this.batchUpdate(false);\n delete this._inColumnResize;\n return this;\n }\n\n /**\n * call to cache the given layout internally to the given location so we can restore back when column changes size\n * @param nodes list of nodes\n * @param column corresponding column index to save it under\n * @param clear if true, will force other caches to be removed (default false)\n */\n public cacheLayout(nodes: GridStackNode[], column: number, clear = false): GridStackEngine {\n let copy: GridStackNode[] = [];\n nodes.forEach((n, i) => {\n n._id = n._id || GridStackEngine._idSeq++; // make sure we have an id in case this is new layout, else re-use id already set\n copy[i] = {x: n.x, y: n.y, w: n.w, _id: n._id} // only thing we change is x,y,w and id to find it back\n });\n this._layouts = clear ? [] : this._layouts || []; // use array to find larger quick\n this._layouts[column] = copy;\n return this;\n }\n\n /**\n * call to cache the given node layout internally to the given location so we can restore back when column changes size\n * @param node single node to cache\n * @param column corresponding column index to save it under\n */\n public cacheOneLayout(n: GridStackNode, column: number): GridStackEngine {\n n._id = n._id || GridStackEngine._idSeq++;\n let layout: GridStackNode = {x: n.x, y: n.y, w: n.w, _id: n._id}\n this._layouts = this._layouts || [];\n this._layouts[column] = this._layouts[column] || [];\n let index = this.findCacheLayout(n, column);\n if (index === -1)\n this._layouts[column].push(layout);\n else\n this._layouts[column][index] = layout;\n return this;\n }\n\n protected findCacheLayout(n: GridStackNode, column: number): number {\n return this._layouts?.[column]?.findIndex(l => l._id === n._id) ?? -1;\n }\n\n\n /** called to remove all internal values but the _id */\n public cleanupNode(node: GridStackNode): GridStackEngine {\n for (let prop in node) {\n if (prop[0] === '_' && prop !== '_id') delete node[prop];\n }\n return this;\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* gridstack-poly.ts 7.1
|
|
2
|
+
* gridstack-poly.ts 7.2.1 used for IE and older browser support (not supported in v2-v4.3.1, but again in v4.4)
|
|
3
3
|
* Copyright (c) 2021 Alain Dumesny - see GridStack root license
|
|
4
4
|
*/
|
|
5
5
|
|
package/dist/es5/gridstack.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* GridStack 7.1
|
|
2
|
+
* GridStack 7.2.1
|
|
3
3
|
* https://gridstackjs.com/
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) 2021-2022 Alain Dumesny
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { GridStackEngine } from './gridstack-engine';
|
|
9
9
|
import { Utils } from './utils';
|
|
10
|
-
import { ColumnOptions, GridItemHTMLElement, GridStackElement, GridStackEventHandlerCallback, GridStackNode, GridStackWidget, numberOrString, DDDragInOpt, GridStackOptions } from './types';
|
|
10
|
+
import { ColumnOptions, GridItemHTMLElement, GridStackElement, GridStackEventHandlerCallback, GridStackNode, GridStackWidget, numberOrString, DDDragInOpt, GridStackOptions, AddRemoveFcn } from './types';
|
|
11
11
|
import { DDGridStack } from './dd-gridstack';
|
|
12
12
|
export * from './types';
|
|
13
13
|
export * from './utils';
|
|
@@ -28,8 +28,6 @@ export interface CellPosition {
|
|
|
28
28
|
x: number;
|
|
29
29
|
y: number;
|
|
30
30
|
}
|
|
31
|
-
/** optional function called during load() to callback the user on new added/remove items */
|
|
32
|
-
export declare type AddRemoveFcn = (g: GridStack, w: GridStackWidget, add: boolean) => GridItemHTMLElement;
|
|
33
31
|
/**
|
|
34
32
|
* Main gridstack class - you will need to call `GridStack.init()` first to initialize your grid.
|
|
35
33
|
* Note: your grid elements MUST have the following classes for the CSS layout to work:
|
|
@@ -147,7 +145,7 @@ export declare class GridStack {
|
|
|
147
145
|
* @example
|
|
148
146
|
* see http://gridstackjs.com/demo/serialization.html
|
|
149
147
|
**/
|
|
150
|
-
load(layout: GridStackWidget[],
|
|
148
|
+
load(layout: GridStackWidget[], addRemove?: boolean | AddRemoveFcn): GridStack;
|
|
151
149
|
/**
|
|
152
150
|
* use before calling a bunch of `addWidget()` to prevent un-necessary relayouts in between (more efficient)
|
|
153
151
|
* and get a single event callback. You will see no changes until `batchUpdate(false)` is called.
|
package/dist/es5/gridstack.js
CHANGED
|
@@ -30,7 +30,7 @@ var __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
|
30
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
31
|
exports.GridStack = void 0;
|
|
32
32
|
/*!
|
|
33
|
-
* GridStack 7.1
|
|
33
|
+
* GridStack 7.2.1
|
|
34
34
|
* https://gridstackjs.com/
|
|
35
35
|
*
|
|
36
36
|
* Copyright (c) 2021-2022 Alain Dumesny
|
|
@@ -198,6 +198,13 @@ var GridStack = /** @class */ (function () {
|
|
|
198
198
|
elements_1.sort(function (a, b) { return b.i - a.i; }).forEach(function (e) { return _this._prepareElement(e.el); }); // revert sort so lowest item wins
|
|
199
199
|
this.batchUpdate(false);
|
|
200
200
|
}
|
|
201
|
+
// load any passed in children as well, which overrides any DOM layout done above
|
|
202
|
+
if (this.opts.children) {
|
|
203
|
+
var children = this.opts.children;
|
|
204
|
+
delete this.opts.children;
|
|
205
|
+
if (children.length)
|
|
206
|
+
this.load(children); // don't load empty
|
|
207
|
+
}
|
|
201
208
|
this.setAnimation(this.opts.animate);
|
|
202
209
|
this._updateStyles();
|
|
203
210
|
if (this.opts.column != 12) {
|
|
@@ -297,11 +304,6 @@ var GridStack = /** @class */ (function () {
|
|
|
297
304
|
}
|
|
298
305
|
// create grid class and load any children
|
|
299
306
|
var grid = GridStack.init(opt, el);
|
|
300
|
-
if (grid.opts.children) {
|
|
301
|
-
var children = grid.opts.children;
|
|
302
|
-
delete grid.opts.children;
|
|
303
|
-
grid.load(children);
|
|
304
|
-
}
|
|
305
307
|
return grid;
|
|
306
308
|
};
|
|
307
309
|
/** call this method to register your engine instead of the default one.
|
|
@@ -360,6 +362,9 @@ var GridStack = /** @class */ (function () {
|
|
|
360
362
|
if (node === null || node === void 0 ? void 0 : node.el) {
|
|
361
363
|
el = node.el; // re-use element stored in the node
|
|
362
364
|
}
|
|
365
|
+
else if (this.opts.addRemoveCB) {
|
|
366
|
+
el = this.opts.addRemoveCB(this, options, true);
|
|
367
|
+
}
|
|
363
368
|
else {
|
|
364
369
|
var content = (options === null || options === void 0 ? void 0 : options.content) || '';
|
|
365
370
|
var doc = document.implementation.createHTMLDocument(''); // IE needs a param
|
|
@@ -370,6 +375,8 @@ var GridStack = /** @class */ (function () {
|
|
|
370
375
|
else {
|
|
371
376
|
el = els;
|
|
372
377
|
}
|
|
378
|
+
if (!el)
|
|
379
|
+
return;
|
|
373
380
|
// Tempting to initialize the passed in opt with default and valid values, but this break knockout demos
|
|
374
381
|
// as the actual value are filled in when _prepareElement() calls el.getAttribute('gs-xyz') before adding the node.
|
|
375
382
|
// So make sure we load any DOM attributes that are not specified in passed in options (which override)
|
|
@@ -429,6 +436,7 @@ var GridStack = /** @class */ (function () {
|
|
|
429
436
|
ops.disableOneColumnMode = true; // driven by parent
|
|
430
437
|
}
|
|
431
438
|
// if we're converting an existing full item, move over the content to be the first sub item in the new grid
|
|
439
|
+
// TODO: support this.opts.addRemoveCB for frameworks
|
|
432
440
|
var content = node.el.querySelector('.grid-stack-item-content');
|
|
433
441
|
var newItem;
|
|
434
442
|
var newItemOpt;
|
|
@@ -583,9 +591,9 @@ var GridStack = /** @class */ (function () {
|
|
|
583
591
|
* @example
|
|
584
592
|
* see http://gridstackjs.com/demo/serialization.html
|
|
585
593
|
**/
|
|
586
|
-
GridStack.prototype.load = function (layout,
|
|
594
|
+
GridStack.prototype.load = function (layout, addRemove) {
|
|
587
595
|
var _this = this;
|
|
588
|
-
if (
|
|
596
|
+
if (addRemove === void 0) { addRemove = this.opts.addRemoveCB || true; }
|
|
589
597
|
var items = GridStack.Utils.sort(__spreadArrays(layout), -1, this._prevColumn || this.getColumn()); // make copy before we mod/sort
|
|
590
598
|
this._insertNotAppend = true; // since create in reverse order...
|
|
591
599
|
// if we're loading a layout into for example 1 column (_prevColumn is set only when going to 1) and items don't fit, make sure to save
|
|
@@ -594,21 +602,22 @@ var GridStack = /** @class */ (function () {
|
|
|
594
602
|
this._ignoreLayoutsNodeChange = true; // skip layout update
|
|
595
603
|
this.engine.cacheLayout(items, this._prevColumn, true);
|
|
596
604
|
}
|
|
605
|
+
// if given a different callback, temporally set it as global option to creating will use it
|
|
606
|
+
var prevCB = this.opts.addRemoveCB;
|
|
607
|
+
if (typeof (addRemove) === 'function')
|
|
608
|
+
this.opts.addRemoveCB = addRemove;
|
|
597
609
|
var removed = [];
|
|
598
610
|
this.batchUpdate();
|
|
599
611
|
// see if any items are missing from new layout and need to be removed first
|
|
600
|
-
if (
|
|
612
|
+
if (addRemove) {
|
|
601
613
|
var copyNodes = __spreadArrays(this.engine.nodes); // don't loop through array you modify
|
|
602
614
|
copyNodes.forEach(function (n) {
|
|
603
615
|
var item = items.find(function (w) { return n.id === w.id; });
|
|
604
616
|
if (!item) {
|
|
605
|
-
if (
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
removed.push(n); // batch keep track
|
|
610
|
-
_this.removeWidget(n.el, true, false);
|
|
611
|
-
}
|
|
617
|
+
if (_this.opts.addRemoveCB)
|
|
618
|
+
_this.opts.addRemoveCB(_this, n, false);
|
|
619
|
+
removed.push(n); // batch keep track
|
|
620
|
+
_this.removeWidget(n.el, true, false);
|
|
612
621
|
}
|
|
613
622
|
});
|
|
614
623
|
}
|
|
@@ -625,13 +634,8 @@ var GridStack = /** @class */ (function () {
|
|
|
625
634
|
}
|
|
626
635
|
}
|
|
627
636
|
}
|
|
628
|
-
else if (
|
|
629
|
-
|
|
630
|
-
w = addAndRemove(_this, w, true).gridstackNode;
|
|
631
|
-
}
|
|
632
|
-
else {
|
|
633
|
-
w = (w.el ? _this.addWidget(w.el, w) : _this.addWidget(w)).gridstackNode;
|
|
634
|
-
}
|
|
637
|
+
else if (addRemove) {
|
|
638
|
+
_this.addWidget(w);
|
|
635
639
|
}
|
|
636
640
|
});
|
|
637
641
|
this.engine.removedNodes = removed;
|
|
@@ -639,6 +643,7 @@ var GridStack = /** @class */ (function () {
|
|
|
639
643
|
// after commit, clear that flag
|
|
640
644
|
delete this._ignoreLayoutsNodeChange;
|
|
641
645
|
delete this._insertNotAppend;
|
|
646
|
+
prevCB ? this.opts.addRemoveCB = prevCB : delete this.opts.addRemoveCB;
|
|
642
647
|
return this;
|
|
643
648
|
};
|
|
644
649
|
/**
|
|
@@ -1353,7 +1358,6 @@ var GridStack = /** @class */ (function () {
|
|
|
1353
1358
|
noMove: 'gs-no-move',
|
|
1354
1359
|
locked: 'gs-locked',
|
|
1355
1360
|
id: 'gs-id',
|
|
1356
|
-
resizeHandles: 'gs-resize-handles'
|
|
1357
1361
|
};
|
|
1358
1362
|
for (var key in attrs) {
|
|
1359
1363
|
if (node[key]) { // 0 is valid for x,y only but done above already and not in list anyway
|
|
@@ -1380,7 +1384,6 @@ var GridStack = /** @class */ (function () {
|
|
|
1380
1384
|
node.noResize = utils_1.Utils.toBool(el.getAttribute('gs-no-resize'));
|
|
1381
1385
|
node.noMove = utils_1.Utils.toBool(el.getAttribute('gs-no-move'));
|
|
1382
1386
|
node.locked = utils_1.Utils.toBool(el.getAttribute('gs-locked'));
|
|
1383
|
-
node.resizeHandles = el.getAttribute('gs-resize-handles');
|
|
1384
1387
|
node.id = el.getAttribute('gs-id');
|
|
1385
1388
|
// remove any key not found (null or false which is default)
|
|
1386
1389
|
for (var key in node) {
|
|
@@ -1866,8 +1869,8 @@ var GridStack = /** @class */ (function () {
|
|
|
1866
1869
|
if (wasAdded && (origNode === null || origNode === void 0 ? void 0 : origNode.grid) && origNode.grid !== _this) {
|
|
1867
1870
|
var oGrid = origNode.grid;
|
|
1868
1871
|
oGrid.engine.removedNodes.push(origNode);
|
|
1869
|
-
oGrid._triggerRemoveEvent();
|
|
1870
|
-
// if it's an empty sub-grid
|
|
1872
|
+
oGrid._triggerRemoveEvent()._triggerChangeEvent();
|
|
1873
|
+
// if it's an empty sub-grid that got auto-created, nuke it
|
|
1871
1874
|
if (oGrid.parentGridItem && !oGrid.engine.nodes.length && oGrid.opts.subGridDynamic) {
|
|
1872
1875
|
oGrid.removeAsSubGrid();
|
|
1873
1876
|
}
|
|
@@ -1881,7 +1884,7 @@ var GridStack = /** @class */ (function () {
|
|
|
1881
1884
|
}
|
|
1882
1885
|
dd.off(el, 'drag');
|
|
1883
1886
|
// if we made a copy ('helper' which is temp) of the original node then insert a copy, else we move the original node (#1102)
|
|
1884
|
-
// as the helper will be nuked by jquery-ui otherwise
|
|
1887
|
+
// as the helper will be nuked by jquery-ui otherwise. TODO: update old code path
|
|
1885
1888
|
if (helper !== el) {
|
|
1886
1889
|
helper.remove();
|
|
1887
1890
|
el.gridstackNode = origNode; // original item (left behind) is re-stored to pre dragging as the node now has drop info
|
|
@@ -1902,6 +1905,8 @@ var GridStack = /** @class */ (function () {
|
|
|
1902
1905
|
utils_1.Utils.copyPos(node, _this._readAttr(_this.placeholder)); // placeholder values as moving VERY fast can throw things off #1578
|
|
1903
1906
|
utils_1.Utils.removePositioningStyles(el); // @ts-ignore
|
|
1904
1907
|
_this._writeAttr(el, node);
|
|
1908
|
+
el.className = '';
|
|
1909
|
+
el.classList.add(types_1.gridDefaults.itemClass, _this.opts.itemClass);
|
|
1905
1910
|
_this.el.appendChild(el); // @ts-ignore // TODO: now would be ideal time to _removeHelperStyle() overriding floating styles (native only)
|
|
1906
1911
|
if (subGrid) {
|
|
1907
1912
|
subGrid.parentGridItem = node;
|
|
@@ -2206,7 +2211,7 @@ var GridStack = /** @class */ (function () {
|
|
|
2206
2211
|
GridStack.Utils = utils_1.Utils;
|
|
2207
2212
|
/** scoping so users can call new GridStack.Engine(12) for example */
|
|
2208
2213
|
GridStack.Engine = gridstack_engine_1.GridStackEngine;
|
|
2209
|
-
GridStack.GDRev = '7.1
|
|
2214
|
+
GridStack.GDRev = '7.2.1';
|
|
2210
2215
|
return GridStack;
|
|
2211
2216
|
}());
|
|
2212
2217
|
exports.GridStack = GridStack;
|