switch to eslint (#3229)

* switch to eslint 2.x
* fix src
* fix tests
This commit is contained in:
Andrea Bogazzi 2016-09-10 15:14:23 +02:00 committed by GitHub
parent 79b4684947
commit 08f60adbea
89 changed files with 842 additions and 746 deletions

149
.eslintrc.json Normal file
View file

@ -0,0 +1,149 @@
{
"env": {
"browser": true
},
"globals": {
"ActiveXObject": true,
"define": true,
"eventjs": true,
"exports": true,
"fabric": true,
"G_vmlCanvasManager": true,
"require": true,
"Buffer": true,
"process": true
},
"rules": {
"eqeqeq": 2,
"no-eq-null": 2,
"no-eval": 2,
"no-unused-expressions": [
2,
{
"allowShortCircuit": true
}
],
"guard-for-in": 0,
"wrap-iife": [
2,
"inside"
],
"linebreak-style": [
2,
"unix"
],
"no-loop-func": 2,
"no-multi-str": 2,
"no-caller": 2,
"no-empty": [
2,
{
"allowEmptyCatch": true
}
],
"no-new": 0,
"no-plusplus": 0,
"strict": 0,
"dot-notation": 2,
"no-undef": 2,
"no-unused-vars": 2,
"max-depth": [
2,
4
],
"max-statements": [
2,
45
],
"curly": [
2,
"all"
],
"keyword-spacing": [
2,
{}
],
"space-infix-ops": 2,
"array-bracket-spacing": [
2,
"never"
],
"comma-style": [
2,
"last"
],
"camelcase": [
2,
{
"properties": "never"
}
],
"brace-style": [
2,
"stroustrup",
{
"allowSingleLine": true
}
],
"eol-last": 2,
"one-var": [
0,
"always"
],
"quote-props": [
2,
"as-needed",
{
"keywords": true
}
],
"key-spacing": [
2,
{
"beforeColon": false,
"afterColon": true,
"mode": "minimum"
}
],
"space-unary-ops": [
2,
{
"words": true,
"nonwords": false
}
],
"no-with": 2,
"no-multiple-empty-lines": 2,
"no-mixed-spaces-and-tabs": 2,
"no-trailing-spaces": 2,
"quotes": [
2,
"single"
],
"indent": [
2,
2,
{
"SwitchCase": 1,
"VariableDeclarator": 2
}
],
"consistent-this": [
2,
"_this"
],
"valid-jsdoc": [
0,
{
"requireReturn": false
}
],
"max-len": [
2,
120,
{
"ignoreComments": true
}
]
}
}

45
.eslintrc_tests Normal file
View file

@ -0,0 +1,45 @@
{
"env": {
"browser": true,
"node": true,
"qunit": true
},
"globals": {
"fabric": true,
"G_vmlCanvasManager": true
},
"rules": {
"eqeqeq": 0,
"no-eq-null": 2,
"no-eval": 2,
"no-unused-expressions": 2,
"guard-for-in": 0,
"wrap-iife": [
2,
"any"
],
"quote-props": 0,
"linebreak-style": 2,
"no-loop-func": 2,
"no-multi-str": 0,
"new-cap": 2,
"no-caller": 2,
"no-empty": 0,
"no-new": 0,
"no-plusplus": 0,
"strict": 0,
"dot-notation": 0,
"no-undef": 2,
"no-unused-vars": 2,
"max-statements": 0,
"camelcase": 0,
"consistent-this": 0,
"max-len": [
0,
120,
{
"ignoreComments": true
}
]
}
}

View file

@ -1,45 +0,0 @@
{
"requireCurlyBraces": [ "if", "else", "for", "while", "do", "switch", "return", "try", "catch"],
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"],
"requireSpaceBeforeBinaryOperators": ["+", "-", "*", "=", "==", "===", "!=", "!=="],
"requireSpaceAfterBinaryOperators": ["+", "-", "*", "=", "==", "===", "!=", "!==", ","],
"requireParenthesesAroundIIFE": true,
"requireSpacesInsideObjectBrackets": "all",
"requireCommaBeforeLineBreak": true,
"requireCamelCaseOrUpperCaseIdentifiers": true,
"requireKeywordsOnNewLine": ["else"],
"requireLineFeedAtFileEnd": true,
"requireCapitalizedConstructors": true,
"requireDotNotation": true,
"requireMultipleVarDecl": true,
"requireSpacesInFunction": {
"beforeOpeningCurlyBrace": true
},
"disallowEmptyBlocks": true,
"disallowQuotedKeysInObjects": "allButReserved",
"disallowSpaceAfterObjectKeys": true,
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--"],
"disallowKeywords": ["with"],
"disallowMultipleLineStrings": true,
"disallowMultipleLineBreaks": true,
"disallowMixedSpacesAndTabs": true,
"disallowTrailingWhitespace": true,
"validateLineBreaks": "LF",
"validateQuoteMarks": "'",
"validateIndentation": 2,
"safeContextKeyword": "_this",
"jsDoc": {
"checkParamNames": true,
"requireParamTypes": true
},
"maximumLineLength": { "value": 120, "allowComments": true, "allowRegex": true }
}

View file

@ -1,45 +0,0 @@
{
"globals": {
"ActiveXObject": true,
"define": true,
"eventjs": true,
"exports": true,
"fabric": true,
"G_vmlCanvasManager": true,
// node.js
"require": true,
"Buffer": true,
"process": true
},
"browser": true,
"eqeqeq": true,
"eqnull": true,
"evil": true,
"expr": true,
"forin": false,
"immed": true,
"lastsemic": true,
"laxbreak": true,
"loopfunc": true,
"multistr": true,
"newcap": true,
"noarg": true,
// "node": true, // we're not using node to catch `console.log` statements
"noempty": false,
"nomen": false,
"nonew": false,
"onevar": false,
"plusplus": false,
"strict": false,
"sub": true,
"undef": true,
"unused": true,
"maxdepth": 4,
"maxstatements": 45
// "maxparams": 4,
// "maxcomplexity": 7
}

View file

@ -1,31 +0,0 @@
{
"globals": {
"fabric": true,
"G_vmlCanvasManager": true
},
"browser": true,
// TODO: change to true
"eqeqeq": false,
"eqnull": true,
"evil": true,
"expr": true,
"forin": false,
"immed": true,
"lastsemic": true,
"laxbreak": true,
"loopfunc": true,
"multistr": true,
"newcap": true,
"noarg": true,
"node": true,
"noempty": false,
"nomen": false,
"nonew": false,
"onevar": false,
"plusplus": false,
"strict": false,
"sub": true,
"undef": true,
"unused": true,
"qunit": true
}

View file

@ -12,8 +12,8 @@ buildArgs.forEach(function(arg) {
buildArgsAsObject[key] = value;
});
var modulesToInclude = buildArgsAsObject.modules ? buildArgsAsObject.modules.split(',') : [ ];
var modulesToExclude = buildArgsAsObject.exclude ? buildArgsAsObject.exclude.split(',') : [ ];
var modulesToInclude = buildArgsAsObject.modules ? buildArgsAsObject.modules.split(',') : [];
var modulesToExclude = buildArgsAsObject.exclude ? buildArgsAsObject.exclude.split(',') : [];
var distributionPath = buildArgsAsObject.dest || 'dist/';
var minifier = buildArgsAsObject.minifier || 'uglifyjs';

View file

@ -51,8 +51,8 @@ function initAligningGuidelines(canvas) {
return false;
}
var verticalLines = [ ],
horizontalLines = [ ];
var verticalLines = [],
horizontalLines = [];
canvas.on('mouse:down', function () {
viewportTransform = canvas.viewportTransform;

View file

@ -44,7 +44,7 @@ function initCenteringGuidelines(canvas) {
ctx.restore();
}
var afterRenderActions = [ ],
var afterRenderActions = [],
isInVerticalCenter,
isInHorizontalCenter;

View file

@ -672,7 +672,7 @@ Cufon.registerEngine('canvas', (function() {
var expandTop = 0, expandRight = 0, expandBottom = 0, expandLeft = 0;
var shadows = options.textShadow, shadowOffsets = [];
Cufon.textOptions.shadowOffsets = [ ];
Cufon.textOptions.shadowOffsets = [];
Cufon.textOptions.shadows = null;
if (shadows) {
@ -693,7 +693,7 @@ Cufon.registerEngine('canvas', (function() {
var width = 0, lastWidth = null;
var maxWidth = 0, lines = 1, lineWidths = [ ];
var maxWidth = 0, lines = 1, lineWidths = [];
for (var i = 0, l = chars.length; i < l; ++i) {
if (chars[i] === '\n') {
lines++;
@ -712,7 +712,7 @@ Cufon.registerEngine('canvas', (function() {
width = Math.max(maxWidth, width);
var lineOffsets = [ ];
var lineOffsets = [];
for (var i = lineWidths.length; i--; ) {
lineOffsets[i] = width - lineWidths[i];
}

View file

@ -38,8 +38,8 @@
"build": "node build.js modules=ALL exclude=json,gestures",
"build_with_gestures": "node build.js modules=ALL exclude=json",
"test": "node test.js",
"lint": "jshint src && jscs src",
"lint_tests": "jshint test/unit --config .jshintrc_tests",
"lint": "eslint --config .eslintrc.json src",
"lint_tests": "eslint test/unit --config .eslintrc_tests",
"export_dist_to_site": "cp dist/fabric.js ../fabricjs.com/lib/fabric.js",
"export_tests_to_site": "cp test/unit/*.js ../fabricjs.com/test/unit",
"all": "npm run build && npm run test && npm run lint && npm run lint_tests && npm run export_dist_to_site && npm run export_tests_to_site"
@ -51,8 +51,7 @@
},
"devDependencies": {
"uglify-js": "2.7.x",
"jscs": "2.x.x",
"jshint": "2.9.x",
"eslint": "2.x.x",
"qunit": "0.9.x",
"istanbul": "0.4.x"
},

View file

@ -10,14 +10,14 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype
* @type String
* @default
*/
color: 'rgb(0, 0, 0)',
color: 'rgb(0, 0, 0)',
/**
* Width of a brush
* @type Number
* @default
*/
width: 1,
width: 1,
/**
* Shadow object representing shadow of this shape.
@ -26,28 +26,28 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype
* @type fabric.Shadow
* @default
*/
shadow: null,
shadow: null,
/**
* Line endings style of a brush (one of "butt", "round", "square")
* @type String
* @default
*/
strokeLineCap: 'round',
strokeLineCap: 'round',
/**
* Corner style of a brush (one of "bevil", "round", "miter")
* @type String
* @default
*/
strokeLineJoin: 'round',
strokeLineJoin: 'round',
/**
* Stroke Dash Array.
* @type Array
* @default
*/
strokeDashArray: null,
strokeDashArray: null,
/**
* Sets shadow of an object

View file

@ -18,7 +18,7 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric
*/
initialize: function(canvas) {
this.canvas = canvas;
this.points = [ ];
this.points = [];
},
/**
@ -66,7 +66,7 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric
var originalRenderOnAddRemove = this.canvas.renderOnAddRemove;
this.canvas.renderOnAddRemove = false;
var circles = [ ];
var circles = [];
for (var i = 0, len = this.points.length; i < len; i++) {
var point = this.points[i],

View file

@ -14,7 +14,7 @@
*/
initialize: function(canvas) {
this.canvas = canvas;
this._points = [ ];
this._points = [];
},
/**
@ -164,15 +164,15 @@
*/
createPath: function(pathData) {
var path = new fabric.Path(pathData, {
fill: null,
stroke: this.color,
strokeWidth: this.width,
strokeLineCap: this.strokeLineCap,
strokeLineJoin: this.strokeLineJoin,
strokeDashArray: this.strokeDashArray,
originX: 'center',
originY: 'center'
});
fill: null,
stroke: this.color,
strokeWidth: this.width,
strokeLineCap: this.strokeLineCap,
strokeLineJoin: this.strokeLineJoin,
strokeDashArray: this.strokeDashArray,
originX: 'center',
originY: 'center'
});
if (this.shadow) {
this.shadow.affectStroke = true;

View file

@ -53,7 +53,7 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric
*/
initialize: function(canvas) {
this.canvas = canvas;
this.sprayChunks = [ ];
this.sprayChunks = [];
},
/**
@ -85,7 +85,7 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric
var originalRenderOnAddRemove = this.canvas.renderOnAddRemove;
this.canvas.renderOnAddRemove = false;
var rects = [ ];
var rects = [];
for (var i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {
var sprayChunk = this.sprayChunks[i];
@ -138,7 +138,7 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric
uniqueRects[key] = rects[i];
}
}
var uniqueRectsArray = [ ];
var uniqueRectsArray = [];
for (key in uniqueRects) {
uniqueRectsArray.push(uniqueRects[key]);
}
@ -171,7 +171,7 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric
* @param {Object} pointer
*/
addSprayChunk: function(pointer) {
this.sprayChunkPoints = [ ];
this.sprayChunkPoints = [];
var x, y, width, radius = this.width / 2;

View file

@ -137,7 +137,7 @@
* If not empty the selection border is dashed
* @type Array
*/
selectionDashArray: [ ],
selectionDashArray: [],
/**
* Color of the border of selection (usually slightly darker than color of selection itself)
@ -227,7 +227,8 @@
isDrawingMode: false,
/**
* Indicates whether objects should remain in current stack position when selected. When false objects are brought to top and rendered as part of the selection group
* Indicates whether objects should remain in current stack position when selected.
* When false objects are brought to top and rendered as part of the selection group
* @type Boolean
* @default
*/
@ -258,7 +259,7 @@
_chooseObjectsToRender: function() {
var activeGroup = this.getActiveGroup(),
activeObject = this.getActiveObject(),
object, objsToRender = [ ], activeGroupObjects = [ ];
object, objsToRender = [], activeGroupObjects = [];
if ((activeGroup || activeObject) && !this.preserveObjectStacking) {
for (var i = 0, length = this._objects.length; i < length; i++) {
@ -667,8 +668,7 @@
actualMouseByOrigin, constraintPosition, dim = target._getTransformedDimensions();
this._changeSkewTransformOrigin(actualMouseByCenter - lastMouseByCenter, t, by);
actualMouseByOrigin = target.toLocalPoint(new fabric.Point(x, y), t.originX, t.originY)[by],
actualMouseByOrigin = target.toLocalPoint(new fabric.Point(x, y), t.originX, t.originY)[by];
constraintPosition = target.translateToOriginPoint(center, t.originX, t.originY);
// Actually skew the object
skewed = this._setObjectSkew(actualMouseByOrigin, t, by, dim);
@ -970,8 +970,8 @@
// selection border
if (this.selectionDashArray.length > 1) {
var px = groupSelector.ex + STROKE_OFFSET - ((left > 0) ? 0: aleft),
py = groupSelector.ey + STROKE_OFFSET - ((top > 0) ? 0: atop);
var px = groupSelector.ex + STROKE_OFFSET - ((left > 0) ? 0 : aleft),
py = groupSelector.ey + STROKE_OFFSET - ((top > 0) ? 0 : atop);
ctx.beginPath();
@ -1019,7 +1019,7 @@
return activeObject;
}
this.targets = [ ];
this.targets = [];
var target = this._searchPossibleTargets(this._objects, pointer);
this._fireOverOutEvents(target, e);

View file

@ -74,7 +74,7 @@
* @return {Array} Hsl color
*/
_rgbToHsl: function(r, g, b) {
r /= 255, g /= 255, b /= 255;
r /= 255; g /= 255; b /= 255;
var h, s, l,
max = fabric.util.array.max([r, g, b]),
@ -265,6 +265,7 @@
* @field
* @memberOf fabric.Color
*/
// eslint-disable-next-line max-len
fabric.Color.reRGBa = /^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/;
/**
@ -325,14 +326,14 @@
if (t > 1) {
t -= 1;
}
if (t < 1/6) {
if (t < 1 / 6) {
return p + (q - p) * 6 * t;
}
if (t < 1/2) {
if (t < 1 / 2) {
return q;
}
if (t < 2/3) {
return p + (q - p) * (2/3 - t) * 6;
if (t < 2 / 3) {
return p + (q - p) * (2 / 3 - t) * 6;
}
return p;
}
@ -415,9 +416,9 @@
var q = l <= 0.5 ? l * (s + 1) : l + s - l * s,
p = l * 2 - q;
r = hue2rgb(p, q, h + 1/3);
r = hue2rgb(p, q, h + 1 / 3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1/3);
b = hue2rgb(p, q, h - 1 / 3);
}
return [

View file

@ -16,9 +16,9 @@ fabric.ElementsParser.prototype.parse = function() {
fabric.ElementsParser.prototype.createObjects = function() {
for (var i = 0, len = this.elements.length; i < len; i++) {
this.elements[i].setAttribute('svgUid', this.svgUid);
(function(_this, i) {
(function(_obj, i) {
setTimeout(function() {
_this.createObject(_this.elements[i], i);
_obj.createObject(_obj.elements[i], i);
}, 0);
})(this, i);
}
@ -80,6 +80,7 @@ fabric.ElementsParser.prototype.resolveGradient = function(obj, property) {
fabric.ElementsParser.prototype.checkIfDone = function() {
if (--this.numElements === 0) {
this.instances = this.instances.filter(function(el) {
// eslint-disable-next-line no-eq-null, eqeqeq
return el != null;
});
this.callback(this.instances);

View file

@ -1,7 +1,9 @@
(function(global) {
'use strict';
var fabric = global.fabric;
var fabric = global.fabric,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Color Blend filter class
@ -23,7 +25,8 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Blend = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Blend.prototype */{
filters.Blend = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Blend.prototype */ {
type: 'Blend',
initialize: function(options) {

View file

@ -3,7 +3,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { }),
extend = fabric.util.object.extend;
extend = fabric.util.object.extend,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Brightness filter class
@ -19,7 +21,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Brightness = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Brightness.prototype */ {
filters.Brightness = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Brightness.prototype */ {
/**
* Filter type

View file

@ -3,7 +3,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { }),
extend = fabric.util.object.extend;
extend = fabric.util.object.extend,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Color Matrix filter class
@ -26,7 +28,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.ColorMatrix = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.ColorMatrix.prototype */ {
filters.ColorMatrix = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.ColorMatrix.prototype */ {
/**
* Filter type
@ -44,11 +46,11 @@
initialize: function( options ) {
options || ( options = {} );
this.matrix = options.matrix || [
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0
];
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0
];
},
/**
@ -57,15 +59,15 @@
*/
applyTo: function( canvasEl ) {
var context = canvasEl.getContext( '2d' ),
imageData = context.getImageData( 0, 0, canvasEl.width, canvasEl.height ),
data = imageData.data,
iLen = data.length,
i,
r,
g,
b,
a,
m = this.matrix;
imageData = context.getImageData( 0, 0, canvasEl.width, canvasEl.height ),
data = imageData.data,
iLen = data.length,
i,
r,
g,
b,
a,
m = this.matrix;
for ( i = 0; i < iLen; i += 4 ) {
r = data[ i ];

View file

@ -3,7 +3,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { }),
extend = fabric.util.object.extend;
extend = fabric.util.object.extend,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Adapted from <a href="http://www.html5rocks.com/en/tutorials/canvas/imagefilters/">html5rocks article</a>
@ -46,7 +48,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Convolute = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Convolute.prototype */ {
filters.Convolute = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Convolute.prototype */ {
/**
* Filter type
@ -84,7 +86,7 @@
pixels = context.getImageData(0, 0, canvasEl.width, canvasEl.height),
side = Math.round(Math.sqrt(weights.length)),
halfSide = Math.floor(side/2),
halfSide = Math.floor(side / 2),
src = pixels.data,
sw = pixels.width,
sh = pixels.height,
@ -107,7 +109,7 @@
scy = y + cy - halfSide;
scx = x + cx - halfSide;
/* jshint maxdepth:5 */
// eslint-disable-next-line max-depth
if (scy < 0 || scy > sh || scx < 0 || scx > sw) {
continue;
}

View file

@ -3,7 +3,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { }),
extend = fabric.util.object.extend;
extend = fabric.util.object.extend,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* GradientTransparency filter class
@ -19,7 +21,8 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.GradientTransparency = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.GradientTransparency.prototype */ {
// eslint-disable-next-line max-len
filters.GradientTransparency = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.GradientTransparency.prototype */ {
/**
* Filter type

View file

@ -2,7 +2,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { });
var fabric = global.fabric || (global.fabric = { }),
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Grayscale image filter class
@ -15,7 +17,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Grayscale = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Grayscale.prototype */ {
filters.Grayscale = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Grayscale.prototype */ {
/**
* Filter type

View file

@ -2,7 +2,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { });
var fabric = global.fabric || (global.fabric = { }),
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Invert filter class
@ -15,7 +17,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Invert = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Invert.prototype */ {
filters.Invert = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Invert.prototype */ {
/**
* Filter type
@ -35,7 +37,7 @@
data = imageData.data,
iLen = data.length, i;
for (i = 0; i < iLen; i+=4) {
for (i = 0; i < iLen; i += 4) {
data[i] = 255 - data[i];
data[i + 1] = 255 - data[i + 1];
data[i + 2] = 255 - data[i + 2];

View file

@ -3,7 +3,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { }),
extend = fabric.util.object.extend;
extend = fabric.util.object.extend,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Mask filter class
@ -13,7 +15,7 @@
* @extends fabric.Image.filters.BaseFilter
* @see {@link fabric.Image.filters.Mask#initialize} for constructor definition
*/
fabric.Image.filters.Mask = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Mask.prototype */ {
filters.Mask = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Mask.prototype */ {
/**
* Filter type
@ -33,7 +35,7 @@
options = options || { };
this.mask = options.mask;
this.channel = [ 0, 1, 2, 3 ].indexOf(options.channel) > -1 ? options.channel : 0;
this.channel = [0, 1, 2, 3].indexOf(options.channel) > -1 ? options.channel : 0;
},
/**

View file

@ -3,7 +3,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { }),
extend = fabric.util.object.extend;
extend = fabric.util.object.extend,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Multiply filter class
@ -24,7 +26,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Multiply = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Multiply.prototype */ {
filters.Multiply = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Multiply.prototype */ {
/**
* Filter type
@ -58,7 +60,7 @@
source = new fabric.Color(this.color).getSource();
for (i = 0; i < iLen; i+=4) {
for (i = 0; i < iLen; i += 4) {
data[i] *= source[0] / 255;
data[i + 1] *= source[1] / 255;
data[i + 2] *= source[2] / 255;

View file

@ -3,7 +3,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { }),
extend = fabric.util.object.extend;
extend = fabric.util.object.extend,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Noise filter class
@ -19,7 +21,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Noise = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Noise.prototype */ {
filters.Noise = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Noise.prototype */ {
/**
* Filter type

View file

@ -3,7 +3,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { }),
extend = fabric.util.object.extend;
extend = fabric.util.object.extend,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Pixelate filter class
@ -19,7 +21,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Pixelate = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Pixelate.prototype */ {
filters.Pixelate = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Pixelate.prototype */ {
/**
* Filter type

View file

@ -3,7 +3,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { }),
extend = fabric.util.object.extend;
extend = fabric.util.object.extend,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Remove white filter class
@ -20,7 +22,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.RemoveWhite = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.RemoveWhite.prototype */ {
filters.RemoveWhite = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.RemoveWhite.prototype */ {
/**
* Filter type

View file

@ -4,7 +4,9 @@
var fabric = global.fabric || (global.fabric = { }), pow = Math.pow, floor = Math.floor,
sqrt = Math.sqrt, abs = Math.abs, max = Math.max, round = Math.round, sin = Math.sin,
ceil = Math.ceil;
ceil = Math.ceil,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Resize image filter class
@ -17,7 +19,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Resize = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Resize.prototype */ {
filters.Resize = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Resize.prototype */ {
/**
* Filter type
@ -181,7 +183,7 @@
for (v = 0; v < dH; v++) {
center.y = (v + 0.5) * ratioY;
icenter.y = floor(center.y);
a = 0, red = 0, green = 0, blue = 0, alpha = 0;
a = 0; red = 0; green = 0; blue = 0; alpha = 0;
for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {
if (i < 0 || i >= oW) {
continue;
@ -302,7 +304,7 @@
for (var xx = floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {
var dx = abs(centerX - (xx + 0.5)) / ratioWHalf,
w = sqrt(w0 + dx * dx);
/*jshint maxdepth:5 */
/* eslint-disable max-depth */
if (w > 1 && w < -1) {
continue;
}
@ -314,17 +316,15 @@
gxA += weight * data[dx + 3];
weightsAlpha += weight;
//colors
/*jshint maxdepth:6 */
if (data[dx + 3] < 255) {
weight = weight * data[dx + 3] / 250;
}
/*jshint maxdepth:5 */
gxR += weight * data[dx];
gxG += weight * data[dx + 1];
gxB += weight * data[dx + 2];
weights += weight;
}
/*jshint maxdepth:4 */
/* eslint-enable max-depth */
}
}
data2[x2] = gxR / weights;

View file

@ -2,7 +2,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { });
var fabric = global.fabric || (global.fabric = { }),
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Sepia2 filter class
@ -15,7 +17,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Sepia2 = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Sepia2.prototype */ {
filters.Sepia2 = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Sepia2.prototype */ {
/**
* Filter type
@ -35,7 +37,7 @@
data = imageData.data,
iLen = data.length, i, r, g, b;
for (i = 0; i < iLen; i+=4) {
for (i = 0; i < iLen; i += 4) {
r = data[i];
g = data[i + 1];
b = data[i + 2];

View file

@ -2,7 +2,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { });
var fabric = global.fabric || (global.fabric = { }),
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Sepia filter class
@ -15,7 +17,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Sepia = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Sepia.prototype */ {
filters.Sepia = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Sepia.prototype */ {
/**
* Filter type
@ -35,7 +37,7 @@
data = imageData.data,
iLen = data.length, i, avg;
for (i = 0; i < iLen; i+=4) {
for (i = 0; i < iLen; i += 4) {
avg = 0.3 * data[i] + 0.59 * data[i + 1] + 0.11 * data[i + 2];
data[i] = avg + 100;
data[i + 1] = avg + 50;

View file

@ -3,7 +3,9 @@
'use strict';
var fabric = global.fabric || (global.fabric = { }),
extend = fabric.util.object.extend;
extend = fabric.util.object.extend,
filters = fabric.Image.filters,
createClass = fabric.util.createClass;
/**
* Tint filter class
@ -27,7 +29,7 @@
* object.filters.push(filter);
* object.applyFilters(canvas.renderAll.bind(canvas));
*/
fabric.Image.filters.Tint = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Tint.prototype */ {
filters.Tint = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Tint.prototype */ {
/**
* Filter type
@ -73,7 +75,7 @@
alpha1 = 1 - this.opacity;
for (i = 0; i < iLen; i+=4) {
for (i = 0; i < iLen; i += 4) {
r = data[i];
g = data[i + 1];
b = data[i + 2];

View file

@ -191,41 +191,35 @@
}
if (this.type === 'linear') {
markup = [
//jscs:disable validateIndentation
'<linearGradient ',
commonAttributes,
' x1="', coords.x1,
'" y1="', coords.y1,
'" x2="', coords.x2,
'" y2="', coords.y2,
commonAttributes,
' x1="', coords.x1,
'" y1="', coords.y1,
'" x2="', coords.x2,
'" y2="', coords.y2,
'">\n'
//jscs:enable validateIndentation
];
}
else if (this.type === 'radial') {
markup = [
//jscs:disable validateIndentation
'<radialGradient ',
commonAttributes,
' cx="', coords.x2,
'" cy="', coords.y2,
'" r="', coords.r2,
'" fx="', coords.x1,
'" fy="', coords.y1,
commonAttributes,
' cx="', coords.x2,
'" cy="', coords.y2,
'" r="', coords.r2,
'" fx="', coords.x1,
'" fy="', coords.y1,
'">\n'
//jscs:enable validateIndentation
];
}
for (var i = 0; i < this.colorStops.length; i++) {
markup.push(
//jscs:disable validateIndentation
'<stop ',
'offset="', (this.colorStops[i].offset * 100) + '%',
'" style="stop-color:', this.colorStops[i].color,
(this.colorStops[i].opacity != null ? ';stop-opacity: ' + this.colorStops[i].opacity : ';'),
(this.colorStops[i].opacity !== null ? ';stop-opacity: ' + this.colorStops[i].opacity : ';'),
'"/>\n'
//jscs:enable validateIndentation
);
}
@ -421,7 +415,7 @@
gradientUnits === 'objectBoundingBox' &&
object.rx !== object.ry) {
var scaleFactor = object.ry/object.rx;
var scaleFactor = object.ry / object.rx;
ellipseMatrix = ' scale(1, ' + scaleFactor + ')';
if (options.y1) {
options.y1 /= scaleFactor;

View file

@ -103,8 +103,8 @@
b1, b2, inter;
for (var i = 0; i < length; i++) {
b1 = points[i],
b2 = points[(i + 1) % length],
b1 = points[i];
b2 = points[(i + 1) % length];
inter = Intersection.intersectLineLine(a1, a2, b1, b2);
result.appendPoints(inter.points);

View file

@ -10,7 +10,7 @@ fabric.log = function() { };
*/
fabric.warn = function() { };
/* jshint ignore:start */
/* eslint-disable */
if (typeof console !== 'undefined') {
['log', 'warn'].forEach(function(methodName) {
@ -24,4 +24,4 @@ if (typeof console !== 'undefined') {
}
});
}
/* jshint ignore:end */
/* eslint-enable */

View file

@ -138,7 +138,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot
*/
animate: function() {
if (arguments[0] && typeof arguments[0] === 'object') {
var propsToAnimate = [ ], prop, skipCallbacks;
var propsToAnimate = [], prop, skipCallbacks;
for (prop in arguments[0]) {
propsToAnimate.push(prop);
}

View file

@ -1,17 +1,17 @@
(function() {
var cursorOffset = {
mt: 0, // n
tr: 1, // ne
mr: 2, // e
br: 3, // se
mb: 4, // s
bl: 5, // sw
ml: 6, // w
tl: 7 // nw
},
addListener = fabric.util.addListener,
removeListener = fabric.util.removeListener;
mt: 0, // n
tr: 1, // ne
mr: 2, // e
br: 3, // se
mb: 4, // s
bl: 5, // sw
ml: 6, // w
tl: 7 // nw
},
addListener = fabric.util.addListener,
removeListener = fabric.util.removeListener;
fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {
@ -318,7 +318,7 @@
*/
_handleEvent: function(e, eventType, targetObj) {
var target = typeof targetObj === undefined ? this.findTarget(e) : targetObj,
targets = this.targets || [ ],
targets = this.targets || [],
options = { e: e, target: target, subTargets: targets };
this.fire('mouse:' + eventType, options);
@ -604,7 +604,7 @@
var pointer = this.getPointer(e),
transform = this._currentTransform;
transform.reset = false,
transform.reset = false;
transform.target.isMoving = true;
this._beforeScaleTransform(e, transform);

View file

@ -10,7 +10,7 @@
(function() {
var degreesToRadians = fabric.util.degreesToRadians,
radiansToDegrees = fabric.util.radiansToDegrees;
radiansToDegrees = fabric.util.radiansToDegrees;
fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {
/**
@ -48,8 +48,8 @@
}
var self = this.__gesturesParams.self,
t = this._currentTransform,
e = this.__gesturesParams.e;
t = this._currentTransform,
e = this.__gesturesParams.e;
t.action = 'scale';
t.originX = t.originY = 'center';
@ -123,9 +123,9 @@
*/
_scaleObjectBy: function(s, e) {
var t = this._currentTransform,
target = t.target,
lockScalingX = target.get('lockScalingX'),
lockScalingY = target.get('lockScalingY');
target = t.target,
lockScalingX = target.get('lockScalingX'),
lockScalingY = target.get('lockScalingY');
if (lockScalingX && lockScalingY) {
return;

View file

@ -100,8 +100,8 @@
var objects = this.getObjects(),
isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target),
groupObjects = isActiveLower
? [ this._activeObject, target ]
: [ target, this._activeObject ];
? [this._activeObject, target]
: [target, this._activeObject];
this._activeObject.isEditing && this._activeObject.exitEditing();
return new fabric.Group(groupObjects, {
canvas: this
@ -136,7 +136,7 @@
* @private
*/
_collectObjects: function() {
var group = [ ],
var group = [],
currentObject,
x1 = this._groupSelector.ex,
y1 = this._groupSelector.ey,

View file

@ -69,14 +69,12 @@
*/
_createTextCharBg: function(styleDecl, lineLeftOffset, lineTopOffset, heightOfLine, charWidth, charOffset) {
return [
//jscs:disable validateIndentation
'\t\t<rect fill="', styleDecl.textBackgroundColor,
'" x="', toFixed(lineLeftOffset + charOffset, NUM_FRACTION_DIGITS),
'" y="', toFixed(lineTopOffset - this.height/2, NUM_FRACTION_DIGITS),
'" y="', toFixed(lineTopOffset - this.height / 2, NUM_FRACTION_DIGITS),
'" width="', toFixed(charWidth, NUM_FRACTION_DIGITS),
'" height="', toFixed(heightOfLine / this.lineHeight, NUM_FRACTION_DIGITS),
'"></rect>\n'
//jscs:enable validateIndentation
].join('');
},
@ -94,18 +92,16 @@
}, styleDecl));
return [
//jscs:disable validateIndentation
'\t\t\t<tspan x="', toFixed(lineLeftOffset + charOffset, NUM_FRACTION_DIGITS), '" y="',
toFixed(lineTopOffset - this.height/2, NUM_FRACTION_DIGITS), '" ',
(styleDecl.fontFamily ? 'font-family="' + styleDecl.fontFamily.replace(/"/g, '\'') + '" ': ''),
(styleDecl.fontSize ? 'font-size="' + styleDecl.fontSize + '" ': ''),
(styleDecl.fontStyle ? 'font-style="' + styleDecl.fontStyle + '" ': ''),
(styleDecl.fontWeight ? 'font-weight="' + styleDecl.fontWeight + '" ': ''),
(styleDecl.textDecoration ? 'text-decoration="' + styleDecl.textDecoration + '" ': ''),
'style="', fillStyles, '">',
fabric.util.string.escapeXml(_char),
toFixed(lineTopOffset - this.height / 2, NUM_FRACTION_DIGITS), '" ',
(styleDecl.fontFamily ? 'font-family="' + styleDecl.fontFamily.replace(/"/g, '\'') + '" ' : ''),
(styleDecl.fontSize ? 'font-size="' + styleDecl.fontSize + '" ' : ''),
(styleDecl.fontStyle ? 'font-style="' + styleDecl.fontStyle + '" ' : ''),
(styleDecl.fontWeight ? 'font-weight="' + styleDecl.fontWeight + '" ' : ''),
(styleDecl.textDecoration ? 'text-decoration="' + styleDecl.textDecoration + '" ' : ''),
'style="', fillStyles, '">',
fabric.util.string.escapeXml(_char),
'</tspan>\n'
//jscs:enable validateIndentation
].join('');
}
});

View file

@ -134,7 +134,7 @@
* @private
*/
_createBaseSVGMarkup: function() {
var markup = [ ];
var markup = [];
if (this.fill && this.fill.toLive) {
markup.push(this.fill.toSVG(this, false));

View file

@ -130,8 +130,9 @@
* @param {fabric.Point} point Point to check
* @param {Object} oCoords Coordinates of the object being evaluated
*/
// remove yi, not used but left code here just in case.
_findCrossPoints: function(point, oCoords) {
var b1, b2, a1, a2, xi, yi,
var b1, b2, a1, a2, xi, // yi,
xcount = 0,
iLine;
@ -148,7 +149,7 @@
// optimisation 3: vertical line case
if ((iLine.o.x === iLine.d.x) && (iLine.o.x >= point.x)) {
xi = iLine.o.x;
yi = point.y;
// yi = point.y;
}
// calculate the intersection point
else {
@ -157,8 +158,8 @@
a1 = point.y - b1 * point.x;
a2 = iLine.o.y - b2 * iLine.o.x;
xi = - (a1 - a2) / (b1 - b2);
yi = a1 + b1 * xi;
xi = -(a1 - a2) / (b1 - b2);
// yi = a1 + b1 * xi;
}
// dont count xi < point.x cases
if (xi >= point.x) {
@ -314,10 +315,10 @@
tr = new fabric.Point(tl.x + (currentWidth * cosTh), tl.y + (currentWidth * sinTh)),
bl = new fabric.Point(tl.x - (currentHeight * sinTh), tl.y + (currentHeight * cosTh)),
br = new fabric.Point(coords.x + offsetX, coords.y + offsetY),
ml = new fabric.Point((tl.x + bl.x)/2, (tl.y + bl.y)/2),
mt = new fabric.Point((tr.x + tl.x)/2, (tr.y + tl.y)/2),
mr = new fabric.Point((br.x + tr.x)/2, (br.y + tr.y)/2),
mb = new fabric.Point((br.x + bl.x)/2, (br.y + bl.y)/2),
ml = new fabric.Point((tl.x + bl.x) / 2, (tl.y + bl.y) / 2),
mt = new fabric.Point((tr.x + tl.x) / 2, (tr.y + tl.y) / 2),
mr = new fabric.Point((br.x + tr.x) / 2, (br.y + tr.y) / 2),
mb = new fabric.Point((br.x + bl.x) / 2, (br.y + bl.y) / 2),
mtr = new fabric.Point(mt.x + sinTh * this.rotatingPointOffset, mt.y - cosTh * this.rotatingPointOffset);
// debugging

View file

@ -1,10 +1,9 @@
(function() {
var degreesToRadians = fabric.util.degreesToRadians,
//jscs:disable requireCamelCaseOrUpperCaseIdentifiers
/* eslint-disable camelcase */
isVML = function() { return typeof G_vmlCanvasManager !== 'undefined'; };
//jscs:enable requireCamelCaseOrUpperCaseIdentifiers
/* eslint-enable camelcase */
fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {
/**
@ -146,24 +145,24 @@
skewY = this.skewY;
}
var dimensions = this._getNonTransformedDimensions(),
dimX = dimensions.x /2, dimY = dimensions.y / 2,
dimX = dimensions.x / 2, dimY = dimensions.y / 2,
points = [
{
x: -dimX,
y: -dimY
},
{
x: dimX,
y: -dimY
},
{
x: -dimX,
y: dimY
},
{
x: dimX,
y: dimY
}],
{
x: -dimX,
y: -dimY
},
{
x: dimX,
y: -dimY
},
{
x: -dimX,
y: dimY
},
{
x: dimX,
y: dimY
}],
i, transformMatrix = this._calcDimensionsTransformMatrix(skewX, skewY, false),
bbox;
for (i = 0; i < points.length; i++) {
@ -205,7 +204,7 @@
ctx.scale(1 / vpt[0], 1 / vpt[3]);
ctx.rotate(degreesToRadians(this.angle));
ctx.fillStyle = this.selectionBackgroundColor;
ctx.fillRect(-wh.x/2, -wh.y/2, wh.x, wh.y);
ctx.fillRect(-wh.x / 2, -wh.y / 2, wh.x, wh.y);
ctx.restore();
return this;
},
@ -342,23 +341,23 @@
// middle-top
this._drawControl('mt', ctx, methodName,
left + width/2,
left + width / 2,
top);
// middle-bottom
this._drawControl('mb', ctx, methodName,
left + width/2,
left + width / 2,
top + height);
// middle-right
this._drawControl('mr', ctx, methodName,
left + width,
top + height/2);
top + height / 2);
// middle-left
this._drawControl('ml', ctx, methodName,
left,
top + height/2);
top + height / 2);
}
// middle-top-rotate
@ -384,7 +383,7 @@
switch (this.cornerStyle) {
case 'circle':
ctx.beginPath();
ctx.arc(left + size/2, top + size/2, size/2, 0, 2 * Math.PI, false);
ctx.arc(left + size / 2, top + size / 2, size / 2, 0, 2 * Math.PI, false);
ctx[methodName]();
if (stroke) {
ctx.stroke();

View file

@ -40,7 +40,7 @@
}
else {
if (!this.__eventListeners[eventName]) {
this.__eventListeners[eventName] = [ ];
this.__eventListeners[eventName] = [];
}
this.__eventListeners[eventName].push(handler);
}

View file

@ -122,6 +122,7 @@
fabric.util.getScript = function(url, callback) {
request(url, '', function(body) {
// eslint-disable-next-line no-eval
eval(body);
callback && callback();
});

View file

@ -131,7 +131,7 @@
* @private
*/
function _getMultipleNodes(doc, nodeNames) {
var nodeName, nodeArray = [ ], nodeList;
var nodeName, nodeArray = [], nodeList;
for (var i = 0; i < nodeNames.length; i++) {
nodeName = nodeNames[i];
nodeList = doc.getElementsByTagName(nodeName);
@ -246,7 +246,7 @@
// start with identity matrix
var matrix = iMatrix.concat(),
matrices = [ ];
matrices = [];
// return if no argument was given or
// an argument does not match transform attribute regexp
@ -257,7 +257,8 @@
attributeValue.replace(reTransform, function(match) {
var m = new RegExp(transform).exec(match).filter(function (match) {
return (match !== '' && match != null);
// match !== '' && match != null
return (!!match);
}),
operation = m[1],
args = m.slice(2).map(parseFloat);
@ -437,7 +438,8 @@
attr = attrs.item(j);
el3.setAttribute(attr.nodeName, attr.nodeValue);
}
while (el2.firstChild != null) {
// el2.firstChild != null
while (el2.firstChild) {
el3.appendChild(el2.firstChild);
}
el2 = el3;
@ -516,9 +518,9 @@
return parsedDim;
}
minX = -parseFloat(viewBoxAttr[1]),
minY = -parseFloat(viewBoxAttr[2]),
viewBoxWidth = parseFloat(viewBoxAttr[3]),
minX = -parseFloat(viewBoxAttr[1]);
minY = -parseFloat(viewBoxAttr[2]);
viewBoxWidth = parseFloat(viewBoxAttr[3]);
viewBoxHeight = parseFloat(viewBoxAttr[4]);
if (!missingDimAttr) {
@ -556,7 +558,8 @@
if (element.nodeName === 'svg') {
el = element.ownerDocument.createElement('g');
while (element.firstChild != null) {
// element.firstChild != null
while (element.firstChild) {
el.appendChild(element.firstChild);
}
element.appendChild(el);
@ -576,7 +579,8 @@
* @function
* @memberOf fabric
* @param {SVGDocument} doc SVG document to parse
* @param {Function} callback Callback to call when parsing is finished; It's being passed an array of elements (parsed from a document).
* @param {Function} callback Callback to call when parsing is finished;
* It's being passed an array of elements (parsed from a document).
* @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
*/
fabric.parseSVGDocument = (function() {
@ -609,7 +613,7 @@
// we're likely in node, where "o3-xml" library fails to gEBTN("*")
// https://github.com/ajaxorg/node-o3-xml/issues/21
descendants = doc.selectNodes('//*[name(.)!="svg"]');
var arr = [ ];
var arr = [];
for (var i = 0, len = descendants.length; i < len; i++) {
arr[i] = descendants[i];
}
@ -888,11 +892,11 @@
points = points.replace(/,/g, ' ').trim();
points = points.split(/\s+/);
var parsedPoints = [ ], i, len;
var parsedPoints = [], i, len;
i = 0;
len = points.length;
for (; i < len; i+=2) {
for (; i < len; i += 2) {
parsedPoints.push({
x: parseFloat(points[i]),
y: parseFloat(points[i + 1])
@ -934,8 +938,8 @@
rules.forEach(function(rule) {
var match = rule.match(/([\s\S]*?)\s*\{([^}]*)\}/),
ruleObj = { }, declaration = match[2].trim(),
propertyValuePairs = declaration.replace(/;$/, '').split(/\s*;\s*/);
ruleObj = { }, declaration = match[2].trim(),
propertyValuePairs = declaration.replace(/;$/, '').split(/\s*;\s*/);
for (var i = 0, len = propertyValuePairs.length; i < len; i++) {
var pair = propertyValuePairs[i].split(/\s*:\s*/),
@ -962,7 +966,8 @@
},
/**
* Takes url corresponding to an SVG document, and parses it into a set of fabric objects. Note that SVG is fetched via XMLHttpRequest, so it needs to conform to SOP (Same Origin Policy)
* Takes url corresponding to an SVG document, and parses it into a set of fabric objects.
* Note that SVG is fetched via XMLHttpRequest, so it needs to conform to SOP (Same Origin Policy)
* @memberOf fabric
* @param {String} url
* @param {Function} callback
@ -1074,24 +1079,20 @@
for (var j in fontList) {
markup += [
//jscs:disable validateIndentation
'\t\t@font-face {\n',
'\t\t\tfont-family: \'', j, '\';\n',
'\t\t\tsrc: url(\'', fontPaths[j], '\');\n',
'\t\t\tfont-family: \'', j, '\';\n',
'\t\t\tsrc: url(\'', fontPaths[j], '\');\n',
'\t\t}\n'
//jscs:enable validateIndentation
].join('');
}
if (markup) {
markup = [
//jscs:disable validateIndentation
'\t<style type="text/css">',
'<![CDATA[\n',
markup,
']]>',
'<![CDATA[\n',
markup,
']]>',
'</style>\n'
//jscs:enable validateIndentation
].join('');
}
@ -1104,7 +1105,7 @@
* @return {String}
*/
createSVGRefElementsMarkup: function(canvas) {
var markup = [ ];
var markup = [];
_createSVGPattern(markup, canvas, 'backgroundColor');
_createSVGPattern(markup, canvas, 'overlayColor');

View file

@ -84,7 +84,7 @@
*/
_parseShadow: function(shadow) {
var shadowStr = shadow.trim(),
offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [ ],
offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [],
color = shadowStr.replace(fabric.Shadow.reOffsetsAndBlur, '') || 'rgb(0,0,0)';
return {
@ -178,6 +178,7 @@
* @field
* @memberOf fabric.Shadow
*/
// eslint-disable-next-line max-len
fabric.Shadow.reOffsetsAndBlur = /(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/;
})(typeof exports !== 'undefined' ? exports : this);

View file

@ -99,7 +99,7 @@
*/
toSVG: function(reviver) {
var markup = this._createBaseSVGMarkup(), x = 0, y = 0,
angle = (this.endAngle - this.startAngle) % ( 2 * pi);
angle = (this.endAngle - this.startAngle) % ( 2 * pi);
if (angle === 0) {
if (this.group && this.group.type === 'path-group') {
@ -126,7 +126,7 @@
markup.push(
'<path d="M ' + startX + ' ' + startY,
' A ' + this.radius + ' ' + this.radius,
' 0 ', + largeFlag + ' 1', ' ' + endX + ' ' + endY,
' 0 ', +largeFlag + ' 1', ' ' + endX + ' ' + endY,
'" style="', this.getSvgStyles(),
'" transform="', this.getSvgTransform(),
' ', this.getSvgTransformMatrix(),

View file

@ -142,10 +142,10 @@
_render: function(ctx, noTransform) {
ctx.beginPath();
ctx.save();
ctx.transform(1, 0, 0, this.ry/this.rx, 0, 0);
ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);
ctx.arc(
noTransform ? this.left + this.rx : 0,
noTransform ? (this.top + this.ry) * this.rx/this.ry : 0,
noTransform ? (this.top + this.ry) * this.rx / this.ry : 0,
this.rx,
0,
piBy2,

View file

@ -106,8 +106,8 @@
*/
initialize: function(element, options, callback) {
options || (options = { });
this.filters = [ ];
this.resizeFilters = [ ];
this.filters = [];
this.resizeFilters = [];
this.callSuper('initialize', options);
this._initElement(element, options, callback);
},
@ -228,7 +228,7 @@
* @return {Object} Object representation of an instance
*/
toObject: function(propertiesToInclude) {
var filters = [ ], resizeFilters = [ ],
var filters = [], resizeFilters = [],
scaleX = 1, scaleY = 1;
this.filters.forEach(function(filterObj) {
@ -619,9 +619,9 @@
fabric.Image.fromObject = function(object, callback) {
fabric.util.loadImage(object.src, function(img) {
fabric.Image.prototype._initFilters.call(object, object.filters, function(filters) {
object.filters = filters || [ ];
object.filters = filters || [];
fabric.Image.prototype._initFilters.call(object, object.resizeFilters, function(resizeFilters) {
object.resizeFilters = resizeFilters || [ ];
object.resizeFilters = resizeFilters || [];
return new fabric.Image(img, object, callback);
});
});

View file

@ -165,7 +165,7 @@
/**
* @private
*/
__widthOfSpace: [ ],
__widthOfSpace: [],
/**
* Constructor
@ -184,7 +184,7 @@
*/
_clearCache: function() {
this.callSuper('_clearCache');
this.__widthOfSpace = [ ];
this.__widthOfSpace = [];
},
/**
@ -198,7 +198,7 @@
for (var p1 in obj) {
for (var p2 in obj[p1]) {
/*jshint unused:false */
// eslint-disable-next-line no-unused-vars
for (var p3 in obj[p1][p2]) {
return false;
}
@ -256,7 +256,7 @@
getSelectionStyles: function(startIndex, endIndex) {
if (arguments.length === 2) {
var styles = [ ];
var styles = [];
for (var i = startIndex; i < endIndex; i++) {
styles.push(this.getSelectionStyles(i));
}
@ -518,7 +518,7 @@
ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity;
ctx.fillRect(
boundaries.left + leftOffset - cursorWidth/2,
boundaries.left + leftOffset - cursorWidth / 2,
boundaries.top + boundaries.topOffset,
cursorWidth,
charHeight);

View file

@ -319,12 +319,12 @@
return function() {
switch (this.get(origin)) {
case nearest:
return Math.min(this.get(axis1), this.get(axis2));
case center:
return Math.min(this.get(axis1), this.get(axis2)) + (0.5 * this.get(dimension));
case farthest:
return Math.max(this.get(axis1), this.get(axis2));
case nearest:
return Math.min(this.get(axis1), this.get(axis2));
case center:
return Math.min(this.get(axis1), this.get(axis2)) + (0.5 * this.get(dimension));
case farthest:
return Math.max(this.get(axis1), this.get(axis2));
}
};

View file

@ -1024,7 +1024,7 @@
this[key] = value;
if (key === 'width' || key === 'height') {
this.minScaleLimit = Math.min(0.1, 1/Math.max(this.width, this.height));
this.minScaleLimit = Math.min(0.1, 1 / Math.max(this.width, this.height));
}
return this;

View file

@ -78,7 +78,7 @@
this.setOptions(options);
if (!path) {
path = [ ];
path = [];
}
var fromArray = _toString.call(path) === '[object Array]';
@ -518,14 +518,12 @@
addTransform = ' translate(' + (-this.pathOffset.x) + ', ' + (-this.pathOffset.y) + ') ';
}
markup.push(
//jscs:disable validateIndentation
'<path ', this.getSvgId(),
'd="', path,
'" style="', this.getSvgStyles(),
'" transform="', this.getSvgTransform(), addTransform,
this.getSvgTransformMatrix(), '" stroke-linecap="round" ',
'/>\n'
//jscs:enable validateIndentation
);
return reviver ? reviver(markup.join('')) : markup.join('');
@ -544,8 +542,8 @@
* @private
*/
_parsePath: function() {
var result = [ ],
coords = [ ],
var result = [],
coords = [],
currentPath,
parsed,
re = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,
@ -562,7 +560,7 @@
coords.push(match[0]);
}
coordsParsed = [ currentPath.charAt(0) ];
coordsParsed = [currentPath.charAt(0)];
for (var j = 0, jlen = coords.length; j < jlen; j++) {
parsed = parseFloat(coords[j]);
@ -577,7 +575,7 @@
if (coordsParsed.length - 1 > commandLength) {
for (var k = 1, klen = coordsParsed.length; k < klen; k += commandLength) {
result.push([ command ].concat(coordsParsed.slice(k, k + commandLength)));
result.push([command].concat(coordsParsed.slice(k, k + commandLength)));
command = repeatedCommand;
}
}
@ -617,33 +615,33 @@
case 'l': // lineto, relative
x += current[1];
y += current[2];
bounds = [ ];
bounds = [];
break;
case 'L': // lineto, absolute
x = current[1];
y = current[2];
bounds = [ ];
bounds = [];
break;
case 'h': // horizontal lineto, relative
x += current[1];
bounds = [ ];
bounds = [];
break;
case 'H': // horizontal lineto, absolute
x = current[1];
bounds = [ ];
bounds = [];
break;
case 'v': // vertical lineto, relative
y += current[1];
bounds = [ ];
bounds = [];
break;
case 'V': // verical lineto, absolute
y = current[1];
bounds = [ ];
bounds = [];
break;
case 'm': // moveTo, relative
@ -651,7 +649,7 @@
y += current[2];
subpathStartX = x;
subpathStartY = y;
bounds = [ ];
bounds = [];
break;
case 'M': // moveTo, absolute
@ -659,7 +657,7 @@
y = current[2];
subpathStartX = x;
subpathStartY = y;
bounds = [ ];
bounds = [];
break;
case 'c': // bezierCurveTo, relative

View file

@ -44,7 +44,7 @@
initialize: function(paths, options) {
options = options || { };
this.paths = paths || [ ];
this.paths = paths || [];
for (var i = this.paths.length; i--;) {
this.paths[i].group = this;
@ -66,7 +66,7 @@
* Calculate width and height based on paths contained
*/
parseDimensionsFromPaths: function(options) {
var points, p, xC = [ ], yC = [ ], path, height, width,
var points, p, xC = [], yC = [], path, height, width,
m;
for (var j = this.paths.length; j--;) {
path = this.paths[j];
@ -111,7 +111,7 @@
this._setShadow(ctx);
this.clipTo && fabric.util.clipContext(this, ctx);
ctx.translate(-this.width/2, -this.height/2);
ctx.translate(-this.width / 2, -this.height / 2);
for (var i = 0, l = this.paths.length; i < l; ++i) {
this.paths[i].render(ctx, true);
}

View file

@ -57,7 +57,7 @@
*/
initialize: function(points, options) {
options = options || { };
this.points = points || [ ];
this.points = points || [];
this.callSuper('initialize', options);
this._calcDimensions();
if (!('top' in options)) {
@ -85,8 +85,7 @@
this.width = (maxX - minX) || 0;
this.height = (maxY - minY) || 0;
this.minX = minX || 0,
this.minX = minX || 0;
this.minY = minY || 0;
},

View file

@ -102,8 +102,8 @@
x = noTransform ? this.left : -this.width / 2,
y = noTransform ? this.top : -this.height / 2,
isRounded = rx !== 0 || ry !== 0,
k = 1 - 0.5522847498 /* "magic number" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */;
/* "magic number" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */
k = 1 - 0.5522847498;
ctx.beginPath();
ctx.moveTo(x + rx, y);

View file

@ -711,8 +711,8 @@
* @private
*/
_clearCache: function() {
this.__lineWidths = [ ];
this.__lineHeights = [ ];
this.__lineWidths = [];
this.__lineHeights = [];
},
/**
@ -806,8 +806,8 @@
for (i = 0, len = _this._textLines.length; i < len; i++) {
lineWidth = _this._getLineWidth(ctx, i),
lineLeftOffset = _this._getLineLeftOffset(lineWidth),
lineWidth = _this._getLineWidth(ctx, i);
lineLeftOffset = _this._getLineLeftOffset(lineWidth);
heightOfLine = _this._getHeightOfLine(ctx, i);
for (j = 0, oLen = offsets.length; j < oLen; j++) {
@ -957,11 +957,11 @@
style, '>\n',
textAndBg.textBgRects.join(''),
'\t\t<text ',
(this.fontFamily ? 'font-family="' + this.fontFamily.replace(/"/g, '\'') + '" ': ''),
(this.fontSize ? 'font-size="' + this.fontSize + '" ': ''),
(this.fontStyle ? 'font-style="' + this.fontStyle + '" ': ''),
(this.fontWeight ? 'font-weight="' + this.fontWeight + '" ': ''),
(this.textDecoration ? 'text-decoration="' + this.textDecoration + '" ': ''),
(this.fontFamily ? 'font-family="' + this.fontFamily.replace(/"/g, '\'') + '" ' : ''),
(this.fontSize ? 'font-size="' + this.fontSize + '" ' : ''),
(this.fontStyle ? 'font-style="' + this.fontStyle + '" ' : ''),
(this.fontWeight ? 'font-weight="' + this.fontWeight + '" ' : ''),
(this.textDecoration ? 'text-decoration="' + this.textDecoration + '" ' : ''),
'style="', this.getSvgStyles(noShadow), '" >\n',
textAndBg.textSpans.join(''),
'\t\t</text>\n',
@ -976,8 +976,8 @@
* @return {Object}
*/
_getSVGTextAndBg: function(textTopOffset, textLeftOffset) {
var textSpans = [ ],
textBgRects = [ ],
var textSpans = [],
textBgRects = [],
height = 0;
// bounding-box background
this._setSVGBg(textBgRects);

View file

@ -1078,10 +1078,10 @@
*/
_toObjects: function(methodName, propertiesToInclude) {
return this.getObjects().filter(function(object) {
return !object.excludeFromExport;
}).map(function(instance) {
return this._toObject(instance, methodName, propertiesToInclude);
}, this);
return !object.excludeFromExport;
}).map(function(instance) {
return this._toObject(instance, methodName, propertiesToInclude);
}, this);
},
/**

View file

@ -36,7 +36,7 @@
* @memberOf fabric.util.ease
*/
function easeInOutCubic(t, b, c, d) {
t /= d/2;
t /= d / 2;
if (t < 1) {
return c / 2 * t * t * t + b;
}
@ -302,10 +302,10 @@
if ((t /= d) < (1 / 2.75)) {
return c * (7.5625 * t * t) + b;
}
else if (t < (2/2.75)) {
else if (t < (2 / 2.75)) {
return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;
}
else if (t < (2.5/2.75)) {
else if (t < (2.5 / 2.75)) {
return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;
}
else {
@ -395,4 +395,4 @@
easeInOutBounce: easeInOutBounce
};
}());
})();

View file

@ -30,13 +30,13 @@
root = 0;
if (pl < 0) {
var s = Math.sqrt(1 - pl/(rx2 * ry2));
var s = Math.sqrt(1 - pl / (rx2 * ry2));
rx *= s;
ry *= s;
}
else {
root = (large === sweep ? -1.0 : 1.0) *
Math.sqrt( pl /(rx2 * py2 + ry2 * px2));
Math.sqrt( pl / (rx2 * py2 + ry2 * px2));
}
var cx = root * rx * py / ry,
@ -82,8 +82,8 @@
sinth3 = Math.sin(th3),
toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1,
toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1,
cp1X = fromX + mT * ( - cosTh * rx * sinth2 - sinTh * ry * costh2),
cp1Y = fromY + mT * ( - sinTh * rx * sinth2 + cosTh * ry * costh2),
cp1X = fromX + mT * ( -cosTh * rx * sinth2 - sinTh * ry * costh2),
cp1Y = fromY + mT * ( -sinTh * rx * sinth2 + cosTh * ry * costh2),
cp2X = toX + mT * ( cosTh * rx * sinth3 + sinTh * ry * costh3),
cp2Y = toY + mT * ( sinTh * rx * sinth3 - cosTh * ry * costh3);
@ -124,7 +124,7 @@
sweep = coords[4],
tx = coords[5],
ty = coords[6],
segs = [[ ], [ ], [ ], [ ]],
segs = [[], [], [], []],
segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);
for (var i = 0, len = segsNorm.length; i < len; i++) {
@ -152,9 +152,9 @@
*/
fabric.util.getBoundsOfArc = function(fx, fy, rx, ry, rot, large, sweep, tx, ty) {
var fromX = 0, fromY = 0, bound = [ ], bounds = [ ],
segs = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot),
boundCopy = [[ ], [ ]];
var fromX = 0, fromY = 0, bound = [], bounds = [],
segs = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot),
boundCopy = [[], []];
for (var i = 0, len = segs.length; i < len; i++) {
bound = getBoundsOfCurve(fromX, fromY, segs[i][0], segs[i][1], segs[i][2], segs[i][3], segs[i][4], segs[i][5]);
@ -190,8 +190,8 @@
var sqrt = Math.sqrt,
min = Math.min, max = Math.max,
abs = Math.abs, tvalues = [ ],
bounds = [[ ], [ ]],
abs = Math.abs, tvalues = [],
bounds = [[], []],
a, b, c, t, t1, t2, b2ac, sqrtb2ac;
b = 6 * x0 - 12 * x1 + 6 * x2;

View file

@ -98,7 +98,7 @@
listeners[uid] = { };
}
if (!listeners[uid][eventName]) {
listeners[uid][eventName] = [ ];
listeners[uid][eventName] = [];
}
var listener = createListener(uid, handler);
@ -127,7 +127,7 @@
handlers[uid] = { };
}
if (!handlers[uid][eventName]) {
handlers[uid][eventName] = [ ];
handlers[uid][eventName] = [];
var existingHandler = element['on' + eventName];
if (existingHandler) {
handlers[uid][eventName].push(existingHandler);
@ -193,12 +193,12 @@
// looks like in IE (<9) clientX at certain point (apparently when mouseup fires on VML element)
// is represented as COM object, with all the consequences, like "unknown" type and error on [[Get]]
// need to investigate later
return (typeof event.clientX !== unknown ? event.clientX : 0);
},
return (typeof event.clientX !== unknown ? event.clientX : 0);
},
pointerY = function(event) {
return (typeof event.clientY !== unknown ? event.clientY : 0);
};
pointerY = function(event) {
return (typeof event.clientY !== unknown ? event.clientY : 0);
};
function _getPointer(event, pageProp, clientProp) {
var touchProp = event.type === 'touchend' ? 'changedTouches' : 'touches';

View file

@ -65,7 +65,7 @@
* @return {Array}
*/
Array.prototype.map = function(fn, context) {
var result = [ ];
var result = [];
for (var i = 0, len = this.length >>> 0; i < len; i++) {
if (i in this) {
result[i] = fn.call(context, this[i], i, this);
@ -117,7 +117,7 @@
* @return {Array}
*/
Array.prototype.filter = function(fn, context) {
var result = [ ], val;
var result = [], val;
for (var i = 0, len = this.length >>> 0; i < len; i++) {
if (i in this) {
val = this[i]; // in case fn mutates this
@ -176,7 +176,7 @@
* @return {Array}
*/
function invoke(array, method) {
var args = slice.call(arguments, 2), result = [ ];
var args = slice.call(arguments, 2), result = [];
for (var i = 0, len = array.length; i < len; i++) {
result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);
}

View file

@ -76,7 +76,7 @@
}
klass.superclass = parent;
klass.subclasses = [ ];
klass.subclasses = [];
if (parent) {
Subclass.prototype = parent.prototype;

View file

@ -63,4 +63,4 @@
capitalize: capitalize,
escapeXml: escapeXml
};
}());
})();

View file

@ -241,10 +241,10 @@
}
var parts = namespace.split('.'),
len = parts.length,
len = parts.length, i,
obj = global || fabric.window;
for (var i = 0; i < len; ++i) {
for (i = 0; i < len; ++i) {
obj = obj[parts[i]];
}
@ -302,7 +302,7 @@
* called after each fabric object created.
*/
enlivenObjects: function(objects, callback, namespace, reviver) {
objects = objects || [ ];
objects = objects || [];
function onLoaded() {
if (++numLoadedObjects === numTotalObjects) {
@ -310,7 +310,7 @@
}
}
var enlivenedObjects = [ ],
var enlivenedObjects = [],
numLoadedObjects = 0,
numTotalObjects = objects.length;
@ -431,11 +431,11 @@
*/
createCanvasElement: function(canvasEl) {
canvasEl || (canvasEl = fabric.document.createElement('canvas'));
//jscs:disable requireCamelCaseOrUpperCaseIdentifiers
/* eslint-disable camelcase */
if (!canvasEl.getContext && typeof G_vmlCanvasManager !== 'undefined') {
G_vmlCanvasManager.initElement(canvasEl);
}
//jscs:enable requireCamelCaseOrUpperCaseIdentifiers
/* eslint-enable camelcase */
return canvasEl;
},
@ -458,14 +458,15 @@
* @param {Object} klass "Class" to create accessors for
*/
createAccessors: function(klass) {
var proto = klass.prototype;
var proto = klass.prototype, i, propName,
capitalizedPropName, setterName, getterName;
for (var i = proto.stateProperties.length; i--; ) {
for (i = proto.stateProperties.length; i--; ) {
var propName = proto.stateProperties[i],
capitalizedPropName = propName.charAt(0).toUpperCase() + propName.slice(1),
setterName = 'set' + capitalizedPropName,
getterName = 'get' + capitalizedPropName;
propName = proto.stateProperties[i];
capitalizedPropName = propName.charAt(0).toUpperCase() + propName.slice(1);
setterName = 'set' + capitalizedPropName;
getterName = 'get' + capitalizedPropName;
// using `new Function` for better introspection
if (!proto[getterName]) {
@ -591,12 +592,13 @@
}
}
var _isTransparent = true,
imageData = ctx.getImageData(x, y, (tolerance * 2) || 1, (tolerance * 2) || 1);
var _isTransparent = true, i, temp,
imageData = ctx.getImageData(x, y, (tolerance * 2) || 1, (tolerance * 2) || 1),
l = imageData.data.length;
// Split image data - for tolerance > 1, pixelDataSize = 4;
for (var i = 3, l = imageData.data.length; i < l; i += 4) {
var temp = imageData.data[i];
for (i = 3; i < l; i += 4) {
temp = imageData.data[i];
_isTransparent = temp <= 0;
if (_isTransparent === false) {
break; // Stop if colour found

View file

@ -1236,7 +1236,7 @@ QUnit.jsDump = (function() {
nodelist: array,
arguments: array,
object:function( map ) {
var ret = [ ];
var ret = [];
QUnit.jsDump.up();
for ( var key in map )
ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(map[key]) );

View file

@ -4,48 +4,48 @@
// var emptyImageCanvasData = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAH7ElEQVR4nO3VMQ0AMAzAsPInvYHoMS2yEeTLHADge/M6AADYM3QACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIuMjH4b7osLFBAAAAAElFTkSuQmCC";
var PATH_JSON = '{"objects": [{"type": "path", "originX": "left", "originY": "top", "left": 268, "top": 266, "width": 51, "height": 49,'+
' "fill": "rgb(0,0,0)", "stroke": null, "strokeWidth": 1, "scaleX": 1, "scaleY": 1, '+
'"angle": 0, "flipX": false, "flipY": false, "opacity": 1, "path": [["M", 18.511, 13.99],'+
' ["c", 0, 0, -2.269, -4.487, -12.643, 4.411], ["c", 0, 0, 4.824, -14.161, 19.222, -9.059],'+
' ["l", 0.379, -2.1], ["c", -0.759, -0.405, -1.375, -1.139, -1.645, -2.117], ["c", -0.531, '+
'-1.864, 0.371, -3.854, 1.999, -4.453], ["c", 0.312, -0.118, 0.633, -0.169, 0.953, -0.169], '+
'["c", 1.299, 0, 2.514, 0.953, 2.936, 2.455], ["c", 0.522, 1.864, -0.372, 3.854, -1.999, '+
'4.453], ["c", -0.229, 0.084, -0.464, 0.127, -0.692, 0.152], ["l", -0.379, 2.37], ["c", '+
'1.146, 0.625, 2.024, 1.569, 2.674, 2.758], ["c", 3.213, 2.514, 8.561, 4.184, 11.774, -8.232],'+
' ["c", 0, 0, 0.86, 16.059, -12.424, 14.533], ["c", 0.008, 2.859, 0.615, 5.364, -0.076, 8.224],'+
' ["c", 8.679, 3.146, 15.376, 14.389, 17.897, 18.168], ["l", 2.497, -2.151], ["l", 1.206, 1.839],'+
' ["l", -3.889, 3.458], ["C", 46.286, 48.503, 31.036, 32.225, 22.72, 35.81], ["c", -1.307, 2.851,'+
' -3.56, 6.891, -7.481, 8.848], ["c", -4.689, 2.336, -9.084, -0.802, -11.277, -2.868], ["l",'+
' -1.948, 3.104], ["l", -1.628, -1.333], ["l", 3.138, -4.689], ["c", 0.025, 0, 9, 1.932, 9, 1.932], '+
'["c", 0.877, -9.979, 2.893, -12.905, 4.942, -15.621], ["C", 17.878, 21.775, 18.713, 17.397, 18.511, '+
var PATH_JSON = '{"objects": [{"type": "path", "originX": "left", "originY": "top", "left": 268, "top": 266, "width": 51, "height": 49,' +
' "fill": "rgb(0,0,0)", "stroke": null, "strokeWidth": 1, "scaleX": 1, "scaleY": 1, ' +
'"angle": 0, "flipX": false, "flipY": false, "opacity": 1, "path": [["M", 18.511, 13.99],' +
' ["c", 0, 0, -2.269, -4.487, -12.643, 4.411], ["c", 0, 0, 4.824, -14.161, 19.222, -9.059],' +
' ["l", 0.379, -2.1], ["c", -0.759, -0.405, -1.375, -1.139, -1.645, -2.117], ["c", -0.531, ' +
'-1.864, 0.371, -3.854, 1.999, -4.453], ["c", 0.312, -0.118, 0.633, -0.169, 0.953, -0.169], ' +
'["c", 1.299, 0, 2.514, 0.953, 2.936, 2.455], ["c", 0.522, 1.864, -0.372, 3.854, -1.999, ' +
'4.453], ["c", -0.229, 0.084, -0.464, 0.127, -0.692, 0.152], ["l", -0.379, 2.37], ["c", ' +
'1.146, 0.625, 2.024, 1.569, 2.674, 2.758], ["c", 3.213, 2.514, 8.561, 4.184, 11.774, -8.232],' +
' ["c", 0, 0, 0.86, 16.059, -12.424, 14.533], ["c", 0.008, 2.859, 0.615, 5.364, -0.076, 8.224],' +
' ["c", 8.679, 3.146, 15.376, 14.389, 17.897, 18.168], ["l", 2.497, -2.151], ["l", 1.206, 1.839],' +
' ["l", -3.889, 3.458], ["C", 46.286, 48.503, 31.036, 32.225, 22.72, 35.81], ["c", -1.307, 2.851,' +
' -3.56, 6.891, -7.481, 8.848], ["c", -4.689, 2.336, -9.084, -0.802, -11.277, -2.868], ["l",' +
' -1.948, 3.104], ["l", -1.628, -1.333], ["l", 3.138, -4.689], ["c", 0.025, 0, 9, 1.932, 9, 1.932], ' +
'["c", 0.877, -9.979, 2.893, -12.905, 4.942, -15.621], ["C", 17.878, 21.775, 18.713, 17.397, 18.511, ' +
'13.99], ["z", null]]}], "background": "#ff5555","overlay": "rgba(0,0,0,0.2)"}';
var PATH_OBJ_JSON = '{"type": "path", "originX": "left", "originY": "top", "left": 268, "top": 266, "width": 51, "height": 49,'+
' "fill": "rgb(0,0,0)", "stroke": null, "strokeWidth": 1, "scaleX": 1, "scaleY": 1, '+
'"angle": 0, "flipX": false, "flipY": false, "opacity": 1, "path": [["M", 18.511, 13.99],'+
' ["c", 0, 0, -2.269, -4.487, -12.643, 4.411], ["c", 0, 0, 4.824, -14.161, 19.222, -9.059],'+
' ["l", 0.379, -2.1], ["c", -0.759, -0.405, -1.375, -1.139, -1.645, -2.117], ["c", -0.531, '+
'-1.864, 0.371, -3.854, 1.999, -4.453], ["c", 0.312, -0.118, 0.633, -0.169, 0.953, -0.169], '+
'["c", 1.299, 0, 2.514, 0.953, 2.936, 2.455], ["c", 0.522, 1.864, -0.372, 3.854, -1.999, '+
'4.453], ["c", -0.229, 0.084, -0.464, 0.127, -0.692, 0.152], ["l", -0.379, 2.37], ["c", '+
'1.146, 0.625, 2.024, 1.569, 2.674, 2.758], ["c", 3.213, 2.514, 8.561, 4.184, 11.774, -8.232],'+
' ["c", 0, 0, 0.86, 16.059, -12.424, 14.533], ["c", 0.008, 2.859, 0.615, 5.364, -0.076, 8.224],'+
' ["c", 8.679, 3.146, 15.376, 14.389, 17.897, 18.168], ["l", 2.497, -2.151], ["l", 1.206, 1.839],'+
' ["l", -3.889, 3.458], ["C", 46.286, 48.503, 31.036, 32.225, 22.72, 35.81], ["c", -1.307, 2.851,'+
' -3.56, 6.891, -7.481, 8.848], ["c", -4.689, 2.336, -9.084, -0.802, -11.277, -2.868], ["l",'+
' -1.948, 3.104], ["l", -1.628, -1.333], ["l", 3.138, -4.689], ["c", 0.025, 0, 9, 1.932, 9, 1.932], '+
'["c", 0.877, -9.979, 2.893, -12.905, 4.942, -15.621], ["C", 17.878, 21.775, 18.713, 17.397, 18.511, '+
var PATH_OBJ_JSON = '{"type": "path", "originX": "left", "originY": "top", "left": 268, "top": 266, "width": 51, "height": 49,' +
' "fill": "rgb(0,0,0)", "stroke": null, "strokeWidth": 1, "scaleX": 1, "scaleY": 1, ' +
'"angle": 0, "flipX": false, "flipY": false, "opacity": 1, "path": [["M", 18.511, 13.99],' +
' ["c", 0, 0, -2.269, -4.487, -12.643, 4.411], ["c", 0, 0, 4.824, -14.161, 19.222, -9.059],' +
' ["l", 0.379, -2.1], ["c", -0.759, -0.405, -1.375, -1.139, -1.645, -2.117], ["c", -0.531, ' +
'-1.864, 0.371, -3.854, 1.999, -4.453], ["c", 0.312, -0.118, 0.633, -0.169, 0.953, -0.169], ' +
'["c", 1.299, 0, 2.514, 0.953, 2.936, 2.455], ["c", 0.522, 1.864, -0.372, 3.854, -1.999, ' +
'4.453], ["c", -0.229, 0.084, -0.464, 0.127, -0.692, 0.152], ["l", -0.379, 2.37], ["c", ' +
'1.146, 0.625, 2.024, 1.569, 2.674, 2.758], ["c", 3.213, 2.514, 8.561, 4.184, 11.774, -8.232],' +
' ["c", 0, 0, 0.86, 16.059, -12.424, 14.533], ["c", 0.008, 2.859, 0.615, 5.364, -0.076, 8.224],' +
' ["c", 8.679, 3.146, 15.376, 14.389, 17.897, 18.168], ["l", 2.497, -2.151], ["l", 1.206, 1.839],' +
' ["l", -3.889, 3.458], ["C", 46.286, 48.503, 31.036, 32.225, 22.72, 35.81], ["c", -1.307, 2.851,' +
' -3.56, 6.891, -7.481, 8.848], ["c", -4.689, 2.336, -9.084, -0.802, -11.277, -2.868], ["l",' +
' -1.948, 3.104], ["l", -1.628, -1.333], ["l", 3.138, -4.689], ["c", 0.025, 0, 9, 1.932, 9, 1.932], ' +
'["c", 0.877, -9.979, 2.893, -12.905, 4.942, -15.621], ["C", 17.878, 21.775, 18.713, 17.397, 18.511, ' +
'13.99], ["z", null]]}';
var PATH_DATALESS_JSON = '{"objects":[{"type":"path","originX":"left","originY":"top","left":100,"top":100,"width":200,"height":200,"fill":"rgb(0,0,0)",'+
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,'+
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,'+
var PATH_DATALESS_JSON = '{"objects":[{"type":"path","originX":"left","originY":"top","left":100,"top":100,"width":200,"height":200,"fill":"rgb(0,0,0)",' +
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,' +
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' +
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"path":"http://example.com/","pathOffset":{"x":200,"y":200}}],"background":""}';
var RECT_JSON = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":10,"fill":"rgb(0,0,0)",'+
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,'+
'"shadow":null,'+
var RECT_JSON = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":10,"fill":"rgb(0,0,0)",' +
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' +
'"shadow":null,' +
'"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"rx":0,"ry":0}],"background":"#ff5555","overlay":"rgba(0,0,0,0.2)"}';
function _createImageElement() {
@ -54,7 +54,7 @@
function getAbsolutePath(path) {
var isAbsolute = /^https?:/.test(path);
if (isAbsolute) return path;
if (isAbsolute) { return path };
var imgEl = _createImageElement();
imgEl.src = path;
var src = imgEl.src;
@ -423,7 +423,7 @@
canvas.add(rect1);
canvas.add(rect2);
canvas.add(rect3);
var group = new fabric.Group([ rect1, rect2 ]);
var group = new fabric.Group([rect1, rect2]);
canvas.setActiveGroup(group);
target = canvas.findTarget({
clientX: 5, clientY: 5
@ -454,7 +454,7 @@
canvas.preserveObjectStacking = true;
canvas.add(rect1);
canvas.add(rect2);
var group = new fabric.Group([ rect1, rect2 ]);
var group = new fabric.Group([rect1, rect2]);
canvas.setActiveGroup(group);
target = canvas.findTarget({
clientX: 8, clientY: 8
@ -478,7 +478,7 @@
canvas.add(rect1, rect2, rect3, rect4);
var group = new fabric.Group([ rect3, rect4 ]);
var group = new fabric.Group([rect3, rect4]);
canvas.setActiveGroup(group);
equal(canvas._objects[0], rect1, 'rect1 should be last');
equal(canvas._objects[1], rect2, 'rect2 should be second');
@ -498,7 +498,7 @@
canvas.add(rect1, rect2, rect3, rect4);
var group = new fabric.Group([ rect1, rect2 ]);
var group = new fabric.Group([rect1, rect2]);
canvas.setActiveGroup(group);
equal(canvas._objects[0], rect1, 'rect1 should be last');
equal(canvas._objects[1], rect2, 'rect2 should be second');
@ -518,7 +518,7 @@
canvas.add(rect1, rect2, rect3, rect4);
var group = new fabric.Group([ rect1, rect2 ]);
var group = new fabric.Group([rect1, rect2]);
canvas.setActiveGroup(group);
equal(canvas._objects[0], rect1, 'rect1 should be last');
equal(canvas._objects[1], rect2, 'rect2 should be second');
@ -537,7 +537,7 @@
canvas.add(rect1, rect2, rect3, rect4);
var group = new fabric.Group([ rect3, rect4 ]);
var group = new fabric.Group([rect3, rect4]);
canvas.setActiveGroup(group);
equal(canvas._objects[0], rect1, 'rect1 should be last');
equal(canvas._objects[1], rect2, 'rect2 should be second');
@ -551,7 +551,7 @@
test('toDataURL', function() {
ok(typeof canvas.toDataURL == 'function');
if (!fabric.Canvas.supports('toDataURL')) {
window.alert("toDataURL is not supported by this environment. Some of the tests can not be run.");
window.alert('toDataURL is not supported by this environment. Some of the tests can not be run.');
}
else {
var dataURL = canvas.toDataURL();
@ -646,7 +646,7 @@
canvas.add(rect, circle);
var json = JSON.stringify(canvas);
canvas.setActiveGroup(new fabric.Group([ rect, circle ])).renderAll();
canvas.setActiveGroup(new fabric.Group([rect, circle])).renderAll();
var jsonWithActiveGroup = JSON.stringify(canvas);
equal(json, jsonWithActiveGroup);
@ -1245,7 +1245,7 @@
canvas.add(rect, circle);
var svg = canvas.toSVG();
canvas.setActiveGroup(new fabric.Group([ rect, circle ])).renderAll();
canvas.setActiveGroup(new fabric.Group([rect, circle])).renderAll();
var svgWithActiveGroup = canvas.toSVG();
equal(svg, svgWithActiveGroup);
@ -1261,7 +1261,7 @@
equal(canvas._objects[1], rect2);
equal(canvas._objects[2], circle1);
equal(canvas._objects[3], circle2);
var aGroup = new fabric.Group([ rect2, circle2, rect1, circle1 ]);
var aGroup = new fabric.Group([rect2, circle2, rect1, circle1]);
// before rendering objects are ordered in insert order
equal(aGroup._objects[0], rect2);
equal(aGroup._objects[1], circle2);
@ -1397,7 +1397,7 @@
});
});
test('getSetWidth', function() {
test('getSetWidth', function() {
ok(typeof canvas.getWidth == 'function');
equal(canvas.getWidth(), 600);
equal(canvas.setWidth(444), canvas, 'should be chainable');
@ -1518,7 +1518,7 @@
eventStub = {
clientX: canvasOffset.left + rect.left - 2,
clientY: canvasOffset.top + rect.top + rect.height/2,
clientY: canvasOffset.top + rect.top + rect.height / 2,
target: rect,
shiftKey: true
};
@ -1610,7 +1610,7 @@
// ok(/pug\.jpg$/.test(canvas.backgroundImage.src));
// deepEqual(canvas.toJSON(), {
// "objects": [ ],
// "objects": [],
// "background": "rgba(0, 0, 0, 0)",
// "backgroundImage": (fabric.document.location.protocol +
// '//' +
@ -1636,7 +1636,7 @@
try {
canvas.renderAll();
}
catch(err) {
catch (err) {
error = err;
}
delete canvas.clipTo;

View file

@ -2,47 +2,47 @@
// var emptyImageCanvasData = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAH7ElEQVR4nO3VMQ0AMAzAsPInvYHoMS2yEeTLHADge/M6AADYM3QACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIuMjH4b7osLFBAAAAAElFTkSuQmCC";
var CANVAS_SVG = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'+
var CANVAS_SVG = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="600" viewBox="0 0 600 600" xml:space="preserve">\n<desc>Created with Fabric.js ' + fabric.version + '</desc>\n<defs></defs>\n</svg>';
var CANVAS_SVG_VIEWBOX = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'+
var CANVAS_SVG_VIEWBOX = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="600" viewBox="100 100 300 300" xml:space="preserve">\n<desc>Created with Fabric.js ' + fabric.version + '</desc>\n<defs></defs>\n</svg>';
var PATH_JSON = '{"objects": [{"type": "path", "originX": "left", "originY": "top", "left": 268, "top": 266, "width": 51, "height": 49,'+
' "fill": "rgb(0,0,0)", "stroke": null, "strokeWidth": 1, "scaleX": 1, "scaleY": 1, '+
'"angle": 0, "flipX": false, "flipY": false, "opacity": 1, "path": [["M", 18.511, 13.99],'+
' ["c", 0, 0, -2.269, -4.487, -12.643, 4.411], ["c", 0, 0, 4.824, -14.161, 19.222, -9.059],'+
' ["l", 0.379, -2.1], ["c", -0.759, -0.405, -1.375, -1.139, -1.645, -2.117], ["c", -0.531, '+
'-1.864, 0.371, -3.854, 1.999, -4.453], ["c", 0.312, -0.118, 0.633, -0.169, 0.953, -0.169], '+
'["c", 1.299, 0, 2.514, 0.953, 2.936, 2.455], ["c", 0.522, 1.864, -0.372, 3.854, -1.999, '+
'4.453], ["c", -0.229, 0.084, -0.464, 0.127, -0.692, 0.152], ["l", -0.379, 2.37], ["c", '+
'1.146, 0.625, 2.024, 1.569, 2.674, 2.758], ["c", 3.213, 2.514, 8.561, 4.184, 11.774, -8.232],'+
' ["c", 0, 0, 0.86, 16.059, -12.424, 14.533], ["c", 0.008, 2.859, 0.615, 5.364, -0.076, 8.224],'+
' ["c", 8.679, 3.146, 15.376, 14.389, 17.897, 18.168], ["l", 2.497, -2.151], ["l", 1.206, 1.839],'+
' ["l", -3.889, 3.458], ["C", 46.286, 48.503, 31.036, 32.225, 22.72, 35.81], ["c", -1.307, 2.851,'+
' -3.56, 6.891, -7.481, 8.848], ["c", -4.689, 2.336, -9.084, -0.802, -11.277, -2.868], ["l",'+
' -1.948, 3.104], ["l", -1.628, -1.333], ["l", 3.138, -4.689], ["c", 0.025, 0, 9, 1.932, 9, 1.932], '+
'["c", 0.877, -9.979, 2.893, -12.905, 4.942, -15.621], ["C", 17.878, 21.775, 18.713, 17.397, 18.511, '+
var PATH_JSON = '{"objects": [{"type": "path", "originX": "left", "originY": "top", "left": 268, "top": 266, "width": 51, "height": 49,' +
' "fill": "rgb(0,0,0)", "stroke": null, "strokeWidth": 1, "scaleX": 1, "scaleY": 1, ' +
'"angle": 0, "flipX": false, "flipY": false, "opacity": 1, "path": [["M", 18.511, 13.99],' +
' ["c", 0, 0, -2.269, -4.487, -12.643, 4.411], ["c", 0, 0, 4.824, -14.161, 19.222, -9.059],' +
' ["l", 0.379, -2.1], ["c", -0.759, -0.405, -1.375, -1.139, -1.645, -2.117], ["c", -0.531, ' +
'-1.864, 0.371, -3.854, 1.999, -4.453], ["c", 0.312, -0.118, 0.633, -0.169, 0.953, -0.169], ' +
'["c", 1.299, 0, 2.514, 0.953, 2.936, 2.455], ["c", 0.522, 1.864, -0.372, 3.854, -1.999, ' +
'4.453], ["c", -0.229, 0.084, -0.464, 0.127, -0.692, 0.152], ["l", -0.379, 2.37], ["c", ' +
'1.146, 0.625, 2.024, 1.569, 2.674, 2.758], ["c", 3.213, 2.514, 8.561, 4.184, 11.774, -8.232],' +
' ["c", 0, 0, 0.86, 16.059, -12.424, 14.533], ["c", 0.008, 2.859, 0.615, 5.364, -0.076, 8.224],' +
' ["c", 8.679, 3.146, 15.376, 14.389, 17.897, 18.168], ["l", 2.497, -2.151], ["l", 1.206, 1.839],' +
' ["l", -3.889, 3.458], ["C", 46.286, 48.503, 31.036, 32.225, 22.72, 35.81], ["c", -1.307, 2.851,' +
' -3.56, 6.891, -7.481, 8.848], ["c", -4.689, 2.336, -9.084, -0.802, -11.277, -2.868], ["l",' +
' -1.948, 3.104], ["l", -1.628, -1.333], ["l", 3.138, -4.689], ["c", 0.025, 0, 9, 1.932, 9, 1.932], ' +
'["c", 0.877, -9.979, 2.893, -12.905, 4.942, -15.621], ["C", 17.878, 21.775, 18.713, 17.397, 18.511, ' +
'13.99], ["z", null]]}], "background": "#ff5555", "overlay":"rgba(0,0,0,0.2)"}';
var PATH_DATALESS_JSON = '{"objects":[{"type":"path","originX":"left","originY":"top","left":100,"top":100,"width":200,"height":200,"fill":"rgb(0,0,0)",'+
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,'+
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,'+
var PATH_DATALESS_JSON = '{"objects":[{"type":"path","originX":"left","originY":"top","left":100,"top":100,"width":200,"height":200,"fill":"rgb(0,0,0)",' +
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,' +
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' +
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"path":"http://example.com/","pathOffset":{"x":200,"y":200}}],"background":""}';
var RECT_JSON = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":10,"fill":"rgb(0,0,0)",'+
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,'+
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,'+
var RECT_JSON = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":10,"fill":"rgb(0,0,0)",' +
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,' +
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' +
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"rx":0,"ry":0}],"background":"#ff5555","overlay":"rgba(0,0,0,0.2)"}';
var RECT_JSON_WITH_PADDING = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":20,"fill":"rgb(0,0,0)",'+
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,'+
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,'+
var RECT_JSON_WITH_PADDING = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":20,"fill":"rgb(0,0,0)",' +
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,' +
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' +
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"padding":123,"foo":"bar","rx":0,"ry":0}],"background":""}';
function getAbsolutePath(path) {
var isAbsolute = /^https?:/.test(path);
if (isAbsolute) return path;
if (isAbsolute) { return path };
var imgEl = _createImageElement();
imgEl.src = path;
var src = imgEl.src;
@ -113,7 +113,7 @@
function setSrc(img, src, callback) {
if (fabric.isLikelyNode) {
require('fs').readFile(src, function(err, imgData) {
if (err) throw err;
if (err) { throw err };
img.src = imgData;
img._src = src;
callback && callback();
@ -436,10 +436,10 @@
test('toDataURL', function() {
ok(typeof canvas.toDataURL == 'function');
if (!fabric.Canvas.supports('toDataURL')) {
window.alert("toDataURL is not supported by this environment. Some of the tests can not be run.");
window.alert('toDataURL is not supported by this environment. Some of the tests can not be run.');
}
else {
var rect = new fabric.Rect({width: 100, height: 100, fill:'red', top: 0, left: 0});
var rect = new fabric.Rect({width: 100, height: 100, fill: 'red', top: 0, left: 0});
canvas.add(rect);
var dataURL = canvas.toDataURL();
// don't compare actual data url, as it is often browser-dependent
@ -453,7 +453,7 @@
test('toDataURL jpg', function() {
if (!fabric.Canvas.supports('toDataURL')) {
window.alert("toDataURL is not supported by this environment. Some of the tests can not be run.");
window.alert('toDataURL is not supported by this environment. Some of the tests can not be run.');
}
else {
try {
@ -461,7 +461,7 @@
equal(dataURL.substring(0, 22), 'data:image/jpeg;base64');
}
// node-canvas does not support jpeg data urls
catch(err) {
catch (err) {
ok(true);
}
}
@ -929,7 +929,7 @@
test('loadFromJSON custom properties', function() {
var rect = new fabric.Rect({ width: 10, height: 20 });
rect.padding = 123;
rect.foo = "bar";
rect.foo = 'bar';
canvas.add(rect);

View file

@ -176,7 +176,7 @@
try {
fabric.Circle.fromElement(elFaultyCircle);
}
catch(err) {
catch (err) {
error = err;
}
ok(error, 'negative attribute should throw');
@ -187,7 +187,7 @@
try {
fabric.Circle.fromElement(elFaultyCircle);
}
catch(err) {
catch (err) {
error = err;
}

View file

@ -414,7 +414,7 @@
equal(gradient.colorStops[0].color, 'rgb(0,0,0)');
equal(gradient.colorStops[1].color, 'rgb(255,255,255)');
deepEqual(gradient.gradientTransform, [ 3.321, -0.6998, 0.4077, 1.9347, -440.9168, -408.0598 ]);
deepEqual(gradient.gradientTransform, [3.321, -0.6998, 0.4077, 1.9347, -440.9168, -408.0598]);
});
test('fromElement linearGradient colorStop attributes/styles', function() {

View file

@ -13,14 +13,14 @@
var rect1 = new fabric.Rect({ top: 100, left: 100, width: 30, height: 10, strokeWidth: 0 }),
rect2 = new fabric.Rect({ top: 120, left: 50, width: 10, height: 40, strokeWidth: 0 });
return new fabric.Group([ rect1, rect2 ], {strokeWidth: 0});
return new fabric.Group([rect1, rect2], {strokeWidth: 0});
}
function makeGroupWith2ObjectsWithOpacity() {
var rect1 = new fabric.Rect({ top: 100, left: 100, width: 30, height: 10, strokeWidth: 0, opacity: 0.5 }),
rect2 = new fabric.Rect({ top: 120, left: 50, width: 10, height: 40, strokeWidth: 0, opacity: 0.8 });
return new fabric.Group([ rect1, rect2 ], {strokeWidth: 0});
return new fabric.Group([rect1, rect2], {strokeWidth: 0});
}
function makeGroupWith4Objects() {
@ -29,7 +29,7 @@
rect3 = new fabric.Rect({ top: 40, left: 0, width: 20, height: 40 }),
rect4 = new fabric.Rect({ top: 75, left: 75, width: 40, height: 40 });
return new fabric.Group([ rect1, rect2, rect3, rect4 ]);
return new fabric.Group([rect1, rect2, rect3, rect4]);
}
QUnit.module('fabric.Group', {
@ -57,19 +57,19 @@
var rect1 = new fabric.Rect(),
rect2 = new fabric.Rect();
var group = new fabric.Group([ rect1, rect2 ]);
var group = new fabric.Group([rect1, rect2]);
ok(typeof group.getObjects == 'function');
ok(Object.prototype.toString.call(group.getObjects()) == '[object Array]', 'should be an array');
equal(group.getObjects().length, 2, 'should have 2 items');
deepEqual(group.getObjects(), [ rect1, rect2 ], 'should return deepEqual objects as those passed to constructor');
deepEqual(group.getObjects(), [rect1, rect2], 'should return deepEqual objects as those passed to constructor');
});
test('getObjects with type', function() {
var rect = new fabric.Rect({ width: 10, height: 20 }),
circle = new fabric.Circle({ radius: 30 });
var group = new fabric.Group([ rect, circle ]);
var group = new fabric.Group([rect, circle]);
equal(group.size(), 2, 'should have length=2 initially');
@ -85,11 +85,11 @@
ok(typeof group.add == 'function');
equal(group.add(rect1), group, 'should be chainable');
strictEqual(group.item(group.size()-1), rect1, 'last object should be newly added one');
strictEqual(group.item(group.size() - 1), rect1, 'last object should be newly added one');
equal(group.getObjects().length, 3, 'there should be 3 objects');
group.add(rect2, rect3);
strictEqual(group.item(group.size()-1), rect3, 'last object should be last added one');
strictEqual(group.item(group.size() - 1), rect3, 'last object should be last added one');
equal(group.size(), 5, 'there should be 5 objects');
});
@ -97,7 +97,7 @@
var rect1 = new fabric.Rect(),
rect2 = new fabric.Rect(),
rect3 = new fabric.Rect(),
group = new fabric.Group([ rect1, rect2, rect3 ]);
group = new fabric.Group([rect1, rect2, rect3]);
ok(typeof group.remove == 'function');
equal(group.remove(rect2), group, 'should be chainable');
@ -146,7 +146,7 @@
var rect1 = new fabric.Rect(),
rect2 = new fabric.Rect(),
notIncludedRect = new fabric.Rect(),
group = new fabric.Group([ rect1, rect2 ]);
group = new fabric.Group([rect1, rect2]);
ok(typeof group.contains == 'function');
@ -203,22 +203,22 @@
ok(group.getObjects()[0] !== clone.objects[0], 'should produce different objects in array');
});
test('toObject without default values', function() {
var group = makeGroupWith2Objects();
group.includeDefaultValues = false;
var clone = group.toObject();
test('toObject without default values', function() {
var group = makeGroupWith2Objects();
group.includeDefaultValues = false;
var clone = group.toObject();
var expectedObject = {
'type': 'group',
'left': 50,
'top': 100,
'width': 80,
'height': 60,
'objects': clone.objects
};
var expectedObject = {
'type': 'group',
'left': 50,
'top': 100,
'width': 80,
'height': 60,
'objects': clone.objects
};
deepEqual(clone, expectedObject);
});
deepEqual(clone, expectedObject);
});
test('render', function() {
var group = makeGroupWith2Objects();
@ -321,7 +321,7 @@ test('toObject without default values', function() {
ok(typeof group.setObjectsCoords == 'function');
var invokedObjects = [ ];
var invokedObjects = [];
group.forEachObject(function(groupObject){
groupObject.setCoords = function() {
invokedObjects.push(this);
@ -363,7 +363,7 @@ test('toObject without default values', function() {
ok(typeof group.forEachObject == 'function');
equal(group.forEachObject(function(){}), group, 'should be chainable');
var iteratedObjects = [ ];
var iteratedObjects = [];
group.forEachObject(function(groupObject) {
iteratedObjects.push(groupObject);
});
@ -442,13 +442,13 @@ test('toObject without default values', function() {
test('z-index methods with group objects', function() {
var textBg = new fabric.Rect({
fill : '#abc',
width : 100,
height : 100
fill: '#abc',
width: 100,
height: 100
});
var text = new fabric.Text('text');
var group = new fabric.Group([ textBg, text ]);
var group = new fabric.Group([textBg, text]);
canvas.add(group);
@ -517,7 +517,7 @@ test('toObject without default values', function() {
test('test group transformMatrix', function() {
var rect1 = new fabric.Rect({ top: 1, left: 1, width: 2, height: 2, strokeWidth: 0, fill: 'red', opacity: 1}),
rect2 = new fabric.Rect({ top: 4, left: 4, width: 2, height: 2, strokeWidth: 0, fill: 'red', opacity: 1}),
group = new fabric.Group([ rect1, rect2 ], {opacity: 1, fill: 'blue', strokeWidth: 0}),
group = new fabric.Group([rect1, rect2], {opacity: 1, fill: 'blue', strokeWidth: 0}),
isTransparent = fabric.util.isTransparent,
ctx = canvas.contextContainer;
canvas.add(group);

View file

@ -2,7 +2,7 @@
function getAbsolutePath(path) {
var isAbsolute = /^https?:/.test(path);
if (isAbsolute) return path;
if (isAbsolute) { return path };
var imgEl = _createImageElement();
imgEl.src = path;
var src = imgEl.src;
@ -91,7 +91,7 @@
function setSrc(img, src, callback) {
if (fabric.isLikelyNode) {
require('fs').readFile(src, function(err, imgData) {
if (err) throw err;
if (err) { throw err };
img.src = imgData;
img._src = src;
callback && callback();
@ -330,14 +330,14 @@
return element;
}
var IMAGE_DATA_URL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAARCAYAAADtyJ2fAAAACXBIWXMAAAsSAAALEgHS3X78AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVBJREFUeNqMU7tOBDEMtENuy614/QE/gZBOuvJK+Et6CiQ6JP6ExxWI7bhL1vgVExYKLPmsTTIzjieHd+MZZSBIAJwEyJU0EWaum+lNljRux3O6nl70Gx/GUwUeyYcDJWZNhMK1aEXYe95Mz4iP44kDTRUZSWSq1YEHri0/HZxXfGSFBN+qDEJTrNI+QXRBviZ7eWCQgjsg+IHiHYB30MhqUxwcmH1Arc2kFDwkBldeFGJLPqs/AbbF2dWgUym6Z2Tb6RVzYxG1wUnmaNcOonZiU0++l6C7FzoQY42g3+8jz+GZ+dWMr1rRH0OjAFhPO+VJFx/vWDqPmk8H97CGBUYUiqAGW0PVe1+aX8j2Ll0tgHtvLx6AK9Tu1ZTFTQ0ojChqGD4qkOzeAuzVfgzsaTym1ClS+IdwtQCFooQMBTumNun1H6Bfcc9/MUn4R3wJMAAZH6MmA4ht4gAAAABJRU5ErkJggg==";
var IMAGE_DATA_URL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAARCAYAAADtyJ2fAAAACXBIWXMAAAsSAAALEgHS3X78AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVBJREFUeNqMU7tOBDEMtENuy614/QE/gZBOuvJK+Et6CiQ6JP6ExxWI7bhL1vgVExYKLPmsTTIzjieHd+MZZSBIAJwEyJU0EWaum+lNljRux3O6nl70Gx/GUwUeyYcDJWZNhMK1aEXYe95Mz4iP44kDTRUZSWSq1YEHri0/HZxXfGSFBN+qDEJTrNI+QXRBviZ7eWCQgjsg+IHiHYB30MhqUxwcmH1Arc2kFDwkBldeFGJLPqs/AbbF2dWgUym6Z2Tb6RVzYxG1wUnmaNcOonZiU0++l6C7FzoQY42g3+8jz+GZ+dWMr1rRH0OjAFhPO+VJFx/vWDqPmk8H97CGBUYUiqAGW0PVe1+aX8j2Ll0tgHtvLx6AK9Tu1ZTFTQ0ojChqGD4qkOzeAuzVfgzsaTym1ClS+IdwtQCFooQMBTumNun1H6Bfcc9/MUn4R3wJMAAZH6MmA4ht4gAAAABJRU5ErkJggg==';
ok(typeof fabric.Image.fromElement == 'function', 'fromElement should exist');
var imageEl = makeImageElement({
width: "14",
height: "17",
"xlink:href": IMAGE_DATA_URL
width: '14',
height: '17',
'xlink:href': IMAGE_DATA_URL
});
fabric.Image.fromElement(imageEl, function(imgObject) {

View file

@ -2,7 +2,7 @@
function getAbsolutePath(path) {
var isAbsolute = /^https?:/.test(path);
if (isAbsolute) return path;
if (isAbsolute) { return path };
var imgEl = _createImageElement();
imgEl.src = path;
var src = imgEl.src;
@ -68,7 +68,7 @@
function setSrc(img, src, callback) {
if (fabric.isLikelyNode) {
require('fs').readFile(src, function(err, imgData) {
if (err) throw err;
if (err) { throw err };
img.src = imgData;
callback && callback();
});
@ -687,7 +687,7 @@
if (maskObj.height === 0) {
maskObj.height = IMG_HEIGHT;
}
equal(JSON.stringify(object), '{"type":"Mask","mask":'+JSON.stringify(maskObj)+',"channel":0}');
equal(JSON.stringify(object), '{"type":"Mask","mask":' + JSON.stringify(maskObj) + ',"channel":0}');
start();
});
@ -708,7 +708,7 @@
if (maskObj.height === 0) {
maskObj.height = IMG_HEIGHT;
}
equal(JSON.stringify(json), '{"type":"Mask","mask":'+JSON.stringify(maskObj)+',"channel":0}');
equal(JSON.stringify(json), '{"type":"Mask","mask":' + JSON.stringify(maskObj) + ',"channel":0}');
start();
});

View file

@ -754,8 +754,8 @@
parser = new DOMParser();
}
var svgString = canvas.toSVG(),
doc = parser.parseFromString(svgString, "image/svg+xml"),
doc = parser.parseFromString(svgString, 'image/svg+xml'),
style = doc.getElementsByTagName('style')[0].firstChild.data;
equal(style, '\n\t\t@font-face {\n\t\t\tfont-family: \'Plaster\';\n\t\t\tsrc: url(\'path-to-plaster-font-file\');\n\t\t}\n\t\t@font-face {\n\t\t\tfont-family: \'Engagement\';\n\t\t\tsrc: url(\'path-to-engagement-font-file\');\n\t\t}\n');
equal(style, '\n\t\t@font-face {\n\t\t\tfont-family: \'Plaster\';\n\t\t\tsrc: url(\'path-to-plaster-font-file\');\n\t\t}\n\t\t@font-face {\n\t\t\tfont-family: \'Engagement\';\n\t\t\tsrc: url(\'path-to-engagement-font-file\');\n\t\t}\n');
});
})();

View file

@ -137,7 +137,7 @@
});
test('changing x/y coords should update width/height', function() {
var line = new fabric.Line([ 50, 50, 100, 100]);
var line = new fabric.Line([50, 50, 100, 100]);
equal(50, line.width);
@ -196,7 +196,7 @@
},
{ description: 'include offsets for left-top origin',
givenLineArgs: {
points: [0+33, 0+44, 11+33, 22+44],
points: [0 + 33, 0 + 44, 11 + 33, 22 + 44],
options: {
originX: 'left',
originY: 'top',
@ -222,7 +222,7 @@
},
{ description: 'include offsets for center-center origin',
givenLineArgs: {
points: [0+9.87, 0-4.32, 12.3+9.87, 34.5-4.32],
points: [0 + 9.87, 0 - 4.32, 12.3 + 9.87, 34.5 - 4.32],
options: {
originX: 'center',
originY: 'center',
@ -248,7 +248,7 @@
},
{ description: 'include offsets for right-bottom origin',
givenLineArgs: {
points: [0-3.14, 0-1.41, 55-3.14, 18-1.41],
points: [0 - 3.14, 0 - 1.41, 55 - 3.14, 18 - 1.41],
options: {
originX: 'right',
originY: 'bottom',
@ -332,7 +332,7 @@
},
{ description: 'arent changed by strokeWidth for center-center origin',
givenLineArgs: {
points: [0+31, 15+26, 28+31, 0+26],
points: [0 + 31, 15 + 26, 28 + 31, 0 + 26],
options: {
originX: 'center',
originY: 'center',
@ -455,13 +455,13 @@
},
{ description: 'includes positive offset for left origin',
givenOrigin: 'left',
givenPoints: [0+20, 0, 1+20, 0],
expectedLeft: 0+20,
givenPoints: [0 + 20, 0, 1 + 20, 0],
expectedLeft: 0 + 20,
},
{ description: 'includes negative offset for left origin',
givenOrigin: 'left',
givenPoints: [0-11, 0, 1-11, 0],
expectedLeft: 0-11,
givenPoints: [0 - 11, 0, 1 - 11, 0],
expectedLeft: 0 - 11,
},
{ description: 'is half of x1 for center origin and x1 > x2',
givenOrigin: 'center',
@ -475,12 +475,12 @@
},
{ description: 'includes positive offset for center origin',
givenOrigin: 'center',
givenPoints: [0+39, 0, 7+39, 0],
givenPoints: [0 + 39, 0, 7 + 39, 0],
expectedLeft: (0.5 * 7) + 39,
},
{ description: 'includes negative offset for center origin',
givenOrigin: 'center',
givenPoints: [4-13, 0, 0-13, 0],
givenPoints: [4 - 13, 0, 0 - 13, 0],
expectedLeft: (0.5 * 4) - 13,
},
{ description: 'is x1 for right origin and x1 > x2',
@ -495,12 +495,12 @@
},
{ description: 'includes positive offset for right origin',
givenOrigin: 'right',
givenPoints: [0+47, 0, 6+47, 0],
givenPoints: [0 + 47, 0, 6 + 47, 0],
expectedLeft: 6 + 47,
},
{ description: 'includes negative offset for right origin',
givenOrigin: 'right',
givenPoints: [9-17, 0, 0-17, 0],
givenPoints: [9 - 17, 0, 0 - 17, 0],
expectedLeft: 9 - 17,
},
];
@ -529,13 +529,13 @@
},
{ description: 'includes positive offset for top origin',
givenOrigin: 'top',
givenPoints: [0, 0+20, 0, 1+20],
expectedTop: 0+20,
givenPoints: [0, 0 + 20, 0, 1 + 20],
expectedTop: 0 + 20,
},
{ description: 'includes negative offset for top origin',
givenOrigin: 'top',
givenPoints: [0, 0-11, 0, 1-11],
expectedTop: 0-11,
givenPoints: [0, 0 - 11, 0, 1 - 11],
expectedTop: 0 - 11,
},
{ description: 'is half of y1 for center origin and y1 > y2',
givenOrigin: 'center',
@ -549,12 +549,12 @@
},
{ description: 'includes positive offset for center origin',
givenOrigin: 'center',
givenPoints: [0, 0+39, 0, 7+39],
givenPoints: [0, 0 + 39, 0, 7 + 39],
expectedTop: (0.5 * 7) + 39,
},
{ description: 'includes negative offset for center origin',
givenOrigin: 'center',
givenPoints: [0, 4-13, 0, 0-13],
givenPoints: [0, 4 - 13, 0, 0 - 13],
expectedTop: (0.5 * 4) - 13,
},
{ description: 'is y1 for bottom origin and y1 > y2',
@ -569,12 +569,12 @@
},
{ description: 'includes positive offset for bottom origin',
givenOrigin: 'bottom',
givenPoints: [0, 0+47, 0, 6+47],
givenPoints: [0, 0 + 47, 0, 6 + 47],
expectedTop: 6 + 47,
},
{ description: 'includes negative offset for bottom origin',
givenOrigin: 'bottom',
givenPoints: [0, 9-17, 0, 0-17],
givenPoints: [0, 9 - 17, 0, 0 - 17],
expectedTop: 9 - 17,
},
];

View file

@ -4,7 +4,9 @@
function getAbsolutePath(path) {
var isAbsolute = /^https?:/.test(path);
if (isAbsolute) return path;
if (isAbsolute) {
return path;
}
var imgEl = _createImageElement();
imgEl.src = path;
var src = imgEl.src;
@ -12,8 +14,8 @@
return src;
}
var IMG_SRC = fabric.isLikelyNode ? (__dirname + '/../fixtures/test_image.gif') : getAbsolutePath('../fixtures/test_image.gif'),
IMG_WIDTH = 276,
var IMG_SRC = fabric.isLikelyNode ? (__dirname + '/../fixtures/test_image.gif') : getAbsolutePath('../fixtures/test_image.gif'),
IMG_WIDTH = 276,
IMG_HEIGHT = 110;
function _createImageElement() {
@ -32,7 +34,9 @@
function setSrc(img, src, callback) {
if (fabric.isLikelyNode) {
require('fs').readFile(src, function(err, imgData) {
if (err) throw err;
if (err) {
throw err;
};
img.src = imgData;
callback && callback();
});
@ -167,16 +171,16 @@
});
test('toJSON', function() {
var emptyObjectJSON = '{"type":"object","originX":"left","originY":"top","left":0,"top":0,"width":0,"height":0,"fill":"rgb(0,0,0)",'+
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,'+
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,'+
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over",'+
var emptyObjectJSON = '{"type":"object","originX":"left","originY":"top","left":0,"top":0,"width":0,"height":0,"fill":"rgb(0,0,0)",' +
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,' +
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' +
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over",' +
'"transformMatrix":null,"skewX":0,"skewY":0}';
var augmentedJSON = '{"type":"object","originX":"left","originY":"top","left":0,"top":0,"width":122,"height":0,"fill":"rgb(0,0,0)",'+
'"stroke":null,"strokeWidth":1,"strokeDashArray":[5,2],"strokeLineCap":"round","strokeLineJoin":"bevil","strokeMiterLimit":5,'+
'"scaleX":1.3,"scaleY":1,"angle":0,"flipX":false,"flipY":true,"opacity":0.88,'+
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over",'+
var augmentedJSON = '{"type":"object","originX":"left","originY":"top","left":0,"top":0,"width":122,"height":0,"fill":"rgb(0,0,0)",' +
'"stroke":null,"strokeWidth":1,"strokeDashArray":[5,2],"strokeLineCap":"round","strokeLineJoin":"bevil","strokeMiterLimit":5,' +
'"scaleX":1.3,"scaleY":1,"angle":0,"flipX":false,"flipY":true,"opacity":0.88,' +
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over",' +
'"transformMatrix":null,"skewX":0,"skewY":0}';
var cObj = new fabric.Object();
@ -308,7 +312,7 @@
top: 20,
width: 30,
height: 40,
strokeDashArray: [ 5, 2 ],
strokeDashArray: [5, 2],
strokeLineCap: 'round',
strokeLineJoin: 'bevil',
strokeMiterLimit: 5,
@ -394,7 +398,7 @@
equal(boundingRect.height, 334);
});
test('getBoundingRectWithStroke', function() {
test('getBoundingRectWithStroke', function() {
var cObj = new fabric.Object(),
boundingRect;
ok(typeof cObj.getBoundingRect == 'function');
@ -472,7 +476,7 @@ test('getBoundingRectWithStroke', function() {
ok(typeof cObj.scaleToWidth == 'function');
equal(cObj.scaleToWidth(100), cObj, 'chainable');
equal(cObj.getWidth(), 100);
equal(cObj.get('scaleX'), 100/560);
equal(cObj.get('scaleX'), 100 / 560);
});
test('scaleToHeight', function() {
@ -480,7 +484,7 @@ test('getBoundingRectWithStroke', function() {
ok(typeof cObj.scaleToHeight == 'function');
equal(cObj.scaleToHeight(100), cObj, 'chainable');
equal(cObj.getHeight(), 100);
equal(cObj.get('scaleY'), 100/560);
equal(cObj.get('scaleY'), 100 / 560);
});
test('scaleToWidth on rotated object', function() {
@ -527,7 +531,7 @@ test('getBoundingRectWithStroke', function() {
//let excanvas kick in for IE8 and lower
if (!canvas.getContext && typeof G_vmlCanvasManager != 'undefined') {
G_vmlCanvasManager.initElement(canvas);
G_vmlCanvasManager.initElement(canvas);
}
var dummyContext = canvas.getContext('2d');
@ -541,7 +545,7 @@ test('getBoundingRectWithStroke', function() {
//let excanvas kick in for IE8 and lower
if (!canvas.getContext && typeof G_vmlCanvasManager != 'undefined') {
G_vmlCanvasManager.initElement(canvas);
G_vmlCanvasManager.initElement(canvas);
}
var dummyContext = canvas.getContext('2d');
ok(typeof cObj.drawControls == 'function');
@ -643,13 +647,13 @@ test('getBoundingRectWithStroke', function() {
dataURL = cObj.toDataURL({ format: 'jpeg' });
equal(dataURL.substring(0, 22), 'data:image/jpeg;base64');
}
catch(err) {
catch (err) {
fabric.log('jpeg toDataURL not supported');
}
}
});
test('toDataURL & reference to canvas', function() {
test('toDataURL & reference to canvas', function() {
// var data =
// 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQA'+
// 'AABkCAYAAABw4pVUAAAA+UlEQVR4nO3RoRHAQBDEsOu/6YR+B2s'+
@ -660,21 +664,21 @@ test('toDataURL & reference to canvas', function() {
// 'uYBGJI2D8CQtHkAhqTNAzAkbR6AIWnzAAxJmwdgSNo8AEPS5gEYkjYPw'+
// 'JC0eQCGpM0DMCRtHsDjB5K06yueJFXJAAAAAElFTkSuQmCC';
var cObj = new fabric.Rect({
width: 100, height: 100, fill: 'red'
var cObj = new fabric.Rect({
width: 100, height: 100, fill: 'red'
});
canvas.add(cObj);
if (!fabric.Canvas.supports('toDataURL')) {
window.alert('toDataURL is not supported by this environment. Some of the tests can not be run.');
}
else {
var objCanvas = cObj.canvas;
cObj.toDataURL();
equal(objCanvas, cObj.canvas);
}
});
canvas.add(cObj);
if (!fabric.Canvas.supports('toDataURL')) {
window.alert('toDataURL is not supported by this environment. Some of the tests can not be run.');
}
else {
var objCanvas = cObj.canvas;
cObj.toDataURL();
equal(objCanvas, cObj.canvas);
}
});
test('hasStateChanged', function() {
var cObj = new fabric.Object();
@ -1453,13 +1457,13 @@ test('toDataURL & reference to canvas', function() {
});
test('getObjectScale', function() {
var object = new fabric.Object({ scaleX: 3, scaleY : 2});
var object = new fabric.Object({ scaleX: 3, scaleY: 2});
var objectScale = object.getObjectScaling();
deepEqual(objectScale, {scaleX: object.scaleX, scaleY: object.scaleY});
});
test('getObjectScale in group', function() {
var object = new fabric.Object({ scaleX: 3, scaleY : 2});
var object = new fabric.Object({ scaleX: 3, scaleY: 2});
var group = new fabric.Group();
group.scaleX = 2;
group.scaleY = 2;
@ -1476,7 +1480,7 @@ test('toDataURL & reference to canvas', function() {
el.width = 600; el.height = 600;
var canvas = fabric.isLikelyNode ? fabric.createCanvasForNode() : new fabric.StaticCanvas(el);
var context = canvas.contextContainer;
var object = new fabric.Object({ scaleX: 1, scaleY : 1});
var object = new fabric.Object({ scaleX: 1, scaleY: 1});
var group = new fabric.Group();
group.scaleX = 2;
group.scaleY = 2;

View file

@ -93,7 +93,6 @@
});
test('translateToOriginPoint', function(){
var rect = new fabric.Rect(rectOptions),
p,
@ -237,115 +236,113 @@
test('adjustPosition', function(){
var rect = new fabric.Rect(rectOptions),
p;
var rect = new fabric.Rect(rectOptions);
rect.strokeWidth = 0;
rect.originX = 'left';
rect.originY = 'top';
p = rect.adjustPosition('left');
rect.adjustPosition('left');
deepEqual(rect.left, 35);
deepEqual(rect.top, 45);
equal(rect.originX, 'left');
p = rect.adjustPosition('center');
rect.adjustPosition('center');
deepEqual(rect.left, 55);
deepEqual(rect.top, 45);
equal(rect.originX, 'center');
p = rect.adjustPosition('right');
rect.adjustPosition('right');
deepEqual(rect.left, 75);
deepEqual(rect.top, 45);
equal(rect.originX, 'right');
rect.originX = 'center';
rect.originY = 'center';
p = rect.adjustPosition('left');
rect.adjustPosition('left');
deepEqual(rect.left, 55);
deepEqual(rect.top, 45);
equal(rect.originX, 'left');
p = rect.adjustPosition('center');
rect.adjustPosition('center');
deepEqual(rect.left, 75);
deepEqual(rect.top, 45);
equal(rect.originX, 'center');
p = rect.adjustPosition('right');
rect.adjustPosition('right');
deepEqual(rect.left, 95);
deepEqual(rect.top, 45);
equal(rect.originX, 'right');
rect.originX = 'right';
rect.originY = 'bottom';
p = rect.adjustPosition('left');
rect.adjustPosition('left');
deepEqual(rect.left, 55);
deepEqual(rect.top, 45);
equal(rect.originX, 'left');
p = rect.adjustPosition('center');
rect.adjustPosition('center');
deepEqual(rect.left, 75);
deepEqual(rect.top, 45);
equal(rect.originX, 'center');
p = rect.adjustPosition('right');
rect.adjustPosition('right');
deepEqual(rect.left, 95);
deepEqual(rect.top, 45);
equal(rect.originX, 'right');
});
test('adjustPositionRotated', function(){
var rect = new fabric.Rect(rectOptions),
p;
var rect = new fabric.Rect(rectOptions);
rect.angle = 35;
rect.strokeWidth = 0;
rect.originX = 'left';
rect.originY = 'top';
p = rect.adjustPosition('left');
rect.adjustPosition('left');
deepEqual(rect.left, 35);
deepEqual(rect.top, 45);
equal(rect.originX, 'left');
p = rect.adjustPosition('center');
rect.adjustPosition('center');
deepEqual(rect.left, 51.383040885779835);
deepEqual(rect.top, 56.471528727020925);
equal(rect.originX, 'center');
p = rect.adjustPosition('right');
rect.adjustPosition('right');
deepEqual(rect.left, 67.76608177155967);
deepEqual(rect.top, 67.94305745404185);
equal(rect.originX, 'right');
rect.originX = 'center';
rect.originY = 'center';
p = rect.adjustPosition('left');
rect.adjustPosition('left');
deepEqual(rect.left, 51.383040885779835);
deepEqual(rect.top, 56.471528727020925);
equal(rect.originX, 'left');
p = rect.adjustPosition('center');
rect.adjustPosition('center');
deepEqual(rect.left, 67.76608177155967);
deepEqual(rect.top, 67.94305745404185);
equal(rect.originX, 'center');
p = rect.adjustPosition('right');
rect.adjustPosition('right');
deepEqual(rect.left, 84.1491226573395);
deepEqual(rect.top, 79.41458618106277);
equal(rect.originX, 'right');
rect.originX = 'right';
rect.originY = 'bottom';
p = rect.adjustPosition('left');
rect.adjustPosition('left');
deepEqual(rect.left, 51.383040885779835);
deepEqual(rect.top, 56.47152872702093);
equal(rect.originX, 'left');
p = rect.adjustPosition('center');
rect.adjustPosition('center');
deepEqual(rect.left, 67.76608177155967);
deepEqual(rect.top, 67.94305745404185);
equal(rect.originX, 'center');
p = rect.adjustPosition('right');
rect.adjustPosition('right');
deepEqual(rect.left, 84.1491226573395);
deepEqual(rect.top, 79.41458618106277);
equal(rect.originX, 'right');
@ -422,7 +419,6 @@
});
test('translateToOriginPoint with numeric origins', function(){
var rect = new fabric.Rect(rectOptions),
p,
@ -566,115 +562,113 @@
test('adjustPosition with numeric origins', function(){
var rect = new fabric.Rect(rectOptions),
p;
var rect = new fabric.Rect(rectOptions);
rect.strokeWidth = 0;
rect.originX = 'left';
rect.originY = 'top';
p = rect.adjustPosition(0);
rect.adjustPosition(0);
deepEqual(rect.left, 35);
deepEqual(rect.top, 45);
equal(rect.originX, 0);
p = rect.adjustPosition(0.5);
rect.adjustPosition(0.5);
deepEqual(rect.left, 55);
deepEqual(rect.top, 45);
equal(rect.originX, 0.5);
p = rect.adjustPosition(1);
rect.adjustPosition(1);
deepEqual(rect.left, 75);
deepEqual(rect.top, 45);
equal(rect.originX, 1);
rect.originX = 0.5;
rect.originY = 0.5;
p = rect.adjustPosition(0);
rect.adjustPosition(0);
deepEqual(rect.left, 55);
deepEqual(rect.top, 45);
equal(rect.originX, 0);
p = rect.adjustPosition(0.5);
rect.adjustPosition(0.5);
deepEqual(rect.left, 75);
deepEqual(rect.top, 45);
equal(rect.originX, 0.5);
p = rect.adjustPosition(1);
rect.adjustPosition(1);
deepEqual(rect.left, 95);
deepEqual(rect.top, 45);
equal(rect.originX, 1);
rect.originX = 1;
rect.originY = 1;
p = rect.adjustPosition(0);
rect.adjustPosition(0);
deepEqual(rect.left, 55);
deepEqual(rect.top, 45);
equal(rect.originX, 0);
p = rect.adjustPosition(0.5);
rect.adjustPosition(0.5);
deepEqual(rect.left, 75);
deepEqual(rect.top, 45);
equal(rect.originX, 0.5);
p = rect.adjustPosition(1);
rect.adjustPosition(1);
deepEqual(rect.left, 95);
deepEqual(rect.top, 45);
equal(rect.originX, 1);
});
test('adjustPositionRotated with numeric origins', function(){
var rect = new fabric.Rect(rectOptions),
p;
var rect = new fabric.Rect(rectOptions);
rect.angle = 35;
rect.strokeWidth = 0;
rect.originX = 0;
rect.originY = 0;
p = rect.adjustPosition(0);
rect.adjustPosition(0);
deepEqual(rect.left, 35);
deepEqual(rect.top, 45);
equal(rect.originX, 0);
p = rect.adjustPosition(0.5);
rect.adjustPosition(0.5);
deepEqual(rect.left, 51.383040885779835);
deepEqual(rect.top, 56.471528727020925);
equal(rect.originX, 0.5);
p = rect.adjustPosition(1);
rect.adjustPosition(1);
deepEqual(rect.left, 67.76608177155967);
deepEqual(rect.top, 67.94305745404185);
equal(rect.originX, 1);
rect.originX = 0.5;
rect.originY = 0.5;
p = rect.adjustPosition(0);
rect.adjustPosition(0);
deepEqual(rect.left, 51.383040885779835);
deepEqual(rect.top, 56.471528727020925);
equal(rect.originX, 0);
p = rect.adjustPosition(0.5);
rect.adjustPosition(0.5);
deepEqual(rect.left, 67.76608177155967);
deepEqual(rect.top, 67.94305745404185);
equal(rect.originX, 0.5);
p = rect.adjustPosition(1);
rect.adjustPosition(1);
deepEqual(rect.left, 84.1491226573395);
deepEqual(rect.top, 79.41458618106277);
equal(rect.originX, 1);
rect.originX = 1;
rect.originY = 1;
p = rect.adjustPosition(0);
rect.adjustPosition(0);
deepEqual(rect.left, 51.383040885779835);
deepEqual(rect.top, 56.47152872702093);
equal(rect.originX, 0);
p = rect.adjustPosition(0.5);
rect.adjustPosition(0.5);
deepEqual(rect.left, 67.76608177155967);
deepEqual(rect.top, 67.94305745404185);
equal(rect.originX, 0.5);
p = rect.adjustPosition(1);
rect.adjustPosition(1);
deepEqual(rect.left, 84.1491226573395);
deepEqual(rect.top, 79.41458618106277);
equal(rect.originX, 1);

View file

@ -212,7 +212,7 @@ test('removal of past events inner loop', function() {
equal(event1Fired, 1, 'Event 1 should fire once');
equal(event2Fired, 0, 'Event 2 should not be fired yet');
equal(event3Fired, 0, 'Event 3 should not be fired yet');
equal(event4Fired, 0, 'Event 4 should not be fired yet');
equal(event4Fired, 0, 'Event 4 should not be fired yet');
foo.trigger('bar:baz');
equal(foo.__eventListeners['bar:baz'].length, 3, 'There should be 3 handlers registered now');
},

View file

@ -94,11 +94,11 @@
element.setAttribute('x', '100');
parent.setAttribute('y', '200');
grandParent.setAttribute('width', '600');
grandParent.setAttribute('height', '600');
grandParent.setAttribute('height', '600');
deepEqual(fabric.parseAttributes(element, 'x y width height'.split(' ')),
{ left: 100, top: 200, width: 600, height: 600 });
});
});
asyncTest('parseElements', function() {
ok(fabric.parseElements);
@ -122,7 +122,7 @@
parsedElements = instances;
});
}
catch(err) {
catch (err) {
error = err;
}
ok(error === undefined, 'No error is raised');
@ -531,7 +531,7 @@
'strokeWidth': 0.25
},
'polygon.cls': {
'fill' : '',
'fill': '',
'stroke': '#0000FF'
}
};
@ -541,7 +541,7 @@
var elPolygon = fabric.document.createElement('polygon'),
expectedStyle = {
'fill' : '',
'fill': '',
'stroke': '#0000FF'
};
@ -549,7 +549,7 @@
elPolygon.setAttribute('class', 'cls');
elPolygon.setAttribute('svgUid', svgUid);
var style = fabric.parseAttributes(elPolygon, [ ]);
var style = fabric.parseAttributes(elPolygon, []);
deepEqual(style, expectedStyle);
styleElement.textContent = '\t\n';

View file

@ -51,7 +51,7 @@
}
function makePathObject(callback) {
getPathObject("M 100 100 L 300 100 L 200 300 z", callback);
getPathObject('M 100 100 L 300 100 L 200 300 z', callback);
}
QUnit.module('fabric.Path');
@ -69,7 +69,7 @@
try {
new fabric.Path();
}
catch(err) {
catch (err) {
error = err;
}
@ -189,7 +189,7 @@
deepEqual(
path.get('transformMatrix'),
[ Math.cos(ANGLE), Math.sin(ANGLE), -Math.sin(ANGLE), Math.cos(ANGLE), 0, 0 ]
[Math.cos(ANGLE), Math.sin(ANGLE), -Math.sin(ANGLE), Math.cos(ANGLE), 0, 0]
);
start();
});

View file

@ -65,8 +65,8 @@
}
}
var objects = [ ],
paths = ["M 100 100 L 300 100 L 200 300 z", "M 200 200 L 100 200 L 400 50 z"],
var objects = [],
paths = ['M 100 100 L 300 100 L 200 300 z', 'M 200 200 L 100 200 L 400 50 z'],
numLoadedObjects = 0,
numTotalObjects = paths.length;
@ -115,11 +115,11 @@
});
test('parsingDmensionsWithTransformMatrix', function() {
var pathA = new fabric.Path("M 100 100 L 300 100 L 200 300 z", {transformMatrix: [2, 0, 0, 2, 0, 0]}),
pathB = new fabric.Path("M 200 200 L 100 200 L 400 50 z", {transformMatrix: [3, 0, 0, 3, 0, 0]}),
pg = new fabric.PathGroup([pathA, pathB], {toBeParsed: true});
equal(pg.width, 1203);
equal(pg.height, 603);
var pathA = new fabric.Path('M 100 100 L 300 100 L 200 300 z', {transformMatrix: [2, 0, 0, 2, 0, 0]}),
pathB = new fabric.Path('M 200 200 L 100 200 L 400 50 z', {transformMatrix: [3, 0, 0, 3, 0, 0]}),
pg = new fabric.PathGroup([pathA, pathB], {toBeParsed: true});
equal(pg.width, 1203);
equal(pg.height, 603);
});
asyncTest('getObjects', function() {

View file

@ -9,7 +9,7 @@
function setSrc(img, src, callback) {
if (fabric.isLikelyNode) {
require('fs').readFile(src, function(err, imgData) {
if (err) throw err;
if (err) { throw err };
img.src = imgData;
img._src = src;
callback && callback();
@ -64,11 +64,11 @@
equal(object.offsetY, 0);
var patternWithGetSource = new fabric.Pattern({
source: function() {return fabric.document.createElement("canvas")}
source: function() {return fabric.document.createElement('canvas')}
});
var object2 = patternWithGetSource.toObject();
equal(object2.source, 'function () {return fabric.document.createElement("canvas")}');
equal(object2.source, 'function () {return fabric.document.createElement(\'canvas\')}');
equal(object2.repeat, 'repeat');
});

View file

@ -59,7 +59,7 @@
ok(polygon instanceof fabric.Object);
equal(polygon.type, 'polygon');
deepEqual(polygon.get('points'), [ { x: 10, y: 12 }, { x: 20, y: 22 } ]);
deepEqual(polygon.get('points'), [{ x: 10, y: 12 }, { x: 20, y: 22 }]);
});
test('complexity', function() {
@ -110,7 +110,7 @@
var expected = fabric.util.object.extend(
fabric.util.object.clone(REFERENCE_OBJECT), {
points: [ { x: 10, y: 12 }, { x: 20, y: 22 } ]
points: [{ x: 10, y: 12 }, { x: 20, y: 22 }]
});
deepEqual(polygon.toObject(), expected);
@ -149,10 +149,10 @@
'points': expectedPoints,
'top': 10,
'left': 10,
'transformMatrix': [ 2, 0, 0, 2, -10, -20 ]
'transformMatrix': [2, 0, 0, 2, -10, -20]
}));
deepEqual(polygonWithAttrs.get('transformMatrix'), [ 2, 0, 0, 2, -10, -20 ]);
deepEqual(polygonWithAttrs.get('transformMatrix'), [2, 0, 0, 2, -10, -20]);
equal(fabric.Polygon.fromElement(), null);
});

View file

@ -59,7 +59,7 @@
ok(polyline instanceof fabric.Object);
equal(polyline.type, 'polyline');
deepEqual(polyline.get('points'), [ { x: 10, y: 12 }, { x: 20, y: 22 } ]);
deepEqual(polyline.get('points'), [{ x: 10, y: 12 }, { x: 20, y: 22 }]);
});
test('complexity', function() {
@ -137,11 +137,11 @@
'points': expectedPoints,
'left': 10,
'top': 10,
'transformMatrix' : [ 2, 0, 0, 2, -10, -20 ]
'transformMatrix': [2, 0, 0, 2, -10, -20]
}));
deepEqual(polylineWithAttrs.get('transformMatrix'), [ 2, 0, 0, 2, -10, -20 ]);
deepEqual(polylineWithAttrs.get('transformMatrix'), [2, 0, 0, 2, -10, -20]);
equal(fabric.Polyline.fromElement(), null);
equal(fabric.Polyline.fromElement(), null);
});
})();

View file

@ -69,8 +69,8 @@
deepEqual(rect.toObject(), REFERENCE_RECT);
var expectedObject = fabric.util.object.extend({ }, REFERENCE_RECT);
expectedObject.fill = {"type":"linear","coords":{"x1":0,"y1":0,"x2":200,"y2":0},"colorStops":[{"offset":"0","color":"rgb(255,0,0)","opacity":1},{"offset":"1","color":"rgb(0,0,255)","opacity":1}],"offsetX":0,"offsetY":0};
expectedObject.stroke = {"type":"linear","coords":{"x1":0,"y1":0,"x2":200,"y2":0},"colorStops":[{"offset":"0","color":"rgb(255,0,0)","opacity":1},{"offset":"1","color":"rgb(0,0,255)","opacity":1}],"offsetX":0,"offsetY":0};
expectedObject.fill = {'type': 'linear','coords': {'x1': 0,'y1': 0,'x2': 200,'y2': 0},'colorStops': [{'offset': '0','color': 'rgb(255,0,0)','opacity': 1},{'offset': '1','color': 'rgb(0,0,255)','opacity': 1}],'offsetX': 0,'offsetY': 0};
expectedObject.stroke = {'type': 'linear','coords': {'x1': 0,'y1': 0,'x2': 200,'y2': 0},'colorStops': [{'offset': '0','color': 'rgb(255,0,0)','opacity': 1},{'offset': '1','color': 'rgb(0,0,255)','opacity': 1}],'offsetX': 0,'offsetY': 0};
rect = fabric.Rect.fromObject(expectedObject);
ok(rect.fill instanceof fabric.Gradient);
ok(rect.stroke instanceof fabric.Gradient);

View file

@ -181,7 +181,7 @@
equal(shadow.toSVG(object), '<filter id="SVGID_0" y="-40%" height="180%" x="-40%" width="180%" >\n\t<feGaussianBlur in="SourceAlpha" stdDeviation="1"></feGaussianBlur>\n\t<feOffset dx="-10" dy="10" result="oBlur" ></feOffset>\n\t<feFlood flood-color="#FF0000"/>\n\t<feComposite in2="oBlur" operator="in" />\n\t<feMerge>\n\t\t<feMergeNode></feMergeNode>\n\t\t<feMergeNode in="SourceGraphic"></feMergeNode>\n\t</feMerge>\n</filter>\n');
});
test('toSVG with rotated object', function() {
// reset uid
fabric.Object.__uid = 0;
@ -191,7 +191,7 @@
equal(shadow.toSVG(object), '<filter id="SVGID_0" y="-40%" height="180%" x="-40%" width="180%" >\n\t<feGaussianBlur in="SourceAlpha" stdDeviation="1"></feGaussianBlur>\n\t<feOffset dx="14.14" dy="0" result="oBlur" ></feOffset>\n\t<feFlood flood-color="#FF0000"/>\n\t<feComposite in2="oBlur" operator="in" />\n\t<feMerge>\n\t\t<feMergeNode></feMergeNode>\n\t\t<feMergeNode in="SourceGraphic"></feMergeNode>\n\t</feMerge>\n</filter>\n');
});
test('toSVG with rotated flipped object', function() {
// reset uid
fabric.Object.__uid = 0;

View file

@ -12,7 +12,7 @@
function getAbsolutePath(path) {
var isAbsolute = /^https?:/.test(path);
if (isAbsolute) return path;
if (isAbsolute) { return path };
var imgEl = _createImageElement();
imgEl.src = path;
var src = imgEl.src;
@ -21,7 +21,7 @@
}
var IMG_URL = fabric.isLikelyNode
? require("path").join(__dirname, '../fixtures/', 'very_large_image.jpg')
? require('path').join(__dirname, '../fixtures/', 'very_large_image.jpg')
: getAbsolutePath('../fixtures/very_large_image.jpg');
var IMG_URL_NON_EXISTING = 'http://www.google.com/non-existing';
@ -374,7 +374,7 @@
});
test('fabric.loadSVGFromURL', function() {
equal("function", typeof fabric.loadSVGFromURL);
equal('function', typeof fabric.loadSVGFromURL);
});
var SVG_DOC_AS_STRING = '<?xml version="1.0"?>\
@ -385,9 +385,9 @@
</svg>';
asyncTest('fabric.loadSVGFromString', function() {
equal("function", typeof fabric.loadSVGFromString);
equal('function', typeof fabric.loadSVGFromString);
var loadedObjects = [ ];
var loadedObjects = [];
fabric.loadSVGFromString(SVG_DOC_AS_STRING, function(objects) {
loadedObjects = objects;
});
@ -400,7 +400,7 @@
});
asyncTest('fabric.loadSVGFromString with surrounding whitespace', function() {
var loadedObjects = [ ];
var loadedObjects = [];
fabric.loadSVGFromString(' \n\n ' + SVG_DOC_AS_STRING + ' ', function(objects) {
loadedObjects = objects;
});
@ -536,19 +536,19 @@
var undef;
var array = [1, 2, 3, 4, 5, undef, 6, 7, 1, 2, 3];
equal(2, array.indexOf(3, -47), "large negative value for fromIndex");
equal(2, array.indexOf(3, -47), 'large negative value for fromIndex');
equal(10, array.indexOf(3, 4));
equal(10, array.indexOf(3, -5));
equal(2, array.indexOf(3, {}), "nonsensical value for fromIndex");
equal(2, array.indexOf(3, ""), "nonsensical value for fromIndex");
equal(-1, array.indexOf(3, 41), "fromIndex value larger than the length of the array");
equal(2, array.indexOf(3, {}), 'nonsensical value for fromIndex');
equal(2, array.indexOf(3, ''), 'nonsensical value for fromIndex');
equal(-1, array.indexOf(3, 41), 'fromIndex value larger than the length of the array');
});
test('Array.prototype.forEach', function() {
ok(typeof Array.prototype.forEach === 'function');
var arr = [1,2,3];
var result = [ ];
var result = [];
arr.forEach(function(val, index, arr) {
result.push(val, index, arr);
@ -647,7 +647,7 @@
arr.reduce(function(memo, val) { return memo + val }), 0);
deepEqual(['1!', '2!', '3!', '4!', '5!'],
arr.reduce(function(memo, val) { memo.push(val + '!'); return memo }, [ ]));
arr.reduce(function(memo, val) { memo.push(val + '!'); return memo }, []));
arr = 'foobar'.split('');
equal('f0o1o2b3a4r5',
@ -749,7 +749,7 @@
var obj3 = { toString: function(){ return 'obj3' } };
deepEqual(['obj1', 'obj2', 'obj3'],
fabric.util.array.invoke([ obj1, obj2, obj3 ], 'toString'));
fabric.util.array.invoke([obj1, obj2, obj3], 'toString'));
deepEqual(['f', 'b', 'b'],
fabric.util.array.invoke(['foo', 'bar', 'baz'], 'charAt', 0));
@ -770,7 +770,7 @@
var obj2 = { valueOf: function(){ return 2 } };
var obj3 = { valueOf: function(){ return 3 } };
equal(obj1, fabric.util.array.min([ obj1, obj3, obj2 ]));
equal(obj1, fabric.util.array.min([obj1, obj3, obj2]));
});
test('fabric.util.array.max', function() {
@ -785,18 +785,18 @@
var obj2 = { valueOf: function(){ return 2 } };
var obj3 = { valueOf: function(){ return 3 } };
equal(obj3, fabric.util.array.max([ obj1, obj3, obj2 ]));
equal(obj3, fabric.util.array.max([obj1, obj3, obj2]));
});
test('fabric.util.populateWithProperties', function() {
ok(typeof fabric.util.populateWithProperties == 'function');
var source = {
foo: 'bar',
baz: 123,
qux: function() { }
},
destination = { };
foo: 'bar',
baz: 123,
qux: function() { }
},
destination = { };
fabric.util.populateWithProperties(source, destination);
ok(typeof destination.foo === 'undefined');
@ -843,7 +843,7 @@
test('clearFabricFontCache', function() {
ok(typeof fabric.util.clearFabricFontCache == 'function');
fabric.charWidthsCache = { arial : { some: 'cache'}, helvetica : { some: 'cache'} };
fabric.charWidthsCache = { arial: { some: 'cache'}, helvetica: { some: 'cache'} };
fabric.util.clearFabricFontCache('arial');
equal(fabric.charWidthsCache.arial, undefined, 'arial cache is deleted');
equal(fabric.charWidthsCache.helvetica.some, 'cache', 'helvetica cache is still available');
@ -854,15 +854,15 @@
test('parsePreserveAspectRatioAttribute', function() {
ok(typeof fabric.util.parsePreserveAspectRatioAttribute == 'function');
var parsed;
parsed = fabric.util.parsePreserveAspectRatioAttribute("none");
parsed = fabric.util.parsePreserveAspectRatioAttribute('none');
equal(parsed.meetOrSlice, 'meet');
equal(parsed.alignX, 'none');
equal(parsed.alignY, 'none');
parsed = fabric.util.parsePreserveAspectRatioAttribute("none slice");
parsed = fabric.util.parsePreserveAspectRatioAttribute('none slice');
equal(parsed.meetOrSlice, 'slice');
equal(parsed.alignX, 'none');
equal(parsed.alignY, 'none');
parsed = fabric.util.parsePreserveAspectRatioAttribute("XmidYmax meet");
parsed = fabric.util.parsePreserveAspectRatioAttribute('XmidYmax meet');
equal(parsed.meetOrSlice, 'meet');
equal(parsed.alignX, 'mid');
equal(parsed.alignY, 'max');
@ -886,14 +886,14 @@
test('resetObjectTransform', function() {
ok(typeof fabric.util.resetObjectTransform == 'function');
var rect = new fabric.Rect({
top:1,
top: 1,
width: 100,
height: 100,
angle: 30,
scaleX: 2,
scaleY: 1,
flipX: true,
flipY : true,
flipY: true,
skewX: 30,
skewY: 30
});