fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 21.9 kB
Source Map (JSON)
{"version":3,"file":"Collection.mjs","sources":["../../src/Collection.ts"],"sourcesContent":["import type { Constructor, TBBox } from './typedefs';\nimport { removeFromArray } from './util/internals/removeFromArray';\nimport { Point } from './Point';\nimport type { ActiveSelection } from './shapes/ActiveSelection';\nimport type { Group } from './shapes/Group';\nimport type { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\nimport type { FabricObject } from './shapes/Object/FabricObject';\n\nexport const isCollection = (\n fabricObject?: FabricObject,\n): fabricObject is Group | ActiveSelection => {\n return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport function createCollectionMixin<TBase extends Constructor>(Base: TBase) {\n class Collection extends Base {\n /**\n * @type {FabricObject[]}\n * @TODO needs to end up in the constructor too\n */\n _objects: FabricObject[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectAdded(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectRemoved(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onStackOrderChanged(object: FabricObject) {\n // subclasses should override this method\n }\n\n /**\n * Adds objects to collection\n * Objects should be instances of (or inherit from) FabricObject\n * @param {...FabricObject[]} objects to add\n * @returns {number} new array length\n */\n add(...objects: FabricObject[]): number {\n const size = this._objects.push(...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {number} index Index to insert object at\n * @param {...FabricObject[]} objects Object(s) to insert\n * @returns {number} new array length\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n this._objects.splice(index, 0, ...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return this._objects.length;\n }\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @private\n * @param {...FabricObject[]} objects objects to remove\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const array = this._objects,\n removed: FabricObject[] = [];\n objects.forEach((object) => {\n const index = array.indexOf(object);\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n array.splice(index, 1);\n removed.push(object);\n this._onObjectRemoved(object);\n }\n });\n return removed;\n }\n\n /**\n * Executes given function for each object in this group\n * A simple shortcut for getObjects().forEach, before es6 was more complicated,\n * now is just a shortcut.\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n */\n forEachObject(\n callback: (\n object: FabricObject,\n index: number,\n array: FabricObject[],\n ) => any,\n ) {\n this.getObjects().forEach((object, index, objects) =>\n callback(object, index, objects),\n );\n }\n\n /**\n * Returns an array of children objects of this instance\n * @param {...String} [types] When specified, only objects of these types are returned\n * @return {Array}\n */\n getObjects(...types: string[]) {\n if (types.length === 0) {\n return [...this._objects];\n }\n return this._objects.filter((o) => o.isType(...types));\n }\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Object} object at index\n */\n item(index: number) {\n return this._objects[index];\n }\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty() {\n return this._objects.length === 0;\n }\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size() {\n return this._objects.length;\n }\n\n /**\n * Returns true if collection contains an object.\\\n * **Prefer using {@link FabricObject#isDescendantOf} for performance reasons**\n * instead of `a.contains(b)` use `b.isDescendantOf(a)`\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains(object: FabricObject, deep?: boolean): boolean {\n if (this._objects.includes(object)) {\n return true;\n } else if (deep) {\n return this._objects.some(\n (obj) =>\n obj instanceof Collection &&\n (obj as unknown as Collection).contains(object, true),\n );\n }\n return false;\n }\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity() {\n return this._objects.reduce((memo, current) => {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @returns {boolean} true if change occurred\n */\n sendObjectToBack(object: FabricObject) {\n if (!object || object === this._objects[0]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @returns {boolean} true if change occurred\n */\n bringObjectToFront(object: FabricObject) {\n if (!object || object === this._objects[this._objects.length - 1]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.push(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, `intersecting` allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @returns {boolean} true if change occurred\n */\n sendObjectBackwards(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n const newIdx = this.findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @returns {boolean} true if change occurred\n */\n bringObjectForward(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n const newIdx = this.findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {number} index Position to move to\n * @returns {boolean} true if change occurred\n */\n moveObjectTo(object: FabricObject, index: number) {\n if (object === this._objects[index]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n findNewLowerIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse down the stack looking for the nearest intersecting object\n for (let i = idx - 1; i >= 0; --i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n }\n\n findNewUpperIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse up the stack looking for the nearest intersecting object\n for (let i = idx + 1; i < this._objects.length; ++i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n }\n\n /**\n * Given a bounding box, return all the objects of the collection that are contained in the bounding box.\n * If `includeIntersecting` is true, return also the objects that intersect the bounding box as well.\n * This is meant to work with selection. Is not a generic method.\n * @param {TBBox} bbox a bounding box in scene coordinates\n * @param {{ includeIntersecting?: boolean }} options an object with includeIntersecting\n * @returns array of objects contained in the bounding box, ordered from top to bottom stacking wise\n */\n collectObjects(\n { left, top, width, height }: TBBox,\n { includeIntersecting = true }: { includeIntersecting?: boolean } = {},\n ) {\n const objects: InteractiveFabricObject[] = [],\n tl = new Point(left, top),\n br = tl.add(new Point(width, height));\n\n // we iterate reverse order to collect top first in case of click.\n for (let i = this._objects.length - 1; i >= 0; i--) {\n const object = this._objects[i] as unknown as InteractiveFabricObject;\n if (\n object.selectable &&\n object.visible &&\n ((includeIntersecting && object.intersectsWithRect(tl, br)) ||\n object.isContainedWithinRect(tl, br) ||\n (includeIntersecting && object.containsPoint(tl)) ||\n (includeIntersecting && object.containsPoint(br)))\n ) {\n objects.push(object);\n }\n }\n\n return objects;\n }\n }\n\n // https://github.com/microsoft/TypeScript/issues/32080\n return Collection as typeof Collection & TBase;\n}\n"],"names":["isCollection","fabricObject","Array","isArray","_objects","createCollectionMixin","Base","Collection","constructor","arguments","_defineProperty","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","add","_len","length","objects","_key","size","push","forEach","insertAt","index","_len2","_key2","splice","remove","array","removed","_len3","_key3","indexOf","forEachObject","callback","getObjects","_len4","types","_key4","filter","o","isType","item","isEmpty","contains","deep","includes","some","obj","complexity","reduce","memo","current","sendObjectToBack","removeFromArray","unshift","bringObjectToFront","sendObjectBackwards","intersecting","idx","newIdx","findNewLowerIndex","bringObjectForward","findNewUpperIndex","moveObjectTo","i","isOverlapping","collectObjects","_ref","left","top","width","height","includeIntersecting","undefined","tl","Point","br","selectable","visible","intersectsWithRect","isContainedWithinRect","containsPoint"],"mappings":"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"}