mirror of
https://github.com/Hopiu/fabric.js.git
synced 2026-03-16 22:10:32 +00:00
Extract elements parsing into a separate object (ElementsParser)
This commit is contained in:
parent
ce8fe3447d
commit
6cb941c116
7 changed files with 221 additions and 132 deletions
1
build.js
1
build.js
|
|
@ -164,6 +164,7 @@ var filesToInclude = [
|
|||
ifSpecifiedInclude('easing', 'src/util/anim_ease.js'),
|
||||
|
||||
ifSpecifiedInclude('parser', 'src/parser.js'),
|
||||
ifSpecifiedInclude('parser', 'src/elements_parser.js'),
|
||||
|
||||
'src/point.class.js',
|
||||
'src/intersection.class.js',
|
||||
|
|
|
|||
114
dist/all.js
vendored
114
dist/all.js
vendored
|
|
@ -4613,47 +4613,7 @@ fabric.util.string = {
|
|||
* @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
|
||||
*/
|
||||
function parseElements(elements, callback, options, reviver) {
|
||||
var instances = new Array(elements.length), i = elements.length;
|
||||
|
||||
function checkIfDone() {
|
||||
if (--i === 0) {
|
||||
instances = instances.filter(function(el) {
|
||||
return el != null;
|
||||
});
|
||||
resolveGradients(instances);
|
||||
callback(instances);
|
||||
}
|
||||
}
|
||||
|
||||
for (var index = 0, el, len = elements.length; index < len; index++) {
|
||||
el = elements[index];
|
||||
var klass = fabric[capitalize(el.tagName)];
|
||||
if (klass && klass.fromElement) {
|
||||
try {
|
||||
if (klass.async) {
|
||||
klass.fromElement(el, (function(index, el) {
|
||||
return function(obj) {
|
||||
reviver && reviver(el, obj);
|
||||
instances.splice(index, 0, obj);
|
||||
checkIfDone();
|
||||
};
|
||||
})(index, el), options);
|
||||
}
|
||||
else {
|
||||
var obj = klass.fromElement(el, options);
|
||||
reviver && reviver(el, obj);
|
||||
instances.splice(index, 0, obj);
|
||||
checkIfDone();
|
||||
}
|
||||
}
|
||||
catch(err) {
|
||||
fabric.log(err);
|
||||
}
|
||||
}
|
||||
else {
|
||||
checkIfDone();
|
||||
}
|
||||
}
|
||||
fabric.ElementsParser.parse(elements, callback, options, reviver);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -5054,12 +5014,82 @@ fabric.util.string = {
|
|||
createSVGFontFacesMarkup: createSVGFontFacesMarkup,
|
||||
createSVGRefElementsMarkup: createSVGRefElementsMarkup,
|
||||
|
||||
getGradientDefs: getGradientDefs
|
||||
getGradientDefs: getGradientDefs,
|
||||
resolveGradients: resolveGradients
|
||||
});
|
||||
|
||||
})(typeof exports !== 'undefined' ? exports : this);
|
||||
|
||||
|
||||
fabric.ElementsParser = {
|
||||
|
||||
parse: function(elements, callback, options, reviver) {
|
||||
|
||||
this.elements = elements;
|
||||
this.callback = callback;
|
||||
this.options = options;
|
||||
this.reviver = reviver;
|
||||
|
||||
this.instances = new Array(elements.length);
|
||||
this.numElements = elements.length;
|
||||
|
||||
this.createObjects();
|
||||
},
|
||||
|
||||
createObjects: function() {
|
||||
for (var i = 0, len = this.elements.length; i < len; i++) {
|
||||
this.createObject(this.elements[i], i);
|
||||
}
|
||||
},
|
||||
|
||||
createObject: function(el, index) {
|
||||
var klass = fabric[fabric.util.string.capitalize(el.tagName)];
|
||||
if (klass && klass.fromElement) {
|
||||
try {
|
||||
this._createObject(klass, el, index);
|
||||
}
|
||||
catch(err) {
|
||||
fabric.log(err);
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.checkIfDone();
|
||||
}
|
||||
},
|
||||
|
||||
_createObject: function(klass, el, index) {
|
||||
if (klass.async) {
|
||||
klass.fromElement(el, this.createCallback(index, el), this.options);
|
||||
}
|
||||
else {
|
||||
var obj = klass.fromElement(el, this.options);
|
||||
this.reviver && this.reviver(el, obj);
|
||||
this.instances.splice(index, 0, obj);
|
||||
this.checkIfDone();
|
||||
}
|
||||
},
|
||||
|
||||
createCallback: function(index, el) {
|
||||
var _this = this;
|
||||
return function(obj) {
|
||||
_this.reviver && _this.reviver(el, obj);
|
||||
_this.instances.splice(index, 0, obj);
|
||||
_this.checkIfDone();
|
||||
};
|
||||
},
|
||||
|
||||
checkIfDone: function() {
|
||||
if (--this.numElements === 0) {
|
||||
this.instances = this.instances.filter(function(el) {
|
||||
return el != null;
|
||||
});
|
||||
fabric.resolveGradients(this.instances);
|
||||
this.callback(this.instances);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
(function(global) {
|
||||
|
||||
"use strict";
|
||||
|
|
|
|||
12
dist/all.min.js
vendored
12
dist/all.min.js
vendored
File diff suppressed because one or more lines are too long
BIN
dist/all.min.js.gz
vendored
BIN
dist/all.min.js.gz
vendored
Binary file not shown.
114
dist/all.require.js
vendored
114
dist/all.require.js
vendored
|
|
@ -4613,47 +4613,7 @@ fabric.util.string = {
|
|||
* @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
|
||||
*/
|
||||
function parseElements(elements, callback, options, reviver) {
|
||||
var instances = new Array(elements.length), i = elements.length;
|
||||
|
||||
function checkIfDone() {
|
||||
if (--i === 0) {
|
||||
instances = instances.filter(function(el) {
|
||||
return el != null;
|
||||
});
|
||||
resolveGradients(instances);
|
||||
callback(instances);
|
||||
}
|
||||
}
|
||||
|
||||
for (var index = 0, el, len = elements.length; index < len; index++) {
|
||||
el = elements[index];
|
||||
var klass = fabric[capitalize(el.tagName)];
|
||||
if (klass && klass.fromElement) {
|
||||
try {
|
||||
if (klass.async) {
|
||||
klass.fromElement(el, (function(index, el) {
|
||||
return function(obj) {
|
||||
reviver && reviver(el, obj);
|
||||
instances.splice(index, 0, obj);
|
||||
checkIfDone();
|
||||
};
|
||||
})(index, el), options);
|
||||
}
|
||||
else {
|
||||
var obj = klass.fromElement(el, options);
|
||||
reviver && reviver(el, obj);
|
||||
instances.splice(index, 0, obj);
|
||||
checkIfDone();
|
||||
}
|
||||
}
|
||||
catch(err) {
|
||||
fabric.log(err);
|
||||
}
|
||||
}
|
||||
else {
|
||||
checkIfDone();
|
||||
}
|
||||
}
|
||||
fabric.ElementsParser.parse(elements, callback, options, reviver);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -5054,12 +5014,82 @@ fabric.util.string = {
|
|||
createSVGFontFacesMarkup: createSVGFontFacesMarkup,
|
||||
createSVGRefElementsMarkup: createSVGRefElementsMarkup,
|
||||
|
||||
getGradientDefs: getGradientDefs
|
||||
getGradientDefs: getGradientDefs,
|
||||
resolveGradients: resolveGradients
|
||||
});
|
||||
|
||||
})(typeof exports !== 'undefined' ? exports : this);
|
||||
|
||||
|
||||
fabric.ElementsParser = {
|
||||
|
||||
parse: function(elements, callback, options, reviver) {
|
||||
|
||||
this.elements = elements;
|
||||
this.callback = callback;
|
||||
this.options = options;
|
||||
this.reviver = reviver;
|
||||
|
||||
this.instances = new Array(elements.length);
|
||||
this.numElements = elements.length;
|
||||
|
||||
this.createObjects();
|
||||
},
|
||||
|
||||
createObjects: function() {
|
||||
for (var i = 0, len = this.elements.length; i < len; i++) {
|
||||
this.createObject(this.elements[i], i);
|
||||
}
|
||||
},
|
||||
|
||||
createObject: function(el, index) {
|
||||
var klass = fabric[fabric.util.string.capitalize(el.tagName)];
|
||||
if (klass && klass.fromElement) {
|
||||
try {
|
||||
this._createObject(klass, el, index);
|
||||
}
|
||||
catch(err) {
|
||||
fabric.log(err);
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.checkIfDone();
|
||||
}
|
||||
},
|
||||
|
||||
_createObject: function(klass, el, index) {
|
||||
if (klass.async) {
|
||||
klass.fromElement(el, this.createCallback(index, el), this.options);
|
||||
}
|
||||
else {
|
||||
var obj = klass.fromElement(el, this.options);
|
||||
this.reviver && this.reviver(el, obj);
|
||||
this.instances.splice(index, 0, obj);
|
||||
this.checkIfDone();
|
||||
}
|
||||
},
|
||||
|
||||
createCallback: function(index, el) {
|
||||
var _this = this;
|
||||
return function(obj) {
|
||||
_this.reviver && _this.reviver(el, obj);
|
||||
_this.instances.splice(index, 0, obj);
|
||||
_this.checkIfDone();
|
||||
};
|
||||
},
|
||||
|
||||
checkIfDone: function() {
|
||||
if (--this.numElements === 0) {
|
||||
this.instances = this.instances.filter(function(el) {
|
||||
return el != null;
|
||||
});
|
||||
fabric.resolveGradients(this.instances);
|
||||
this.callback(this.instances);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
(function(global) {
|
||||
|
||||
"use strict";
|
||||
|
|
|
|||
67
src/elements_parser.js
Normal file
67
src/elements_parser.js
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
fabric.ElementsParser = {
|
||||
|
||||
parse: function(elements, callback, options, reviver) {
|
||||
|
||||
this.elements = elements;
|
||||
this.callback = callback;
|
||||
this.options = options;
|
||||
this.reviver = reviver;
|
||||
|
||||
this.instances = new Array(elements.length);
|
||||
this.numElements = elements.length;
|
||||
|
||||
this.createObjects();
|
||||
},
|
||||
|
||||
createObjects: function() {
|
||||
for (var i = 0, len = this.elements.length; i < len; i++) {
|
||||
this.createObject(this.elements[i], i);
|
||||
}
|
||||
},
|
||||
|
||||
createObject: function(el, index) {
|
||||
var klass = fabric[fabric.util.string.capitalize(el.tagName)];
|
||||
if (klass && klass.fromElement) {
|
||||
try {
|
||||
this._createObject(klass, el, index);
|
||||
}
|
||||
catch(err) {
|
||||
fabric.log(err);
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.checkIfDone();
|
||||
}
|
||||
},
|
||||
|
||||
_createObject: function(klass, el, index) {
|
||||
if (klass.async) {
|
||||
klass.fromElement(el, this.createCallback(index, el), this.options);
|
||||
}
|
||||
else {
|
||||
var obj = klass.fromElement(el, this.options);
|
||||
this.reviver && this.reviver(el, obj);
|
||||
this.instances.splice(index, 0, obj);
|
||||
this.checkIfDone();
|
||||
}
|
||||
},
|
||||
|
||||
createCallback: function(index, el) {
|
||||
var _this = this;
|
||||
return function(obj) {
|
||||
_this.reviver && _this.reviver(el, obj);
|
||||
_this.instances.splice(index, 0, obj);
|
||||
_this.checkIfDone();
|
||||
};
|
||||
},
|
||||
|
||||
checkIfDone: function() {
|
||||
if (--this.numElements === 0) {
|
||||
this.instances = this.instances.filter(function(el) {
|
||||
return el != null;
|
||||
});
|
||||
fabric.resolveGradients(this.instances);
|
||||
this.callback(this.instances);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -449,47 +449,7 @@
|
|||
* @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
|
||||
*/
|
||||
function parseElements(elements, callback, options, reviver) {
|
||||
var instances = new Array(elements.length), i = elements.length;
|
||||
|
||||
function checkIfDone() {
|
||||
if (--i === 0) {
|
||||
instances = instances.filter(function(el) {
|
||||
return el != null;
|
||||
});
|
||||
resolveGradients(instances);
|
||||
callback(instances);
|
||||
}
|
||||
}
|
||||
|
||||
for (var index = 0, el, len = elements.length; index < len; index++) {
|
||||
el = elements[index];
|
||||
var klass = fabric[capitalize(el.tagName)];
|
||||
if (klass && klass.fromElement) {
|
||||
try {
|
||||
if (klass.async) {
|
||||
klass.fromElement(el, (function(index, el) {
|
||||
return function(obj) {
|
||||
reviver && reviver(el, obj);
|
||||
instances.splice(index, 0, obj);
|
||||
checkIfDone();
|
||||
};
|
||||
})(index, el), options);
|
||||
}
|
||||
else {
|
||||
var obj = klass.fromElement(el, options);
|
||||
reviver && reviver(el, obj);
|
||||
instances.splice(index, 0, obj);
|
||||
checkIfDone();
|
||||
}
|
||||
}
|
||||
catch(err) {
|
||||
fabric.log(err);
|
||||
}
|
||||
}
|
||||
else {
|
||||
checkIfDone();
|
||||
}
|
||||
}
|
||||
fabric.ElementsParser.parse(elements, callback, options, reviver);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -890,7 +850,8 @@
|
|||
createSVGFontFacesMarkup: createSVGFontFacesMarkup,
|
||||
createSVGRefElementsMarkup: createSVGRefElementsMarkup,
|
||||
|
||||
getGradientDefs: getGradientDefs
|
||||
getGradientDefs: getGradientDefs,
|
||||
resolveGradients: resolveGradients
|
||||
});
|
||||
|
||||
})(typeof exports !== 'undefined' ? exports : this);
|
||||
|
|
|
|||
Loading…
Reference in a new issue