From fbda0f816cf2ba3143e2a470107a0731a24ee3e1 Mon Sep 17 00:00:00 2001 From: ShaMan123 Date: Thu, 25 Aug 2022 15:32:37 +0300 Subject: [PATCH 01/10] move to `controls` folder --- index.js | 5 +---- src/{ => controls}/control.class.ts | 0 src/{ => controls}/controls.actions.ts | 0 src/{ => controls}/controls.render.ts | 0 src/{mixins => controls}/default_controls.ts | 0 src/controls/index.ts | 4 ++++ 6 files changed, 5 insertions(+), 4 deletions(-) rename src/{ => controls}/control.class.ts (100%) rename src/{ => controls}/controls.actions.ts (100%) rename src/{ => controls}/controls.render.ts (100%) rename src/{mixins => controls}/default_controls.ts (100%) create mode 100644 src/controls/index.ts diff --git a/index.js b/index.js index 9409f927b6e..9582e812680 100644 --- a/index.js +++ b/index.js @@ -23,9 +23,6 @@ import './src/elements_parser'; // optional parser import './src/point.class'; import './src/intersection.class'; import './src/color'; -import './src/controls.actions'; // optional interaction -import './src/controls.render'; // optional interaction -import './src/control.class'; // optional interaction import './src/gradient'; // optional gradient import './src/pattern.class'; // optional pattern import './src/shadow.class'; // optional shadow @@ -92,6 +89,6 @@ import './src/mixins/itext_click_behavior.mixin'; // optional itext import './src/mixins/itext_key_behavior.mixin'; // optional itext import './src/mixins/itext.svg_export'; // optional itext import './src/shapes/textbox.class'; // optional textbox -import './src/mixins/default_controls'; // optional interaction +import './src/controls'; // optional interaction // extends fabric.StaticCanvas, fabric.Canvas, fabric.Object, depends on fabric.PencilBrush and fabric.Rect // import './src/mixins/eraser_brush.mixin'; // optional erasing diff --git a/src/control.class.ts b/src/controls/control.class.ts similarity index 100% rename from src/control.class.ts rename to src/controls/control.class.ts diff --git a/src/controls.actions.ts b/src/controls/controls.actions.ts similarity index 100% rename from src/controls.actions.ts rename to src/controls/controls.actions.ts diff --git a/src/controls.render.ts b/src/controls/controls.render.ts similarity index 100% rename from src/controls.render.ts rename to src/controls/controls.render.ts diff --git a/src/mixins/default_controls.ts b/src/controls/default_controls.ts similarity index 100% rename from src/mixins/default_controls.ts rename to src/controls/default_controls.ts diff --git a/src/controls/index.ts b/src/controls/index.ts new file mode 100644 index 00000000000..5f0a87d2ed0 --- /dev/null +++ b/src/controls/index.ts @@ -0,0 +1,4 @@ +import './control.class'; +import './controls.actions'; +import './controls.render'; +import './default_controls'; \ No newline at end of file From 47dab73bc800bd87d96b73979596bd710d9a0247 Mon Sep 17 00:00:00 2001 From: ShaMan123 Date: Thu, 25 Aug 2022 15:42:17 +0300 Subject: [PATCH 02/10] es6 `controls.render` --- src/controls/control.class.ts | 8 ++++++-- src/controls/controls.actions.ts | 6 +++++- src/controls/controls.render.ts | 13 ++++--------- src/controls/index.ts | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/controls/control.class.ts b/src/controls/control.class.ts index d64b8382cee..fe13889e130 100644 --- a/src/controls/control.class.ts +++ b/src/controls/control.class.ts @@ -1,4 +1,8 @@ //@ts-nocheck + +import { renderCircleControl, renderSquareControl } from "./controls.render"; + + (function(global) { var fabric = global.fabric || (global.fabric = { }); @@ -327,10 +331,10 @@ styleOverride = styleOverride || {}; switch (styleOverride.cornerStyle || fabricObject.cornerStyle) { case 'circle': - fabric.controlsUtils.renderCircleControl.call(this, ctx, left, top, styleOverride, fabricObject); + renderCircleControl.call(this, ctx, left, top, styleOverride, fabricObject); break; default: - fabric.controlsUtils.renderSquareControl.call(this, ctx, left, top, styleOverride, fabricObject); + renderSquareControl.call(this, ctx, left, top, styleOverride, fabricObject); } }, }; diff --git a/src/controls/controls.actions.ts b/src/controls/controls.actions.ts index 8ae5c5eea4a..37aa56b4367 100644 --- a/src/controls/controls.actions.ts +++ b/src/controls/controls.actions.ts @@ -1,5 +1,7 @@ //@ts-nocheck -import { Point } from './point.class'; + +import { Point } from '../point.class'; +import { renderCircleControl, renderSquareControl } from './controls.render'; (function(global) { var fabric = global.fabric || (global.fabric = { }), @@ -743,6 +745,8 @@ import { Point } from './point.class'; controls.wrapWithFixedAnchor = wrapWithFixedAnchor; controls.wrapWithFireEvent = wrapWithFireEvent; controls.getLocalPoint = getLocalPoint; + controls.renderCircleControl = renderCircleControl; + controls.renderSquareControl = renderSquareControl; fabric.controlsUtils = controls; })(typeof exports !== 'undefined' ? exports : window); diff --git a/src/controls/controls.render.ts b/src/controls/controls.render.ts index 135b4d6f22f..a8caed21a20 100644 --- a/src/controls/controls.render.ts +++ b/src/controls/controls.render.ts @@ -1,8 +1,6 @@ //@ts-nocheck -(function(global) { - var fabric = global.fabric || (global.fabric = { }), - degreesToRadians = fabric.util.degreesToRadians, - controls = fabric.controlsUtils; + +import { degreesToRadians } from "../util"; /** * Render a round control, as per fabric features. @@ -15,7 +13,7 @@ * @param {Object} styleOverride override for fabric.Object controls style * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls */ - function renderCircleControl (ctx, left, top, styleOverride, fabricObject) { + export function renderCircleControl (ctx, left, top, styleOverride, fabricObject) { styleOverride = styleOverride || {}; var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize, ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize, @@ -64,7 +62,7 @@ * @param {Object} styleOverride override for fabric.Object controls style * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls */ - function renderSquareControl(ctx, left, top, styleOverride, fabricObject) { + export function renderSquareControl(ctx, left, top, styleOverride, fabricObject) { styleOverride = styleOverride || {}; var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize, ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize, @@ -93,7 +91,4 @@ ctx.restore(); } - controls.renderCircleControl = renderCircleControl; - controls.renderSquareControl = renderSquareControl; -})(typeof exports !== 'undefined' ? exports : window); diff --git a/src/controls/index.ts b/src/controls/index.ts index 5f0a87d2ed0..9efe02e969e 100644 --- a/src/controls/index.ts +++ b/src/controls/index.ts @@ -1,4 +1,4 @@ import './control.class'; import './controls.actions'; -import './controls.render'; +export * from './controls.render'; import './default_controls'; \ No newline at end of file From 7d95bb0137aa6c7b0c3496693ca548c213ab437f Mon Sep 17 00:00:00 2001 From: ShaMan123 Date: Thu, 25 Aug 2022 15:50:54 +0300 Subject: [PATCH 03/10] Update node-unit-tests.yml --- .github/workflows/node-unit-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-unit-tests.yml b/.github/workflows/node-unit-tests.yml index f79cddd3ca2..05d6fa81c56 100644 --- a/.github/workflows/node-unit-tests.yml +++ b/.github/workflows/node-unit-tests.yml @@ -26,4 +26,4 @@ jobs: node-version: ${{ matrix.node-version }} - run: npm ci - run: npm run build:fast - - run: npm run test -- -s unit -p 8080 -c node + - run: npm run test -- -s unit -p 8080 -c node -v From b517f467a3015831bd19c4e69ee11318288b4b3f Mon Sep 17 00:00:00 2001 From: ShaMan123 Date: Thu, 25 Aug 2022 15:54:29 +0300 Subject: [PATCH 04/10] Revert "Update node-unit-tests.yml" This reverts commit 7d95bb0137aa6c7b0c3496693ca548c213ab437f. --- .github/workflows/node-unit-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-unit-tests.yml b/.github/workflows/node-unit-tests.yml index 05d6fa81c56..f79cddd3ca2 100644 --- a/.github/workflows/node-unit-tests.yml +++ b/.github/workflows/node-unit-tests.yml @@ -26,4 +26,4 @@ jobs: node-version: ${{ matrix.node-version }} - run: npm ci - run: npm run build:fast - - run: npm run test -- -s unit -p 8080 -c node -v + - run: npm run test -- -s unit -p 8080 -c node From 5afc7e585e98c1872603289de49910646d93c6b8 Mon Sep 17 00:00:00 2001 From: ShaMan123 Date: Thu, 25 Aug 2022 15:54:49 +0300 Subject: [PATCH 05/10] Update testem.config.js --- test/testem.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/testem.config.js b/test/testem.config.js index 6139f154f1f..119e6e03840 100644 --- a/test/testem.config.js +++ b/test/testem.config.js @@ -36,6 +36,7 @@ module.exports = { 'Node', 'Firefox' ], + fail_on_zero_tests: true, tap_failed_tests_only: !Number(process.env.VERBOSE) || false, ignore_missing_launchers: false, qunit: { From 42685c0ddf77bbbd41d653d8f85a00625370e46f Mon Sep 17 00:00:00 2001 From: ShaMan123 Date: Thu, 25 Aug 2022 16:18:28 +0300 Subject: [PATCH 06/10] extract `fireEvent` --- src/controls/controls.actions.ts | 8 +------- src/mixins/canvas_events.mixin.ts | 8 +++++++- src/typedefs.ts | 9 +++++++++ src/util/fireEvent.ts | 9 +++++++++ 4 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 src/util/fireEvent.ts diff --git a/src/controls/controls.actions.ts b/src/controls/controls.actions.ts index 37aa56b4367..1ade79cfec9 100644 --- a/src/controls/controls.actions.ts +++ b/src/controls/controls.actions.ts @@ -1,6 +1,7 @@ //@ts-nocheck import { Point } from '../point.class'; +import { fireEvent } from '../util/fireEvent'; import { renderCircleControl, renderSquareControl } from './controls.render'; (function(global) { @@ -32,13 +33,6 @@ import { renderCircleControl, renderSquareControl } from './controls.render'; return Math.round((cornerAngle % 360) / 45); } - function fireEvent(eventName, options) { - var target = options.transform.target, - canvas = target.canvas; - canvas && canvas.fire('object:' + eventName, Object.assign({}, options, { target: target })); - target.fire(eventName, options); - } - /** * Inspect event and fabricObject properties to understand if the scaling action * @param {Event} eventData from the user action diff --git a/src/mixins/canvas_events.mixin.ts b/src/mixins/canvas_events.mixin.ts index 3c7f2987d2d..3870070c8c8 100644 --- a/src/mixins/canvas_events.mixin.ts +++ b/src/mixins/canvas_events.mixin.ts @@ -1,4 +1,8 @@ //@ts-nocheck + +import { fireEvent } from "../util/fireEvent"; + + (function(global) { var fabric = global.fabric, @@ -1126,7 +1130,9 @@ /** * @private */ - _fire: fabric.controlsUtils.fireEvent, + _fire: function (eventName, options) { + return fireEvent(eventName, options); + }, /** * Sets the cursor depending on where the canvas is being hovered. diff --git a/src/typedefs.ts b/src/typedefs.ts index 240ff09f8e0..cb01b90b5a6 100644 --- a/src/typedefs.ts +++ b/src/typedefs.ts @@ -39,3 +39,12 @@ export const enum SupportedSVGUnit { } export type TMat2D = [number, number, number, number, number, number]; + +export type Event = { + e: E +} +export type TransformEvent = Event & T & { + transform: { + target: any + } +} \ No newline at end of file diff --git a/src/util/fireEvent.ts b/src/util/fireEvent.ts new file mode 100644 index 00000000000..b16c863fc44 --- /dev/null +++ b/src/util/fireEvent.ts @@ -0,0 +1,9 @@ +import { TransformEvent } from "../typedefs"; + + +export const fireEvent = (eventName: string, options: TransformEvent) => { + const target = options.transform.target, + canvas = target.canvas; + canvas && canvas.fire('object:' + eventName, Object.assign({}, options, { target: target })); + target.fire(eventName, options); +} \ No newline at end of file From c23bae0a88df50dddaf83c1828bd8cdfa2177b1e Mon Sep 17 00:00:00 2001 From: ShaMan123 Date: Thu, 25 Aug 2022 17:31:05 +0300 Subject: [PATCH 07/10] Update fireEvent.ts --- src/util/fireEvent.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/util/fireEvent.ts b/src/util/fireEvent.ts index b16c863fc44..446494986c2 100644 --- a/src/util/fireEvent.ts +++ b/src/util/fireEvent.ts @@ -2,8 +2,7 @@ import { TransformEvent } from "../typedefs"; export const fireEvent = (eventName: string, options: TransformEvent) => { - const target = options.transform.target, - canvas = target.canvas; - canvas && canvas.fire('object:' + eventName, Object.assign({}, options, { target: target })); + const target = options.transform.target; + target.canvas?.fire('object:' + eventName, { ...options, target }); target.fire(eventName, options); } \ No newline at end of file From e5ecd1308f5692a2cba12845b4cf912fcc87a6c2 Mon Sep 17 00:00:00 2001 From: ShaMan123 Date: Thu, 25 Aug 2022 17:31:57 +0300 Subject: [PATCH 08/10] Update testem.config.js --- test/testem.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/testem.config.js b/test/testem.config.js index 119e6e03840..6139f154f1f 100644 --- a/test/testem.config.js +++ b/test/testem.config.js @@ -36,7 +36,6 @@ module.exports = { 'Node', 'Firefox' ], - fail_on_zero_tests: true, tap_failed_tests_only: !Number(process.env.VERBOSE) || false, ignore_missing_launchers: false, qunit: { From 4cc458ce7ca67651d1635597266fe7b546a47e3b Mon Sep 17 00:00:00 2001 From: ShaMan123 Date: Fri, 26 Aug 2022 11:59:45 +0300 Subject: [PATCH 09/10] fix(): naming error --- src/brushes/pencil_brush.class.ts | 8 ++++---- src/typedefs.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/brushes/pencil_brush.class.ts b/src/brushes/pencil_brush.class.ts index e8f7654c9a0..05306d782a0 100644 --- a/src/brushes/pencil_brush.class.ts +++ b/src/brushes/pencil_brush.class.ts @@ -1,6 +1,6 @@ import { fabric } from "../../HEADER"; import { Point } from "../point.class"; -import { Event, ModifierKey, PathData } from "../typedefs"; +import { TEvent, ModifierKey, PathData } from "../typedefs"; import { getSmoothPathFromPoints, joinPath } from "../util"; import { Canvas } from "../__types__"; import { BaseBrush } from "./base_brush.class"; @@ -69,7 +69,7 @@ export class PencilBrush extends BaseBrush { * Invoked on mouse down * @param {Point} pointer */ - onMouseDown(pointer: Point, { e }: Event) { + onMouseDown(pointer: Point, { e }: TEvent) { if (!this.canvas._isMainEvent(e)) { return; } @@ -85,7 +85,7 @@ export class PencilBrush extends BaseBrush { * Invoked on mouse move * @param {Point} pointer */ - onMouseMove(pointer: Point, { e }: Event) { + onMouseMove(pointer: Point, { e }: TEvent) { if (!this.canvas._isMainEvent(e)) { return; } @@ -118,7 +118,7 @@ export class PencilBrush extends BaseBrush { /** * Invoked on mouse up */ - onMouseUp({ e }: Event) { + onMouseUp({ e }: TEvent) { if (!this.canvas._isMainEvent(e)) { return true; } diff --git a/src/typedefs.ts b/src/typedefs.ts index d0f92f1eb15..ce256681494 100644 --- a/src/typedefs.ts +++ b/src/typedefs.ts @@ -47,7 +47,7 @@ export type ModifierKey = 'altKey' | 'shiftKey' | 'ctrlKey'; */ export type PathData = (string | number)[][]; -export type Event = { +export type TEvent = { e: E } From 3ff4502544019fdbe21dcf63cd76e920644350bc Mon Sep 17 00:00:00 2001 From: ShaMan123 Date: Fri, 26 Aug 2022 12:03:43 +0300 Subject: [PATCH 10/10] Update typedefs.ts --- src/typedefs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typedefs.ts b/src/typedefs.ts index ce256681494..a9712952819 100644 --- a/src/typedefs.ts +++ b/src/typedefs.ts @@ -51,7 +51,7 @@ export type TEvent = { e: E } -export type TransformEvent = Event & T & { +export type TransformEvent = TEvent & T & { transform: { target: any }