mirror of
https://github.com/Hopiu/fabric.js.git
synced 2026-03-16 22:10:32 +00:00
parent
79b4684947
commit
08f60adbea
89 changed files with 842 additions and 746 deletions
149
.eslintrc.json
Normal file
149
.eslintrc.json
Normal 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
45
.eslintrc_tests
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
45
.jscs.json
45
.jscs.json
|
|
@ -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 }
|
||||
}
|
||||
45
.jshintrc
45
.jshintrc
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
4
build.js
4
build.js
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -51,8 +51,8 @@ function initAligningGuidelines(canvas) {
|
|||
return false;
|
||||
}
|
||||
|
||||
var verticalLines = [ ],
|
||||
horizontalLines = [ ];
|
||||
var verticalLines = [],
|
||||
horizontalLines = [];
|
||||
|
||||
canvas.on('mouse:down', function () {
|
||||
viewportTransform = canvas.viewportTransform;
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ function initCenteringGuidelines(canvas) {
|
|||
ctx.restore();
|
||||
}
|
||||
|
||||
var afterRenderActions = [ ],
|
||||
var afterRenderActions = [],
|
||||
isInVerticalCenter,
|
||||
isInHorizontalCenter;
|
||||
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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],
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 [
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 ];
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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('');
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@
|
|||
* @private
|
||||
*/
|
||||
_createBaseSVGMarkup: function() {
|
||||
var markup = [ ];
|
||||
var markup = [];
|
||||
|
||||
if (this.fill && this.fill.toLive) {
|
||||
markup.push(this.fill.toSVG(this, false));
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
}
|
||||
else {
|
||||
if (!this.__eventListeners[eventName]) {
|
||||
this.__eventListeners[eventName] = [ ];
|
||||
this.__eventListeners[eventName] = [];
|
||||
}
|
||||
this.__eventListeners[eventName].push(handler);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@
|
|||
|
||||
fabric.util.getScript = function(url, callback) {
|
||||
request(url, '', function(body) {
|
||||
// eslint-disable-next-line no-eval
|
||||
eval(body);
|
||||
callback && callback();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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
|
||||
};
|
||||
|
||||
}());
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
}
|
||||
|
||||
klass.superclass = parent;
|
||||
klass.subclasses = [ ];
|
||||
klass.subclasses = [];
|
||||
|
||||
if (parent) {
|
||||
Subclass.prototype = parent.prototype;
|
||||
|
|
|
|||
|
|
@ -63,4 +63,4 @@
|
|||
capitalize: capitalize,
|
||||
escapeXml: escapeXml
|
||||
};
|
||||
}());
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]) );
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
});
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
},
|
||||
];
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue