Skip to content

Commit

Permalink
chore(TS): ElementsParser => parser/ElementsParser (fabricjs#8183)
Browse files Browse the repository at this point in the history
  • Loading branch information
ShaMan123 authored and frankrousseau committed Jan 6, 2023
1 parent 6461d09 commit 1153f4e
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 29 deletions.
1 change: 0 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import './src/util/animate'; // optional animation
import './src/util/animate_color'; // optional animation
import './src/util/anim_ease'; // optional easing
import './src/parser'; // optional parser
import './src/elements_parser'; // optional parser
import './src/point.class';
import './src/intersection.class';
import './src/color';
Expand Down
51 changes: 26 additions & 25 deletions src/elements_parser.ts → src/parser/elements_parser.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
//@ts-nocheck
(function(global) {
var fabric = global.fabric;

fabric.ElementsParser = function(elements, callback, options, reviver, parsingOptions, doc) {
import { fabric } from "../../HEADER";
import { capitalize, invertTransform, multiplyTransformMatrices, qrDecompose } from "../util";

const ElementsParser = function(elements, callback, options, reviver, parsingOptions, doc) {
this.elements = elements;
this.callback = callback;
this.options = options;
Expand All @@ -21,25 +22,24 @@
};

proto.createObjects = function() {
var _this = this;
this.elements.forEach(function(element, i) {
element.setAttribute('svgUid', _this.svgUid);
_this.createObject(element, i);
this.elements.forEach((element, i) => {
element.setAttribute('svgUid', this.svgUid);
this.createObject(element, i);
});
};

proto.findTag = function(el) {
return fabric[fabric.util.string.capitalize(el.tagName.replace('svg:', ''))];
return fabric[capitalize(el.tagName.replace('svg:', ''))];
};

proto.createObject = function(el, index) {
var klass = this.findTag(el);
const klass = this.findTag(el);
if (klass && klass.fromElement) {
try {
klass.fromElement(el, this.createCallback(index, el), this.options);
}
catch (err) {
fabric.log(err);
console.log(err);
}
}
else {
Expand All @@ -48,9 +48,9 @@
};

proto.createCallback = function(index, el) {
var _this = this;
const _this = this;
return function(obj) {
var _options;
let _options;
_this.resolveGradient(obj, el, 'fill');
_this.resolveGradient(obj, el, 'stroke');
if (obj instanceof fabric.Image && obj._originalElement) {
Expand All @@ -65,21 +65,21 @@
};

proto.extractPropertyDefinition = function(obj, property, storage) {
var value = obj[property], regex = this.regexUrl;
const value = obj[property], regex = this.regexUrl;
if (!regex.test(value)) {
return;
}
regex.lastIndex = 0;
var id = regex.exec(value)[1];
const id = regex.exec(value)[1];
regex.lastIndex = 0;
return fabric[storage][this.svgUid][id];
};

proto.resolveGradient = function(obj, el, property) {
var gradientDef = this.extractPropertyDefinition(obj, property, 'gradientDefs');
const gradientDef = this.extractPropertyDefinition(obj, property, 'gradientDefs');
if (gradientDef) {
var opacityAttr = el.getAttribute(property + '-opacity');
var gradient = fabric.Gradient.fromElement(gradientDef, obj, opacityAttr, this.options);
const opacityAttr = el.getAttribute(property + '-opacity');
const gradient = fabric.Gradient.fromElement(gradientDef, obj, opacityAttr, this.options);
obj.set(property, gradient);
}
};
Expand All @@ -97,15 +97,15 @@
element, klass, objTransformInv, container, gTransform, options;
if (clipPath) {
container = [];
objTransformInv = fabric.util.invertTransform(obj.calcTransformMatrix());
objTransformInv = invertTransform(obj.calcTransformMatrix());
// move the clipPath tag as sibling to the real element that is using it
var clipPathTag = clipPath[0].parentNode;
var clipPathOwner = usingElement;
const clipPathTag = clipPath[0].parentNode;
let clipPathOwner = usingElement;
while (clipPathOwner.parentNode && clipPathOwner.getAttribute('clip-path') !== obj.clipPath) {
clipPathOwner = clipPathOwner.parentNode;
}
clipPathOwner.parentNode.appendChild(clipPathTag);
for (var i = 0; i < clipPath.length; i++) {
for (let i = 0; i < clipPath.length; i++) {
element = clipPath[i];
klass = this.findTag(element);
klass.fromElement(
Expand All @@ -120,14 +120,14 @@
else {
clipPath = new fabric.Group(container);
}
gTransform = fabric.util.multiplyTransformMatrices(
gTransform = multiplyTransformMatrices(
objTransformInv,
clipPath.calcTransformMatrix()
);
if (clipPath.clipPath) {
this.resolveClipPath(clipPath, clipPathOwner);
}
var options = fabric.util.qrDecompose(gTransform);
const options = qrDecompose(gTransform);
clipPath.flipX = false;
clipPath.flipY = false;
clipPath.set('scaleX', options.scaleX);
Expand All @@ -153,5 +153,6 @@
this.callback(this.instances, this.elements);
}
};
})(fabric.ElementsParser.prototype);
})(typeof exports !== 'undefined' ? exports : window);
})(ElementsParser.prototype);

export { ElementsParser };
4 changes: 3 additions & 1 deletion src/parser/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
//@ts-nocheck
import { fabric } from '../../HEADER';
import { clipPaths, cssRules, gradientDefs } from "./constants";
import { ElementsParser } from './elements_parser';
import { getCSSRules } from './getCSSRules';
import { getGradientDefs } from './getGradientDefs';
import { loadSVGFromString } from './loadSVGFromString';
Expand Down Expand Up @@ -28,6 +29,7 @@ Object.assign(fabric, {
parsePointsAttribute,
getCSSRules,
loadSVGFromURL,
loadSVGFromString
loadSVGFromString,
ElementsParser
});

4 changes: 2 additions & 2 deletions src/parser/parseElements.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//@ts-nocheck

import { fabric } from '../../HEADER';
import { ElementsParser } from './elements_parser';

/**
* Transforms an array of svg elements to corresponding fabric.* instances
Expand All @@ -12,5 +12,5 @@ import { fabric } from '../../HEADER';
* @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
*/
export function parseElements(elements, callback, options, reviver, parsingOptions) {
new fabric.ElementsParser(elements, callback, options, reviver, parsingOptions).parse();
new ElementsParser(elements, callback, options, reviver, parsingOptions).parse();
}

0 comments on commit 1153f4e

Please sign in to comment.