fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
51 lines (47 loc) • 2.52 kB
JavaScript
import { Point, BaseFabricObject, FabricImage, Group } from 'fabric';
/**
* Updates the fromObject function of a class to return a version that can restore old data
* with values of originX and originY that are different from 'center', 'center'
* Used to upgrade from fabric 6 to fabric 7
* @param originalFn the original fromObject function of an object,
* @param defaultOriginX optional default value for non exported originX,
* @param defaultOriginY optional default value for non exported originY,
* @returns a wrapped fromObject function for the object
*/
const originUpdaterWrapper = function (originalFn) {
let defaultOriginX = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'left';
let defaultOriginY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'top';
return async function (serializedObject) {
// we default to left and top because those are defaults before deprecation
const {
originX = defaultOriginX,
originY = defaultOriginY
} = serializedObject;
// and we do not want to pass those properties on the object anymore
delete serializedObject.originX;
delete serializedObject.originY;
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
const originalObject = await originalFn.call(this, serializedObject, ...args);
const actualPosition = new Point(originalObject.left, originalObject.top);
originalObject.setPositionByOrigin(actualPosition, originX, originY);
return originalObject;
};
};
/**
* Wraps and override the current fabricJS fromObject static functions
* Used to upgrade from fabric 6 to fabric 7
* @param defaultOriginX optional default value for non exported originX,
* @param defaultOriginY optional default value for non exported originY,
* @returns a wrapped fromObject function for the object
*/
const installOriginWrapperUpdater = (originX, originY) => {
// @ts-expect-error the _fromObject parameter could be instantiated differently
BaseFabricObject._fromObject = originUpdaterWrapper(BaseFabricObject._fromObject, originX, originY);
// FabricImage and Group do not use _fromObject
FabricImage.fromObject = originUpdaterWrapper(FabricImage.fromObject, originX, originY);
Group.fromObject = originUpdaterWrapper(Group.fromObject, originX, originY);
};
export { installOriginWrapperUpdater, originUpdaterWrapper };
//# sourceMappingURL=index.mjs.map